From 651798534cdba6ac7a190d362f37e0ee33e87e6d Mon Sep 17 00:00:00 2001 From: GioLogist Date: Thu, 29 Dec 2022 21:24:09 -0800 Subject: [PATCH 1/4] Initial setup for jsdoc-to-mdx --- site/jsdoc-mdx-conf.json | 11 +++++++++++ site/jsdoc-mdx.json | 5 +++++ 2 files changed, 16 insertions(+) create mode 100644 site/jsdoc-mdx-conf.json create mode 100644 site/jsdoc-mdx.json diff --git a/site/jsdoc-mdx-conf.json b/site/jsdoc-mdx-conf.json new file mode 100644 index 0000000..10d65ab --- /dev/null +++ b/site/jsdoc-mdx-conf.json @@ -0,0 +1,11 @@ +{ + "tags": { + "allowUnknownTags" : true, + "dictionaries": ["jsdoc", "closure"] + }, + "source": { + "include": ["../packages/react-feathers/src/hooks/"], + "includePattern": ".+\\.(j|t)s(doc|x)?$", + "excludePattern": "(^|\\/|\\\\)_" + } +} diff --git a/site/jsdoc-mdx.json b/site/jsdoc-mdx.json new file mode 100644 index 0000000..fb6adee --- /dev/null +++ b/site/jsdoc-mdx.json @@ -0,0 +1,5 @@ +{ + "sidebar": "./", + "outDir": "./docs/api", + "jsdoc": "./jsdoc-mdx-conf.json" +} \ No newline at end of file From 69e8c23606e79e5395cb07d0e5796cd00be5108f Mon Sep 17 00:00:00 2001 From: GioLogist Date: Thu, 29 Dec 2022 21:24:22 -0800 Subject: [PATCH 2/4] include generate script --- site/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/site/package.json b/site/package.json index d76a230..3f6665c 100644 --- a/site/package.json +++ b/site/package.json @@ -14,6 +14,7 @@ "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", "api-generate": "jsdoc2md --files ../packages/react-feathers/src/hooks/*.js --configure jsdoc-conf.js > docs/API.md", + "api-generate-2": "npx jsdoc-to-mdx -c jsdoc-mdx.json", "typecheck": "tsc" }, "dependencies": { From cc11e709fe9567efebaebb5372cb360b02a152b1 Mon Sep 17 00:00:00 2001 From: GioLogist Date: Thu, 29 Dec 2022 21:24:41 -0800 Subject: [PATCH 3/4] generated docs --- site/docs/api/UseAPIConfig.mdx | 16 ++++++++++++++++ site/docs/api/UseAPIResponse.mdx | 16 ++++++++++++++++ site/docs/api/useApi.mdx | 21 +++++++++++++++++++++ site/docs/api/useDebounce.mdx | 22 ++++++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 site/docs/api/UseAPIConfig.mdx create mode 100644 site/docs/api/UseAPIResponse.mdx create mode 100644 site/docs/api/useApi.mdx create mode 100644 site/docs/api/useDebounce.mdx diff --git a/site/docs/api/UseAPIConfig.mdx b/site/docs/api/UseAPIConfig.mdx new file mode 100644 index 0000000..6f1e1ca --- /dev/null +++ b/site/docs/api/UseAPIConfig.mdx @@ -0,0 +1,16 @@ +--- +custom_edit_url: null +--- + +
+ +
+ +**Type**: object + +|PROPERTY|TYPE|DESCRIPTION| +|:---:|:---:|:---:| +|serviceName|string|Name of the feathers service| +|params|object|Params to find to service.find()| +|onError|function|Callback for when an error occurs| + diff --git a/site/docs/api/UseAPIResponse.mdx b/site/docs/api/UseAPIResponse.mdx new file mode 100644 index 0000000..04ee23a --- /dev/null +++ b/site/docs/api/UseAPIResponse.mdx @@ -0,0 +1,16 @@ +--- +custom_edit_url: null +--- + +
+ +
+ +**Type**: object + +|PROPERTY|TYPE|DESCRIPTION| +|:---:|:---:|:---:| +|response|object|Feathers response| +|loading|boolean|Loading state| +|error|error|Feathers service error| + diff --git a/site/docs/api/useApi.mdx b/site/docs/api/useApi.mdx new file mode 100644 index 0000000..1cb5d53 --- /dev/null +++ b/site/docs/api/useApi.mdx @@ -0,0 +1,21 @@ +--- +custom_edit_url: null +--- + +```ts +function useApi(config: [UseAPIConfig](UseAPIConfig), ready: boolean = true) +``` + +
+ +
+ +Access the Feathers API directly, via a specific service + +**Returns**: + +|PARAMETER|TYPE|OPTIONAL|DEFAULT|DESCRIPTION| +|:---:|:---:|:---:|:---:|:---:| +|config|[UseAPIConfig](UseAPIConfig)|||| +|ready|boolean|✔️|true|| + diff --git a/site/docs/api/useDebounce.mdx b/site/docs/api/useDebounce.mdx new file mode 100644 index 0000000..85e0743 --- /dev/null +++ b/site/docs/api/useDebounce.mdx @@ -0,0 +1,22 @@ +--- +custom_edit_url: null +--- + +```ts +function useDebounce(value: any, delay: number) +``` + +
+ +
+ +Debounce a value. Useful during auto-complete typing, to avoid pinging your API too much. + +**Returns**: +- value from executed function + +|PARAMETER|TYPE|OPTIONAL|DEFAULT|DESCRIPTION| +|:---:|:---:|:---:|:---:|:---:| +|value|any|||value to debounce| +|delay|number|||MS to delay| + From cf8edbb7cf98713f9944fccf0dc1a9d184356a12 Mon Sep 17 00:00:00 2001 From: GioLogist Date: Mon, 31 Mar 2025 11:30:16 -0700 Subject: [PATCH 4/4] wip --- site/docusaurus.config.js | 18 + site/package.json | 1 + site/src/theme/SearchBar.js | 90 ++++ site/src/theme/SearchPage/index.js | 459 ++++++++++++++++++++ site/src/theme/SearchPage/styles.module.css | 112 +++++ site/yarn.lock | 68 ++- 6 files changed, 746 insertions(+), 2 deletions(-) create mode 100644 site/src/theme/SearchBar.js create mode 100644 site/src/theme/SearchPage/index.js create mode 100644 site/src/theme/SearchPage/styles.module.css diff --git a/site/docusaurus.config.js b/site/docusaurus.config.js index 64d8a55..582e8f7 100644 --- a/site/docusaurus.config.js +++ b/site/docusaurus.config.js @@ -53,9 +53,27 @@ const config = { ], ], + // https://github.com/facebook/docusaurus/discussions/4104#discussioncomment-4405148 + // themes: ['@docusaurus/theme-search-algolia'], + +// ddsad asfa + themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ + // https://github.com/facebook/docusaurus/discussions/4104#discussioncomment-4405148 + algolia: { + pluginId: 'test', + appId: 'foo', + apiKey: 'bar', + indexName: 'baz', + footer: { + logo: { + src: 'img/meta_oss_logo.png', + } + } + }, + navbar: { title: 'My Site', logo: { diff --git a/site/package.json b/site/package.json index 3f6665c..bdca15d 100644 --- a/site/package.json +++ b/site/package.json @@ -22,6 +22,7 @@ "@docusaurus/preset-classic": "2.2.0", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", + "kbar": "^0.1.0-beta.39", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2" diff --git a/site/src/theme/SearchBar.js b/site/src/theme/SearchBar.js new file mode 100644 index 0000000..b0571d9 --- /dev/null +++ b/site/src/theme/SearchBar.js @@ -0,0 +1,90 @@ +import React from 'react'; + +// app.tsx +import { + KBarProvider, + KBarPortal, + KBarPositioner, + KBarAnimator, + KBarSearch, + useMatches, + KBarResults, + NO_GROUP, +} from "kbar"; + + +const searchStyle = { + padding: "12px 16px", + fontSize: "16px", + width: "100%", + boxSizing: "border-box", + outline: "none", + border: "none", + background: "var(--background)", + color: "var(--foreground)", +}; + +const animatorStyle = { + maxWidth: "600px", + width: "100%", + background: "var(--background)", + color: "var(--foreground)", + borderRadius: "8px", + overflow: "hidden", + boxShadow: "var(--shadow)", +}; + + const actions = [ + { + id: "blog", + name: "Blog", + shortcut: ["b"], + keywords: "writing words", + perform: () => (window.location.pathname = "blog"), + }, + { + id: "contact", + name: "Contact", + shortcut: ["c"], + keywords: "email", + perform: () => (window.location.pathname = "contact"), + }, + ]; + +export default function SearchBar(){ + return ( + + + + + + + + + + + ); +} + +function RenderResults() { + const { results } = useMatches(); + + return ( + + typeof item === "string" ? ( +
{item}
+ ) : ( +
+ {item.name} +
+ ) + } + /> + ); +} \ No newline at end of file diff --git a/site/src/theme/SearchPage/index.js b/site/src/theme/SearchPage/index.js new file mode 100644 index 0000000..ef0960c --- /dev/null +++ b/site/src/theme/SearchPage/index.js @@ -0,0 +1,459 @@ +/* eslint-disable jsx-a11y/no-autofocus */ +import React, {useEffect, useState, useReducer, useRef} from 'react'; +import clsx from 'clsx'; +import algoliaSearch from 'algoliasearch/lite'; +import algoliaSearchHelper from 'algoliasearch-helper'; +import Head from '@docusaurus/Head'; +import Link from '@docusaurus/Link'; +import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment'; +import { + HtmlClassNameProvider, + usePluralForm, + isRegexpStringMatch, + useEvent, +} from '@docusaurus/theme-common'; +import { + useTitleFormatter, + useSearchPage, +} from '@docusaurus/theme-common/internal'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import {useAllDocsData} from '@docusaurus/plugin-content-docs/client'; +import Translate, {translate} from '@docusaurus/Translate'; +import Layout from '@theme/Layout'; +import styles from './styles.module.css'; +// Very simple pluralization: probably good enough for now +function useDocumentsFoundPlural() { + const {selectMessage} = usePluralForm(); + return (count) => + selectMessage( + count, + translate( + { + id: 'theme.SearchPage.documentsFound.plurals', + description: + 'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)', + message: 'One document found|{count} documents found', + }, + {count}, + ), + ); +} +function useDocsSearchVersionsHelpers() { + const allDocsData = useAllDocsData(); + // State of the version select menus / algolia facet filters + // docsPluginId -> versionName map + const [searchVersions, setSearchVersions] = useState(() => + Object.entries(allDocsData).reduce( + (acc, [pluginId, pluginData]) => ({ + ...acc, + [pluginId]: pluginData.versions[0].name, + }), + {}, + ), + ); + // Set the value of a single select menu + const setSearchVersion = (pluginId, searchVersion) => + setSearchVersions((s) => ({...s, [pluginId]: searchVersion})); + const versioningEnabled = Object.values(allDocsData).some( + (docsData) => docsData.versions.length > 1, + ); + return { + allDocsData, + versioningEnabled, + searchVersions, + setSearchVersion, + }; +} +// We want to display one select per versioned docs plugin instance +function SearchVersionSelectList({docsSearchVersionsHelpers}) { + const versionedPluginEntries = Object.entries( + docsSearchVersionsHelpers.allDocsData, + ) + // Do not show a version select for unversioned docs plugin instances + .filter(([, docsData]) => docsData.versions.length > 1); + return ( +
+ {versionedPluginEntries.map(([pluginId, docsData]) => { + const labelPrefix = + versionedPluginEntries.length > 1 ? `${pluginId}: ` : ''; + return ( + + ); + })} +
+ ); +} +function SearchPageContent() { + const { + siteConfig: {themeConfig}, + i18n: {currentLocale}, + } = useDocusaurusContext(); + const { + algolia: {appId, apiKey, indexName, externalUrlRegex}, + } = themeConfig; + const documentsFoundPlural = useDocumentsFoundPlural(); + const docsSearchVersionsHelpers = useDocsSearchVersionsHelpers(); + const {searchQuery, setSearchQuery} = useSearchPage(); + const initialSearchResultState = { + items: [], + query: null, + totalResults: null, + totalPages: null, + lastPage: null, + hasMore: null, + loading: null, + }; + const [searchResultState, searchResultStateDispatcher] = useReducer( + (prevState, data) => { + switch (data.type) { + case 'reset': { + return initialSearchResultState; + } + case 'loading': { + return {...prevState, loading: true}; + } + case 'update': { + if (searchQuery !== data.value.query) { + return prevState; + } + return { + ...data.value, + items: + data.value.lastPage === 0 + ? data.value.items + : prevState.items.concat(data.value.items), + }; + } + case 'advance': { + const hasMore = prevState.totalPages > prevState.lastPage + 1; + return { + ...prevState, + lastPage: hasMore ? prevState.lastPage + 1 : prevState.lastPage, + hasMore, + }; + } + default: + return prevState; + } + }, + initialSearchResultState, + ); + const algoliaClient = algoliaSearch(appId, apiKey); + const algoliaHelper = algoliaSearchHelper(algoliaClient, indexName, { + hitsPerPage: 15, + advancedSyntax: true, + disjunctiveFacets: ['language', 'docusaurus_tag'], + }); + algoliaHelper.on( + 'result', + ({results: {query, hits, page, nbHits, nbPages}}) => { + if (query === '' || !Array.isArray(hits)) { + searchResultStateDispatcher({type: 'reset'}); + return; + } + const sanitizeValue = (value) => + value.replace( + /algolia-docsearch-suggestion--highlight/g, + 'search-result-match', + ); + const items = hits.map( + ({ + url, + _highlightResult: {hierarchy}, + _snippetResult: snippet = {}, + }) => { + const parsedURL = new URL(url); + const titles = Object.keys(hierarchy).map((key) => + sanitizeValue(hierarchy[key].value), + ); + return { + title: titles.pop(), + url: isRegexpStringMatch(externalUrlRegex, parsedURL.href) + ? parsedURL.href + : parsedURL.pathname + parsedURL.hash, + summary: snippet.content + ? `${sanitizeValue(snippet.content.value)}...` + : '', + breadcrumbs: titles, + }; + }, + ); + searchResultStateDispatcher({ + type: 'update', + value: { + items, + query, + totalResults: nbHits, + totalPages: nbPages, + lastPage: page, + hasMore: nbPages > page + 1, + loading: false, + }, + }); + }, + ); + const [loaderRef, setLoaderRef] = useState(null); + const prevY = useRef(0); + const observer = useRef( + ExecutionEnvironment.canUseIntersectionObserver && + new IntersectionObserver( + (entries) => { + const { + isIntersecting, + boundingClientRect: {y: currentY}, + } = entries[0]; + if (isIntersecting && prevY.current > currentY) { + searchResultStateDispatcher({type: 'advance'}); + } + prevY.current = currentY; + }, + {threshold: 1}, + ), + ); + const getTitle = () => + searchQuery + ? translate( + { + id: 'theme.SearchPage.existingResultsTitle', + message: 'Search results for "{query}"', + description: 'The search page title for non-empty query', + }, + { + query: searchQuery, + }, + ) + : translate({ + id: 'theme.SearchPage.emptyResultsTitle', + message: 'Search the documentation', + description: 'The search page title for empty query', + }); + const makeSearch = useEvent((page = 0) => { + algoliaHelper.addDisjunctiveFacetRefinement('docusaurus_tag', 'default'); + algoliaHelper.addDisjunctiveFacetRefinement('language', currentLocale); + Object.entries(docsSearchVersionsHelpers.searchVersions).forEach( + ([pluginId, searchVersion]) => { + algoliaHelper.addDisjunctiveFacetRefinement( + 'docusaurus_tag', + `docs-${pluginId}-${searchVersion}`, + ); + }, + ); + algoliaHelper.setQuery(searchQuery).setPage(page).search(); + }); + useEffect(() => { + if (!loaderRef) { + return undefined; + } + const currentObserver = observer.current; + if (currentObserver) { + currentObserver.observe(loaderRef); + return () => currentObserver.unobserve(loaderRef); + } + return () => true; + }, [loaderRef]); + useEffect(() => { + searchResultStateDispatcher({type: 'reset'}); + if (searchQuery) { + searchResultStateDispatcher({type: 'loading'}); + setTimeout(() => { + makeSearch(); + }, 300); + } + }, [searchQuery, docsSearchVersionsHelpers.searchVersions, makeSearch]); + useEffect(() => { + if (!searchResultState.lastPage || searchResultState.lastPage === 0) { + return; + } + makeSearch(searchResultState.lastPage); + }, [makeSearch, searchResultState.lastPage]); + return ( + + + {useTitleFormatter(getTitle())} + {/* + We should not index search pages + See https://github.com/facebook/docusaurus/pull/3233 + */} + + + +
+

{getTitle()}

+ +
e.preventDefault()}> +
+ setSearchQuery(e.target.value)} + value={searchQuery} + autoComplete="off" + autoFocus + /> +
+ + {docsSearchVersionsHelpers.versioningEnabled && ( + + )} + + +
+
+ {!!searchResultState.totalResults && + documentsFoundPlural(searchResultState.totalResults)} +
+ + +
+ + {searchResultState.items.length > 0 ? ( +
+ {searchResultState.items.map( + ({title, url, summary, breadcrumbs}, i) => ( +
+

+ +

+ + {breadcrumbs.length > 0 && ( + + )} + + {summary && ( +

+ )} +

+ ), + )} +
+ ) : ( + [ + searchQuery && !searchResultState.loading && ( +

+ + No results were found + +

+ ), + !!searchResultState.loading && ( +
+ ), + ] + )} + + {searchResultState.hasMore && ( +
+ + Fetching new results... + +
+ )} +
+ + ); +} +export default function SearchPage() { + return ( + + + + ); +} diff --git a/site/src/theme/SearchPage/styles.module.css b/site/src/theme/SearchPage/styles.module.css new file mode 100644 index 0000000..57de749 --- /dev/null +++ b/site/src/theme/SearchPage/styles.module.css @@ -0,0 +1,112 @@ +.searchQueryInput, +.searchVersionInput { + border-radius: var(--ifm-global-radius); + border: 2px solid var(--ifm-toc-border-color); + font: var(--ifm-font-size-base) var(--ifm-font-family-base); + padding: 0.8rem; + width: 100%; + background: var(--docsearch-searchbox-focus-background); + color: var(--docsearch-text-color); + margin-bottom: 0.5rem; + transition: border var(--ifm-transition-fast) ease; +} + +.searchQueryInput:focus, +.searchVersionInput:focus { + border-color: var(--docsearch-primary-color); + outline: none; +} + +.searchQueryInput::placeholder { + color: var(--docsearch-muted-color); +} + +.searchResultsColumn { + font-size: 0.9rem; + font-weight: bold; +} + +.algoliaLogo { + max-width: 150px; +} + +.algoliaLogoPathFill { + fill: var(--ifm-font-color-base); +} + +.searchResultItem { + padding: 1rem 0; + border-bottom: 1px solid var(--ifm-toc-border-color); +} + +.searchResultItemHeading { + font-weight: 400; + margin-bottom: 0; +} + +.searchResultItemPath { + font-size: 0.8rem; + color: var(--ifm-color-content-secondary); + --ifm-breadcrumb-separator-size-multiplier: 1; +} + +.searchResultItemSummary { + margin: 0.5rem 0 0; + font-style: italic; +} + +@media only screen and (max-width: 996px) { + .searchQueryColumn { + max-width: 60% !important; + } + + .searchVersionColumn { + max-width: 40% !important; + } + + .searchResultsColumn { + max-width: 60% !important; + } + + .searchLogoColumn { + max-width: 40% !important; + padding-left: 0 !important; + } +} + +@media screen and (max-width: 576px) { + .searchQueryColumn { + max-width: 100% !important; + } + + .searchVersionColumn { + max-width: 100% !important; + padding-left: var(--ifm-spacing-horizontal) !important; + } +} + +.loadingSpinner { + width: 3rem; + height: 3rem; + border: 0.4em solid #eee; + border-top-color: var(--ifm-color-primary); + border-radius: 50%; + animation: loading-spin 1s linear infinite; + margin: 0 auto; +} + +@keyframes loading-spin { + 100% { + transform: rotate(360deg); + } +} + +.loader { + margin-top: 2rem; +} + +:global(.search-result-match) { + color: var(--docsearch-hit-color); + background: rgb(255 215 142 / 25%); + padding: 0.09em 0; +} diff --git a/site/yarn.lock b/site/yarn.lock index 8f89f7a..815bea6 100644 --- a/site/yarn.lock +++ b/site/yarn.lock @@ -1137,7 +1137,7 @@ core-js-pure "^3.25.1" regenerator-runtime "^0.13.11" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.6", "@babel/runtime@^7.8.4": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== @@ -1747,6 +1747,42 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== +"@radix-ui/react-compose-refs@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz#37595b1f16ec7f228d698590e78eeed18ff218ae" + integrity sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-portal@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.1.tgz#169c5a50719c2bb0079cf4c91a27aa6d37e5dd33" + integrity sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.1" + +"@radix-ui/react-primitive@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz#c1ebcce283dd2f02e4fbefdaa49d1cb13dbc990a" + integrity sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "1.0.1" + +"@radix-ui/react-slot@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.1.tgz#e7868c669c974d649070e9ecbec0b367ee0b4d81" + integrity sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.0" + +"@reach/observe-rect@^1.1.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@reach/observe-rect/-/observe-rect-1.2.0.tgz#d7a6013b8aafcc64c778a0ccb83355a11204d3b2" + integrity sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ== + "@sideway/address@^4.1.3": version "4.1.4" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" @@ -3075,6 +3111,11 @@ command-line-usage@^4.1.0: table-layout "^0.4.2" typical "^2.6.1" +command-score@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/command-score/-/command-score-0.1.2.tgz#b986ad7e8c0beba17552a56636c44ae38363d381" + integrity sha512-VtDvQpIJBvBatnONUsPzXYFVKQQAhuf3XTNOAsdBxCNO/QCtUUd8LSgjn0GVarBkCad6aJCZfXgrjYbl/KRr7w== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3898,6 +3939,11 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-equals@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-2.0.4.tgz#3add9410585e2d7364c2deeb6a707beadb24b927" + integrity sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w== + fast-glob@^3.2.11, fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" @@ -5072,6 +5118,17 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +kbar@^0.1.0-beta.39: + version "0.1.0-beta.39" + resolved "https://registry.yarnpkg.com/kbar/-/kbar-0.1.0-beta.39.tgz#9320c9b7074a362ea5e810f3a0edf4b850f12e01" + integrity sha512-Gjn0m3MV2V/rEYTDAhIMzxD75Rz65tuMB6v6w71B8PuU4vQzZ7dWVKEI4b56Cf47T49zrax6tqsijxcsAFpLSg== + dependencies: + "@radix-ui/react-portal" "^1.0.1" + command-score "^0.1.2" + fast-equals "^2.0.3" + react-virtual "^2.8.2" + tiny-invariant "^1.2.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -6452,6 +6509,13 @@ react-textarea-autosize@^8.3.2: use-composed-ref "^1.3.0" use-latest "^1.2.1" +react-virtual@^2.8.2: + version "2.10.4" + resolved "https://registry.yarnpkg.com/react-virtual/-/react-virtual-2.10.4.tgz#08712f0acd79d7d6f7c4726f05651a13b24d8704" + integrity sha512-Ir6+oPQZTVHfa6+JL9M7cvMILstFZH/H3jqeYeKI4MSUX+rIruVwFC6nGVXw9wqAw8L0Kg2KvfXxI85OvYQdpQ== + dependencies: + "@reach/observe-rect" "^1.1.0" + react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -7374,7 +7438,7 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -tiny-invariant@^1.0.2: +tiny-invariant@^1.0.2, tiny-invariant@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==