@igstack/app-catalog-frontend-core 0.0.1
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/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__/setupTests.d.ts +0 -0
- package/dist/esm/api/infra/createQueryClient.d.ts +9 -0
- package/dist/esm/api/infra/createQueryClient.js +25 -0
- package/dist/esm/api/infra/createQueryClient.js.map +1 -0
- package/dist/esm/api/infra/trpc.d.ts +1624 -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/appCatalogFetcher.d.ts +10 -0
- package/dist/esm/api/unsorted/appCatalogFetcher.js +18 -0
- package/dist/esm/api/unsorted/appCatalogFetcher.js.map +1 -0
- package/dist/esm/api/unsorted/createCachingFetcher.d.ts +23 -0
- package/dist/esm/api/unsorted/createCachingFetcher.js +93 -0
- package/dist/esm/api/unsorted/createCachingFetcher.js.map +1 -0
- package/dist/esm/appPropsFactory.d.ts +2 -0
- package/dist/esm/appPropsFactory.js +34 -0
- package/dist/esm/appPropsFactory.js.map +1 -0
- package/dist/esm/assets/app-catalog.svg.js +6 -0
- package/dist/esm/assets/app-catalog.svg.js.map +1 -0
- package/dist/esm/components/IconPickerDialog.d.ts +8 -0
- package/dist/esm/components/IconPickerDialog.js +98 -0
- package/dist/esm/components/IconPickerDialog.js.map +1 -0
- package/dist/esm/components/IconPickerField.d.ts +9 -0
- package/dist/esm/components/IconPickerField.js +76 -0
- package/dist/esm/components/IconPickerField.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/errors/AuthorizationError.d.ts +19 -0
- package/dist/esm/errors/AuthorizationError.js +20 -0
- package/dist/esm/errors/AuthorizationError.js.map +1 -0
- package/dist/esm/errors/index.d.ts +1 -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/admin-base/components/AdminChat.d.ts +1 -0
- package/dist/esm/modules/admin-base/components/AdminChat.js +82 -0
- package/dist/esm/modules/admin-base/components/AdminChat.js.map +1 -0
- package/dist/esm/modules/admin-base/components/AdminLayout.d.ts +5 -0
- package/dist/esm/modules/admin-base/components/AdminLayout.js +83 -0
- package/dist/esm/modules/admin-base/components/AdminLayout.js.map +1 -0
- package/dist/esm/modules/admin-base/components/AdminWelcome.d.ts +1 -0
- package/dist/esm/modules/admin-base/components/AdminWelcome.js +37 -0
- package/dist/esm/modules/admin-base/components/AdminWelcome.js.map +1 -0
- package/dist/esm/modules/admin-base/context/AdminConfigContext.d.ts +8 -0
- package/dist/esm/modules/admin-base/context/AdminConfigContext.js +27 -0
- package/dist/esm/modules/admin-base/context/AdminConfigContext.js.map +1 -0
- package/dist/esm/modules/admin-base/index.d.ts +5 -0
- package/dist/esm/modules/admin-base/types/adminTypes.d.ts +10 -0
- package/dist/esm/modules/appCatalog/AppCatalogAdminPage.d.ts +1 -0
- package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js +196 -0
- package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js.map +1 -0
- package/dist/esm/modules/appCatalog/ScreenshotItem.d.ts +7 -0
- package/dist/esm/modules/appCatalog/ScreenshotItem.js +57 -0
- package/dist/esm/modules/appCatalog/ScreenshotItem.js.map +1 -0
- package/dist/esm/modules/appCatalog/ScreenshotManager.d.ts +15 -0
- package/dist/esm/modules/appCatalog/ScreenshotManager.js +155 -0
- package/dist/esm/modules/appCatalog/ScreenshotManager.js.map +1 -0
- package/dist/esm/modules/appCatalog/api/ApiQueryMagazineAppCatalog.d.ts +11 -0
- package/dist/esm/modules/appCatalog/api/ApiQueryMagazineAppCatalog.js +14 -0
- package/dist/esm/modules/appCatalog/api/ApiQueryMagazineAppCatalog.js.map +1 -0
- package/dist/esm/modules/appCatalog/catalogRouteLoader.d.ts +5 -0
- package/dist/esm/modules/appCatalog/catalogRouteLoader.js +20 -0
- package/dist/esm/modules/appCatalog/catalogRouteLoader.js.map +1 -0
- package/dist/esm/modules/appCatalog/context/AppCatalogContext.d.ts +15 -0
- package/dist/esm/modules/appCatalog/context/AppCatalogContext.js +47 -0
- package/dist/esm/modules/appCatalog/context/AppCatalogContext.js.map +1 -0
- package/dist/esm/modules/appCatalog/index.d.ts +10 -0
- package/dist/esm/modules/appCatalog/routeLoader.d.ts +3 -0
- package/dist/esm/modules/appCatalog/routeLoader.js +7 -0
- package/dist/esm/modules/appCatalog/routeLoader.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/components/AccessRequestSection.d.ts +7 -0
- package/dist/esm/modules/appCatalog/ui/components/AccessRequestSection.js +257 -0
- package/dist/esm/modules/appCatalog/ui/components/AccessRequestSection.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/components/AppDetailModal.d.ts +7 -0
- package/dist/esm/modules/appCatalog/ui/components/ApproverDisplay.d.ts +30 -0
- package/dist/esm/modules/appCatalog/ui/components/GroupingColumn.d.ts +11 -0
- package/dist/esm/modules/appCatalog/ui/components/GroupingTabs.d.ts +7 -0
- package/dist/esm/modules/appCatalog/ui/components/ScreenshotGallery.d.ts +10 -0
- package/dist/esm/modules/appCatalog/ui/components/ScreenshotGallery.js +35 -0
- package/dist/esm/modules/appCatalog/ui/components/ScreenshotGallery.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/grid/AppCatalogFiltersCard.d.ts +9 -0
- package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.d.ts +8 -0
- package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js +325 -0
- package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/grid/AppCatalogTable.d.ts +5 -0
- package/dist/esm/modules/appCatalog/ui/grid/appCatalogUtils.d.ts +2 -0
- package/dist/esm/modules/appCatalog/ui/hooks/useKeyboardNavigation.d.ts +10 -0
- package/dist/esm/modules/appCatalog/ui/hooks/useKeyboardNavigation.js +36 -0
- package/dist/esm/modules/appCatalog/ui/hooks/useKeyboardNavigation.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/layout/AppCatalogLayout.d.ts +9 -0
- package/dist/esm/modules/appCatalog/ui/layout/AppCatalogLayout.js +28 -0
- package/dist/esm/modules/appCatalog/ui/layout/AppCatalogLayout.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.d.ts +1 -0
- package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js +112 -0
- package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js.map +1 -0
- package/dist/esm/modules/approvalMethod/AccessRequestFormFields.d.ts +7 -0
- package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js +323 -0
- package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js.map +1 -0
- package/dist/esm/modules/approvalMethod/ApprovalMethodForm.d.ts +14 -0
- package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js +227 -0
- package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js.map +1 -0
- package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.d.ts +7 -0
- package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js +124 -0
- package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js.map +1 -0
- package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.d.ts +381 -0
- package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js +26 -0
- package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js.map +1 -0
- package/dist/esm/modules/auth/AuthContext.d.ts +38 -0
- package/dist/esm/modules/auth/AuthContext.js +88 -0
- package/dist/esm/modules/auth/AuthContext.js.map +1 -0
- package/dist/esm/modules/auth/AuthModalContext.d.ts +19 -0
- package/dist/esm/modules/auth/AuthModalContext.js +33 -0
- package/dist/esm/modules/auth/AuthModalContext.js.map +1 -0
- package/dist/esm/modules/auth/ProtectedContent.d.ts +19 -0
- package/dist/esm/modules/auth/authClient.d.ts +704 -0
- package/dist/esm/modules/auth/authClient.js +8 -0
- package/dist/esm/modules/auth/authClient.js.map +1 -0
- package/dist/esm/modules/auth/authUtils.d.ts +6 -0
- package/dist/esm/modules/auth/authUtils.js +25 -0
- package/dist/esm/modules/auth/authUtils.js.map +1 -0
- package/dist/esm/modules/auth/index.d.ts +5 -0
- package/dist/esm/modules/auth/ui/LoginModal.d.ts +6 -0
- package/dist/esm/modules/auth/ui/LoginModal.js +22 -0
- package/dist/esm/modules/auth/ui/LoginModal.js.map +1 -0
- package/dist/esm/modules/auth/ui/LoginPage.d.ts +5 -0
- package/dist/esm/modules/auth/ui/LoginPage.js +50 -0
- package/dist/esm/modules/auth/ui/LoginPage.js.map +1 -0
- package/dist/esm/modules/auth/useAuthActions.d.ts +17 -0
- package/dist/esm/modules/auth/useAuthActions.js +62 -0
- package/dist/esm/modules/auth/useAuthActions.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/config/HealthStateContext.d.ts +16 -0
- package/dist/esm/modules/gallery/Gallery.d.ts +12 -0
- package/dist/esm/modules/gallery/Gallery.js +246 -0
- package/dist/esm/modules/gallery/Gallery.js.map +1 -0
- package/dist/esm/modules/icons/IconManagementPage.d.ts +1 -0
- package/dist/esm/modules/icons/IconManagementPage.js +177 -0
- package/dist/esm/modules/icons/IconManagementPage.js.map +1 -0
- package/dist/esm/modules/pluginCore/PluginManagerContext.d.ts +19 -0
- package/dist/esm/modules/pluginCore/PluginManagerContext.js +29 -0
- package/dist/esm/modules/pluginCore/PluginManagerContext.js.map +1 -0
- package/dist/esm/modules/pluginCore/makePluginManagerContext.d.ts +4 -0
- package/dist/esm/modules/pluginCore/makePluginManagerContext.js +9 -0
- package/dist/esm/modules/pluginCore/makePluginManagerContext.js.map +1 -0
- package/dist/esm/modules/pluginCore/types.d.ts +24 -0
- package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.2/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +60 -0
- package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.2/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2/node_modules/@dnd-kit/core/dist/core.esm.js +3055 -0
- package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2/node_modules/@dnd-kit/core/dist/core.esm.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2__react@19.1.2/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +593 -0
- package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2__react@19.1.2/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.2/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +302 -0
- package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.2/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/dist/resolvers.js +34 -0
- package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/dist/resolvers.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/zod/dist/zod.js +94 -0
- package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/zod/dist/zod.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_react-router-devtools@1.151.6_@tanstack_react-router@1.151.6_react-dom@19.1.2_20b78d099e847743bc64b4d051c71d30/node_modules/@tanstack/react-router-devtools/dist/esm/TanStackRouterDevtools.js +72 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_react-router-devtools@1.151.6_@tanstack_react-router@1.151.6_react-dom@19.1.2_20b78d099e847743bc64b4d051c71d30/node_modules/@tanstack/react-router-devtools/dist/esm/TanStackRouterDevtools.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_react-router-devtools@1.151.6_@tanstack_react-router@1.151.6_react-dom@19.1.2_20b78d099e847743bc64b4d051c71d30/node_modules/@tanstack/react-router-devtools/dist/esm/TanStackRouterDevtoolsPanel.js +44 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_react-router-devtools@1.151.6_@tanstack_react-router@1.151.6_react-dom@19.1.2_20b78d099e847743bc64b4d051c71d30/node_modules/@tanstack/react-router-devtools/dist/esm/TanStackRouterDevtoolsPanel.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_react-router-devtools@1.151.6_@tanstack_react-router@1.151.6_react-dom@19.1.2_20b78d099e847743bc64b4d051c71d30/node_modules/@tanstack/react-router-devtools/dist/esm/index.js +12 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_react-router-devtools@1.151.6_@tanstack_react-router@1.151.6_react-dom@19.1.2_20b78d099e847743bc64b4d051c71d30/node_modules/@tanstack/react-router-devtools/dist/esm/index.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-core@1.151.6/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.js +95 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-core@1.151.6/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-core@1.151.6/node_modules/@tanstack/router-core/dist/esm/path.js +107 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-core@1.151.6/node_modules/@tanstack/router-core/dist/esm/path.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-core@1.151.6/node_modules/@tanstack/router-core/dist/esm/root.js +5 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-core@1.151.6/node_modules/@tanstack/router-core/dist/esm/root.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-devtools-core@1.151.6_@tanstack_router-core@1.151.6_csstype@3.2.3/node_modules/@tanstack/router-devtools-core/dist/BaseTanStackRouterDevtoolsPanel-DxaCaP75.js +1963 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-devtools-core@1.151.6_@tanstack_router-core@1.151.6_csstype@3.2.3/node_modules/@tanstack/router-devtools-core/dist/BaseTanStackRouterDevtoolsPanel-DxaCaP75.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-devtools-core@1.151.6_@tanstack_router-core@1.151.6_csstype@3.2.3/node_modules/@tanstack/router-devtools-core/dist/FloatingTanStackRouterDevtools-CaypUmOS.js +284 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-devtools-core@1.151.6_@tanstack_router-core@1.151.6_csstype@3.2.3/node_modules/@tanstack/router-devtools-core/dist/FloatingTanStackRouterDevtools-CaypUmOS.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-devtools-core@1.151.6_@tanstack_router-core@1.151.6_csstype@3.2.3/node_modules/@tanstack/router-devtools-core/dist/index-5jfj03XJ.js +1855 -0
- package/dist/esm/node_modules/.pnpm/@tanstack_router-devtools-core@1.151.6_@tanstack_router-core@1.151.6_csstype@3.2.3/node_modules/@tanstack/router-devtools-core/dist/index-5jfj03XJ.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/goober@2.1.18_csstype@3.2.3/node_modules/goober/dist/goober.modern.js +56 -0
- package/dist/esm/node_modules/.pnpm/goober@2.1.18_csstype@3.2.3/node_modules/goober/dist/goober.modern.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/react-hook-form@7.71.1_react@19.1.2/node_modules/react-hook-form/dist/index.esm.js +1894 -0
- package/dist/esm/node_modules/.pnpm/react-hook-form@7.71.1_react@19.1.2/node_modules/react-hook-form/dist/index.esm.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +17 -0
- package/dist/esm/node_modules/.pnpm/tiny-invariant@1.3.3/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/errors.js +45 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/errors.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/iso.js +44 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/iso.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/parse.js +30 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/parse.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js +632 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js +500 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/checks.js +244 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/checks.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/core.js +75 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/core.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/doc.js +38 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/doc.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/errors.js +73 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/errors.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js +274 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js +100 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js +80 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/registries.js +52 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/registries.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js +1247 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/to-json-schema.js +363 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/to-json-schema.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/util.js +407 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/util.js.map +1 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/versions.js +9 -0
- package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/versions.js.map +1 -0
- package/dist/esm/plugins/builtin/pageUrl/pageUrlTypes.d.ts +11 -0
- package/dist/esm/routeTree.gen.d.ts +263 -0
- package/dist/esm/routeTree.gen.js +117 -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/catalog.apps.index.d.ts +5 -0
- package/dist/esm/routes/_layout/catalog.apps.index.js +25 -0
- package/dist/esm/routes/_layout/catalog.apps.index.js.map +1 -0
- package/dist/esm/routes/_layout/index.d.ts +7 -0
- package/dist/esm/routes/_layout/index.js +28 -0
- package/dist/esm/routes/_layout/index.js.map +1 -0
- package/dist/esm/routes/_layout/login.d.ts +1 -0
- package/dist/esm/routes/_layout/login.js +16 -0
- package/dist/esm/routes/_layout/login.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/routes/admin/app-for-catalog/$id.d.ts +5 -0
- package/dist/esm/routes/admin/app-for-catalog/_id.js +67 -0
- package/dist/esm/routes/admin/app-for-catalog/_id.js.map +1 -0
- package/dist/esm/routes/admin/app-for-catalog/_id2.js +321 -0
- package/dist/esm/routes/admin/app-for-catalog/_id2.js.map +1 -0
- package/dist/esm/routes/admin/app-for-catalog/index.d.ts +1 -0
- package/dist/esm/routes/admin/app-for-catalog/index.js +9 -0
- package/dist/esm/routes/admin/app-for-catalog/index.js.map +1 -0
- package/dist/esm/routes/admin/app-for-catalog/index2.js +12 -0
- package/dist/esm/routes/admin/app-for-catalog/index2.js.map +1 -0
- package/dist/esm/routes/admin/app-for-catalog.d.ts +1 -0
- package/dist/esm/routes/admin/app-for-catalog.js +14 -0
- package/dist/esm/routes/admin/app-for-catalog.js.map +1 -0
- package/dist/esm/routes/admin/app-for-catalog2.js +9 -0
- package/dist/esm/routes/admin/app-for-catalog2.js.map +1 -0
- package/dist/esm/routes/admin/approval-methods/index.d.ts +32 -0
- package/dist/esm/routes/admin/approval-methods/index.js +24 -0
- package/dist/esm/routes/admin/approval-methods/index.js.map +1 -0
- package/dist/esm/routes/admin/approval-methods/index2.js +100 -0
- package/dist/esm/routes/admin/approval-methods/index2.js.map +1 -0
- package/dist/esm/routes/admin/approval-methods.d.ts +1 -0
- package/dist/esm/routes/admin/approval-methods.js +14 -0
- package/dist/esm/routes/admin/approval-methods.js.map +1 -0
- package/dist/esm/routes/admin/approval-methods2.js +7 -0
- package/dist/esm/routes/admin/approval-methods2.js.map +1 -0
- package/dist/esm/routes/admin/chat.d.ts +1 -0
- package/dist/esm/routes/admin/chat.js +14 -0
- package/dist/esm/routes/admin/chat.js.map +1 -0
- package/dist/esm/routes/admin/chat2.js +9 -0
- package/dist/esm/routes/admin/chat2.js.map +1 -0
- package/dist/esm/routes/admin/icons.d.ts +1 -0
- package/dist/esm/routes/admin/icons.js +14 -0
- package/dist/esm/routes/admin/icons.js.map +1 -0
- package/dist/esm/routes/admin/icons2.js +12 -0
- package/dist/esm/routes/admin/icons2.js.map +1 -0
- package/dist/esm/routes/admin/index.d.ts +1 -0
- package/dist/esm/routes/admin/index.js +9 -0
- package/dist/esm/routes/admin/index.js.map +1 -0
- package/dist/esm/routes/admin/index2.js +9 -0
- package/dist/esm/routes/admin/index2.js.map +1 -0
- package/dist/esm/routes/admin.d.ts +1 -0
- package/dist/esm/routes/admin.js +37 -0
- package/dist/esm/routes/admin.js.map +1 -0
- package/dist/esm/routes/admin2.js +18 -0
- package/dist/esm/routes/admin2.js.map +1 -0
- package/dist/esm/routes/auth.callback.d.ts +4 -0
- package/dist/esm/routes/auth.callback.js +56 -0
- package/dist/esm/routes/auth.callback.js.map +1 -0
- package/dist/esm/types/slateTypes.d.ts +28 -0
- package/dist/esm/types/table.d.ts +7 -0
- package/dist/esm/types/tanstackQuery.d.ts +13 -0
- package/dist/esm/types/types.d.ts +25 -0
- package/dist/esm/types/userBehaviourTypes.d.ts +76 -0
- package/dist/esm/types/utilityTypes.d.ts +1 -0
- package/dist/esm/ui/accordion.d.ts +7 -0
- package/dist/esm/ui/accordion.js +65 -0
- package/dist/esm/ui/accordion.js.map +1 -0
- package/dist/esm/ui/alert-dialog.d.ts +14 -0
- package/dist/esm/ui/alert-dialog.js +141 -0
- package/dist/esm/ui/alert-dialog.js.map +1 -0
- package/dist/esm/ui/autocomplete.d.ts +29 -0
- package/dist/esm/ui/badge.d.ts +9 -0
- package/dist/esm/ui/badge.js +27 -0
- package/dist/esm/ui/badge.js.map +1 -0
- package/dist/esm/ui/breadcrumb.d.ts +11 -0
- package/dist/esm/ui/breadcrumb.js +84 -0
- package/dist/esm/ui/breadcrumb.js.map +1 -0
- package/dist/esm/ui/button-group.d.ts +11 -0
- package/dist/esm/ui/button.d.ts +13 -0
- package/dist/esm/ui/button.js +53 -0
- package/dist/esm/ui/button.js.map +1 -0
- package/dist/esm/ui/card.d.ts +9 -0
- package/dist/esm/ui/card.js +66 -0
- package/dist/esm/ui/card.js.map +1 -0
- package/dist/esm/ui/checkbox.d.ts +4 -0
- package/dist/esm/ui/collapsible.d.ts +5 -0
- package/dist/esm/ui/command.d.ts +20 -0
- package/dist/esm/ui/command.js +131 -0
- package/dist/esm/ui/command.js.map +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/Breadcrumbs.d.ts +19 -0
- package/dist/esm/ui/components/Breadcrumbs.js +36 -0
- package/dist/esm/ui/components/Breadcrumbs.js.map +1 -0
- package/dist/esm/ui/components/commandInput/EhBaseSelector.d.ts +2 -0
- package/dist/esm/ui/components/commandInput/types.d.ts +13 -0
- package/dist/esm/ui/components/error/BaseErrorPage.d.ts +10 -0
- package/dist/esm/ui/components/error/BaseErrorPage.js +16 -0
- package/dist/esm/ui/components/error/BaseErrorPage.js.map +1 -0
- package/dist/esm/ui/components/error/DefaultErrorComponent.d.ts +3 -0
- package/dist/esm/ui/components/error/DefaultErrorComponent.js +73 -0
- package/dist/esm/ui/components/error/DefaultErrorComponent.js.map +1 -0
- package/dist/esm/ui/components/error/ForbiddenErrorPage.d.ts +5 -0
- package/dist/esm/ui/components/error/ForbiddenErrorPage.js +54 -0
- package/dist/esm/ui/components/error/ForbiddenErrorPage.js.map +1 -0
- package/dist/esm/ui/components/error/RootErrorPage.d.ts +5 -0
- package/dist/esm/ui/components/error/RootErrorPage.js +15 -0
- package/dist/esm/ui/components/error/RootErrorPage.js.map +1 -0
- package/dist/esm/ui/components/footer/Footer.d.ts +1 -0
- package/dist/esm/ui/components/header/Header.d.ts +5 -0
- package/dist/esm/ui/components/header/Header.js +103 -0
- package/dist/esm/ui/components/header/Header.js.map +1 -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/crud-list/CrudList.d.ts +2 -0
- package/dist/esm/ui/crud-list/CrudList.js +189 -0
- package/dist/esm/ui/crud-list/CrudList.js.map +1 -0
- package/dist/esm/ui/crud-list/index.d.ts +2 -0
- package/dist/esm/ui/crud-list/types.d.ts +35 -0
- package/dist/esm/ui/dialog.d.ts +15 -0
- package/dist/esm/ui/dialog.js +111 -0
- package/dist/esm/ui/dialog.js.map +1 -0
- package/dist/esm/ui/dropdown-menu.d.ts +25 -0
- package/dist/esm/ui/dropdown-menu.js +79 -0
- package/dist/esm/ui/dropdown-menu.js.map +1 -0
- package/dist/esm/ui/editable-list/EditableListField.d.ts +2 -0
- package/dist/esm/ui/editable-list/EditableListField.js +130 -0
- package/dist/esm/ui/editable-list/EditableListField.js.map +1 -0
- package/dist/esm/ui/editable-list/index.d.ts +2 -0
- package/dist/esm/ui/editable-list/types.d.ts +17 -0
- package/dist/esm/ui/empty.d.ts +11 -0
- package/dist/esm/ui/empty.js +103 -0
- package/dist/esm/ui/empty.js.map +1 -0
- package/dist/esm/ui/error/NotFoundError.d.ts +1 -0
- package/dist/esm/ui/error/NotFoundError.js +17 -0
- package/dist/esm/ui/error/NotFoundError.js.map +1 -0
- package/dist/esm/ui/form.d.ts +56 -0
- package/dist/esm/ui/form.js +134 -0
- package/dist/esm/ui/form.js.map +1 -0
- package/dist/esm/ui/input-group.d.ts +16 -0
- package/dist/esm/ui/input.d.ts +3 -0
- package/dist/esm/ui/input.js +22 -0
- package/dist/esm/ui/input.js.map +1 -0
- package/dist/esm/ui/item.d.ts +23 -0
- package/dist/esm/ui/label.d.ts +4 -0
- package/dist/esm/ui/label.js +23 -0
- package/dist/esm/ui/label.js.map +1 -0
- package/dist/esm/ui/layout/Footer.d.ts +1 -0
- package/dist/esm/ui/layout/LoadingScreen.d.ts +6 -0
- package/dist/esm/ui/layout/LoadingScreen.js +54 -0
- package/dist/esm/ui/layout/LoadingScreen.js.map +1 -0
- package/dist/esm/ui/layout/MainLayout.d.ts +7 -0
- package/dist/esm/ui/layout/MainLayout.js +17 -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 +10 -0
- package/dist/esm/ui/layout/TopLevelProviders.js +46 -0
- package/dist/esm/ui/layout/TopLevelProviders.js.map +1 -0
- package/dist/esm/ui/layout/TopLevelProvidersForErrors.d.ts +10 -0
- package/dist/esm/ui/layout/TopLevelProvidersForErrors.js +24 -0
- package/dist/esm/ui/layout/TopLevelProvidersForErrors.js.map +1 -0
- package/dist/esm/ui/link.d.ts +13 -0
- package/dist/esm/ui/link.js +28 -0
- package/dist/esm/ui/link.js.map +1 -0
- package/dist/esm/ui/linkExternal.d.ts +8 -0
- package/dist/esm/ui/linkExternal.js +26 -0
- package/dist/esm/ui/linkExternal.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/ui/markdown-editor/MarkdownEditor.d.ts +9 -0
- package/dist/esm/ui/markdown-editor/MarkdownEditor.js +116 -0
- package/dist/esm/ui/markdown-editor/MarkdownEditor.js.map +1 -0
- package/dist/esm/ui/markdown-editor/MarkdownToolbar.d.ts +6 -0
- package/dist/esm/ui/markdown-editor/MarkdownToolbar.js +99 -0
- package/dist/esm/ui/markdown-editor/MarkdownToolbar.js.map +1 -0
- package/dist/esm/ui/markdown-editor/index.d.ts +2 -0
- package/dist/esm/ui/popover.d.ts +7 -0
- package/dist/esm/ui/popover.js +40 -0
- package/dist/esm/ui/popover.js.map +1 -0
- package/dist/esm/ui/radio-group.d.ts +5 -0
- package/dist/esm/ui/resizable.d.ts +7 -0
- package/dist/esm/ui/resizable.js +47 -0
- package/dist/esm/ui/resizable.js.map +1 -0
- package/dist/esm/ui/scroll-area.d.ts +5 -0
- package/dist/esm/ui/scroll-area.js +62 -0
- package/dist/esm/ui/scroll-area.js.map +1 -0
- package/dist/esm/ui/search-input-with-shortcut.d.ts +25 -0
- package/dist/esm/ui/select.d.ts +15 -0
- package/dist/esm/ui/select.js +138 -0
- package/dist/esm/ui/select.js.map +1 -0
- package/dist/esm/ui/separator.d.ts +4 -0
- package/dist/esm/ui/shortcut-button.d.ts +24 -0
- package/dist/esm/ui/skeleton.d.ts +2 -0
- package/dist/esm/ui/skeleton.js +16 -0
- package/dist/esm/ui/skeleton.js.map +1 -0
- package/dist/esm/ui/spinner.d.ts +2 -0
- package/dist/esm/ui/spinner.js +18 -0
- package/dist/esm/ui/spinner.js.map +1 -0
- package/dist/esm/ui/table.d.ts +10 -0
- package/dist/esm/ui/table.js +87 -0
- package/dist/esm/ui/table.js.map +1 -0
- package/dist/esm/ui/tabs.d.ts +7 -0
- package/dist/esm/ui/textarea.d.ts +3 -0
- package/dist/esm/ui/textarea.js +19 -0
- package/dist/esm/ui/textarea.js.map +1 -0
- package/dist/esm/ui/tooltip.d.ts +7 -0
- package/dist/esm/userDb/AcDb.d.ts +14 -0
- package/dist/esm/userDb/AcDb.js +28 -0
- package/dist/esm/userDb/AcDb.js.map +1 -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/util/createEhRouter.d.ts +7 -0
- package/dist/esm/util/createEhRouter.js +19 -0
- package/dist/esm/util/createEhRouter.js.map +1 -0
- package/dist/esm/util/error-utils.d.ts +6 -0
- package/dist/esm/util/error-utils.js +28 -0
- package/dist/esm/util/error-utils.js.map +1 -0
- package/dist/esm/util/highlightMatches.d.ts +2 -0
- package/dist/esm/util/reactQueryUtils.d.ts +10 -0
- package/dist/esm/util/reactQueryUtils.js +17 -0
- package/dist/esm/util/reactQueryUtils.js.map +1 -0
- package/dist/esm/util/slug-utils.d.ts +12 -0
- package/dist/index.css +225 -0
- package/dist/public/app-catalog-16x16.png +0 -0
- package/dist/public/app-catalog-192x192.png +0 -0
- package/dist/public/app-catalog-32x32.png +0 -0
- package/dist/public/app-catalog-48x48.png +0 -0
- package/dist/public/app-catalog-512x512.png +0 -0
- package/dist/public/app-catalog-square.svg +160 -0
- package/dist/public/app-catalog.png +0 -0
- package/dist/public/app-catalog.svg +198 -0
- package/dist/public/apple-touch-180x180.png +0 -0
- package/dist/public/favicon-app-catalog.ico +0 -0
- package/dist/public/favicon.ico +0 -0
- package/dist/public/robots.txt +2 -0
- package/package.json +159 -0
- package/public/app-catalog-16x16.png +0 -0
- package/public/app-catalog-192x192.png +0 -0
- package/public/app-catalog-32x32.png +0 -0
- package/public/app-catalog-48x48.png +0 -0
- package/public/app-catalog-512x512.png +0 -0
- package/public/app-catalog-square.svg +160 -0
- package/public/app-catalog.png +0 -0
- package/public/app-catalog.svg +198 -0
- package/public/apple-touch-180x180.png +0 -0
- package/public/favicon-app-catalog.ico +0 -0
- package/public/favicon.ico +0 -0
- package/public/robots.txt +2 -0
- package/src/App.tsx +28 -0
- package/src/__tests__/setupTests.tsx +0 -0
- package/src/api/infra/createQueryClient.ts +29 -0
- package/src/api/infra/trpc.ts +6 -0
- package/src/api/unsorted/appCatalogFetcher.ts +32 -0
- package/src/api/unsorted/createCachingFetcher.ts +159 -0
- package/src/appPropsFactory.ts +37 -0
- package/src/assets/app-catalog.svg +198 -0
- package/src/components/IconPickerDialog.tsx +136 -0
- package/src/components/IconPickerField.tsx +88 -0
- package/src/components/ThemeSwitcher.tsx +22 -0
- package/src/components/theme-provider.tsx +8 -0
- package/src/errors/AuthorizationError.ts +32 -0
- package/src/errors/index.ts +1 -0
- package/src/index.css +225 -0
- package/src/index.tsx +3 -0
- package/src/lib/utils.ts +7 -0
- package/src/main.tsx +57 -0
- package/src/modules/admin-base/components/AdminChat.tsx +122 -0
- package/src/modules/admin-base/components/AdminLayout.tsx +111 -0
- package/src/modules/admin-base/components/AdminWelcome.tsx +52 -0
- package/src/modules/admin-base/context/AdminConfigContext.tsx +36 -0
- package/src/modules/admin-base/index.ts +16 -0
- package/src/modules/admin-base/types/adminTypes.ts +11 -0
- package/src/modules/appCatalog/AppCatalogAdminPage.tsx +274 -0
- package/src/modules/appCatalog/ScreenshotItem.tsx +59 -0
- package/src/modules/appCatalog/ScreenshotManager.tsx +193 -0
- package/src/modules/appCatalog/api/ApiQueryMagazineAppCatalog.ts +12 -0
- package/src/modules/appCatalog/catalogRouteLoader.ts +28 -0
- package/src/modules/appCatalog/context/AppCatalogContext.tsx +52 -0
- package/src/modules/appCatalog/index.ts +16 -0
- package/src/modules/appCatalog/routeLoader.ts +9 -0
- package/src/modules/appCatalog/ui/components/AccessRequestSection.tsx +370 -0
- package/src/modules/appCatalog/ui/components/AppDetailModal.tsx +355 -0
- package/src/modules/appCatalog/ui/components/ApproverDisplay.tsx +260 -0
- package/src/modules/appCatalog/ui/components/GroupingColumn.tsx +65 -0
- package/src/modules/appCatalog/ui/components/GroupingTabs.tsx +41 -0
- package/src/modules/appCatalog/ui/components/ScreenshotGallery.tsx +51 -0
- package/src/modules/appCatalog/ui/grid/AppCatalogFiltersCard.tsx +79 -0
- package/src/modules/appCatalog/ui/grid/AppCatalogGrid.tsx +487 -0
- package/src/modules/appCatalog/ui/grid/AppCatalogTable.tsx +89 -0
- package/src/modules/appCatalog/ui/grid/appCatalogUtils.ts +5 -0
- package/src/modules/appCatalog/ui/hooks/useKeyboardNavigation.ts +54 -0
- package/src/modules/appCatalog/ui/layout/AppCatalogLayout.tsx +57 -0
- package/src/modules/appCatalog/ui/pages/AppCatalogPage.tsx +142 -0
- package/src/modules/approvalMethod/AccessRequestFormFields.tsx +393 -0
- package/src/modules/approvalMethod/ApprovalMethodForm.tsx +323 -0
- package/src/modules/approvalMethod/ApprovalMethodSelector.tsx +150 -0
- package/src/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.ts +34 -0
- package/src/modules/auth/AuthContext.tsx +130 -0
- package/src/modules/auth/AuthModalContext.tsx +49 -0
- package/src/modules/auth/ProtectedContent.tsx +55 -0
- package/src/modules/auth/authClient.ts +9 -0
- package/src/modules/auth/authUtils.ts +41 -0
- package/src/modules/auth/index.ts +6 -0
- package/src/modules/auth/ui/LoginModal.tsx +36 -0
- package/src/modules/auth/ui/LoginPage.tsx +62 -0
- package/src/modules/auth/useAuthActions.ts +85 -0
- package/src/modules/config/GlobalConfigContext.tsx +42 -0
- package/src/modules/config/HealthStateContext.tsx +47 -0
- package/src/modules/gallery/Gallery.tsx +317 -0
- package/src/modules/icons/IconManagementPage.tsx +245 -0
- package/src/modules/pluginCore/PluginManagerContext.tsx +78 -0
- package/src/modules/pluginCore/makePluginManagerContext.ts +13 -0
- package/src/modules/pluginCore/types.ts +27 -0
- package/src/plugins/builtin/pageUrl/pageUrlTypes.ts +16 -0
- package/src/routeTree.gen.ts +361 -0
- package/src/routes/__root.tsx +23 -0
- package/src/routes/_layout/catalog.apps.index.tsx +28 -0
- package/src/routes/_layout/index.tsx +31 -0
- package/src/routes/_layout/login.tsx +20 -0
- package/src/routes/_layout.tsx +9 -0
- package/src/routes/admin/app-for-catalog/$id.tsx +571 -0
- package/src/routes/admin/app-for-catalog/index.tsx +19 -0
- package/src/routes/admin/app-for-catalog.tsx +12 -0
- package/src/routes/admin/approval-methods/index.tsx +161 -0
- package/src/routes/admin/approval-methods.tsx +10 -0
- package/src/routes/admin/chat.tsx +13 -0
- package/src/routes/admin/icons.tsx +22 -0
- package/src/routes/admin/index.tsx +9 -0
- package/src/routes/admin.tsx +60 -0
- package/src/routes/auth.callback.tsx +74 -0
- package/src/types/slateTypes.ts +22 -0
- package/src/types/table.ts +9 -0
- package/src/types/tanstackQuery.ts +16 -0
- package/src/types/types.ts +30 -0
- package/src/types/userBehaviourTypes.ts +100 -0
- package/src/types/utilityTypes.ts +1 -0
- package/src/types/vite-env.d.ts +2 -0
- package/src/ui/accordion.tsx +64 -0
- package/src/ui/alert-dialog.tsx +155 -0
- package/src/ui/autocomplete.tsx +272 -0
- package/src/ui/badge.tsx +38 -0
- package/src/ui/breadcrumb.tsx +106 -0
- package/src/ui/button-group.tsx +85 -0
- package/src/ui/button.tsx +66 -0
- package/src/ui/card.tsx +92 -0
- package/src/ui/checkbox.tsx +30 -0
- package/src/ui/collapsible.tsx +45 -0
- package/src/ui/command.tsx +196 -0
- package/src/ui/components/ActionCard.tsx +30 -0
- package/src/ui/components/AppIcon.tsx +48 -0
- package/src/ui/components/Breadcrumbs.tsx +97 -0
- package/src/ui/components/commandInput/EhBaseSelector.tsx +17 -0
- package/src/ui/components/commandInput/types.ts +22 -0
- package/src/ui/components/error/BaseErrorPage.tsx +26 -0
- package/src/ui/components/error/DefaultErrorComponent.tsx +107 -0
- package/src/ui/components/error/ForbiddenErrorPage.tsx +89 -0
- package/src/ui/components/error/RootErrorPage.tsx +23 -0
- package/src/ui/components/footer/Footer.tsx +51 -0
- package/src/ui/components/header/Header.tsx +135 -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/crud-list/CrudList.tsx +274 -0
- package/src/ui/crud-list/index.ts +2 -0
- package/src/ui/crud-list/types.ts +44 -0
- package/src/ui/dialog.tsx +141 -0
- package/src/ui/dropdown-menu.tsx +255 -0
- package/src/ui/editable-list/EditableListField.tsx +188 -0
- package/src/ui/editable-list/index.ts +2 -0
- package/src/ui/editable-list/types.ts +18 -0
- package/src/ui/empty.tsx +105 -0
- package/src/ui/error/NotFoundError.tsx +16 -0
- package/src/ui/form.tsx +188 -0
- package/src/ui/input-group.tsx +167 -0
- package/src/ui/input.tsx +21 -0
- package/src/ui/item.tsx +194 -0
- package/src/ui/label.tsx +22 -0
- package/src/ui/layout/Footer.tsx +16 -0
- package/src/ui/layout/LoadingScreen.tsx +67 -0
- package/src/ui/layout/MainLayout.tsx +28 -0
- package/src/ui/layout/SideColumn.tsx +3 -0
- package/src/ui/layout/TopLevelProviders.tsx +63 -0
- package/src/ui/layout/TopLevelProvidersForErrors.tsx +34 -0
- package/src/ui/link.tsx +33 -0
- package/src/ui/linkExternal.tsx +26 -0
- package/src/ui/main/JumpTabContent.tsx +12 -0
- package/src/ui/main/Tabs.tsx +29 -0
- package/src/ui/markdown-editor/MarkdownEditor.tsx +132 -0
- package/src/ui/markdown-editor/MarkdownToolbar.tsx +90 -0
- package/src/ui/markdown-editor/index.ts +2 -0
- package/src/ui/popover.tsx +48 -0
- package/src/ui/radio-group.tsx +43 -0
- package/src/ui/resizable.tsx +51 -0
- package/src/ui/scroll-area.tsx +58 -0
- package/src/ui/search-input-with-shortcut.tsx +54 -0
- package/src/ui/select.tsx +185 -0
- package/src/ui/separator.tsx +26 -0
- package/src/ui/shortcut-button.tsx +84 -0
- package/src/ui/skeleton.tsx +13 -0
- package/src/ui/spinner.tsx +16 -0
- package/src/ui/table.tsx +114 -0
- package/src/ui/tabs.tsx +64 -0
- package/src/ui/textarea.tsx +18 -0
- package/src/ui/tooltip.tsx +60 -0
- package/src/userDb/AcDb.ts +29 -0
- package/src/userDb/DbContext.tsx +22 -0
- package/src/util/createEhRouter.tsx +22 -0
- package/src/util/error-utils.ts +31 -0
- package/src/util/highlightMatches.tsx +29 -0
- package/src/util/reactQueryUtils.ts +20 -0
- package/src/util/slug-utils.ts +17 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { AppCatalogAdminPage } from "../../../modules/appCatalog/AppCatalogAdminPage.js";
|
|
3
|
+
function RouteComponent() {
|
|
4
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col", children: [
|
|
5
|
+
/* @__PURE__ */ jsx("div", { className: "border-b px-6 py-4", children: /* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", children: "App Catalog" }) }),
|
|
6
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto p-6", children: /* @__PURE__ */ jsx(AppCatalogAdminPage, {}) })
|
|
7
|
+
] });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
RouteComponent as component
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","sources":["../../../../../src/routes/admin/app-for-catalog/index.tsx?tsr-split=component"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router'\nimport { AppCatalogAdminPage } from '~/modules/appCatalog/AppCatalogAdminPage'\n\nexport const Route = createFileRoute('/admin/app-for-catalog/')({\n component: RouteComponent,\n})\n\nfunction RouteComponent() {\n return (\n <div className=\"flex-1 flex flex-col\">\n <div className=\"border-b px-6 py-4\">\n <h2 className=\"text-xl font-semibold\">App Catalog</h2>\n </div>\n <div className=\"flex-1 overflow-auto p-6\">\n <AppCatalogAdminPage />\n </div>\n </div>\n )\n}\n"],"names":["RouteComponent"],"mappings":";;AAOA,SAASA,iBAAiB;AACxB,SACE,qBAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,sBACb,UAAA,oBAAC,QAAG,WAAU,yBAAwB,yBAAW,EAAA,CACnD;AAAA,wBACC,OAAA,EAAI,WAAU,4BACb,UAAA,oBAAC,uBAAmB,EAAA,CACtB;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/app-for-catalog", "/admin/app-for-catalog", "/admin/app-for-catalog", "/admin/app-for-catalog", undefined, import('@tanstack/router-core').ResolveParams<"/app-for-catalog">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
+
const $$splitComponentImporter = () => import("./app-for-catalog2.js");
|
|
3
|
+
const Route = createFileRoute("/admin/app-for-catalog")({
|
|
4
|
+
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
5
|
+
staticData: {
|
|
6
|
+
breadcrumb: {
|
|
7
|
+
title: "App Catalog"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export {
|
|
12
|
+
Route
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=app-for-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-for-catalog.js","sources":["../../../../src/routes/admin/app-for-catalog.tsx"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/app-for-catalog')({\n component: AppCatalogLayoutRoute,\n staticData: {\n breadcrumb: { title: 'App Catalog' },\n },\n})\n\nfunction AppCatalogLayoutRoute() {\n return <Outlet />\n}\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter","staticData","breadcrumb","title"],"mappings":";;AAEO,MAAMA,QAAQC,gBAAgB,wBAAwB,EAAE;AAAA,EAC7DC,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACTC,YAAY;AAAA,IACVC,YAAY;AAAA,MAAEC,OAAO;AAAA,IAAA;AAAA,EAAc;AAEvC,CAAC;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Outlet } from "@tanstack/react-router";
|
|
3
|
+
function AppCatalogLayoutRoute() {
|
|
4
|
+
return /* @__PURE__ */ jsx(Outlet, {});
|
|
5
|
+
}
|
|
6
|
+
export {
|
|
7
|
+
AppCatalogLayoutRoute as component
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=app-for-catalog2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-for-catalog2.js","sources":["../../../../src/routes/admin/app-for-catalog.tsx?tsr-split=component"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/app-for-catalog')({\n component: AppCatalogLayoutRoute,\n staticData: {\n breadcrumb: { title: 'App Catalog' },\n },\n})\n\nfunction AppCatalogLayoutRoute() {\n return <Outlet />\n}\n"],"names":["AppCatalogLayoutRoute"],"mappings":";;AASA,SAASA,wBAAwB;AAC/B,6BAAQ,QAAA,EAAM;AAChB;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/approval-methods", "/admin/approval-methods", "/admin/approval-methods", "/admin/approval-methods", undefined, import('@tanstack/router-core').ResolveParams<"/approval-methods">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/", "/admin/approval-methods/", "/admin/approval-methods/", "/admin/approval-methods/", undefined, import('@tanstack/router-core').ResolveParams<"/">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, ({ context }: import('@tanstack/router-core').LoaderFnContext<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/approval-methods", "/admin/approval-methods", "/admin/approval-methods", "/admin/approval-methods", undefined, import('@tanstack/router-core').ResolveParams<"/approval-methods">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin/approval-methods/", import('@tanstack/router-core').ResolveParams<"/">, {}, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<{
|
|
2
|
+
approvalMethods: ({
|
|
3
|
+
slug: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
type: "service";
|
|
6
|
+
config: {
|
|
7
|
+
icon?: string | undefined;
|
|
8
|
+
url?: string | undefined;
|
|
9
|
+
};
|
|
10
|
+
createdAt?: string | undefined;
|
|
11
|
+
updatedAt?: string | undefined;
|
|
12
|
+
} | {
|
|
13
|
+
slug: string;
|
|
14
|
+
displayName: string;
|
|
15
|
+
type: "personTeam";
|
|
16
|
+
config: {
|
|
17
|
+
reachOutContacts?: {
|
|
18
|
+
displayName: string;
|
|
19
|
+
contact: string;
|
|
20
|
+
}[] | undefined;
|
|
21
|
+
};
|
|
22
|
+
createdAt?: string | undefined;
|
|
23
|
+
updatedAt?: string | undefined;
|
|
24
|
+
} | {
|
|
25
|
+
slug: string;
|
|
26
|
+
displayName: string;
|
|
27
|
+
type: "custom";
|
|
28
|
+
config: Record<never, never>;
|
|
29
|
+
createdAt?: string | undefined;
|
|
30
|
+
updatedAt?: string | undefined;
|
|
31
|
+
})[];
|
|
32
|
+
}>, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
+
const $$splitComponentImporter = () => import("./index2.js");
|
|
3
|
+
const Route = createFileRoute("/admin/approval-methods/")({
|
|
4
|
+
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
5
|
+
async loader({
|
|
6
|
+
context
|
|
7
|
+
}) {
|
|
8
|
+
const {
|
|
9
|
+
trpcClient
|
|
10
|
+
} = context;
|
|
11
|
+
return {
|
|
12
|
+
approvalMethods: await trpcClient.approvalMethod.list.query()
|
|
13
|
+
};
|
|
14
|
+
},
|
|
15
|
+
staticData: {
|
|
16
|
+
breadcrumb: {
|
|
17
|
+
title: "List"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
export {
|
|
22
|
+
Route
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/routes/admin/approval-methods/index.tsx"],"sourcesContent":["import type { ApprovalMethodType, TRPCRouter } from '@igstack/app-catalog-backend-core'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { createFileRoute } from '@tanstack/react-router'\nimport type { TRPCClient } from '@trpc/client'\nimport { useTRPC } from '~/api/infra/trpc'\nimport { ApprovalMethodForm } from '~/modules/approvalMethod/ApprovalMethodForm'\nimport { Badge } from '~/ui/badge'\nimport { CrudList } from '~/ui/crud-list'\n\n/**\n * ApprovalMethod type as returned by tRPC (dates serialized to strings)\n */\ntype SerializedApprovalMethod = Awaited<\n ReturnType<TRPCClient<TRPCRouter>['approvalMethod']['list']['query']>\n>[number]\n\nexport const Route = createFileRoute('/admin/approval-methods/')({\n component: RouteComponent,\n async loader({ context }) {\n const { trpcClient } = context\n return {\n approvalMethods: await trpcClient.approvalMethod.list.query(),\n }\n },\n staticData: {\n breadcrumb: {\n title: 'List',\n },\n },\n})\n\nconst TYPE_LABELS: Record<ApprovalMethodType, string> = {\n service: 'Service',\n personTeam: 'Person/Team',\n custom: 'Custom',\n}\n\nconst TYPE_COLORS: Record<\n ApprovalMethodType,\n 'default' | 'outline' | 'secondary'\n> = {\n service: 'default',\n personTeam: 'secondary',\n custom: 'outline',\n}\n\nconst columns: Array<ColumnDef<SerializedApprovalMethod>> = [\n {\n accessorKey: 'displayName',\n header: 'Name',\n },\n {\n accessorKey: 'type',\n header: 'Type',\n cell: ({ row }) => (\n <Badge variant={TYPE_COLORS[row.original.type]}>\n {TYPE_LABELS[row.original.type]}\n </Badge>\n ),\n },\n {\n accessorKey: 'config',\n header: 'Configuration',\n cell: ({ row }) => {\n const config = row.original.config as Record<string, unknown> | null\n if (!config) return <span className=\"text-muted-foreground\">-</span>\n\n // Show relevant config preview based on type\n if (row.original.type === 'service' && config.url) {\n return (\n <span className=\"text-sm text-muted-foreground truncate max-w-[200px]\">\n {config.url as string}\n </span>\n )\n }\n if (\n row.original.type === 'personTeam' &&\n Array.isArray(config.reachOutContacts)\n ) {\n return (\n <span className=\"text-sm text-muted-foreground\">\n {config.reachOutContacts.length} contact(s)\n </span>\n )\n }\n return <span className=\"text-muted-foreground\">-</span>\n },\n },\n]\n\nfunction RouteComponent() {\n const trpc = useTRPC()\n const queryClient = useQueryClient()\n const loaderData = Route.useLoaderData()\n\n // Use query with loader data as initial data\n const { data: approvalMethods = [] } = useQuery({\n ...trpc.approvalMethod.list.queryOptions(),\n initialData:\n 'approvalMethods' in loaderData ? loaderData.approvalMethods : [],\n })\n\n const createMutation = useMutation({\n ...trpc.approvalMethod.create.mutationOptions(),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: trpc.approvalMethod.list.queryKey(),\n })\n },\n })\n\n const updateMutation = useMutation({\n ...trpc.approvalMethod.update.mutationOptions(),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: trpc.approvalMethod.list.queryKey(),\n })\n },\n })\n\n const deleteMutation = useMutation({\n ...trpc.approvalMethod.delete.mutationOptions(),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: trpc.approvalMethod.list.queryKey(),\n })\n },\n })\n\n return (\n <div className=\"p-6\">\n <CrudList\n data={approvalMethods}\n columns={columns as any}\n getRowId={(item) => item.slug}\n title=\"Approval Methods\"\n createButtonLabel=\"Add Method\"\n emptyMessage=\"No approval methods configured\"\n renderForm={({ mode, item, onSubmit, onCancel, isPending }) => (\n <ApprovalMethodForm\n mode={mode}\n initialData={item as any}\n onSubmit={onSubmit}\n onCancel={onCancel}\n isPending={isPending}\n />\n )}\n onCreate={async (data: any) => {\n await createMutation.mutateAsync(data)\n }}\n onUpdate={async (data: any) => {\n await updateMutation.mutateAsync(data)\n }}\n onDelete={async (item) => {\n await deleteMutation.mutateAsync({ slug: item.slug })\n }}\n />\n </div>\n )\n}\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter","loader","context","trpcClient","approvalMethods","approvalMethod","list","query","staticData","breadcrumb","title"],"mappings":";;AAiBO,MAAMA,QAAQC,gBAAgB,0BAA0B,EAAE;AAAA,EAC/DC,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACT,MAAMC,OAAO;AAAA,IAAEC;AAAAA,EAAAA,GAAW;AACxB,UAAM;AAAA,MAAEC;AAAAA,IAAAA,IAAeD;AACvB,WAAO;AAAA,MACLE,iBAAiB,MAAMD,WAAWE,eAAeC,KAAKC,MAAAA;AAAAA,IAAM;AAAA,EAEhE;AAAA,EACAC,YAAY;AAAA,IACVC,YAAY;AAAA,MACVC,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ,CAAC;"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useQueryClient, useQuery, useMutation } from "@tanstack/react-query";
|
|
3
|
+
import { useTRPC } from "../../../api/infra/trpc.js";
|
|
4
|
+
import { ApprovalMethodForm } from "../../../modules/approvalMethod/ApprovalMethodForm.js";
|
|
5
|
+
import { Badge } from "../../../ui/badge.js";
|
|
6
|
+
import { CrudList } from "../../../ui/crud-list/CrudList.js";
|
|
7
|
+
import { Route } from "./index.js";
|
|
8
|
+
const TYPE_LABELS = {
|
|
9
|
+
service: "Service",
|
|
10
|
+
personTeam: "Person/Team",
|
|
11
|
+
custom: "Custom"
|
|
12
|
+
};
|
|
13
|
+
const TYPE_COLORS = {
|
|
14
|
+
service: "default",
|
|
15
|
+
personTeam: "secondary",
|
|
16
|
+
custom: "outline"
|
|
17
|
+
};
|
|
18
|
+
const columns = [{
|
|
19
|
+
accessorKey: "displayName",
|
|
20
|
+
header: "Name"
|
|
21
|
+
}, {
|
|
22
|
+
accessorKey: "type",
|
|
23
|
+
header: "Type",
|
|
24
|
+
cell: ({
|
|
25
|
+
row
|
|
26
|
+
}) => /* @__PURE__ */ jsx(Badge, { variant: TYPE_COLORS[row.original.type], children: TYPE_LABELS[row.original.type] })
|
|
27
|
+
}, {
|
|
28
|
+
accessorKey: "config",
|
|
29
|
+
header: "Configuration",
|
|
30
|
+
cell: ({
|
|
31
|
+
row
|
|
32
|
+
}) => {
|
|
33
|
+
const config = row.original.config;
|
|
34
|
+
if (!config) return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" });
|
|
35
|
+
if (row.original.type === "service" && config.url) {
|
|
36
|
+
return /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground truncate max-w-[200px]", children: config.url });
|
|
37
|
+
}
|
|
38
|
+
if (row.original.type === "personTeam" && Array.isArray(config.reachOutContacts)) {
|
|
39
|
+
return /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground", children: [
|
|
40
|
+
config.reachOutContacts.length,
|
|
41
|
+
" contact(s)"
|
|
42
|
+
] });
|
|
43
|
+
}
|
|
44
|
+
return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" });
|
|
45
|
+
}
|
|
46
|
+
}];
|
|
47
|
+
function RouteComponent() {
|
|
48
|
+
const trpc = useTRPC();
|
|
49
|
+
const queryClient = useQueryClient();
|
|
50
|
+
const loaderData = Route.useLoaderData();
|
|
51
|
+
const {
|
|
52
|
+
data: approvalMethods = []
|
|
53
|
+
} = useQuery({
|
|
54
|
+
...trpc.approvalMethod.list.queryOptions(),
|
|
55
|
+
initialData: "approvalMethods" in loaderData ? loaderData.approvalMethods : []
|
|
56
|
+
});
|
|
57
|
+
const createMutation = useMutation({
|
|
58
|
+
...trpc.approvalMethod.create.mutationOptions(),
|
|
59
|
+
onSuccess: () => {
|
|
60
|
+
queryClient.invalidateQueries({
|
|
61
|
+
queryKey: trpc.approvalMethod.list.queryKey()
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const updateMutation = useMutation({
|
|
66
|
+
...trpc.approvalMethod.update.mutationOptions(),
|
|
67
|
+
onSuccess: () => {
|
|
68
|
+
queryClient.invalidateQueries({
|
|
69
|
+
queryKey: trpc.approvalMethod.list.queryKey()
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
const deleteMutation = useMutation({
|
|
74
|
+
...trpc.approvalMethod.delete.mutationOptions(),
|
|
75
|
+
onSuccess: () => {
|
|
76
|
+
queryClient.invalidateQueries({
|
|
77
|
+
queryKey: trpc.approvalMethod.list.queryKey()
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return /* @__PURE__ */ jsx("div", { className: "p-6", children: /* @__PURE__ */ jsx(CrudList, { data: approvalMethods, columns, getRowId: (item) => item.slug, title: "Approval Methods", createButtonLabel: "Add Method", emptyMessage: "No approval methods configured", renderForm: ({
|
|
82
|
+
mode,
|
|
83
|
+
item,
|
|
84
|
+
onSubmit,
|
|
85
|
+
onCancel,
|
|
86
|
+
isPending
|
|
87
|
+
}) => /* @__PURE__ */ jsx(ApprovalMethodForm, { mode, initialData: item, onSubmit, onCancel, isPending }), onCreate: async (data) => {
|
|
88
|
+
await createMutation.mutateAsync(data);
|
|
89
|
+
}, onUpdate: async (data) => {
|
|
90
|
+
await updateMutation.mutateAsync(data);
|
|
91
|
+
}, onDelete: async (item) => {
|
|
92
|
+
await deleteMutation.mutateAsync({
|
|
93
|
+
slug: item.slug
|
|
94
|
+
});
|
|
95
|
+
} }) });
|
|
96
|
+
}
|
|
97
|
+
export {
|
|
98
|
+
RouteComponent as component
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","sources":["../../../../../src/routes/admin/approval-methods/index.tsx?tsr-split=component"],"sourcesContent":["import type { ApprovalMethodType, TRPCRouter } from '@igstack/app-catalog-backend-core'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { createFileRoute } from '@tanstack/react-router'\nimport type { TRPCClient } from '@trpc/client'\nimport { useTRPC } from '~/api/infra/trpc'\nimport { ApprovalMethodForm } from '~/modules/approvalMethod/ApprovalMethodForm'\nimport { Badge } from '~/ui/badge'\nimport { CrudList } from '~/ui/crud-list'\n\n/**\n * ApprovalMethod type as returned by tRPC (dates serialized to strings)\n */\ntype SerializedApprovalMethod = Awaited<\n ReturnType<TRPCClient<TRPCRouter>['approvalMethod']['list']['query']>\n>[number]\n\nexport const Route = createFileRoute('/admin/approval-methods/')({\n component: RouteComponent,\n async loader({ context }) {\n const { trpcClient } = context\n return {\n approvalMethods: await trpcClient.approvalMethod.list.query(),\n }\n },\n staticData: {\n breadcrumb: {\n title: 'List',\n },\n },\n})\n\nconst TYPE_LABELS: Record<ApprovalMethodType, string> = {\n service: 'Service',\n personTeam: 'Person/Team',\n custom: 'Custom',\n}\n\nconst TYPE_COLORS: Record<\n ApprovalMethodType,\n 'default' | 'outline' | 'secondary'\n> = {\n service: 'default',\n personTeam: 'secondary',\n custom: 'outline',\n}\n\nconst columns: Array<ColumnDef<SerializedApprovalMethod>> = [\n {\n accessorKey: 'displayName',\n header: 'Name',\n },\n {\n accessorKey: 'type',\n header: 'Type',\n cell: ({ row }) => (\n <Badge variant={TYPE_COLORS[row.original.type]}>\n {TYPE_LABELS[row.original.type]}\n </Badge>\n ),\n },\n {\n accessorKey: 'config',\n header: 'Configuration',\n cell: ({ row }) => {\n const config = row.original.config as Record<string, unknown> | null\n if (!config) return <span className=\"text-muted-foreground\">-</span>\n\n // Show relevant config preview based on type\n if (row.original.type === 'service' && config.url) {\n return (\n <span className=\"text-sm text-muted-foreground truncate max-w-[200px]\">\n {config.url as string}\n </span>\n )\n }\n if (\n row.original.type === 'personTeam' &&\n Array.isArray(config.reachOutContacts)\n ) {\n return (\n <span className=\"text-sm text-muted-foreground\">\n {config.reachOutContacts.length} contact(s)\n </span>\n )\n }\n return <span className=\"text-muted-foreground\">-</span>\n },\n },\n]\n\nfunction RouteComponent() {\n const trpc = useTRPC()\n const queryClient = useQueryClient()\n const loaderData = Route.useLoaderData()\n\n // Use query with loader data as initial data\n const { data: approvalMethods = [] } = useQuery({\n ...trpc.approvalMethod.list.queryOptions(),\n initialData:\n 'approvalMethods' in loaderData ? loaderData.approvalMethods : [],\n })\n\n const createMutation = useMutation({\n ...trpc.approvalMethod.create.mutationOptions(),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: trpc.approvalMethod.list.queryKey(),\n })\n },\n })\n\n const updateMutation = useMutation({\n ...trpc.approvalMethod.update.mutationOptions(),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: trpc.approvalMethod.list.queryKey(),\n })\n },\n })\n\n const deleteMutation = useMutation({\n ...trpc.approvalMethod.delete.mutationOptions(),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: trpc.approvalMethod.list.queryKey(),\n })\n },\n })\n\n return (\n <div className=\"p-6\">\n <CrudList\n data={approvalMethods}\n columns={columns as any}\n getRowId={(item) => item.slug}\n title=\"Approval Methods\"\n createButtonLabel=\"Add Method\"\n emptyMessage=\"No approval methods configured\"\n renderForm={({ mode, item, onSubmit, onCancel, isPending }) => (\n <ApprovalMethodForm\n mode={mode}\n initialData={item as any}\n onSubmit={onSubmit}\n onCancel={onCancel}\n isPending={isPending}\n />\n )}\n onCreate={async (data: any) => {\n await createMutation.mutateAsync(data)\n }}\n onUpdate={async (data: any) => {\n await updateMutation.mutateAsync(data)\n }}\n onDelete={async (item) => {\n await deleteMutation.mutateAsync({ slug: item.slug })\n }}\n />\n </div>\n )\n}\n"],"names":["TYPE_LABELS","service","personTeam","custom","TYPE_COLORS","columns","accessorKey","header","cell","row","original","type","config","url","Array","isArray","reachOutContacts","length","RouteComponent","trpc","useTRPC","queryClient","useQueryClient","loaderData","Route","useLoaderData","data","approvalMethods","useQuery","approvalMethod","list","queryOptions","initialData","createMutation","useMutation","create","mutationOptions","onSuccess","invalidateQueries","queryKey","updateMutation","update","deleteMutation","delete","item","slug","mode","onSubmit","onCancel","isPending","mutateAsync"],"mappings":";;;;;;;AAgCA,MAAMA,cAAkD;AAAA,EACtDC,SAAS;AAAA,EACTC,YAAY;AAAA,EACZC,QAAQ;AACV;AAEA,MAAMC,cAGF;AAAA,EACFH,SAAS;AAAA,EACTC,YAAY;AAAA,EACZC,QAAQ;AACV;AAEA,MAAME,UAAsD,CAC1D;AAAA,EACEC,aAAa;AAAA,EACbC,QAAQ;AACV,GACA;AAAA,EACED,aAAa;AAAA,EACbC,QAAQ;AAAA,EACRC,MAAMA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MACP,oBAAC,OAAA,EAAM,SAASL,YAAYK,IAAIC,SAASC,IAAI,GAC1CX,UAAAA,YAAYS,IAAIC,SAASC,IAAI,EAAA,CAChC;AAEJ,GACA;AAAA,EACEL,aAAa;AAAA,EACbC,QAAQ;AAAA,EACRC,MAAMA,CAAC;AAAA,IAAEC;AAAAA,EAAAA,MAAU;AACjB,UAAMG,SAASH,IAAIC,SAASE;AAC5B,QAAI,CAACA,OAAQ,4BAAQ,QAAA,EAAK,WAAU,yBAAwB,UAAA,KAAC;AAG7D,QAAIH,IAAIC,SAASC,SAAS,aAAaC,OAAOC,KAAK;AACjD,aACE,oBAAC,QAAA,EAAK,WAAU,wDACbD,iBAAOC,KACV;AAAA,IAEJ;AACA,QACEJ,IAAIC,SAASC,SAAS,gBACtBG,MAAMC,QAAQH,OAAOI,gBAAgB,GACrC;AACA,aACE,qBAAC,QAAA,EAAK,WAAU,iCACbJ,UAAAA;AAAAA,QAAAA,OAAOI,iBAAiBC;AAAAA,QAAO;AAAA,MAAA,GAClC;AAAA,IAEJ;AACA,WAAO,oBAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA,KAAC;AAAA,EAClD;AACF,CAAC;AAGH,SAASC,iBAAiB;AACxB,QAAMC,OAAOC,QAAAA;AACb,QAAMC,cAAcC,eAAAA;AACpB,QAAMC,aAAaC,MAAMC,cAAAA;AAGzB,QAAM;AAAA,IAAEC,MAAMC,kBAAkB,CAAA;AAAA,EAAA,IAAOC,SAAS;AAAA,IAC9C,GAAGT,KAAKU,eAAeC,KAAKC,aAAAA;AAAAA,IAC5BC,aACE,qBAAqBT,aAAaA,WAAWI,kBAAkB,CAAA;AAAA,EAAA,CAClE;AAED,QAAMM,iBAAiBC,YAAY;AAAA,IACjC,GAAGf,KAAKU,eAAeM,OAAOC,gBAAAA;AAAAA,IAC9BC,WAAWA,MAAM;AACfhB,kBAAYiB,kBAAkB;AAAA,QAC5BC,UAAUpB,KAAKU,eAAeC,KAAKS,SAAAA;AAAAA,MAAS,CAC7C;AAAA,IACH;AAAA,EAAA,CACD;AAED,QAAMC,iBAAiBN,YAAY;AAAA,IACjC,GAAGf,KAAKU,eAAeY,OAAOL,gBAAAA;AAAAA,IAC9BC,WAAWA,MAAM;AACfhB,kBAAYiB,kBAAkB;AAAA,QAC5BC,UAAUpB,KAAKU,eAAeC,KAAKS,SAAAA;AAAAA,MAAS,CAC7C;AAAA,IACH;AAAA,EAAA,CACD;AAED,QAAMG,iBAAiBR,YAAY;AAAA,IACjC,GAAGf,KAAKU,eAAec,OAAOP,gBAAAA;AAAAA,IAC9BC,WAAWA,MAAM;AACfhB,kBAAYiB,kBAAkB;AAAA,QAC5BC,UAAUpB,KAAKU,eAAeC,KAAKS,SAAAA;AAAAA,MAAS,CAC7C;AAAA,IACH;AAAA,EAAA,CACD;AAED,SACE,oBAAC,SAAI,WAAU,OACb,8BAAC,UAAA,EACC,MAAMZ,iBACN,SACA,UAAWiB,UAASA,KAAKC,MACzB,OAAM,oBACN,mBAAkB,cAClB,cAAa,kCACb,YAAY,CAAC;AAAA,IAAEC;AAAAA,IAAMF;AAAAA,IAAMG;AAAAA,IAAUC;AAAAA,IAAUC;AAAAA,EAAAA,MAC7C,oBAAC,oBAAA,EACC,MACA,aAAaL,MACb,UACA,UACA,UAAA,CAAqB,GAGzB,UAAU,OAAOlB,SAAc;AAC7B,UAAMO,eAAeiB,YAAYxB,IAAI;AAAA,EACvC,GACA,UAAU,OAAOA,SAAc;AAC7B,UAAMc,eAAeU,YAAYxB,IAAI;AAAA,EACvC,GACA,UAAU,OAAOkB,SAAS;AACxB,UAAMF,eAAeQ,YAAY;AAAA,MAAEL,MAAMD,KAAKC;AAAAA,IAAAA,CAAM;AAAA,EACtD,GAAE,EAAA,CAEN;AAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/approval-methods", "/admin/approval-methods", "/admin/approval-methods", "/admin/approval-methods", undefined, import('@tanstack/router-core').ResolveParams<"/approval-methods">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
+
const $$splitComponentImporter = () => import("./approval-methods2.js");
|
|
3
|
+
const Route = createFileRoute("/admin/approval-methods")({
|
|
4
|
+
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
5
|
+
staticData: {
|
|
6
|
+
breadcrumb: {
|
|
7
|
+
title: "Approval Methods"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export {
|
|
12
|
+
Route
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=approval-methods.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-methods.js","sources":["../../../../src/routes/admin/approval-methods.tsx"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/approval-methods')({\n component: () => <Outlet />,\n staticData: {\n breadcrumb: {\n title: 'Approval Methods',\n },\n },\n})\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter","staticData","breadcrumb","title"],"mappings":";;AAEO,MAAMA,QAAQC,gBAAgB,yBAAyB,EAAE;AAAA,EAC9DC,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACTC,YAAY;AAAA,IACVC,YAAY;AAAA,MACVC,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ,CAAC;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-methods2.js","sources":["../../../../src/routes/admin/approval-methods.tsx?tsr-split=component"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/approval-methods')({\n component: () => <Outlet />,\n staticData: {\n breadcrumb: {\n title: 'Approval Methods',\n },\n },\n})\n"],"names":["SplitComponent"],"mappings":";;AAAgE,MAAAA,iBAGnDA,MAAM,oBAAC,QAAA,CAAA,CAAM;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/chat", "/admin/chat", "/admin/chat", "/admin/chat", undefined, import('@tanstack/router-core').ResolveParams<"/chat">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
+
const $$splitComponentImporter = () => import("./chat2.js");
|
|
3
|
+
const Route = createFileRoute("/admin/chat")({
|
|
4
|
+
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
5
|
+
staticData: {
|
|
6
|
+
breadcrumb: {
|
|
7
|
+
title: "Chat"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export {
|
|
12
|
+
Route
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sources":["../../../../src/routes/admin/chat.tsx"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router'\nimport { AdminChat } from '~/modules/admin-base'\n\nexport const Route = createFileRoute('/admin/chat')({\n component: RouteComponent,\n staticData: {\n breadcrumb: { title: 'Chat' },\n },\n})\n\nfunction RouteComponent() {\n return <AdminChat />\n}\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter","staticData","breadcrumb","title"],"mappings":";;AAGO,MAAMA,QAAQC,gBAAgB,aAAa,EAAE;AAAA,EAClDC,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACTC,YAAY;AAAA,IACVC,YAAY;AAAA,MAAEC,OAAO;AAAA,IAAA;AAAA,EAAO;AAEhC,CAAC;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { AdminChat } from "../../modules/admin-base/components/AdminChat.js";
|
|
3
|
+
function RouteComponent() {
|
|
4
|
+
return /* @__PURE__ */ jsx(AdminChat, {});
|
|
5
|
+
}
|
|
6
|
+
export {
|
|
7
|
+
RouteComponent as component
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=chat2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat2.js","sources":["../../../../src/routes/admin/chat.tsx?tsr-split=component"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router'\nimport { AdminChat } from '~/modules/admin-base'\n\nexport const Route = createFileRoute('/admin/chat')({\n component: RouteComponent,\n staticData: {\n breadcrumb: { title: 'Chat' },\n },\n})\n\nfunction RouteComponent() {\n return <AdminChat />\n}\n"],"names":["RouteComponent"],"mappings":";;AAUA,SAASA,iBAAiB;AACxB,6BAAQ,WAAA,EAAS;AACnB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/icons", "/admin/icons", "/admin/icons", "/admin/icons", undefined, import('@tanstack/router-core').ResolveParams<"/icons">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
+
const $$splitComponentImporter = () => import("./icons2.js");
|
|
3
|
+
const Route = createFileRoute("/admin/icons")({
|
|
4
|
+
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
5
|
+
staticData: {
|
|
6
|
+
breadcrumb: {
|
|
7
|
+
title: "Icons"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export {
|
|
12
|
+
Route
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sources":["../../../../src/routes/admin/icons.tsx"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router'\nimport { IconManagementPage } from '~/modules/icons/IconManagementPage'\n\nexport const Route = createFileRoute('/admin/icons')({\n component: IconsAdminPage,\n staticData: {\n breadcrumb: { title: 'Icons' },\n },\n})\n\nfunction IconsAdminPage() {\n return (\n <div className=\"flex-1 flex flex-col\">\n <div className=\"border-b px-6 py-4\">\n <h2 className=\"text-xl font-semibold\">Icons</h2>\n </div>\n <div className=\"flex-1 overflow-auto p-6\">\n <IconManagementPage />\n </div>\n </div>\n )\n}\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter","staticData","breadcrumb","title"],"mappings":";;AAGO,MAAMA,QAAQC,gBAAgB,cAAc,EAAE;AAAA,EACnDC,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACTC,YAAY;AAAA,IACVC,YAAY;AAAA,MAAEC,OAAO;AAAA,IAAA;AAAA,EAAQ;AAEjC,CAAC;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { IconManagementPage } from "../../modules/icons/IconManagementPage.js";
|
|
3
|
+
function IconsAdminPage() {
|
|
4
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col", children: [
|
|
5
|
+
/* @__PURE__ */ jsx("div", { className: "border-b px-6 py-4", children: /* @__PURE__ */ jsx("h2", { className: "text-xl font-semibold", children: "Icons" }) }),
|
|
6
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto p-6", children: /* @__PURE__ */ jsx(IconManagementPage, {}) })
|
|
7
|
+
] });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
IconsAdminPage as component
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=icons2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons2.js","sources":["../../../../src/routes/admin/icons.tsx?tsr-split=component"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router'\nimport { IconManagementPage } from '~/modules/icons/IconManagementPage'\n\nexport const Route = createFileRoute('/admin/icons')({\n component: IconsAdminPage,\n staticData: {\n breadcrumb: { title: 'Icons' },\n },\n})\n\nfunction IconsAdminPage() {\n return (\n <div className=\"flex-1 flex flex-col\">\n <div className=\"border-b px-6 py-4\">\n <h2 className=\"text-xl font-semibold\">Icons</h2>\n </div>\n <div className=\"flex-1 overflow-auto p-6\">\n <IconManagementPage />\n </div>\n </div>\n )\n}\n"],"names":["IconsAdminPage"],"mappings":";;AAUA,SAASA,iBAAiB;AACxB,SACE,qBAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,sBACb,UAAA,oBAAC,QAAG,WAAU,yBAAwB,mBAAK,EAAA,CAC7C;AAAA,wBACC,OAAA,EAAI,WAAU,4BACb,UAAA,oBAAC,sBAAkB,EAAA,CACrB;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/", "/admin/", "/admin/", "/admin/", undefined, import('@tanstack/router-core').ResolveParams<"/">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
+
const $$splitComponentImporter = () => import("./index2.js");
|
|
3
|
+
const Route = createFileRoute("/admin/")({
|
|
4
|
+
component: lazyRouteComponent($$splitComponentImporter, "component")
|
|
5
|
+
});
|
|
6
|
+
export {
|
|
7
|
+
Route
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/routes/admin/index.tsx"],"sourcesContent":["import { Navigate, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/')({\n component: AdminIndexPage,\n})\n\nfunction AdminIndexPage() {\n return <Navigate to=\"/admin/chat\" replace />\n}\n"],"names":["Route","createFileRoute","component","lazyRouteComponent","$$splitComponentImporter"],"mappings":";;AAEO,MAAMA,QAAQC,gBAAgB,SAAS,EAAE;AAAA,EAC9CC,WAASC,mBAAAC,0BAAA,WAAA;AACX,CAAC;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Navigate } from "@tanstack/react-router";
|
|
3
|
+
function AdminIndexPage() {
|
|
4
|
+
return /* @__PURE__ */ jsx(Navigate, { to: "/admin/chat", replace: true });
|
|
5
|
+
}
|
|
6
|
+
export {
|
|
7
|
+
AdminIndexPage as component
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","sources":["../../../../src/routes/admin/index.tsx?tsr-split=component"],"sourcesContent":["import { Navigate, createFileRoute } from '@tanstack/react-router'\n\nexport const Route = createFileRoute('/admin/')({\n component: AdminIndexPage,\n})\n\nfunction AdminIndexPage() {\n return <Navigate to=\"/admin/chat\" replace />\n}\n"],"names":["AdminIndexPage"],"mappings":";;AAMA,SAASA,iBAAiB;AACxB,SAAO,oBAAC,UAAA,EAAS,IAAG,eAAc,SAAO,MAAA;AAC3C;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/admin", "/admin", "/admin", "/admin", undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, ({ context }: import('@tanstack/router-core').BeforeLoadContextOptions<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, undefined, import('@tanstack/router-core').ResolveParams<"/admin">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, unknown, undefined>) => Promise<void>, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
2
|
+
import { AuthorizationError } from "../errors/AuthorizationError.js";
|
|
3
|
+
import { isAdmin } from "../modules/auth/authUtils.js";
|
|
4
|
+
const $$splitComponentImporter = () => import("./admin2.js");
|
|
5
|
+
const Route = createFileRoute("/admin")({
|
|
6
|
+
beforeLoad: async ({
|
|
7
|
+
context
|
|
8
|
+
}) => {
|
|
9
|
+
const session = await context.trpcClient.auth.getSession.query();
|
|
10
|
+
const user = session.user;
|
|
11
|
+
if (!user) {
|
|
12
|
+
throw new AuthorizationError({
|
|
13
|
+
message: "You must be logged in to access the admin panel",
|
|
14
|
+
resource: "Admin Panel"
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const authConfig = await context.trpcClient.authConfig.query();
|
|
18
|
+
const adminGroups = authConfig.adminGroups;
|
|
19
|
+
if (!isAdmin(user, adminGroups)) {
|
|
20
|
+
throw new AuthorizationError({
|
|
21
|
+
message: "You need administrator privileges to access this area",
|
|
22
|
+
requiredRoles: adminGroups,
|
|
23
|
+
resource: "Admin Panel"
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
28
|
+
staticData: {
|
|
29
|
+
breadcrumb: {
|
|
30
|
+
title: "Admin"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
export {
|
|
35
|
+
Route
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sources":["../../../src/routes/admin.tsx"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\nimport { ThemeProvider } from '~/components/theme-provider'\nimport { AdminConfigProvider, AdminLayout } from '~/modules/admin-base'\nimport { TopLevelProviders } from '~/ui/layout/TopLevelProviders'\nimport { AuthorizationError } from '~/errors/AuthorizationError'\nimport { isAdmin } from '~/modules/auth/authUtils'\n\nexport const Route = createFileRoute('/admin')({\n beforeLoad: async ({ context }) => {\n // Fetch current user session with groups from tRPC (not better-auth's /api/auth/session)\n const session = await context.trpcClient.auth.getSession.query()\n const user = session.user\n\n // Check if user is authenticated\n if (!user) {\n throw new AuthorizationError({\n message: 'You must be logged in to access the admin panel',\n resource: 'Admin Panel',\n })\n }\n\n // Fetch auth config from backend to get adminGroups\n const authConfig = await context.trpcClient.authConfig.query()\n const adminGroups = authConfig.adminGroups\n\n // Check if user has admin role\n if (!isAdmin(user, adminGroups)) {\n throw new AuthorizationError({\n message: 'You need administrator privileges to access this area',\n requiredRoles: adminGroups,\n resource: 'Admin Panel',\n })\n }\n },\n component: AdminLayoutRoute,\n staticData: {\n breadcrumb: { title: 'Admin' },\n },\n})\n\nfunction AdminLayoutRoute() {\n const { queryClient, trpcClient } = Route.useRouteContext()\n\n return (\n <TopLevelProviders queryClient={queryClient} trpcClient={trpcClient}>\n <ThemeProvider\n attribute=\"class\"\n defaultTheme=\"system\"\n enableSystem\n disableTransitionOnChange\n >\n <AdminConfigProvider>\n <AdminLayout>\n <Outlet />\n </AdminLayout>\n </AdminConfigProvider>\n </ThemeProvider>\n </TopLevelProviders>\n )\n}\n"],"names":["Route","createFileRoute","beforeLoad","context","session","trpcClient","auth","getSession","query","user","AuthorizationError","message","resource","authConfig","adminGroups","isAdmin","requiredRoles","component","lazyRouteComponent","$$splitComponentImporter","staticData","breadcrumb","title"],"mappings":";;;;AAOO,MAAMA,QAAQC,gBAAgB,QAAQ,EAAE;AAAA,EAC7CC,YAAY,OAAO;AAAA,IAAEC;AAAAA,EAAAA,MAAc;AAEjC,UAAMC,UAAU,MAAMD,QAAQE,WAAWC,KAAKC,WAAWC,MAAAA;AACzD,UAAMC,OAAOL,QAAQK;AAGrB,QAAI,CAACA,MAAM;AACT,YAAM,IAAIC,mBAAmB;AAAA,QAC3BC,SAAS;AAAA,QACTC,UAAU;AAAA,MAAA,CACX;AAAA,IACH;AAGA,UAAMC,aAAa,MAAMV,QAAQE,WAAWQ,WAAWL,MAAAA;AACvD,UAAMM,cAAcD,WAAWC;AAG/B,QAAI,CAACC,QAAQN,MAAMK,WAAW,GAAG;AAC/B,YAAM,IAAIJ,mBAAmB;AAAA,QAC3BC,SAAS;AAAA,QACTK,eAAeF;AAAAA,QACfF,UAAU;AAAA,MAAA,CACX;AAAA,IACH;AAAA,EACF;AAAA,EACAK,WAASC,mBAAAC,0BAAA,WAAA;AAAA,EACTC,YAAY;AAAA,IACVC,YAAY;AAAA,MAAEC,OAAO;AAAA,IAAA;AAAA,EAAQ;AAEjC,CAAC;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Outlet } from "@tanstack/react-router";
|
|
3
|
+
import { ThemeProvider } from "../components/theme-provider.js";
|
|
4
|
+
import { AdminLayout } from "../modules/admin-base/components/AdminLayout.js";
|
|
5
|
+
import { AdminConfigProvider } from "../modules/admin-base/context/AdminConfigContext.js";
|
|
6
|
+
import { TopLevelProviders } from "../ui/layout/TopLevelProviders.js";
|
|
7
|
+
import { Route } from "./admin.js";
|
|
8
|
+
function AdminLayoutRoute() {
|
|
9
|
+
const {
|
|
10
|
+
queryClient,
|
|
11
|
+
trpcClient
|
|
12
|
+
} = Route.useRouteContext();
|
|
13
|
+
return /* @__PURE__ */ jsx(TopLevelProviders, { queryClient, trpcClient, children: /* @__PURE__ */ jsx(ThemeProvider, { attribute: "class", defaultTheme: "system", enableSystem: true, disableTransitionOnChange: true, children: /* @__PURE__ */ jsx(AdminConfigProvider, { children: /* @__PURE__ */ jsx(AdminLayout, { children: /* @__PURE__ */ jsx(Outlet, {}) }) }) }) });
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
AdminLayoutRoute as component
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=admin2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin2.js","sources":["../../../src/routes/admin.tsx?tsr-split=component"],"sourcesContent":["import { Outlet, createFileRoute } from '@tanstack/react-router'\nimport { ThemeProvider } from '~/components/theme-provider'\nimport { AdminConfigProvider, AdminLayout } from '~/modules/admin-base'\nimport { TopLevelProviders } from '~/ui/layout/TopLevelProviders'\nimport { AuthorizationError } from '~/errors/AuthorizationError'\nimport { isAdmin } from '~/modules/auth/authUtils'\n\nexport const Route = createFileRoute('/admin')({\n beforeLoad: async ({ context }) => {\n // Fetch current user session with groups from tRPC (not better-auth's /api/auth/session)\n const session = await context.trpcClient.auth.getSession.query()\n const user = session.user\n\n // Check if user is authenticated\n if (!user) {\n throw new AuthorizationError({\n message: 'You must be logged in to access the admin panel',\n resource: 'Admin Panel',\n })\n }\n\n // Fetch auth config from backend to get adminGroups\n const authConfig = await context.trpcClient.authConfig.query()\n const adminGroups = authConfig.adminGroups\n\n // Check if user has admin role\n if (!isAdmin(user, adminGroups)) {\n throw new AuthorizationError({\n message: 'You need administrator privileges to access this area',\n requiredRoles: adminGroups,\n resource: 'Admin Panel',\n })\n }\n },\n component: AdminLayoutRoute,\n staticData: {\n breadcrumb: { title: 'Admin' },\n },\n})\n\nfunction AdminLayoutRoute() {\n const { queryClient, trpcClient } = Route.useRouteContext()\n\n return (\n <TopLevelProviders queryClient={queryClient} trpcClient={trpcClient}>\n <ThemeProvider\n attribute=\"class\"\n defaultTheme=\"system\"\n enableSystem\n disableTransitionOnChange\n >\n <AdminConfigProvider>\n <AdminLayout>\n <Outlet />\n </AdminLayout>\n </AdminConfigProvider>\n </ThemeProvider>\n </TopLevelProviders>\n )\n}\n"],"names":["AdminLayoutRoute","queryClient","trpcClient","Route","useRouteContext"],"mappings":";;;;;;;AAwCA,SAASA,mBAAmB;AAC1B,QAAM;AAAA,IAAEC;AAAAA,IAAaC;AAAAA,EAAAA,IAAeC,MAAMC,gBAAAA;AAE1C,SACE,oBAAC,qBAAkB,aAA0B,YAC3C,8BAAC,eAAA,EACC,WAAU,SACV,cAAa,UACb,cAAY,MACZ,2BAAyB,MAEzB,UAAA,oBAAC,qBAAA,EACC,UAAA,oBAAC,aAAA,EACC,8BAAC,QAAA,CAAA,CAAM,EAAA,CACT,EAAA,CACF,EAAA,CACF,GACF;AAEJ;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const Route: import('@tanstack/router-core').Route<import('@tanstack/react-router').Register, import('@tanstack/react-router').RootRoute<import('@tanstack/react-router').Register, undefined, import('../types/types.js').EhRouterContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>, "/auth/callback", "/auth/callback", "/auth/callback", "/auth/callback", (search: Record<string, unknown>) => {
|
|
2
|
+
error: string | undefined;
|
|
3
|
+
code: string | undefined;
|
|
4
|
+
}, import('@tanstack/router-core').ResolveParams<"/auth/callback">, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, import('@tanstack/router-core').AnyContext, {}, undefined, unknown, unknown, unknown, unknown, undefined>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createFileRoute, useNavigate, useSearch } from "@tanstack/react-router";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
const Route = createFileRoute("/auth/callback")({
|
|
5
|
+
component: AuthCallbackPage,
|
|
6
|
+
validateSearch: (search) => ({
|
|
7
|
+
error: search.error,
|
|
8
|
+
code: search.code
|
|
9
|
+
})
|
|
10
|
+
});
|
|
11
|
+
function AuthCallbackPage() {
|
|
12
|
+
const navigate = useNavigate();
|
|
13
|
+
const search = useSearch({ from: "/auth/callback" });
|
|
14
|
+
const errorMessages = {
|
|
15
|
+
"internal_server_error": "An internal server error occurred. Please try again.",
|
|
16
|
+
"invalid_request": "Invalid authentication request. Please try again.",
|
|
17
|
+
"access_denied": "Authentication was denied. Please try again.",
|
|
18
|
+
"unauthorized_client": "This client is not authorized. Please contact support.",
|
|
19
|
+
"server_error": "Server error occurred. Please try again.",
|
|
20
|
+
"temporarily_unavailable": "Authentication service is temporarily unavailable. Please try again later."
|
|
21
|
+
};
|
|
22
|
+
const displayMessage = search.error ? errorMessages[search.error] || `Authentication failed: ${search.error}` : "";
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
let cleanup;
|
|
25
|
+
if (search.error) {
|
|
26
|
+
const timer = setTimeout(() => {
|
|
27
|
+
navigate({ to: "/" });
|
|
28
|
+
}, 5e3);
|
|
29
|
+
cleanup = () => clearTimeout(timer);
|
|
30
|
+
} else if (!search.code) {
|
|
31
|
+
navigate({ to: "/" });
|
|
32
|
+
}
|
|
33
|
+
return cleanup;
|
|
34
|
+
}, [search.error, search.code, navigate]);
|
|
35
|
+
if (search.error) {
|
|
36
|
+
return /* @__PURE__ */ jsx("div", { className: "min-h-screen bg-base-200 flex items-center justify-center p-4", children: /* @__PURE__ */ jsx("div", { className: "card bg-base-100 shadow-xl max-w-md w-full", children: /* @__PURE__ */ jsxs("div", { className: "card-body", children: [
|
|
37
|
+
/* @__PURE__ */ jsx("h2", { className: "card-title text-error", children: "Authentication Error" }),
|
|
38
|
+
/* @__PURE__ */ jsx("p", { className: "text-base-content/70", children: displayMessage }),
|
|
39
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-base-content/50 mt-4", children: "Redirecting you back home in a few seconds..." }),
|
|
40
|
+
/* @__PURE__ */ jsx("div", { className: "card-actions justify-end mt-4", children: /* @__PURE__ */ jsx(
|
|
41
|
+
"button",
|
|
42
|
+
{
|
|
43
|
+
type: "button",
|
|
44
|
+
className: "btn btn-sm btn-primary",
|
|
45
|
+
onClick: () => navigate({ to: "/" }),
|
|
46
|
+
children: "Go Home Now"
|
|
47
|
+
}
|
|
48
|
+
) })
|
|
49
|
+
] }) }) });
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
Route
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=auth.callback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.callback.js","sources":["../../../src/routes/auth.callback.tsx"],"sourcesContent":["import { createFileRoute, useNavigate, useSearch } from '@tanstack/react-router'\nimport { useEffect } from 'react'\n\nexport const Route = createFileRoute('/auth/callback')({\n component: AuthCallbackPage,\n validateSearch: (search: Record<string, unknown>) => ({\n error: search.error as string | undefined,\n code: search.code as string | undefined,\n }),\n})\n\nfunction AuthCallbackPage() {\n const navigate = useNavigate()\n const search = useSearch({ from: '/auth/callback' })\n\n const errorMessages: Record<string, string> = {\n 'internal_server_error': 'An internal server error occurred. Please try again.',\n 'invalid_request': 'Invalid authentication request. Please try again.',\n 'access_denied': 'Authentication was denied. Please try again.',\n 'unauthorized_client': 'This client is not authorized. Please contact support.',\n 'server_error': 'Server error occurred. Please try again.',\n 'temporarily_unavailable': 'Authentication service is temporarily unavailable. Please try again later.',\n }\n\n const displayMessage = search.error\n ? errorMessages[search.error] || `Authentication failed: ${search.error}`\n : ''\n\n useEffect(() => {\n let cleanup: (() => void) | undefined\n\n if (search.error) {\n // Redirect to home after 5 seconds\n const timer = setTimeout(() => {\n navigate({ to: '/' })\n }, 5000)\n\n cleanup = () => clearTimeout(timer)\n } else if (!search.code) {\n // If no error and no code, redirect immediately\n navigate({ to: '/' })\n }\n\n return cleanup\n }, [search.error, search.code, navigate])\n\n if (search.error) {\n return (\n <div className=\"min-h-screen bg-base-200 flex items-center justify-center p-4\">\n <div className=\"card bg-base-100 shadow-xl max-w-md w-full\">\n <div className=\"card-body\">\n <h2 className=\"card-title text-error\">Authentication Error</h2>\n <p className=\"text-base-content/70\">{displayMessage}</p>\n <p className=\"text-sm text-base-content/50 mt-4\">\n Redirecting you back home in a few seconds...\n </p>\n <div className=\"card-actions justify-end mt-4\">\n <button\n type=\"button\"\n className=\"btn btn-sm btn-primary\"\n onClick={() => navigate({ to: '/' })}\n >\n Go Home Now\n </button>\n </div>\n </div>\n </div>\n </div>\n )\n }\n\n // Success case - redirect immediately\n return null\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,QAAQ,gBAAgB,gBAAgB,EAAE;AAAA,EACrD,WAAW;AAAA,EACX,gBAAgB,CAAC,YAAqC;AAAA,IACpD,OAAO,OAAO;AAAA,IACd,MAAM,OAAO;AAAA,EAAA;AAEjB,CAAC;AAED,SAAS,mBAAmB;AAC1B,QAAM,WAAW,YAAA;AACjB,QAAM,SAAS,UAAU,EAAE,MAAM,kBAAkB;AAEnD,QAAM,gBAAwC;AAAA,IAC5C,yBAAyB;AAAA,IACzB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,uBAAuB;AAAA,IACvB,gBAAgB;AAAA,IAChB,2BAA2B;AAAA,EAAA;AAG7B,QAAM,iBAAiB,OAAO,QAC1B,cAAc,OAAO,KAAK,KAAK,0BAA0B,OAAO,KAAK,KACrE;AAEJ,YAAU,MAAM;AACd,QAAI;AAEJ,QAAI,OAAO,OAAO;AAEhB,YAAM,QAAQ,WAAW,MAAM;AAC7B,iBAAS,EAAE,IAAI,KAAK;AAAA,MACtB,GAAG,GAAI;AAEP,gBAAU,MAAM,aAAa,KAAK;AAAA,IACpC,WAAW,CAAC,OAAO,MAAM;AAEvB,eAAS,EAAE,IAAI,KAAK;AAAA,IACtB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,OAAO,OAAO,OAAO,MAAM,QAAQ,CAAC;AAExC,MAAI,OAAO,OAAO;AAChB,WACE,oBAAC,OAAA,EAAI,WAAU,iEACb,UAAA,oBAAC,OAAA,EAAI,WAAU,8CACb,UAAA,qBAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,MAAA,oBAAC,MAAA,EAAG,WAAU,yBAAwB,UAAA,wBAAoB;AAAA,MAC1D,oBAAC,KAAA,EAAE,WAAU,wBAAwB,UAAA,gBAAe;AAAA,MACpD,oBAAC,KAAA,EAAE,WAAU,qCAAoC,UAAA,iDAEjD;AAAA,MACA,oBAAC,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS,MAAM,SAAS,EAAE,IAAI,KAAK;AAAA,UACpC,UAAA;AAAA,QAAA;AAAA,MAAA,EAED,CACF;AAAA,IAAA,EAAA,CACF,GACF,GACF;AAAA,EAEJ;AAGA,SAAO;AACT;"}
|