@env-hopper/frontend-core 2.0.1-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/apple-touch-180x180.png +0 -0
- package/dist/disable.well-known/appspecific/com.chrome.devtools.json +6 -0
- package/dist/env-hopper-16x16.png +0 -0
- package/dist/env-hopper-192x192.png +0 -0
- package/dist/env-hopper-32x32.png +0 -0
- package/dist/env-hopper-48x48.png +0 -0
- package/dist/env-hopper-512x512.png +0 -0
- package/dist/env-hopper-square.svg +114 -0
- package/dist/esm/App.d.ts +12 -0
- package/dist/esm/App.js +12 -0
- package/dist/esm/App.js.map +1 -0
- package/dist/esm/__tests__/modules/fuzzyMatchLogic/autoCompleteFilter.test.d.ts +1 -0
- package/dist/esm/__tests__/modules/fuzzyMatchLogic/features/prefixFracTokenMiddles.test.d.ts +1 -0
- package/dist/esm/__tests__/modules/fuzzyMatchLogic/fixLayout.test.d.ts +1 -0
- package/dist/esm/__tests__/modules/fuzzyMatchLogic/postFiltration.test.d.ts +1 -0
- package/dist/esm/__tests__/modules/fuzzyMatchLogic/testUtils.d.ts +2 -0
- package/dist/esm/__tests__/modules/fuzzyMatchLogic/tokenize.test.d.ts +1 -0
- package/dist/esm/__tests__/modules/resouceJump/findBestMatchByUrl.test.d.ts +1 -0
- package/dist/esm/__tests__/setupTests.d.ts +0 -0
- package/dist/esm/__tests__/util/availabilityMatrixUtils.test.d.ts +1 -0
- package/dist/esm/api/ApiQueryMagazine.d.ts +12 -0
- package/dist/esm/api/ApiQueryMagazine.js +16 -0
- package/dist/esm/api/ApiQueryMagazine.js.map +1 -0
- package/dist/esm/api/data/useQueryBootstrapConfig.d.ts +3 -0
- package/dist/esm/api/data/useQueryBootstrapConfig.js +14 -0
- package/dist/esm/api/data/useQueryBootstrapConfig.js.map +1 -0
- package/dist/esm/api/infra/createQueryClient.d.ts +7 -0
- package/dist/esm/api/infra/createQueryClient.js +23 -0
- package/dist/esm/api/infra/createQueryClient.js.map +1 -0
- package/dist/esm/api/infra/trpc.d.ts +93 -0
- package/dist/esm/api/infra/trpc.js +8 -0
- package/dist/esm/api/infra/trpc.js.map +1 -0
- package/dist/esm/api/unsorted/indexDataFetcher.d.ts +11 -0
- package/dist/esm/api/unsorted/indexDataFetcher.js +35 -0
- package/dist/esm/api/unsorted/indexDataFetcher.js.map +1 -0
- package/dist/esm/appPropsFactory.d.ts +2 -0
- package/dist/esm/appPropsFactory.js +32 -0
- package/dist/esm/appPropsFactory.js.map +1 -0
- package/dist/esm/assets/env-hopper-logo.svg.js +16 -0
- package/dist/esm/assets/env-hopper-logo.svg.js.map +1 -0
- package/dist/esm/components/ThemeSwitcher.d.ts +1 -0
- package/dist/esm/components/ThemeSwitcher.js +25 -0
- package/dist/esm/components/ThemeSwitcher.js.map +1 -0
- package/dist/esm/components/theme-provider.d.ts +2 -0
- package/dist/esm/components/theme-provider.js +10 -0
- package/dist/esm/components/theme-provider.js.map +1 -0
- package/dist/esm/components/ui/badge.d.ts +9 -0
- package/dist/esm/components/ui/breadcrumb.d.ts +46 -0
- package/dist/esm/components/ui/button.d.ts +16 -0
- package/dist/esm/components/ui/button.js +52 -0
- package/dist/esm/components/ui/button.js.map +1 -0
- package/dist/esm/components/ui/card.d.ts +38 -0
- package/dist/esm/components/ui/collapsible.d.ts +5 -0
- package/dist/esm/components/ui/dialog.d.ts +21 -0
- package/dist/esm/components/ui/dropdown-menu.d.ts +25 -0
- package/dist/esm/components/ui/input.d.ts +10 -0
- package/dist/esm/components/ui/popover.d.ts +7 -0
- package/dist/esm/components/ui/popover.js +14 -0
- package/dist/esm/components/ui/popover.js.map +1 -0
- package/dist/esm/components/ui/scroll-area.d.ts +5 -0
- package/dist/esm/components/ui/separator.d.ts +4 -0
- package/dist/esm/components/ui/separator.js +27 -0
- package/dist/esm/components/ui/separator.js.map +1 -0
- package/dist/esm/components/ui/tabs.d.ts +7 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/utils.d.ts +2 -0
- package/dist/esm/lib/utils.js +9 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/esm/main.d.ts +0 -0
- package/dist/esm/modules/config/BootstrapConfigContext.d.ts +9 -0
- package/dist/esm/modules/config/BootstrapConfigContext.js +25 -0
- package/dist/esm/modules/config/BootstrapConfigContext.js.map +1 -0
- package/dist/esm/modules/config/GlobalConfigContext.d.ts +14 -0
- package/dist/esm/modules/config/GlobalConfigContext.js +21 -0
- package/dist/esm/modules/config/GlobalConfigContext.js.map +1 -0
- package/dist/esm/modules/environment/ApiQueryMagazineEnvironment.d.ts +12 -0
- package/dist/esm/modules/environment/ApiQueryMagazineEnvironment.js +13 -0
- package/dist/esm/modules/environment/ApiQueryMagazineEnvironment.js.map +1 -0
- package/dist/esm/modules/environment/EnvironmentContext.d.ts +15 -0
- package/dist/esm/modules/environment/EnvironmentContext.js +67 -0
- package/dist/esm/modules/environment/EnvironmentContext.js.map +1 -0
- package/dist/esm/modules/environment/types.d.ts +4 -0
- package/dist/esm/modules/environment/ui/EhEnvSelector.d.ts +9 -0
- package/dist/esm/modules/environment/ui/EhEnvSelector.js +167 -0
- package/dist/esm/modules/environment/ui/EhEnvSelector.js.map +1 -0
- package/dist/esm/modules/fuzzyMatchLogic/autoCompleteFilter.d.ts +3 -0
- package/dist/esm/modules/fuzzyMatchLogic/autoCompleteFilter.js +43 -0
- package/dist/esm/modules/fuzzyMatchLogic/autoCompleteFilter.js.map +1 -0
- package/dist/esm/modules/fuzzyMatchLogic/features/prefixFrac.d.ts +1 -0
- package/dist/esm/modules/fuzzyMatchLogic/features/prefixFrac.js +12 -0
- package/dist/esm/modules/fuzzyMatchLogic/features/prefixFrac.js.map +1 -0
- package/dist/esm/modules/fuzzyMatchLogic/features/prefixFracTokenMiddles.d.ts +2 -0
- package/dist/esm/modules/fuzzyMatchLogic/fixLayout.d.ts +2 -0
- package/dist/esm/modules/fuzzyMatchLogic/postFiltration.d.ts +2 -0
- package/dist/esm/modules/fuzzyMatchLogic/scoring.d.ts +2 -0
- package/dist/esm/modules/fuzzyMatchLogic/scoring.js +23 -0
- package/dist/esm/modules/fuzzyMatchLogic/scoring.js.map +1 -0
- package/dist/esm/modules/fuzzyMatchLogic/tokenize.d.ts +3 -0
- package/dist/esm/modules/fuzzyMatchLogic/types.d.ts +25 -0
- package/dist/esm/modules/fuzzyMatchLogic/utils.d.ts +2 -0
- package/dist/esm/modules/fuzzyMatchLogic/utils.js +12 -0
- package/dist/esm/modules/fuzzyMatchLogic/utils.js.map +1 -0
- package/dist/esm/modules/pluginCore/PluginManagerContext.d.ts +24 -0
- package/dist/esm/modules/pluginCore/PluginManagerContext.js +62 -0
- package/dist/esm/modules/pluginCore/PluginManagerContext.js.map +1 -0
- package/dist/esm/modules/pluginCore/makePluginManagerContext.d.ts +7 -0
- package/dist/esm/modules/pluginCore/makePluginManagerContext.js +27 -0
- package/dist/esm/modules/pluginCore/makePluginManagerContext.js.map +1 -0
- package/dist/esm/modules/pluginCore/types.d.ts +36 -0
- package/dist/esm/modules/pluginCore/types.js +7 -0
- package/dist/esm/modules/pluginCore/types.js.map +1 -0
- package/dist/esm/modules/resourceJump/ApiQueryMagazineResourceJump.d.ts +27 -0
- package/dist/esm/modules/resourceJump/ApiQueryMagazineResourceJump.js +26 -0
- package/dist/esm/modules/resourceJump/ApiQueryMagazineResourceJump.js.map +1 -0
- package/dist/esm/modules/resourceJump/ResourceJumpContext.d.ts +17 -0
- package/dist/esm/modules/resourceJump/ResourceJumpContext.js +88 -0
- package/dist/esm/modules/resourceJump/ResourceJumpContext.js.map +1 -0
- package/dist/esm/modules/resourceJump/buildJumpUrl.d.ts +2 -0
- package/dist/esm/modules/resourceJump/buildJumpUrl.js +32 -0
- package/dist/esm/modules/resourceJump/buildJumpUrl.js.map +1 -0
- package/dist/esm/modules/resourceJump/findBestMatchByUrl.d.ts +17 -0
- package/dist/esm/modules/resourceJump/findBestMatchByUrl.js +85 -0
- package/dist/esm/modules/resourceJump/findBestMatchByUrl.js.map +1 -0
- package/dist/esm/modules/resourceJump/helpers.d.ts +28 -0
- package/dist/esm/modules/resourceJump/helpers.js +19 -0
- package/dist/esm/modules/resourceJump/helpers.js.map +1 -0
- package/dist/esm/modules/resourceJump/routeLoader.d.ts +11 -0
- package/dist/esm/modules/resourceJump/routeLoader.js +43 -0
- package/dist/esm/modules/resourceJump/routeLoader.js.map +1 -0
- package/dist/esm/modules/resourceJump/types.d.ts +18 -0
- package/dist/esm/modules/resourceJump/ui/EhJumpResourceSelector.d.ts +20 -0
- package/dist/esm/modules/resourceJump/ui/EhJumpResourceSelector.js +209 -0
- package/dist/esm/modules/resourceJump/ui/EhJumpResourceSelector.js.map +1 -0
- package/dist/esm/modules/resourceJump/ui/JumpALink.d.ts +14 -0
- package/dist/esm/modules/resourceJump/ui/JumpALink.js +38 -0
- package/dist/esm/modules/resourceJump/ui/JumpALink.js.map +1 -0
- package/dist/esm/modules/resourceJump/ui/JumpMainButton.d.ts +5 -0
- package/dist/esm/modules/resourceJump/ui/JumpMainButton.js +66 -0
- package/dist/esm/modules/resourceJump/ui/JumpMainButton.js.map +1 -0
- package/dist/esm/modules/resourceJump/ui/ResouceJumpLayout.d.ts +5 -0
- package/dist/esm/modules/resourceJump/ui/ResouceJumpLayout.js +42 -0
- package/dist/esm/modules/resourceJump/ui/ResouceJumpLayout.js.map +1 -0
- package/dist/esm/plugins/builtin/pageUrl/PageUrlPluginContext.d.ts +9 -0
- package/dist/esm/plugins/builtin/pageUrl/PageUrlPluginContext.js +36 -0
- package/dist/esm/plugins/builtin/pageUrl/PageUrlPluginContext.js.map +1 -0
- package/dist/esm/plugins/builtin/pageUrl/pageUrlAutoCompletePlugin.d.ts +11 -0
- package/dist/esm/plugins/builtin/pageUrl/pageUrlAutoCompletePlugin.js +44 -0
- package/dist/esm/plugins/builtin/pageUrl/pageUrlAutoCompletePlugin.js.map +1 -0
- package/dist/esm/plugins/builtin/pageUrl/pageUrlJumpPlugin.d.ts +7 -0
- package/dist/esm/plugins/builtin/pageUrl/pageUrlJumpPlugin.js +29 -0
- package/dist/esm/plugins/builtin/pageUrl/pageUrlJumpPlugin.js.map +1 -0
- package/dist/esm/plugins/builtin/pageUrl/pageUrlTypes.d.ts +11 -0
- package/dist/esm/routeTree.gen.d.ts +142 -0
- package/dist/esm/routeTree.gen.js +77 -0
- package/dist/esm/routeTree.gen.js.map +1 -0
- package/dist/esm/routes/__root.d.ts +2 -0
- package/dist/esm/routes/__root.js +22 -0
- package/dist/esm/routes/__root.js.map +1 -0
- package/dist/esm/routes/_layout/app/$appSlug/sub/$subValue.d.ts +1 -0
- package/dist/esm/routes/_layout/app/$appSlug.d.ts +1 -0
- package/dist/esm/routes/_layout/app/_appSlug/sub/_subValue.js +18 -0
- package/dist/esm/routes/_layout/app/_appSlug/sub/_subValue.js.map +1 -0
- package/dist/esm/routes/_layout/app/_appSlug.js +18 -0
- package/dist/esm/routes/_layout/app/_appSlug.js.map +1 -0
- package/dist/esm/routes/_layout/env/$envSlug/app/$appSlug/sub/$subValue.d.ts +1 -0
- package/dist/esm/routes/_layout/env/$envSlug/app/$appSlug.d.ts +1 -0
- package/dist/esm/routes/_layout/env/$envSlug/sub/$subValue.d.ts +1 -0
- package/dist/esm/routes/_layout/env/$envSlug.d.ts +1 -0
- package/dist/esm/routes/_layout/env/_envSlug/app/_appSlug/sub/_subValue.js +20 -0
- package/dist/esm/routes/_layout/env/_envSlug/app/_appSlug/sub/_subValue.js.map +1 -0
- package/dist/esm/routes/_layout/env/_envSlug/app/_appSlug.js +18 -0
- package/dist/esm/routes/_layout/env/_envSlug/app/_appSlug.js.map +1 -0
- package/dist/esm/routes/_layout/env/_envSlug/sub/_subValue.js +18 -0
- package/dist/esm/routes/_layout/env/_envSlug/sub/_subValue.js.map +1 -0
- package/dist/esm/routes/_layout/env/_envSlug.js +18 -0
- package/dist/esm/routes/_layout/env/_envSlug.js.map +1 -0
- package/dist/esm/routes/_layout/index.d.ts +1 -0
- package/dist/esm/routes/_layout/index.js +18 -0
- package/dist/esm/routes/_layout/index.js.map +1 -0
- package/dist/esm/routes/_layout.d.ts +1 -0
- package/dist/esm/routes/_layout.js +12 -0
- package/dist/esm/routes/_layout.js.map +1 -0
- package/dist/esm/types/ehTypes.d.ts +31 -0
- package/dist/esm/types/slateTypes.d.ts +28 -0
- package/dist/esm/types/tanstackQuery.d.ts +11 -0
- package/dist/esm/types/types.d.ts +16 -0
- package/dist/esm/types/userBehaviourTypes.d.ts +76 -0
- package/dist/esm/types/utilityTypes.d.ts +1 -0
- package/dist/esm/ui/components/ActionCard.d.ts +9 -0
- package/dist/esm/ui/components/AppIcon.d.ts +7 -0
- package/dist/esm/ui/components/commandInput/EhBaseSelector.d.ts +6 -0
- package/dist/esm/ui/components/commandInput/EhBaseSelector.js +22 -0
- package/dist/esm/ui/components/commandInput/EhBaseSelector.js.map +1 -0
- package/dist/esm/ui/components/commandInput/types.d.ts +13 -0
- package/dist/esm/ui/components/contextDebug.d.ts +2 -0
- package/dist/esm/ui/components/contextDebug.js +12 -0
- package/dist/esm/ui/components/contextDebug.js.map +1 -0
- package/dist/esm/ui/components/controlPanel/BaseDropdownSelector.d.ts +11 -0
- package/dist/esm/ui/components/controlPanel/env/EnvDropdownContent.d.ts +5 -0
- package/dist/esm/ui/components/controlPanel/env/EnvDropdownSelector.d.ts +1 -0
- package/dist/esm/ui/components/error/DefaultErrorComponent.d.ts +2 -0
- package/dist/esm/ui/components/error/DefaultErrorComponent.js +13 -0
- package/dist/esm/ui/components/error/DefaultErrorComponent.js.map +1 -0
- package/dist/esm/ui/components/error/RooutErrorPage.d.ts +2 -0
- package/dist/esm/ui/components/error/RooutErrorPage.js +12 -0
- package/dist/esm/ui/components/error/RooutErrorPage.js.map +1 -0
- package/dist/esm/ui/components/footer/Footer.d.ts +1 -0
- package/dist/esm/ui/components/footer/Footer.js +38 -0
- package/dist/esm/ui/components/footer/Footer.js.map +1 -0
- package/dist/esm/ui/components/header/PlaygroundHeader.d.ts +1 -0
- package/dist/esm/ui/components/header/PlaygroundHeader.js +23 -0
- package/dist/esm/ui/components/header/PlaygroundHeader.js.map +1 -0
- package/dist/esm/ui/components/leftPanel/LeftPanel.d.ts +5 -0
- package/dist/esm/ui/components/quickBar/EnvQuickJumpBar.d.ts +5 -0
- package/dist/esm/ui/components/quickBar/EnvQuickJumpBar.js +52 -0
- package/dist/esm/ui/components/quickBar/EnvQuickJumpBar.js.map +1 -0
- package/dist/esm/ui/components/quickBar/QuickJumpBar.d.ts +5 -0
- package/dist/esm/ui/components/widgetPanel/AddWidgetCard.d.ts +5 -0
- package/dist/esm/ui/components/widgetPanel/WidgetGrid.d.ts +6 -0
- package/dist/esm/ui/components/widgets/CredentialsWidget.d.ts +11 -0
- package/dist/esm/ui/components/widgets/VersionWidget.d.ts +7 -0
- package/dist/esm/ui/error/NotFoundError.d.ts +1 -0
- package/dist/esm/ui/error/NotFoundError.js +16 -0
- package/dist/esm/ui/error/NotFoundError.js.map +1 -0
- package/dist/esm/ui/layout/Footer.d.ts +1 -0
- package/dist/esm/ui/layout/Header.d.ts +1 -0
- package/dist/esm/ui/layout/LoadingScreen.d.ts +4 -0
- package/dist/esm/ui/layout/LoadingScreen.js +14 -0
- package/dist/esm/ui/layout/LoadingScreen.js.map +1 -0
- package/dist/esm/ui/layout/MainLayout.d.ts +5 -0
- package/dist/esm/ui/layout/MainLayout.js +18 -0
- package/dist/esm/ui/layout/MainLayout.js.map +1 -0
- package/dist/esm/ui/layout/SideColumn.d.ts +1 -0
- package/dist/esm/ui/layout/TopLevelProviders.d.ts +5 -0
- package/dist/esm/ui/layout/TopLevelProviders.js +42 -0
- package/dist/esm/ui/layout/TopLevelProviders.js.map +1 -0
- package/dist/esm/ui/main/JumpTabContent.d.ts +1 -0
- package/dist/esm/ui/main/Tabs.d.ts +4 -0
- package/dist/esm/userDb/DbContext.d.ts +9 -0
- package/dist/esm/userDb/DbContext.js +18 -0
- package/dist/esm/userDb/DbContext.js.map +1 -0
- package/dist/esm/userDb/EhDb.d.ts +12 -0
- package/dist/esm/userDb/EhDb.js +20 -0
- package/dist/esm/userDb/EhDb.js.map +1 -0
- package/dist/esm/util/availabilityMatrixUtils.d.ts +12 -0
- package/dist/esm/util/availabilityMatrixUtils.js +57 -0
- package/dist/esm/util/availabilityMatrixUtils.js.map +1 -0
- package/dist/esm/util/createEhRouter.d.ts +7 -0
- package/dist/esm/util/createEhRouter.js +16 -0
- package/dist/esm/util/createEhRouter.js.map +1 -0
- package/dist/esm/util/highlightMatches.d.ts +2 -0
- package/dist/esm/util/highlightMatches.js +19 -0
- package/dist/esm/util/highlightMatches.js.map +1 -0
- package/dist/esm/util/reactQueryUtils.d.ts +6 -0
- package/dist/esm/util/reactQueryUtils.js +10 -0
- package/dist/esm/util/reactQueryUtils.js.map +1 -0
- package/dist/esm/util/route-utils.d.ts +6 -0
- package/dist/esm/util/route-utils.js +72 -0
- package/dist/esm/util/route-utils.js.map +1 -0
- package/dist/favicon.ico +0 -0
- package/dist/robots.txt +2 -0
- package/package.json +110 -0
- package/src/App.tsx +28 -0
- package/src/__tests__/modules/fuzzyMatchLogic/autoCompleteFilter.test.ts +185 -0
- package/src/__tests__/modules/fuzzyMatchLogic/features/prefixFracTokenMiddles.test.ts +23 -0
- package/src/__tests__/modules/fuzzyMatchLogic/fixLayout.test.ts +11 -0
- package/src/__tests__/modules/fuzzyMatchLogic/postFiltration.test.ts +15 -0
- package/src/__tests__/modules/fuzzyMatchLogic/testUtils.ts +8 -0
- package/src/__tests__/modules/fuzzyMatchLogic/tokenize.test.ts +65 -0
- package/src/__tests__/modules/resouceJump/findBestMatchByUrl.test.ts +234 -0
- package/src/__tests__/setupTests.tsx +0 -0
- package/src/__tests__/util/availabilityMatrixUtils.test.ts +61 -0
- package/src/api/ApiQueryMagazine.ts +15 -0
- package/src/api/data/useQueryBootstrapConfig.ts +17 -0
- package/src/api/infra/createQueryClient.ts +25 -0
- package/src/api/infra/trpc.ts +6 -0
- package/src/api/unsorted/indexDataFetcher.ts +46 -0
- package/src/appPropsFactory.ts +35 -0
- package/src/assets/env-hopper-logo.svg +114 -0
- package/src/components/ThemeSwitcher.tsx +22 -0
- package/src/components/theme-provider.tsx +8 -0
- package/src/components/ui/badge.tsx +37 -0
- package/src/components/ui/breadcrumb.tsx +128 -0
- package/src/components/ui/button.tsx +60 -0
- package/src/components/ui/card.tsx +95 -0
- package/src/components/ui/collapsible.tsx +31 -0
- package/src/components/ui/dialog.tsx +182 -0
- package/src/components/ui/dropdown-menu.tsx +257 -0
- package/src/components/ui/input.tsx +28 -0
- package/src/components/ui/popover.tsx +48 -0
- package/src/components/ui/scroll-area.tsx +58 -0
- package/src/components/ui/separator.tsx +26 -0
- package/src/components/ui/tabs.tsx +65 -0
- package/src/index.css +211 -0
- package/src/index.tsx +3 -0
- package/src/lib/utils.ts +7 -0
- package/src/main.tsx +53 -0
- package/src/modules/config/BootstrapConfigContext.tsx +33 -0
- package/src/modules/config/GlobalConfigContext.tsx +42 -0
- package/src/modules/environment/ApiQueryMagazineEnvironment.ts +12 -0
- package/src/modules/environment/EnvironmentContext.tsx +115 -0
- package/src/modules/environment/types.ts +4 -0
- package/src/modules/environment/ui/EhEnvSelector.tsx +191 -0
- package/src/modules/fuzzyMatchLogic/autoCompleteFilter.ts +186 -0
- package/src/modules/fuzzyMatchLogic/features/prefixFrac.ts +13 -0
- package/src/modules/fuzzyMatchLogic/features/prefixFracTokenMiddles.ts +29 -0
- package/src/modules/fuzzyMatchLogic/fixLayout.ts +24 -0
- package/src/modules/fuzzyMatchLogic/postFiltration.ts +35 -0
- package/src/modules/fuzzyMatchLogic/scoring.ts +42 -0
- package/src/modules/fuzzyMatchLogic/tokenize.ts +32 -0
- package/src/modules/fuzzyMatchLogic/types.ts +33 -0
- package/src/modules/fuzzyMatchLogic/utils.ts +18 -0
- package/src/modules/pluginCore/PluginManagerContext.tsx +107 -0
- package/src/modules/pluginCore/makePluginManagerContext.ts +35 -0
- package/src/modules/pluginCore/types.ts +54 -0
- package/src/modules/resourceJump/ApiQueryMagazineResourceJump.ts +31 -0
- package/src/modules/resourceJump/ResourceJumpContext.tsx +142 -0
- package/src/modules/resourceJump/buildJumpUrl.ts +40 -0
- package/src/modules/resourceJump/findBestMatchByUrl.ts +121 -0
- package/src/modules/resourceJump/helpers.ts +117 -0
- package/src/modules/resourceJump/routeLoader.ts +58 -0
- package/src/modules/resourceJump/types.ts +21 -0
- package/src/modules/resourceJump/ui/EhJumpResourceSelector.tsx +259 -0
- package/src/modules/resourceJump/ui/JumpALink.tsx +54 -0
- package/src/modules/resourceJump/ui/JumpMainButton.tsx +97 -0
- package/src/modules/resourceJump/ui/ResouceJumpLayout.tsx +73 -0
- package/src/plugins/builtin/pageUrl/PageUrlPluginContext.tsx +55 -0
- package/src/plugins/builtin/pageUrl/pageUrlAutoCompletePlugin.ts +66 -0
- package/src/plugins/builtin/pageUrl/pageUrlJumpPlugin.ts +36 -0
- package/src/plugins/builtin/pageUrl/pageUrlTypes.ts +17 -0
- package/src/routeTree.gen.ts +249 -0
- package/src/routes/__root.tsx +23 -0
- package/src/routes/_layout/app/$appSlug/sub/$subValue.tsx +15 -0
- package/src/routes/_layout/app/$appSlug.tsx +15 -0
- package/src/routes/_layout/env/$envSlug/app/$appSlug/sub/$subValue.tsx +17 -0
- package/src/routes/_layout/env/$envSlug/app/$appSlug.tsx +15 -0
- package/src/routes/_layout/env/$envSlug/sub/$subValue.tsx +15 -0
- package/src/routes/_layout/env/$envSlug.tsx +15 -0
- package/src/routes/_layout/index.tsx +16 -0
- package/src/routes/_layout.tsx +9 -0
- package/src/types/ehTypes.ts +40 -0
- package/src/types/slateTypes.ts +22 -0
- package/src/types/tanstackQuery.ts +14 -0
- package/src/types/types.ts +20 -0
- package/src/types/userBehaviourTypes.ts +100 -0
- package/src/types/utilityTypes.ts +1 -0
- package/src/types/vite-env.d.ts +1 -0
- package/src/ui/components/ActionCard.tsx +30 -0
- package/src/ui/components/AppIcon.tsx +48 -0
- package/src/ui/components/commandInput/EhBaseSelector.tsx +51 -0
- package/src/ui/components/commandInput/types.ts +22 -0
- package/src/ui/components/contextDebug.tsx +13 -0
- package/src/ui/components/controlPanel/BaseDropdownSelector.tsx +163 -0
- package/src/ui/components/controlPanel/env/EnvDropdownContent.tsx +114 -0
- package/src/ui/components/controlPanel/env/EnvDropdownSelector.tsx +21 -0
- package/src/ui/components/error/DefaultErrorComponent.tsx +38 -0
- package/src/ui/components/error/RooutErrorPage.tsx +10 -0
- package/src/ui/components/footer/Footer.tsx +32 -0
- package/src/ui/components/header/PlaygroundHeader.tsx +26 -0
- package/src/ui/components/leftPanel/LeftPanel.tsx +194 -0
- package/src/ui/components/quickBar/EnvQuickJumpBar.tsx +65 -0
- package/src/ui/components/quickBar/QuickJumpBar.tsx +101 -0
- package/src/ui/components/widgetPanel/AddWidgetCard.tsx +17 -0
- package/src/ui/components/widgetPanel/WidgetGrid.tsx +18 -0
- package/src/ui/components/widgets/CredentialsWidget.tsx +55 -0
- package/src/ui/components/widgets/VersionWidget.tsx +29 -0
- package/src/ui/error/NotFoundError.tsx +13 -0
- package/src/ui/layout/Footer.tsx +16 -0
- package/src/ui/layout/Header.tsx +14 -0
- package/src/ui/layout/LoadingScreen.tsx +17 -0
- package/src/ui/layout/MainLayout.tsx +27 -0
- package/src/ui/layout/SideColumn.tsx +3 -0
- package/src/ui/layout/TopLevelProviders.tsx +52 -0
- package/src/ui/main/JumpTabContent.tsx +12 -0
- package/src/ui/main/Tabs.tsx +29 -0
- package/src/userDb/DbContext.tsx +22 -0
- package/src/userDb/EhDb.ts +22 -0
- package/src/util/availabilityMatrixUtils.ts +80 -0
- package/src/util/createEhRouter.ts +20 -0
- package/src/util/highlightMatches.tsx +29 -0
- package/src/util/reactQueryUtils.ts +12 -0
- package/src/util/route-utils.ts +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvironmentContext.js","sources":["../../../../src/modules/environment/EnvironmentContext.tsx"],"sourcesContent":["import {\n createContext,\n use,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport { useBootstrapConfig } from '../config/BootstrapConfigContext'\nimport type { EhEnvIndexed } from '@env-hopper/backend-core'\nimport type { ReactNode } from 'react'\nimport type { EnvironmentHistoryItem } from './types'\nimport { useDb } from '~/userDb/DbContext'\n\nexport interface EnvironmentContext {\n setCurrentEnv: (envSlug: string | undefined) => void\n currentEnv: EhEnvIndexed | undefined\n getHistory: () => Array<EnvironmentHistoryItem>\n}\n\nconst EnvironmentContext = createContext<EnvironmentContext | undefined>(\n undefined,\n)\n\ninterface EnvironmentProviderProps {\n children: ReactNode\n initialEnvSlug?: string\n}\n\nexport function EnvironmentProvider({\n children,\n initialEnvSlug,\n}: EnvironmentProviderProps) {\n const indexData = useBootstrapConfig()\n const db = useDb()\n const [history, setHistory] = useState<Array<EnvironmentHistoryItem>>([])\n\n useEffect(() => {\n const fetchHistory = async () => {\n const historyItems = await db.environmentHistory\n .toCollection()\n .sortBy('timestamp')\n setHistory(historyItems)\n }\n fetchHistory()\n }, [db.environmentHistory])\n\n const [currentEnvSlug, setCurrentEnvSlug] = useState<string | undefined>(\n initialEnvSlug,\n )\n\n // Lookup functions\n const findEnvBySlug = useCallback(\n (envSlug: string | undefined): EhEnvIndexed | undefined => {\n if (!envSlug) return undefined\n return indexData.envs[envSlug]\n },\n [indexData.envs],\n )\n\n // Get current objects from slugs\n const currentEnv = findEnvBySlug(currentEnvSlug)\n const setCurrentEnv = useCallback(\n (envSlug: string | undefined) => {\n setCurrentEnvSlug(envSlug)\n const timestamp = Date.now()\n if (envSlug !== undefined) {\n setHistory((prev) => [...prev, { envSlug, timestamp }])\n db.environmentHistory.add({ envSlug, timestamp })\n }\n },\n [db.environmentHistory],\n )\n\n const value: EnvironmentContext = useMemo(\n () => ({\n setCurrentEnv,\n currentEnv,\n getHistory: () => history,\n }),\n [currentEnv, setCurrentEnv, history],\n )\n\n // return (\n // <EnvironmentContext value={value}></EnvironmentContext>\n // recents: history,\n // record: (envSlug: string) => {\n // const timestamp = Date.now();\n // setHistory((prev) => [...prev, { envSlug, timestamp }]);\n // },\n // },\n // }), [currentEnv, setCurrentEnv, history]);\n\n // return (\n // <EnvironmentContext value={value}></EnvironmentContext>\n // recents: [],\n // record: (envSlug: string) => {\n // const timestamp = Date.now();\n // envHistory.recents.push({ envSlug, timestamp });\n // },\n // },\n // }), [currentEnv, setCurrentEnv]);\n\n return <EnvironmentContext value={value}>{children}</EnvironmentContext>\n}\n\nexport function useEnvironmentContext(): EnvironmentContext {\n const context = use(EnvironmentContext)\n if (context === undefined) {\n throw new Error(\n 'useEnvironmentContext must be used within an EnvironmentProvider',\n )\n }\n return context\n}\n"],"names":[],"mappings":";;;;AAoBA,MAAM,qBAAqB;AAAA,EACzB;AACF;AAOO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,YAAY,mBAAA;AAClB,QAAM,KAAK,MAAA;AACX,QAAM,CAAC,SAAS,UAAU,IAAI,SAAwC,CAAA,CAAE;AAExE,YAAU,MAAM;AACd,UAAM,eAAe,YAAY;AAC/B,YAAM,eAAe,MAAM,GAAG,mBAC3B,aAAA,EACA,OAAO,WAAW;AACrB,iBAAW,YAAY;AAAA,IACzB;AACA,iBAAA;AAAA,EACF,GAAG,CAAC,GAAG,kBAAkB,CAAC;AAE1B,QAAM,CAAC,gBAAgB,iBAAiB,IAAI;AAAA,IAC1C;AAAA,EAAA;AAIF,QAAM,gBAAgB;AAAA,IACpB,CAAC,YAA0D;AACzD,UAAI,CAAC,QAAS,QAAO;AACrB,aAAO,UAAU,KAAK,OAAO;AAAA,IAC/B;AAAA,IACA,CAAC,UAAU,IAAI;AAAA,EAAA;AAIjB,QAAM,aAAa,cAAc,cAAc;AAC/C,QAAM,gBAAgB;AAAA,IACpB,CAAC,YAAgC;AAC/B,wBAAkB,OAAO;AACzB,YAAM,YAAY,KAAK,IAAA;AACvB,UAAI,YAAY,QAAW;AACzB,mBAAW,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,SAAS,UAAA,CAAW,CAAC;AACtD,WAAG,mBAAmB,IAAI,EAAE,SAAS,WAAW;AAAA,MAClD;AAAA,IACF;AAAA,IACA,CAAC,GAAG,kBAAkB;AAAA,EAAA;AAGxB,QAAM,QAA4B;AAAA,IAChC,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,YAAY,MAAM;AAAA,IAAA;AAAA,IAEpB,CAAC,YAAY,eAAe,OAAO;AAAA,EAAA;AAuBrC,SAAO,oBAAC,oBAAA,EAAmB,OAAe,SAAA,CAAS;AACrD;AAEO,SAAS,wBAA4C;AAC1D,QAAM,UAAU,IAAI,kBAAkB;AACtC,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACA,SAAO;AACT;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface EhEnvSelectorProps {
|
|
2
|
+
className?: string;
|
|
3
|
+
}
|
|
4
|
+
export interface EhEnvSelectorItem {
|
|
5
|
+
slug: string;
|
|
6
|
+
displayName: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function EhEnvSelector({ className }: EhEnvSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Popover, PopoverContent } from "@radix-ui/react-popover";
|
|
3
|
+
import { useCombobox } from "downshift";
|
|
4
|
+
import { XIcon, Edit3Icon } from "lucide-react";
|
|
5
|
+
import { listify, unique } from "radashi";
|
|
6
|
+
import React__default, { useMemo, useEffect } from "react";
|
|
7
|
+
import { EhBaseSelectorRoot } from "../../../ui/components/commandInput/EhBaseSelector.js";
|
|
8
|
+
import { PopoverTrigger } from "../../../components/ui/popover.js";
|
|
9
|
+
import { useBootstrapConfig } from "../../config/BootstrapConfigContext.js";
|
|
10
|
+
import { cn } from "../../../lib/utils.js";
|
|
11
|
+
import { useEnvironmentContext } from "../EnvironmentContext.js";
|
|
12
|
+
import { makeFuzzySearchIndex, fuzzySearch } from "../../fuzzyMatchLogic/autoCompleteFilter.js";
|
|
13
|
+
function EhEnvSelector({ className = "" }) {
|
|
14
|
+
const { envs } = useBootstrapConfig();
|
|
15
|
+
const { currentEnv, setCurrentEnv } = useEnvironmentContext();
|
|
16
|
+
const allItems = useMemo(
|
|
17
|
+
() => listify(envs, (_, e) => {
|
|
18
|
+
return {
|
|
19
|
+
slug: e.slug,
|
|
20
|
+
displayName: e.displayName
|
|
21
|
+
};
|
|
22
|
+
}),
|
|
23
|
+
[envs]
|
|
24
|
+
);
|
|
25
|
+
const searchIndex = useMemo(() => {
|
|
26
|
+
return makeFuzzySearchIndex({
|
|
27
|
+
entries: allItems
|
|
28
|
+
});
|
|
29
|
+
}, [allItems]);
|
|
30
|
+
const [displayedItems, setDisplayedItems] = React__default.useState(allItems);
|
|
31
|
+
const envFilter = (needle) => {
|
|
32
|
+
if (needle.trim() === "") {
|
|
33
|
+
return allItems;
|
|
34
|
+
}
|
|
35
|
+
const newLocal = fuzzySearch(needle, {
|
|
36
|
+
index: searchIndex
|
|
37
|
+
});
|
|
38
|
+
console.log(needle, newLocal);
|
|
39
|
+
return newLocal.map((e) => e.entry);
|
|
40
|
+
};
|
|
41
|
+
const {
|
|
42
|
+
isOpen: comboIsOpen,
|
|
43
|
+
getLabelProps,
|
|
44
|
+
getMenuProps,
|
|
45
|
+
getInputProps,
|
|
46
|
+
getToggleButtonProps,
|
|
47
|
+
highlightedIndex,
|
|
48
|
+
getItemProps,
|
|
49
|
+
selectItem,
|
|
50
|
+
inputValue: comboInputValue,
|
|
51
|
+
setInputValue
|
|
52
|
+
} = useCombobox({
|
|
53
|
+
onInputValueChange({
|
|
54
|
+
inputValue: changedInputValue,
|
|
55
|
+
isOpen: changedIsOpen
|
|
56
|
+
}) {
|
|
57
|
+
if (changedIsOpen) {
|
|
58
|
+
const matchedIds = unique(envFilter(changedInputValue));
|
|
59
|
+
setDisplayedItems(matchedIds);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
onSelectedItemChange({ selectedItem: changedSelectedItem }) {
|
|
63
|
+
setCurrentEnv(changedSelectedItem == null ? void 0 : changedSelectedItem.slug);
|
|
64
|
+
},
|
|
65
|
+
// selectedItem,
|
|
66
|
+
items: displayedItems,
|
|
67
|
+
itemToString(item) {
|
|
68
|
+
return item && item.displayName || "";
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
if (currentEnv) {
|
|
73
|
+
const f = allItems.find((e) => e.slug === currentEnv.slug);
|
|
74
|
+
if (f) {
|
|
75
|
+
selectItem(f);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}, [allItems, currentEnv, selectItem]);
|
|
79
|
+
return /* @__PURE__ */ jsx(EhBaseSelectorRoot, { className, children: /* @__PURE__ */ jsxs(Popover, { open: comboIsOpen, children: [
|
|
80
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs("div", { className: "relative group hover:cursor-pointer w-full", children: [
|
|
81
|
+
/* @__PURE__ */ jsx(
|
|
82
|
+
"input",
|
|
83
|
+
{
|
|
84
|
+
className: cn(
|
|
85
|
+
"text-xl h-14 w-full rounded-md border border-input bg-background px-4 py-4 ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ",
|
|
86
|
+
"group-hover:border-secondary-foreground/60 group-hover:bg-secondary/30 focus:bg-secondary/30 focus:border-secondary-foreground/60",
|
|
87
|
+
"pr-12 hover:cursor-pointer duration-300"
|
|
88
|
+
),
|
|
89
|
+
...getInputProps({
|
|
90
|
+
onMouseUp: (e) => {
|
|
91
|
+
const userHasSelectedSomeText = e.currentTarget.selectionStart !== e.currentTarget.selectionEnd;
|
|
92
|
+
if (!userHasSelectedSomeText) {
|
|
93
|
+
e.currentTarget.select();
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
onKeyUp: (e) => {
|
|
97
|
+
if (e.key !== "Enter") ;
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
),
|
|
102
|
+
comboInputValue.length ? /* @__PURE__ */ jsx(
|
|
103
|
+
XIcon,
|
|
104
|
+
{
|
|
105
|
+
className: "absolute right-5 top-1/2 -translate-y-1/2 stroke-secondary-foreground/50 group-hover:stroke-secondary-foreground/60 group-hover:rotate-3 group-hover:scale-95 hover:stroke-secondary-foreground hover:bg-secondary rounded-full",
|
|
106
|
+
onClick: () => setInputValue("")
|
|
107
|
+
}
|
|
108
|
+
) : /* @__PURE__ */ jsx(
|
|
109
|
+
Edit3Icon,
|
|
110
|
+
{
|
|
111
|
+
...getToggleButtonProps(),
|
|
112
|
+
className: "absolute right-5 top-1/2 -translate-y-1/2 stroke-secondary-foreground/50 group-hover:stroke-secondary-foreground/60 group-hover:rotate-3 group-hover:scale-95"
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
/* @__PURE__ */ jsx(
|
|
116
|
+
"label",
|
|
117
|
+
{
|
|
118
|
+
className: cn(
|
|
119
|
+
"absolute text-sm text-secondary-foreground/50",
|
|
120
|
+
"left-2 -top-0.5 -translate-y-1/2 text-muted-foreground bg-background rounded-2xl px-1"
|
|
121
|
+
),
|
|
122
|
+
...getLabelProps(),
|
|
123
|
+
children: "Environment"
|
|
124
|
+
}
|
|
125
|
+
)
|
|
126
|
+
] }) }),
|
|
127
|
+
/* @__PURE__ */ jsx(
|
|
128
|
+
PopoverContent,
|
|
129
|
+
{
|
|
130
|
+
className: cn(
|
|
131
|
+
"w-[var(--radix-popover-trigger-width)] max-h-[var(--radix-popover-content-available-height)] bg-popover text-popover-foreground z-50 origin-(--radix-popover-content-transform-origin) rounded-b-md border shadow-md outline-hidden",
|
|
132
|
+
{ hidden: !comboIsOpen }
|
|
133
|
+
),
|
|
134
|
+
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
135
|
+
forceMount: true,
|
|
136
|
+
children: /* @__PURE__ */ jsxs("div", { ...getMenuProps(), children: [
|
|
137
|
+
displayedItems.map((item, index) => /* @__PURE__ */ jsx(
|
|
138
|
+
"div",
|
|
139
|
+
{
|
|
140
|
+
className: cn(
|
|
141
|
+
"cursor-pointer text-secondary-foreground px-3 py-3 rounded-md",
|
|
142
|
+
{
|
|
143
|
+
// 'bg-secondary/40': comboSelectedItem?.slug === item.slug,
|
|
144
|
+
"bg-primary/40": highlightedIndex === index
|
|
145
|
+
}
|
|
146
|
+
),
|
|
147
|
+
...getItemProps({
|
|
148
|
+
item
|
|
149
|
+
}),
|
|
150
|
+
children: item.displayName
|
|
151
|
+
},
|
|
152
|
+
item.slug
|
|
153
|
+
)),
|
|
154
|
+
displayedItems.length === 0 && /* @__PURE__ */ jsxs("div", { className: "text-secondary-foreground/50", children: [
|
|
155
|
+
"'",
|
|
156
|
+
comboInputValue,
|
|
157
|
+
"' not found. Try a different search."
|
|
158
|
+
] })
|
|
159
|
+
] })
|
|
160
|
+
}
|
|
161
|
+
)
|
|
162
|
+
] }) });
|
|
163
|
+
}
|
|
164
|
+
export {
|
|
165
|
+
EhEnvSelector
|
|
166
|
+
};
|
|
167
|
+
//# sourceMappingURL=EhEnvSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EhEnvSelector.js","sources":["../../../../../src/modules/environment/ui/EhEnvSelector.tsx"],"sourcesContent":["import { Popover, PopoverContent } from '@radix-ui/react-popover'\nimport { useCombobox } from 'downshift'\nimport { Edit3Icon, XIcon } from 'lucide-react'\nimport { listify, unique } from 'radashi'\nimport React, { useEffect, useMemo } from 'react'\nimport { EhBaseSelectorRoot } from '../../../ui/components/commandInput/EhBaseSelector'\nimport { PopoverTrigger } from '~/components/ui/popover'\nimport { useBootstrapConfig } from '~/modules/config/BootstrapConfigContext'\nimport { cn } from '~/lib/utils'\nimport { useEnvironmentContext } from '~/modules/environment/EnvironmentContext'\nimport {\n fuzzySearch,\n makeFuzzySearchIndex,\n} from '~/modules/fuzzyMatchLogic/autoCompleteFilter'\n\ninterface EhEnvSelectorProps {\n className?: string\n}\n\nexport interface EhEnvSelectorItem {\n slug: string\n displayName: string\n}\n\nexport function EhEnvSelector({ className = '' }: EhEnvSelectorProps) {\n const { envs } = useBootstrapConfig()\n const { currentEnv, setCurrentEnv } = useEnvironmentContext()\n\n const allItems = useMemo(\n () =>\n listify(envs, (_, e) => {\n return {\n slug: e.slug,\n displayName: e.displayName,\n }\n }),\n [envs],\n )\n\n const searchIndex = useMemo(() => {\n return makeFuzzySearchIndex({\n entries: allItems,\n })\n }, [allItems])\n\n const [displayedItems, setDisplayedItems] =\n React.useState<Array<EhEnvSelectorItem>>(allItems)\n\n const envFilter = (needle: string) => {\n if (needle.trim() === '') {\n return allItems\n }\n const newLocal = fuzzySearch(needle, {\n index: searchIndex,\n })\n console.log(needle, newLocal)\n\n return newLocal.map((e) => e.entry)\n }\n\n const {\n isOpen: comboIsOpen,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getToggleButtonProps,\n highlightedIndex,\n getItemProps,\n selectItem,\n inputValue: comboInputValue,\n setInputValue,\n } = useCombobox<EhEnvSelectorItem>({\n onInputValueChange({\n inputValue: changedInputValue,\n isOpen: changedIsOpen,\n }) {\n if (changedIsOpen) {\n const matchedIds = unique(envFilter(changedInputValue))\n setDisplayedItems(matchedIds)\n }\n },\n onSelectedItemChange({ selectedItem: changedSelectedItem }) {\n setCurrentEnv(changedSelectedItem?.slug)\n },\n // selectedItem,\n items: displayedItems,\n itemToString(item) {\n return (item && item.displayName) || ''\n },\n })\n\n useEffect(() => {\n if (currentEnv) {\n const f = allItems.find((e) => e.slug === currentEnv.slug)\n if (f) {\n selectItem(f)\n }\n }\n }, [allItems, currentEnv, selectItem])\n\n return (\n <EhBaseSelectorRoot className={className}>\n <Popover open={comboIsOpen}>\n <PopoverTrigger asChild>\n <div className=\"relative group hover:cursor-pointer w-full\">\n <input\n className={cn(\n 'text-xl h-14 w-full rounded-md border border-input bg-background px-4 py-4 ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 ',\n 'group-hover:border-secondary-foreground/60 group-hover:bg-secondary/30 focus:bg-secondary/30 focus:border-secondary-foreground/60',\n 'pr-12 hover:cursor-pointer duration-300',\n )}\n {...getInputProps({\n onMouseUp: (e) => {\n const userHasSelectedSomeText =\n e.currentTarget.selectionStart !==\n e.currentTarget.selectionEnd\n if (!userHasSelectedSomeText) {\n // setInputValue('asdads')\n e.currentTarget.select()\n }\n },\n onKeyUp: (e) => {\n if (e.key !== 'Enter') {\n // console.log(e.target.value)\n // setLastUsersInputText(e.target.value)\n }\n },\n })}\n />\n {comboInputValue.length ? (\n <XIcon\n className=\"absolute right-5 top-1/2 -translate-y-1/2 stroke-secondary-foreground/50 group-hover:stroke-secondary-foreground/60 group-hover:rotate-3 group-hover:scale-95 hover:stroke-secondary-foreground hover:bg-secondary rounded-full\"\n onClick={() => setInputValue('')}\n />\n ) : (\n <Edit3Icon\n {...getToggleButtonProps()}\n className=\"absolute right-5 top-1/2 -translate-y-1/2 stroke-secondary-foreground/50 group-hover:stroke-secondary-foreground/60 group-hover:rotate-3 group-hover:scale-95\"\n />\n )}\n\n <label\n className={cn(\n 'absolute text-sm text-secondary-foreground/50',\n 'left-2 -top-0.5 -translate-y-1/2 text-muted-foreground bg-background rounded-2xl px-1',\n )}\n {...getLabelProps()}\n >\n Environment\n </label>\n </div>\n </PopoverTrigger>\n\n <PopoverContent\n className={cn(\n 'w-[var(--radix-popover-trigger-width)] max-h-[var(--radix-popover-content-available-height)] bg-popover text-popover-foreground z-50 origin-(--radix-popover-content-transform-origin) rounded-b-md border shadow-md outline-hidden',\n { hidden: !comboIsOpen },\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n forceMount\n >\n <div {...getMenuProps()}>\n {displayedItems.map((item, index) => (\n <div\n key={item.slug}\n className={cn(\n 'cursor-pointer text-secondary-foreground px-3 py-3 rounded-md',\n {\n // 'bg-secondary/40': comboSelectedItem?.slug === item.slug,\n 'bg-primary/40': highlightedIndex === index,\n },\n )}\n {...getItemProps({\n item,\n })}\n >\n {item.displayName}\n </div>\n ))}\n {displayedItems.length === 0 && (\n <div className=\"text-secondary-foreground/50\">\n '{comboInputValue}' not found. Try a different search.\n </div>\n )}\n </div>\n </PopoverContent>\n {/* </PopoverAnchor> */}\n </Popover>\n </EhBaseSelectorRoot>\n )\n}\n"],"names":["React"],"mappings":";;;;;;;;;;;;AAwBO,SAAS,cAAc,EAAE,YAAY,MAA0B;AACpE,QAAM,EAAE,KAAA,IAAS,mBAAA;AACjB,QAAM,EAAE,YAAY,cAAA,IAAkB,sBAAA;AAEtC,QAAM,WAAW;AAAA,IACf,MACE,QAAQ,MAAM,CAAC,GAAG,MAAM;AACtB,aAAO;AAAA,QACL,MAAM,EAAE;AAAA,QACR,aAAa,EAAE;AAAA,MAAA;AAAA,IAEnB,CAAC;AAAA,IACH,CAAC,IAAI;AAAA,EAAA;AAGP,QAAM,cAAc,QAAQ,MAAM;AAChC,WAAO,qBAAqB;AAAA,MAC1B,SAAS;AAAA,IAAA,CACV;AAAA,EACH,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,CAAC,gBAAgB,iBAAiB,IACtCA,eAAM,SAAmC,QAAQ;AAEnD,QAAM,YAAY,CAAC,WAAmB;AACpC,QAAI,OAAO,KAAA,MAAW,IAAI;AACxB,aAAO;AAAA,IACT;AACA,UAAM,WAAW,YAAY,QAAQ;AAAA,MACnC,OAAO;AAAA,IAAA,CACR;AACD,YAAQ,IAAI,QAAQ,QAAQ;AAE5B,WAAO,SAAS,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,EACpC;AAEA,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,EAAA,IACE,YAA+B;AAAA,IACjC,mBAAmB;AAAA,MACjB,YAAY;AAAA,MACZ,QAAQ;AAAA,IAAA,GACP;AACD,UAAI,eAAe;AACjB,cAAM,aAAa,OAAO,UAAU,iBAAiB,CAAC;AACtD,0BAAkB,UAAU;AAAA,MAC9B;AAAA,IACF;AAAA,IACA,qBAAqB,EAAE,cAAc,uBAAuB;AAC1D,oBAAc,2DAAqB,IAAI;AAAA,IACzC;AAAA;AAAA,IAEA,OAAO;AAAA,IACP,aAAa,MAAM;AACjB,aAAQ,QAAQ,KAAK,eAAgB;AAAA,IACvC;AAAA,EAAA,CACD;AAED,YAAU,MAAM;AACd,QAAI,YAAY;AACd,YAAM,IAAI,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW,IAAI;AACzD,UAAI,GAAG;AACL,mBAAW,CAAC;AAAA,MACd;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,YAAY,UAAU,CAAC;AAErC,6BACG,oBAAA,EAAmB,WAClB,UAAA,qBAAC,SAAA,EAAQ,MAAM,aACb,UAAA;AAAA,IAAA,oBAAC,kBAAe,SAAO,MACrB,UAAA,qBAAC,OAAA,EAAI,WAAU,8CACb,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAED,GAAG,cAAc;AAAA,YAChB,WAAW,CAAC,MAAM;AAChB,oBAAM,0BACJ,EAAE,cAAc,mBAChB,EAAE,cAAc;AAClB,kBAAI,CAAC,yBAAyB;AAE5B,kBAAE,cAAc,OAAA;AAAA,cAClB;AAAA,YACF;AAAA,YACA,SAAS,CAAC,MAAM;AACd,kBAAI,EAAE,QAAQ,QAAS;AAAA,YAIzB;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,MAAA;AAAA,MAEF,gBAAgB,SACf;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,cAAc,EAAE;AAAA,QAAA;AAAA,MAAA,IAGjC;AAAA,QAAC;AAAA,QAAA;AAAA,UACE,GAAG,qBAAA;AAAA,UACJ,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAId;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,UAED,GAAG,cAAA;AAAA,UACL,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF,EAAA,CACF;AAAA,IAEA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,EAAE,QAAQ,CAAC,YAAA;AAAA,QAAY;AAAA,QAEzB,iBAAiB,CAAC,MAAM,EAAE,eAAA;AAAA,QAC1B,YAAU;AAAA,QAEV,UAAA,qBAAC,OAAA,EAAK,GAAG,aAAA,GACN,UAAA;AAAA,UAAA,eAAe,IAAI,CAAC,MAAM,UACzB;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA;AAAA,kBAEE,iBAAiB,qBAAqB;AAAA,gBAAA;AAAA,cACxC;AAAA,cAED,GAAG,aAAa;AAAA,gBACf;AAAA,cAAA,CACD;AAAA,cAEA,UAAA,KAAK;AAAA,YAAA;AAAA,YAZD,KAAK;AAAA,UAAA,CAcb;AAAA,UACA,eAAe,WAAW,KACzB,qBAAC,OAAA,EAAI,WAAU,gCAA+B,UAAA;AAAA,YAAA;AAAA,YAC1C;AAAA,YAAgB;AAAA,UAAA,EAAA,CACpB;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CAEF,EAAA,CACF;AAEJ;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { FuzzySearchContext, FuzzySearchIndex, FuzzySearchPrepareIndexParams, FuzzySearchReturnItem } from './types.js';
|
|
2
|
+
export declare function makeFuzzySearchIndex(params: FuzzySearchPrepareIndexParams): FuzzySearchIndex;
|
|
3
|
+
export declare function fuzzySearch(needle: string, context: FuzzySearchContext): Array<FuzzySearchReturnItem>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Encoder, Index } from "flexsearch";
|
|
2
|
+
import { score } from "./scoring.js";
|
|
3
|
+
function makeFuzzySearchIndex(params) {
|
|
4
|
+
const encoder = new Encoder({
|
|
5
|
+
// prepare
|
|
6
|
+
// normalize: true,
|
|
7
|
+
// dedupe: true,
|
|
8
|
+
// include: {
|
|
9
|
+
// letter: true,
|
|
10
|
+
// number: true,
|
|
11
|
+
// symbol: true,
|
|
12
|
+
// punctuation: true,
|
|
13
|
+
// control: false,
|
|
14
|
+
// },
|
|
15
|
+
// finalize: (terms) => {
|
|
16
|
+
// return terms
|
|
17
|
+
// },
|
|
18
|
+
});
|
|
19
|
+
const index = new Index({
|
|
20
|
+
tokenize: "forward",
|
|
21
|
+
encoder
|
|
22
|
+
});
|
|
23
|
+
params.entries.forEach((entry, idx) => {
|
|
24
|
+
index.add(idx, entry.displayName || entry.slug);
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
flexIndex: index,
|
|
28
|
+
entries: params.entries
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function fuzzySearch(needle, context) {
|
|
32
|
+
const postFiltrationResults = context.index.flexIndex.searchCache(needle).map((id) => {
|
|
33
|
+
return {
|
|
34
|
+
entry: context.index.entries[id]
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
return score(postFiltrationResults, needle);
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
fuzzySearch,
|
|
41
|
+
makeFuzzySearchIndex
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=autoCompleteFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoCompleteFilter.js","sources":["../../../../src/modules/fuzzyMatchLogic/autoCompleteFilter.ts"],"sourcesContent":["import { Encoder, Index } from 'flexsearch'\nimport { score } from './scoring'\nimport type {\n FuzzySearchContext,\n FuzzySearchIndex,\n FuzzySearchPrepareIndexParams,\n FuzzySearchReturnItem,\n} from './types'\n\nexport function makeFuzzySearchIndex(\n params: FuzzySearchPrepareIndexParams,\n): FuzzySearchIndex {\n const encoder = new Encoder({\n // prepare\n // normalize: true,\n // dedupe: true,\n // include: {\n // letter: true,\n // number: true,\n // symbol: true,\n // punctuation: true,\n // control: false,\n // },\n // finalize: (terms) => {\n // return terms\n // },\n })\n const index = new Index({\n tokenize: 'forward',\n encoder: encoder,\n })\n params.entries.forEach((entry, idx) => {\n index.add(idx, entry.displayName || entry.slug)\n // index.add(idx, enrichTokensForIndex(tokenize(entry.displayName || entry.slug)).join(' '))\n })\n return {\n flexIndex: index,\n entries: params.entries,\n }\n}\n\nexport function fuzzySearch(\n needle: string,\n context: FuzzySearchContext,\n): Array<FuzzySearchReturnItem> {\n const postFiltrationResults = context.index.flexIndex\n .searchCache(needle)\n .map((id) => {\n return {\n entry: context.index.entries[id as number]!,\n }\n })\n\n // const tokenizedNeedle = tokenize(needle)\n\n // const foundTokensByRows = new Map<number, FuzzySearchPreliminaryResult>()\n\n // tokenizedNeedle.forEach((token) => {\n // const found = context.index.flexIndex.search(token)\n // ;(found as number[]).forEach((id) => {\n // let row = foundTokensByRows.get(id)\n // if (!row) {\n // row = {\n // entry: context.index.entries[id as number]!,\n // foundTokens: [token],\n // }\n // foundTokensByRows.set(id, row)\n // } else {\n // row.foundTokens.push(token)\n // }\n // })\n // })\n\n // const rawResults = [...foundTokensByRows.values()]\n // const postFiltrationResults = postFiltration(rawResults)\n return score(postFiltrationResults, needle)\n}\n\n// type IndexType = {\n// title: string;\n// titleOrig: string;\n// tokens: string[];\n// notFavorite: boolean;\n// notRecent: boolean;\n// item: SourceItem;\n// };\n\n// export function makeAutoCompleteFilter(\n// items: SourceItem[],\n// ): EhAutoCompleteFilter {\n// const itemsIndex: IndexType[] = items.map((item) => {\n// const lower = item.title.toLowerCase();\n// return {\n// title: lower,\n// titleOrig: item.title,\n// tokens: tokenize(item.title),\n// notFavorite: !item.favorite,\n// notRecent: !item.recent,\n// item,\n// };\n// });\n// const recentFavWinSort = ['notFavorite', 'notRecent'];\n// const shortestWinSort = (x: IndexType) => x.title.length;\n// const sorts: Many<ListIteratee<IndexType>> = [\n// ...recentFavWinSort,\n// shortestWinSort,\n// ];\n\n// function doSearch(searchPatternOrig: string) {\n// const searchPattern = searchPatternOrig.toLowerCase();\n// const results = new Set<SourceItem>();\n\n// // prefix match exact case sensitive\n// const exactPrefix = sortBy(\n// itemsIndex.filter((item) => item.titleOrig.startsWith(searchPatternOrig)),\n// sorts,\n// );\n// exactPrefix.forEach((x) => results.add(x.item));\n\n// // prefix case insensitive\n// const caseRelaxedPrefix = sortBy(\n// itemsIndex.filter((item) => item.title.startsWith(searchPattern)),\n// sorts,\n// );\n// caseRelaxedPrefix.forEach((x) => results.add(x.item));\n\n// // token prefix\n// const searchTokens = tokenize(searchPattern);\n\n// if (searchTokens.length > 0) {\n// const prefixedInTokens = itemsIndex.filter((item) => {\n// const isFound = searchTokens.reduce<string[] | false>(\n// (itemTokens, searchToken) => {\n// if (itemTokens !== false) {\n// for (let i = 0; i < itemTokens.length; i++) {\n// if (itemTokens[i].startsWith(searchToken)) {\n// return itemTokens.slice(i + 1);\n// }\n// }\n// }\n// return false;\n// },\n// item.tokens,\n// );\n// return isFound !== false;\n// });\n\n// sortBy(prefixedInTokens, sorts).forEach((x) => results.add(x.item));\n// }\n\n// // substring match (case sensitive)\n// const exactSubstring = sortBy(\n// itemsIndex.filter((item) => item.titleOrig.includes(searchPatternOrig)),\n// sorts,\n// (x) => x.titleOrig.indexOf(searchPatternOrig),\n// );\n// exactSubstring.forEach((x) => results.add(x.item));\n\n// // substring match (case insensitive)\n// const relaxSubstring = sortBy(\n// itemsIndex.filter((item) => item.title.includes(searchPattern)),\n// sorts,\n// (x) => x.title.indexOf(searchPattern),\n// );\n// relaxSubstring.forEach((x) => results.add(x.item));\n\n// itemsIndex\n// .filter((item) => item.tokens.join('').includes(searchPattern))\n// .forEach((x) => results.add(x.item));\n\n// const searchString = searchTokens.join('');\n// itemsIndex\n// .filter((item) => item.tokens.join('').includes(searchString))\n// .forEach((x) => results.add(x.item));\n\n// return [...results];\n// }\n\n// return (searchPatternOrig: string) => {\n// let results = doSearch(searchPatternOrig);\n// if (results.length === 0 && isRuLayout(searchPatternOrig)) {\n// results = doSearch(fixRuLayout(searchPatternOrig));\n// }\n// return results;\n// };\n// }\n"],"names":[],"mappings":";;AASO,SAAS,qBACd,QACkB;AAClB,QAAM,UAAU,IAAI,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAc3B;AACD,QAAM,QAAQ,IAAI,MAAM;AAAA,IACtB,UAAU;AAAA,IACV;AAAA,EAAA,CACD;AACD,SAAO,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACrC,UAAM,IAAI,KAAK,MAAM,eAAe,MAAM,IAAI;AAAA,EAEhD,CAAC;AACD,SAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS,OAAO;AAAA,EAAA;AAEpB;AAEO,SAAS,YACd,QACA,SAC8B;AAC9B,QAAM,wBAAwB,QAAQ,MAAM,UACzC,YAAY,MAAM,EAClB,IAAI,CAAC,OAAO;AACX,WAAO;AAAA,MACL,OAAO,QAAQ,MAAM,QAAQ,EAAY;AAAA,IAAA;AAAA,EAE7C,CAAC;AAwBH,SAAO,MAAM,uBAAuB,MAAM;AAC5C;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function prefixFrac(needle: string, candidate: string, qLen: number): number;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { longestCommonPrefix } from "../utils.js";
|
|
2
|
+
function prefixFrac(needle, candidate, qLen) {
|
|
3
|
+
if (qLen === 0) {
|
|
4
|
+
return 0;
|
|
5
|
+
}
|
|
6
|
+
const lcp = longestCommonPrefix(needle, candidate);
|
|
7
|
+
return lcp / qLen;
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
prefixFrac
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=prefixFrac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefixFrac.js","sources":["../../../../../src/modules/fuzzyMatchLogic/features/prefixFrac.ts"],"sourcesContent":["import { longestCommonPrefix } from '../utils'\n\nexport function prefixFrac(\n needle: string,\n candidate: string,\n qLen: number,\n): number {\n if (qLen === 0) {\n return 0\n }\n const lcp = longestCommonPrefix(needle, candidate)\n return lcp / qLen\n}\n"],"names":[],"mappings":";AAEO,SAAS,WACd,QACA,WACA,MACQ;AACR,MAAI,SAAS,GAAG;AACd,WAAO;AAAA,EACT;AACA,QAAM,MAAM,oBAAoB,QAAQ,SAAS;AACjD,SAAO,MAAM;AACf;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { prefixFrac } from "./features/prefixFrac.js";
|
|
2
|
+
const W = {
|
|
3
|
+
prefixFrac: 1.3
|
|
4
|
+
};
|
|
5
|
+
function score(raw, needle) {
|
|
6
|
+
const qLen = needle.length;
|
|
7
|
+
const scored = raw.map(({ entry }) => {
|
|
8
|
+
const label = entry.displayName;
|
|
9
|
+
const norm = label;
|
|
10
|
+
const pf = prefixFrac(needle, norm, qLen);
|
|
11
|
+
let scoreValue = 0;
|
|
12
|
+
scoreValue += W.prefixFrac * pf;
|
|
13
|
+
return { entry, score: scoreValue };
|
|
14
|
+
});
|
|
15
|
+
scored.sort(
|
|
16
|
+
(a, b) => b.score - a.score || a.entry.displayName.localeCompare(b.entry.displayName)
|
|
17
|
+
);
|
|
18
|
+
return scored;
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
score
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.js","sources":["../../../../src/modules/fuzzyMatchLogic/scoring.ts"],"sourcesContent":["import { prefixFrac } from './features/prefixFrac'\nimport type {\n FuzzySearchPreliminaryResult,\n FuzzySearchReturnItem,\n} from './types'\n\nconst W = {\n prefixFrac: 1.3,\n prefixFracTokenMiddles: 0.1,\n}\n\nexport function score(\n raw: Array<FuzzySearchPreliminaryResult>,\n needle: string,\n): Array<FuzzySearchReturnItem> {\n const qLen = needle.length\n\n const scored = raw.map(({ entry }) => {\n const label = entry.displayName\n const norm = label\n\n const pf = prefixFrac(needle, norm, qLen)\n // const pfTokens = prefixFracTokenMiddles(entry, foundTokens)\n\n // const tc = tokenCoverage(qTokens, norm);\n // const pb = positionBonus(q, norm, W.positionDecayAlpha);\n\n let scoreValue = 0\n scoreValue += W.prefixFrac * pf\n\n return { entry, score: scoreValue }\n })\n\n // stable sort by score desc, then by displayName\n scored.sort(\n (a, b) =>\n b.score - a.score ||\n a.entry.displayName.localeCompare(b.entry.displayName),\n )\n\n return scored\n}\n"],"names":[],"mappings":";AAMA,MAAM,IAAI;AAAA,EACR,YAAY;AAEd;AAEO,SAAS,MACd,KACA,QAC8B;AAC9B,QAAM,OAAO,OAAO;AAEpB,QAAM,SAAS,IAAI,IAAI,CAAC,EAAE,YAAY;AACpC,UAAM,QAAQ,MAAM;AACpB,UAAM,OAAO;AAEb,UAAM,KAAK,WAAW,QAAQ,MAAM,IAAI;AAMxC,QAAI,aAAa;AACjB,kBAAc,EAAE,aAAa;AAE7B,WAAO,EAAE,OAAO,OAAO,WAAA;AAAA,EACzB,CAAC;AAGD,SAAO;AAAA,IACL,CAAC,GAAG,MACF,EAAE,QAAQ,EAAE,SACZ,EAAE,MAAM,YAAY,cAAc,EAAE,MAAM,WAAW;AAAA,EAAA;AAGzD,SAAO;AACT;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Index } from 'flexsearch';
|
|
2
|
+
export interface FuzzySearchInputEntry {
|
|
3
|
+
slug: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
}
|
|
6
|
+
export interface FuzzySearchContext {
|
|
7
|
+
index: FuzzySearchIndex;
|
|
8
|
+
}
|
|
9
|
+
export interface FuzzySearchIndex {
|
|
10
|
+
flexIndex: Index;
|
|
11
|
+
entries: Array<FuzzySearchInputEntry>;
|
|
12
|
+
}
|
|
13
|
+
export interface FuzzySearchIndexEntry {
|
|
14
|
+
inputEntry: FuzzySearchInputEntry;
|
|
15
|
+
tokens: Array<string>;
|
|
16
|
+
}
|
|
17
|
+
export interface FuzzySearchPrepareIndexParams {
|
|
18
|
+
entries: Array<FuzzySearchInputEntry>;
|
|
19
|
+
}
|
|
20
|
+
export interface FuzzySearchPreliminaryResult {
|
|
21
|
+
entry: FuzzySearchInputEntry;
|
|
22
|
+
}
|
|
23
|
+
export interface FuzzySearchReturnItem {
|
|
24
|
+
entry: FuzzySearchInputEntry;
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../src/modules/fuzzyMatchLogic/utils.ts"],"sourcesContent":["export function normalize(x: string): string {\n // lower, NFKD, strip combining marks (accents), collapse spaces\n return x\n .toLowerCase()\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/\\s+/g, ' ')\n .trim()\n}\n\nexport function longestCommonPrefix(a: string, b: string): number {\n const n = Math.min(a.length, b.length)\n let i = 0\n while (i < n && a.charCodeAt(i) === b.charCodeAt(i)) {\n i++\n }\n return i\n}\n"],"names":[],"mappings":"AAUO,SAAS,oBAAoB,GAAW,GAAmB;AAChE,QAAM,IAAI,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM;AACrC,MAAI,IAAI;AACR,SAAO,IAAI,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG;AACnD;AAAA,EACF;AACA,SAAO;AACT;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { PluginPageUrlAutocompleteItem } from '~/plugins/builtin/pageUrl/pageUrlTypes';
|
|
3
|
+
import { PartialRecord } from '~/types/utilityTypes';
|
|
4
|
+
import { ResourceJumpItem } from '../resourceJump/types.js';
|
|
5
|
+
import { PluginInterfaceForCore } from './makePluginManagerContext.js';
|
|
6
|
+
import { EhPlugin, EhPluginResouceJumpFactoryCtx, PluginName } from './types.js';
|
|
7
|
+
export interface PluginManagerContextIface {
|
|
8
|
+
plugins: Array<EhPlugin>;
|
|
9
|
+
interfaceForPlugins: PartialRecord<PluginName, PluginManagerInterfaceForPlugins>;
|
|
10
|
+
resouceJumpItems: PartialRecord<PluginName, Array<ResourceJumpItem>>;
|
|
11
|
+
autocompleteFactoryItems: (ctx: EhPluginResouceJumpFactoryCtx) => Array<PluginPageUrlAutocompleteItem>;
|
|
12
|
+
}
|
|
13
|
+
export interface PluginManagerInterfaceForPlugins {
|
|
14
|
+
setResouceJumps: (items: Array<ResourceJumpItem>) => void;
|
|
15
|
+
}
|
|
16
|
+
interface PluginManagerProviderProps {
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
plugins: Array<EhPlugin>;
|
|
19
|
+
pluginInterfaceForCore: PluginInterfaceForCore;
|
|
20
|
+
}
|
|
21
|
+
export declare function PluginManagerContextProvider({ children, plugins, }: PluginManagerProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function usePluginManager(): PluginManagerContextIface;
|
|
23
|
+
export declare function usePluginManagerForPlugin(pluginName: PluginName): PluginManagerInterfaceForPlugins;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { objectify } from "radashi";
|
|
3
|
+
import { useState, useCallback, useMemo, createContext, use } from "react";
|
|
4
|
+
import { isEhPluginResourceJumpable } from "./types.js";
|
|
5
|
+
const PluginManagerContext = createContext(void 0);
|
|
6
|
+
function PluginManagerContextProvider({
|
|
7
|
+
children,
|
|
8
|
+
plugins
|
|
9
|
+
}) {
|
|
10
|
+
const [resouceJumpItems, setResouceJumpsItems] = useState({});
|
|
11
|
+
const autocompleteFactoryItems = useCallback(
|
|
12
|
+
(ctx) => {
|
|
13
|
+
return plugins.filter((p) => isEhPluginResourceJumpable(p)).flatMap((plugin) => plugin.factoryPageJumpAutocompleteItems(ctx));
|
|
14
|
+
},
|
|
15
|
+
[plugins]
|
|
16
|
+
);
|
|
17
|
+
const value = useMemo(() => {
|
|
18
|
+
return {
|
|
19
|
+
plugins,
|
|
20
|
+
interfaceForPlugins: objectify(
|
|
21
|
+
plugins.map((p) => p.name),
|
|
22
|
+
(pluginName) => pluginName,
|
|
23
|
+
(pluginName) => ({
|
|
24
|
+
setResouceJumps: (items) => {
|
|
25
|
+
setResouceJumpsItems((old) => ({
|
|
26
|
+
...old,
|
|
27
|
+
...{ [pluginName]: items }
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
),
|
|
32
|
+
autocompleteFactoryItems,
|
|
33
|
+
resouceJumpItems
|
|
34
|
+
};
|
|
35
|
+
}, [autocompleteFactoryItems, plugins, resouceJumpItems]);
|
|
36
|
+
return /* @__PURE__ */ jsx(PluginManagerContext, { value, children });
|
|
37
|
+
}
|
|
38
|
+
function usePluginManager() {
|
|
39
|
+
const context = use(PluginManagerContext);
|
|
40
|
+
if (context === void 0) {
|
|
41
|
+
throw new Error(
|
|
42
|
+
"usePluginManager must be used within an PluginManagerContextProvider"
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
return context;
|
|
46
|
+
}
|
|
47
|
+
function usePluginManagerForPlugin(pluginName) {
|
|
48
|
+
const context = usePluginManager();
|
|
49
|
+
const interfaceForPlugins = context.interfaceForPlugins[pluginName];
|
|
50
|
+
if (interfaceForPlugins === void 0) {
|
|
51
|
+
throw new Error(
|
|
52
|
+
`usePluginManagerForPlugin("${pluginName}") is not initialized.`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
return interfaceForPlugins;
|
|
56
|
+
}
|
|
57
|
+
export {
|
|
58
|
+
PluginManagerContextProvider,
|
|
59
|
+
usePluginManager,
|
|
60
|
+
usePluginManagerForPlugin
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=PluginManagerContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginManagerContext.js","sources":["../../../../src/modules/pluginCore/PluginManagerContext.tsx"],"sourcesContent":["import { objectify } from 'radashi'\nimport { createContext, use, useCallback, useMemo, useState } from 'react'\nimport { isEhPluginResourceJumpable } from './types'\nimport type { ReactNode } from 'react'\nimport type { PluginPageUrlAutocompleteItem } from '~/plugins/builtin/pageUrl/pageUrlTypes'\nimport type { PartialRecord } from '~/types/utilityTypes'\nimport type { ResourceJumpItem } from '../resourceJump/types'\nimport type { PluginInterfaceForCore } from './makePluginManagerContext'\nimport type {\n EhPlugin,\n EhPluginResouceJumpFactoryCtx,\n PluginName,\n} from './types'\n\nexport interface PluginManagerContextIface {\n plugins: Array<EhPlugin>\n interfaceForPlugins: PartialRecord<\n PluginName,\n PluginManagerInterfaceForPlugins\n >\n resouceJumpItems: PartialRecord<PluginName, Array<ResourceJumpItem>>\n autocompleteFactoryItems: (\n ctx: EhPluginResouceJumpFactoryCtx,\n ) => Array<PluginPageUrlAutocompleteItem>\n}\n\nexport interface PluginManagerInterfaceForPlugins {\n setResouceJumps: (items: Array<ResourceJumpItem>) => void\n}\n\nconst PluginManagerContext = createContext<\n PluginManagerContextIface | undefined\n>(undefined)\n\ninterface PluginManagerProviderProps {\n children: ReactNode\n plugins: Array<EhPlugin>\n pluginInterfaceForCore: PluginInterfaceForCore\n}\n\nexport function PluginManagerContextProvider({\n children,\n plugins,\n}: PluginManagerProviderProps) {\n const [resouceJumpItems, setResouceJumpsItems] = useState<\n PartialRecord<PluginName, Array<ResourceJumpItem>>\n >({})\n\n const autocompleteFactoryItems = useCallback(\n (\n ctx: EhPluginResouceJumpFactoryCtx,\n ): Array<PluginPageUrlAutocompleteItem> => {\n return plugins\n .filter((p) => isEhPluginResourceJumpable(p))\n .flatMap((plugin) => plugin.factoryPageJumpAutocompleteItems(ctx))\n },\n [plugins],\n )\n\n const value: PluginManagerContextIface = useMemo(() => {\n return {\n plugins,\n interfaceForPlugins: objectify(\n plugins.map((p) => p.name),\n (pluginName) => pluginName,\n (pluginName) => ({\n setResouceJumps: (items: Array<ResourceJumpItem>) => {\n setResouceJumpsItems((old) => ({\n ...old,\n ...{ [pluginName]: items },\n }))\n },\n }),\n ),\n autocompleteFactoryItems,\n resouceJumpItems,\n }\n }, [autocompleteFactoryItems, plugins, resouceJumpItems])\n\n return <PluginManagerContext value={value}>{children}</PluginManagerContext>\n}\n\nexport function usePluginManager(): PluginManagerContextIface {\n const context = use(PluginManagerContext)\n if (context === undefined) {\n throw new Error(\n 'usePluginManager must be used within an PluginManagerContextProvider',\n )\n }\n return context\n}\n\nexport function usePluginManagerForPlugin(\n pluginName: PluginName,\n): PluginManagerInterfaceForPlugins {\n const context = usePluginManager()\n\n const interfaceForPlugins = context.interfaceForPlugins[pluginName]\n\n if (interfaceForPlugins === undefined) {\n throw new Error(\n `usePluginManagerForPlugin(\"${pluginName}\") is not initialized.`,\n )\n }\n\n return interfaceForPlugins\n}\n"],"names":[],"mappings":";;;;AA8BA,MAAM,uBAAuB,cAE3B,MAAS;AAQJ,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,CAAC,kBAAkB,oBAAoB,IAAI,SAE/C,CAAA,CAAE;AAEJ,QAAM,2BAA2B;AAAA,IAC/B,CACE,QACyC;AACzC,aAAO,QACJ,OAAO,CAAC,MAAM,2BAA2B,CAAC,CAAC,EAC3C,QAAQ,CAAC,WAAW,OAAO,iCAAiC,GAAG,CAAC;AAAA,IACrE;AAAA,IACA,CAAC,OAAO;AAAA,EAAA;AAGV,QAAM,QAAmC,QAAQ,MAAM;AACrD,WAAO;AAAA,MACL;AAAA,MACA,qBAAqB;AAAA,QACnB,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,QACzB,CAAC,eAAe;AAAA,QAChB,CAAC,gBAAgB;AAAA,UACf,iBAAiB,CAAC,UAAmC;AACnD,iCAAqB,CAAC,SAAS;AAAA,cAC7B,GAAG;AAAA,cACH,GAAG,EAAE,CAAC,UAAU,GAAG,MAAA;AAAA,YAAM,EACzB;AAAA,UACJ;AAAA,QAAA;AAAA,MACF;AAAA,MAEF;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ,GAAG,CAAC,0BAA0B,SAAS,gBAAgB,CAAC;AAExD,SAAO,oBAAC,sBAAA,EAAqB,OAAe,SAAA,CAAS;AACvD;AAEO,SAAS,mBAA8C;AAC5D,QAAM,UAAU,IAAI,oBAAoB;AACxC,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAAA,EAEJ;AACA,SAAO;AACT;AAEO,SAAS,0BACd,YACkC;AAClC,QAAM,UAAU,iBAAA;AAEhB,QAAM,sBAAsB,QAAQ,oBAAoB,UAAU;AAElE,MAAI,wBAAwB,QAAW;AACrC,UAAM,IAAI;AAAA,MACR,8BAA8B,UAAU;AAAA,IAAA;AAAA,EAE5C;AAEA,SAAO;AACT;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EhPlugin } from './types.js';
|
|
2
|
+
import { BootstrapConfigData } from '@env-hopper/backend-core';
|
|
3
|
+
import { ResourceJumpItem } from '../resourceJump/types.js';
|
|
4
|
+
export interface PluginInterfaceForCore {
|
|
5
|
+
getResourceJumpsItems: (config: BootstrapConfigData) => Promise<Record<string, ResourceJumpItem>>;
|
|
6
|
+
}
|
|
7
|
+
export declare function makePluginInterfaceForCore(plugins: Array<EhPlugin>): PluginInterfaceForCore;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { objectify } from "radashi";
|
|
2
|
+
import { isEhPluginResourceJumpable } from "./types.js";
|
|
3
|
+
function makePluginInterfaceForCore(plugins) {
|
|
4
|
+
return {
|
|
5
|
+
getResourceJumpsItems: async (bootstrapConfig) => {
|
|
6
|
+
const items = await Promise.all(
|
|
7
|
+
plugins.map((plugin) => {
|
|
8
|
+
if (isEhPluginResourceJumpable(plugin)) {
|
|
9
|
+
return plugin.factoryPageJumpAutocompleteItems({
|
|
10
|
+
bootstrapConfig
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
return [];
|
|
14
|
+
})
|
|
15
|
+
);
|
|
16
|
+
return objectify(
|
|
17
|
+
items.flat(),
|
|
18
|
+
(item) => item.slug,
|
|
19
|
+
(item) => item
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
makePluginInterfaceForCore
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=makePluginManagerContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makePluginManagerContext.js","sources":["../../../../src/modules/pluginCore/makePluginManagerContext.ts"],"sourcesContent":["import { objectify } from 'radashi'\nimport { isEhPluginResourceJumpable } from './types'\nimport type { EhPlugin } from './types'\nimport type { BootstrapConfigData } from '@env-hopper/backend-core'\nimport type { ResourceJumpItem } from '../resourceJump/types'\n\nexport interface PluginInterfaceForCore {\n getResourceJumpsItems: (\n config: BootstrapConfigData,\n ) => Promise<Record<string, ResourceJumpItem>>\n}\n\nexport function makePluginInterfaceForCore(\n plugins: Array<EhPlugin>,\n): PluginInterfaceForCore {\n return {\n getResourceJumpsItems: async (bootstrapConfig: BootstrapConfigData) => {\n const items = await Promise.all(\n plugins.map((plugin) => {\n if (isEhPluginResourceJumpable(plugin)) {\n return plugin.factoryPageJumpAutocompleteItems({\n bootstrapConfig,\n })\n }\n return []\n }),\n )\n return objectify(\n items.flat(),\n (item) => item.slug,\n (item) => item,\n )\n },\n }\n}\n"],"names":[],"mappings":";;AAYO,SAAS,2BACd,SACwB;AACxB,SAAO;AAAA,IACL,uBAAuB,OAAO,oBAAyC;AACrE,YAAM,QAAQ,MAAM,QAAQ;AAAA,QAC1B,QAAQ,IAAI,CAAC,WAAW;AACtB,cAAI,2BAA2B,MAAM,GAAG;AACtC,mBAAO,OAAO,iCAAiC;AAAA,cAC7C;AAAA,YAAA,CACD;AAAA,UACH;AACA,iBAAO,CAAA;AAAA,QACT,CAAC;AAAA,MAAA;AAEH,aAAO;AAAA,QACL,MAAM,KAAA;AAAA,QACN,CAAC,SAAS,KAAK;AAAA,QACf,CAAC,SAAS;AAAA,MAAA;AAAA,IAEd;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BootstrapConfigData, EhEnvIndexed } from '@env-hopper/backend-core';
|
|
2
|
+
import { PluginPageUrlAutocompleteItem } from '~/plugins/builtin/pageUrl/pageUrlTypes';
|
|
3
|
+
export interface PluginAsyncData<T> {
|
|
4
|
+
pluginName: string;
|
|
5
|
+
data: T;
|
|
6
|
+
isLoaded: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface EhPluginResourceJumpable extends EhPlugin {
|
|
9
|
+
factoryPageJumpAutocompleteItems: (ctx: EhPluginResouceJumpFactoryCtx) => Array<PluginPageUrlAutocompleteItem>;
|
|
10
|
+
}
|
|
11
|
+
export interface EhPlugin {
|
|
12
|
+
name: PluginName;
|
|
13
|
+
}
|
|
14
|
+
export declare function isEhPluginResourceJumpable(plugin: EhPlugin): plugin is EhPluginResourceJumpable;
|
|
15
|
+
export interface BaseAppAutoCompletableParent {
|
|
16
|
+
type: string;
|
|
17
|
+
displayName: string;
|
|
18
|
+
hasSingleChild: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface BaseAutoCompletableItem {
|
|
21
|
+
type: string;
|
|
22
|
+
slug: string;
|
|
23
|
+
parent?: BaseAppAutoCompletableParent;
|
|
24
|
+
}
|
|
25
|
+
export interface BaseAutoCompleteItemRender {
|
|
26
|
+
displayName: string;
|
|
27
|
+
parentDisplayName?: string;
|
|
28
|
+
isDefaultGroupItem?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface EhPluginResouceJumpFactoryCtx {
|
|
31
|
+
bootstrapConfig: BootstrapConfigData;
|
|
32
|
+
}
|
|
33
|
+
export interface EhPluginResouceJumpCtx {
|
|
34
|
+
env: EhEnvIndexed | undefined;
|
|
35
|
+
}
|
|
36
|
+
export type PluginName = string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../src/modules/pluginCore/types.ts"],"sourcesContent":["import type {\n BootstrapConfigData,\n EhEnvIndexed,\n} from '@env-hopper/backend-core'\nimport type { PluginPageUrlAutocompleteItem } from '~/plugins/builtin/pageUrl/pageUrlTypes'\n\nexport interface PluginAsyncData<T> {\n pluginName: string\n data: T\n isLoaded: boolean\n}\n\nexport interface EhPluginResourceJumpable extends EhPlugin {\n factoryPageJumpAutocompleteItems: (\n ctx: EhPluginResouceJumpFactoryCtx,\n ) => Array<PluginPageUrlAutocompleteItem>\n}\n\nexport interface EhPlugin {\n name: PluginName\n // populatePageJumpItems(): Promise<ResouceJumpItem[]>\n}\n\nexport function isEhPluginResourceJumpable(\n plugin: EhPlugin,\n): plugin is EhPluginResourceJumpable {\n return 'factoryPageJumpAutocompleteItems' in plugin\n}\nexport interface BaseAppAutoCompletableParent {\n type: string\n displayName: string\n hasSingleChild: boolean\n}\nexport interface BaseAutoCompletableItem {\n type: string\n slug: string\n parent?: BaseAppAutoCompletableParent\n}\n\nexport interface BaseAutoCompleteItemRender {\n displayName: string\n parentDisplayName?: string\n isDefaultGroupItem?: boolean\n}\n\nexport interface EhPluginResouceJumpFactoryCtx {\n bootstrapConfig: BootstrapConfigData\n}\n\nexport interface EhPluginResouceJumpCtx {\n env: EhEnvIndexed | undefined\n}\n\nexport type PluginName = string\n"],"names":[],"mappings":"AAuBO,SAAS,2BACd,QACoC;AACpC,SAAO,sCAAsC;AAC/C;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AvailiabilityMatrixData, RenameRule, RenameRuleParams, ResourceJumpsData } from '@env-hopper/backend-core';
|
|
2
|
+
export declare class ApiQueryMagazineResouceJump {
|
|
3
|
+
static getNameMigration(params: RenameRuleParams): import('@tanstack/react-query').OmitKeyof<import('@tanstack/react-query').UseQueryOptions<false | RenameRule, Error, false | RenameRule, readonly unknown[]>, "queryFn"> & {
|
|
4
|
+
queryFn?: import('@tanstack/react-query').QueryFunction<false | RenameRule, readonly unknown[], never> | undefined;
|
|
5
|
+
} & {
|
|
6
|
+
queryKey: readonly unknown[] & {
|
|
7
|
+
[dataTagSymbol]: false | RenameRule;
|
|
8
|
+
[dataTagErrorSymbol]: Error;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
static getAvailabilityMatrix(): import('@tanstack/react-query').OmitKeyof<import('@tanstack/react-query').UseQueryOptions<AvailiabilityMatrixData, Error, AvailiabilityMatrixData, readonly unknown[]>, "queryFn"> & {
|
|
12
|
+
queryFn?: import('@tanstack/react-query').QueryFunction<AvailiabilityMatrixData, readonly unknown[], never> | undefined;
|
|
13
|
+
} & {
|
|
14
|
+
queryKey: readonly unknown[] & {
|
|
15
|
+
[dataTagSymbol]: AvailiabilityMatrixData;
|
|
16
|
+
[dataTagErrorSymbol]: Error;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
static getResourceJumps(): import('@tanstack/react-query').OmitKeyof<import('@tanstack/react-query').UseQueryOptions<ResourceJumpsData, Error, ResourceJumpsData, readonly unknown[]>, "queryFn"> & {
|
|
20
|
+
queryFn?: import('@tanstack/react-query').QueryFunction<ResourceJumpsData, readonly unknown[], never> | undefined;
|
|
21
|
+
} & {
|
|
22
|
+
queryKey: readonly unknown[] & {
|
|
23
|
+
[dataTagSymbol]: ResourceJumpsData;
|
|
24
|
+
[dataTagErrorSymbol]: Error;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}
|