@solidxai/core-ui 0.1.12-beta.6 → 0.1.12-beta.8
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/dist/components/auth/AuthLayout.d.ts.map +1 -1
- package/dist/components/auth/AuthLayout.js +19 -17
- package/dist/components/auth/AuthLayout.js.map +1 -1
- package/dist/components/auth/AuthLayout.tsx +59 -34
- package/dist/components/common/BackendReconnectIndicator.d.ts +6 -0
- package/dist/components/common/BackendReconnectIndicator.d.ts.map +1 -0
- package/dist/components/common/BackendReconnectIndicator.js +25 -0
- package/dist/components/common/BackendReconnectIndicator.js.map +1 -0
- package/dist/components/common/BackendReconnectIndicator.tsx +45 -0
- package/dist/components/common/SettingsComponent.d.ts.map +1 -1
- package/dist/components/common/SettingsComponent.js +7 -3
- package/dist/components/common/SettingsComponent.js.map +1 -1
- package/dist/components/common/SettingsComponent.module.css +144 -12
- package/dist/components/common/SettingsComponent.tsx +22 -3
- package/dist/components/common/SolidAdmin.d.ts.map +1 -1
- package/dist/components/common/SolidAdmin.js +7 -2
- package/dist/components/common/SolidAdmin.js.map +1 -1
- package/dist/components/common/SolidAdmin.tsx +7 -2
- package/dist/components/common/SolidBreadcrumb.d.ts.map +1 -1
- package/dist/components/common/SolidBreadcrumb.js +1 -6
- package/dist/components/common/SolidBreadcrumb.js.map +1 -1
- package/dist/components/common/SolidBreadcrumb.tsx +1 -8
- package/dist/components/common/SolidMaterialSymbol.d.ts +10 -0
- package/dist/components/common/SolidMaterialSymbol.d.ts.map +1 -0
- package/dist/components/common/SolidMaterialSymbol.js +69 -0
- package/dist/components/common/SolidMaterialSymbol.js.map +1 -0
- package/dist/components/common/SolidMaterialSymbol.tsx +96 -0
- package/dist/components/common/SolidToastProvider.d.ts.map +1 -1
- package/dist/components/common/SolidToastProvider.js +14 -1
- package/dist/components/common/SolidToastProvider.js.map +1 -1
- package/dist/components/common/SolidToastProvider.tsx +19 -1
- package/dist/components/core/card/CardGrid.d.ts +1 -1
- package/dist/components/core/card/CardGrid.d.ts.map +1 -1
- package/dist/components/core/card/CardGrid.js +2 -2
- package/dist/components/core/card/CardGrid.js.map +1 -1
- package/dist/components/core/card/CardGrid.tsx +4 -0
- package/dist/components/core/card/CardItem.d.ts +2 -0
- package/dist/components/core/card/CardItem.d.ts.map +1 -1
- package/dist/components/core/card/CardItem.js +7 -2
- package/dist/components/core/card/CardItem.js.map +1 -1
- package/dist/components/core/card/CardItem.tsx +30 -8
- package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
- package/dist/components/core/card/SolidCardView.js +87 -21
- package/dist/components/core/card/SolidCardView.js.map +1 -1
- package/dist/components/core/card/SolidCardView.tsx +96 -40
- package/dist/components/core/card/SolidCardViewConfigure.d.ts +1 -1
- package/dist/components/core/card/SolidCardViewConfigure.d.ts.map +1 -1
- package/dist/components/core/card/SolidCardViewConfigure.js +9 -7
- package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
- package/dist/components/core/card/SolidCardViewConfigure.tsx +14 -1
- package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +3 -1
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +4 -3
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.tsx +15 -19
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +43 -16
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
- package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +24 -2
- package/dist/components/core/form/SolidFormFooter.js +1 -1
- package/dist/components/core/form/SolidFormFooter.js.map +1 -1
- package/dist/components/core/form/SolidFormFooter.tsx +1 -1
- package/dist/components/core/form/SolidFormLayouts.js +1 -1
- package/dist/components/core/form/SolidFormLayouts.js.map +1 -1
- package/dist/components/core/form/SolidFormLayouts.tsx +2 -2
- package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.js +120 -56
- package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +63 -50
- package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.js +115 -37
- package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/form/fields/SolidMediaSingleField.tsx +36 -35
- package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
- package/dist/components/core/form/fields/SolidRichTextField.js +67 -4
- package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
- package/dist/components/core/form/fields/SolidRichTextField.tsx +89 -7
- package/dist/components/core/form/fields/mediaFieldUtils.d.ts +3 -0
- package/dist/components/core/form/fields/mediaFieldUtils.d.ts.map +1 -0
- package/dist/components/core/form/fields/mediaFieldUtils.js +30 -0
- package/dist/components/core/form/fields/mediaFieldUtils.js.map +1 -0
- package/dist/components/core/form/fields/mediaFieldUtils.ts +45 -0
- package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js +1 -1
- package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js.map +1 -1
- package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx +3 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +22 -23
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
- package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +13 -7
- package/dist/components/core/form/fields/widgets/SolidIconEditWidget.d.ts.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js +16 -11
- package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +32 -18
- package/dist/components/core/form/fields/widgets/SolidIconViewWidget.d.ts.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidIconViewWidget.js +3 -1
- package/dist/components/core/form/fields/widgets/SolidIconViewWidget.js.map +1 -1
- package/dist/components/core/form/fields/widgets/SolidIconViewWidget.tsx +11 -5
- package/dist/components/core/kanban/KanbanBoard.d.ts +1 -1
- package/dist/components/core/kanban/KanbanBoard.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanBoard.js +2 -2
- package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
- package/dist/components/core/kanban/KanbanBoard.tsx +3 -1
- package/dist/components/core/kanban/KanbanCard.d.ts +2 -0
- package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanCard.js +10 -5
- package/dist/components/core/kanban/KanbanCard.js.map +1 -1
- package/dist/components/core/kanban/KanbanCard.tsx +28 -12
- package/dist/components/core/kanban/KanbanColumn.d.ts +3 -1
- package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanColumn.js +2 -2
- package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
- package/dist/components/core/kanban/KanbanColumn.tsx +4 -2
- package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.js +154 -25
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.tsx +129 -16
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js +13 -10
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +18 -3
- package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
- package/dist/components/core/list/SolidDataTable.js +3 -2
- package/dist/components/core/list/SolidDataTable.js.map +1 -1
- package/dist/components/core/list/SolidDataTable.tsx +3 -2
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +16 -5
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +20 -8
- package/dist/components/core/list/SolidListViewColumn.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewColumn.js +1 -0
- package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
- package/dist/components/core/list/SolidListViewColumn.tsx +1 -0
- package/dist/components/core/list/columns/SolidShortTextColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidShortTextColumn.js +7 -2
- package/dist/components/core/list/columns/SolidShortTextColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidShortTextColumn.tsx +7 -2
- package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js +4 -1
- package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js.map +1 -1
- package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.tsx +5 -2
- package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +2 -1
- package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
- package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +2 -1
- package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js +4 -1
- package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js.map +1 -1
- package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.tsx +5 -2
- package/dist/components/core/locales/SolidLocale.d.ts.map +1 -1
- package/dist/components/core/locales/SolidLocale.js +1 -1
- package/dist/components/core/locales/SolidLocale.js.map +1 -1
- package/dist/components/core/locales/SolidLocale.tsx +1 -0
- package/dist/components/core/model/CreateModel.css +26 -0
- package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
- package/dist/components/core/model/FieldMetaData.js +21 -3
- package/dist/components/core/model/FieldMetaData.js.map +1 -1
- package/dist/components/core/model/FieldMetaData.tsx +45 -4
- package/dist/components/core/model/FieldMetaDataForm.css +82 -0
- package/dist/components/core/model/FieldMetaDataForm.d.ts +1 -0
- package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.js +246 -235
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.tsx +46 -34
- package/dist/components/core/model/FieldSelector.js +1 -1
- package/dist/components/core/model/FieldSelector.js.map +1 -1
- package/dist/components/core/model/FieldSelector.tsx +1 -1
- package/dist/components/core/model/ModelMetaData.js +1 -1
- package/dist/components/core/model/ModelMetaData.js.map +1 -1
- package/dist/components/core/model/ModelMetaData.tsx +1 -1
- package/dist/components/core/module/CreateModule.css +55 -2
- package/dist/components/core/module/CreateModule.d.ts.map +1 -1
- package/dist/components/core/module/CreateModule.js +2 -2
- package/dist/components/core/module/CreateModule.js.map +1 -1
- package/dist/components/core/module/CreateModule.tsx +3 -2
- package/dist/components/core/module/ModuleMetadataExplorer.css +27 -0
- package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.js +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.tsx +1 -0
- package/dist/components/core/tree/SolidTreeTable.d.ts +2 -1
- package/dist/components/core/tree/SolidTreeTable.d.ts.map +1 -1
- package/dist/components/core/tree/SolidTreeTable.js +2 -2
- package/dist/components/core/tree/SolidTreeTable.js.map +1 -1
- package/dist/components/core/tree/SolidTreeTable.tsx +3 -1
- package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
- package/dist/components/core/tree/SolidTreeView.js +44 -16
- package/dist/components/core/tree/SolidTreeView.js.map +1 -1
- package/dist/components/core/tree/SolidTreeView.tsx +55 -24
- package/dist/components/core/users/CreateUser.d.ts.map +1 -1
- package/dist/components/core/users/CreateUser.js +45 -32
- package/dist/components/core/users/CreateUser.js.map +1 -1
- package/dist/components/core/users/CreateUser.tsx +15 -4
- package/dist/components/layout/AdminHeaderActions.d.ts.map +1 -1
- package/dist/components/layout/AdminHeaderActions.js +10 -9
- package/dist/components/layout/AdminHeaderActions.js.map +1 -1
- package/dist/components/layout/AdminHeaderActions.tsx +2 -0
- package/dist/components/layout/AppSidebar.d.ts.map +1 -1
- package/dist/components/layout/AppSidebar.js +2 -1
- package/dist/components/layout/AppSidebar.js.map +1 -1
- package/dist/components/layout/AppSidebar.tsx +12 -5
- package/dist/components/layout/SolidMenuItemIcon.d.ts +9 -0
- package/dist/components/layout/SolidMenuItemIcon.d.ts.map +1 -0
- package/dist/components/layout/SolidMenuItemIcon.js +20 -0
- package/dist/components/layout/SolidMenuItemIcon.js.map +1 -0
- package/dist/components/layout/SolidMenuItemIcon.tsx +45 -0
- package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
- package/dist/components/layout/navbar-two-menu.js +6 -7
- package/dist/components/layout/navbar-two-menu.js.map +1 -1
- package/dist/components/layout/navbar-two-menu.tsx +4 -12
- package/dist/components/shad-cn-ui/SolidCodeEditor.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidCodeEditor.js +30 -2
- package/dist/components/shad-cn-ui/SolidCodeEditor.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidCodeEditor.tsx +38 -1
- package/dist/helpers/backendHealthMonitor.d.ts +39 -0
- package/dist/helpers/backendHealthMonitor.d.ts.map +1 -0
- package/dist/helpers/backendHealthMonitor.js +255 -0
- package/dist/helpers/backendHealthMonitor.js.map +1 -0
- package/dist/helpers/backendHealthMonitor.ts +177 -0
- package/dist/helpers/helpers.d.ts +1 -0
- package/dist/helpers/helpers.d.ts.map +1 -1
- package/dist/helpers/helpers.js +9 -0
- package/dist/helpers/helpers.js.map +1 -1
- package/dist/helpers/helpers.ts +11 -1
- package/dist/helpers/menuItemIcons.d.ts +34 -0
- package/dist/helpers/menuItemIcons.d.ts.map +1 -0
- package/dist/helpers/menuItemIcons.js +144 -0
- package/dist/helpers/menuItemIcons.js.map +1 -0
- package/dist/helpers/menuItemIcons.ts +191 -0
- package/dist/helpers/relationDisplay.d.ts +3 -0
- package/dist/helpers/relationDisplay.d.ts.map +1 -0
- package/dist/helpers/relationDisplay.js +92 -0
- package/dist/helpers/relationDisplay.js.map +1 -0
- package/dist/helpers/relationDisplay.ts +101 -0
- package/dist/helpers/settingsPayload.d.ts +1 -0
- package/dist/helpers/settingsPayload.d.ts.map +1 -1
- package/dist/helpers/settingsPayload.js.map +1 -1
- package/dist/helpers/settingsPayload.ts +1 -0
- package/dist/helpers/solidIcons.d.ts +2 -0
- package/dist/helpers/solidIcons.d.ts.map +1 -1
- package/dist/helpers/solidIcons.js +8 -0
- package/dist/helpers/solidIcons.js.map +1 -1
- package/dist/helpers/solidIcons.tsx +10 -1
- package/dist/helpers/waitForBackendAvailability.d.ts +1 -0
- package/dist/helpers/waitForBackendAvailability.d.ts.map +1 -1
- package/dist/helpers/waitForBackendAvailability.js +35 -22
- package/dist/helpers/waitForBackendAvailability.js.map +1 -1
- package/dist/helpers/waitForBackendAvailability.ts +18 -12
- package/dist/http/solidHttp.d.ts.map +1 -1
- package/dist/http/solidHttp.js +10 -4
- package/dist/http/solidHttp.js.map +1 -1
- package/dist/http/solidHttp.ts +9 -4
- package/dist/redux/api/datasourceIntrospectionApi.d.ts +4 -0
- package/dist/redux/api/datasourceIntrospectionApi.d.ts.map +1 -1
- package/dist/redux/api/datasourceIntrospectionApi.js.map +1 -1
- package/dist/redux/api/datasourceIntrospectionApi.ts +4 -0
- package/dist/redux/api/fetchBaseQuery.d.ts.map +1 -1
- package/dist/redux/api/fetchBaseQuery.js +9 -3
- package/dist/redux/api/fetchBaseQuery.js.map +1 -1
- package/dist/redux/api/fetchBaseQuery.tsx +9 -3
- package/dist/redux/store/StoreProvider.d.ts.map +1 -1
- package/dist/redux/store/StoreProvider.js +4 -3
- package/dist/redux/store/StoreProvider.js.map +1 -1
- package/dist/redux/store/StoreProvider.tsx +4 -3
- package/dist/redux/store/defaultStoreConfig.d.ts +5 -5
- package/dist/resources/globals.css +341 -49
- package/dist/resources/solid-custom.css +464 -11
- package/dist/resources/solid-responsive.css +31 -20
- package/dist/resources/solid-tailwind-generated.css +1 -1
- package/dist/routes/AppEventListener.d.ts.map +1 -1
- package/dist/routes/AppEventListener.js +23 -0
- package/dist/routes/AppEventListener.js.map +1 -1
- package/dist/routes/AppEventListener.tsx +29 -0
- package/dist/routes/pages/admin/core/DashboardPage.module.css +12 -0
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.css +306 -3
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +745 -393
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1074 -420
- package/dist/routes/pages/admin/core/DatasourcesPage.css +15 -0
- package/dist/routes/pages/admin/core/DatasourcesPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DatasourcesPage.js +7 -188
- package/dist/routes/pages/admin/core/DatasourcesPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DatasourcesPage.tsx +3 -393
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminHeaderActions.js","sourceRoot":"","sources":["../../../src/components/layout/AdminHeaderActions.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ReactNode, useContext } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { env } from \"../../adapters/env\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { enterStudioMode } from \"../../redux/features/solidStudioSlice\";\nimport { LayoutContext } from \"./context/layoutcontext\";\n\ntype AdminHeaderActionsProps = {\n variant: \"header\" | \"sidebar\";\n className?: string;\n};\n\ntype AdminAction = {\n key: string;\n label: string;\n onClick: () => void;\n title: string;\n icon?: ReactNode;\n};\n\nexport const StudioSparkleIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7 1v2M7 11v2M1 7h2M11 7h2M2.93 2.93l1.41 1.41M9.66 9.66l1.41 1.41M2.93 11.07l1.41-1.41M9.66 4.34l1.41-1.41\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n </svg>\n);\n\nconst ThemeToggleIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 3l0 18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 9l4.65 -4.65\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 14.3l7.37 -7.37\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 19.6l8.85 -8.85\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const AdminHeaderActions = ({ variant, className = \"\" }: AdminHeaderActionsProps) => {\n const pathname = usePathname();\n const router = useRouter();\n const dispatch = useDispatch();\n const { data: session } = useSession();\n const { toggleThemeMode, themeMode } = useContext(LayoutContext);\n const user = session?.user;\n const isAdmin = hasAnyRole(user?.roles, [\"Admin\"]);\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n const showBack = /\\/admin\\/core\\/[^/]+\\/[^/]+\\/form\\/[^/]+/.test(pathname);\n\n const actions: AdminAction[] = [\n ...(isAdmin && isDev && !isStudioMode\n ? [{\n key: \"studio\",\n label: \"Studio\",\n onClick: () => {\n dispatch(enterStudioMode());\n router.push(\"/studio\");\n },\n title: \"Enter SolidX Studio\",\n icon: <StudioSparkleIcon />,\n }]\n : []),\n {\n key: \"theme\",\n label: themeMode === \"dark\" ? \"Light Mode\" : \"Dark Mode\",\n onClick: toggleThemeMode,\n title: \"Toggle theme\",\n icon: <ThemeToggleIcon />,\n },\n ...(showBack\n ? [{\n key: \"back\",\n label: \"Back\",\n onClick: () => router.back(),\n title: \"Go back\",\n }]\n : []),\n ];\n\n if (!actions.length) {\n return null;\n }\n\n if (variant === \"sidebar\") {\n return (\n <div className={`solid-sidebar-mobile-actions md:hidden ${className}`.trim()}>\n {actions.map((action) => (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-sidebar-mobile-action\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.label}\n </button>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`solid-admin-header-actions hidden md:flex ${className}`.trim()}>\n {actions.map((action) => {\n if (action.key === \"studio\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-studio-trigger-btn\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.icon}\n <span className=\"solid-studio-trigger-label\">{action.label}</span>\n </button>\n );\n }\n\n if (action.key === \"theme\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-theme-toggle\"\n onClick={action.onClick}\n aria-label={action.title}\n title={action.title}\n >\n {action.icon}\n <span className=\"solid-sr-only\">{action.label}</span>\n </button>\n );\n }\n\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-back-btn\"\n onClick={action.onClick}\n aria-label={action.title}\n >\n {action.label}\n </button>\n );\n })}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"AdminHeaderActions.js","sourceRoot":"","sources":["../../../src/components/layout/AdminHeaderActions.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAehF,MAAM,CAAC,IAAM,iBAAiB,GAAG,cAAM,OAAA,CACrC,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,iBAAa,MAAM,aAC5E,eAAM,CAAC,EAAC,6GAA6G,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,EAAC,aAAa,EAAC,OAAO,GAAG,EACtL,iBAAQ,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,KAAK,GAAG,IAClE,CACP,EALsC,CAKtC,CAAC;AAEF,IAAM,eAAe,GAAG,cAAM,OAAA,CAC5B,eAAK,KAAK,EAAC,4BAA4B,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,iBAAa,MAAM,aAC/G,eAAM,CAAC,EAAC,4CAA4C,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,EAC1I,eAAM,CAAC,EAAC,YAAY,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,EAC1G,eAAM,CAAC,EAAC,kBAAkB,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,EAChH,eAAM,CAAC,EAAC,qBAAqB,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,EACnH,eAAM,CAAC,EAAC,qBAAqB,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,IAC/G,CACP,EAR6B,CAQ7B,CAAC;AAEF,MAAM,CAAC,IAAM,kBAAkB,GAAG,UAAC,EAAoD;QAAlD,OAAO,aAAA,EAAE,iBAAc,EAAd,SAAS,mBAAG,EAAE,KAAA;IAC1D,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IACvB,IAAM,OAAO,GAAK,UAAU,EAAE,KAAjB,CAAkB;IACjC,IAAA,KAAiC,UAAU,CAAC,aAAa,CAAC,EAAxD,eAAe,qBAAA,EAAE,SAAS,eAA8B,CAAC;IACjE,IAAM,IAAI,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;IAC3B,IAAM,OAAO,GAAG,UAAU,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,IAAM,YAAY,GAAG,WAAW,CAAC,UAAC,KAAU,gBAAK,OAAA,MAAA,MAAA,KAAK,CAAC,WAAW,0CAAE,YAAY,mCAAI,KAAK,CAAA,EAAA,CAAC,CAAC;IAC3F,IAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,KAAK,KAAK,CAAC;IAC/C,IAAM,QAAQ,GAAG,0CAA0C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE3E,IAAM,OAAO,iDACR,CAAC,OAAO,IAAI,KAAK,IAAI,CAAC,YAAY;QACnC,CAAC,CAAC,CAAC;gBACD,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE;oBACP,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,CAAC;gBACD,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,KAAC,iBAAiB,KAAG;aAC5B,CAAC;QACF,CAAC,CAAC,EAAE,CAAC;QACP;YACE,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW;YACxD,OAAO,EAAE,eAAe;YACxB,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,KAAC,eAAe,KAAG;SAC1B;eACE,CAAC,QAAQ;QACV,CAAC,CAAC,CAAC;gBACD,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,cAAM,OAAA,MAAM,CAAC,IAAI,EAAE,EAAb,CAAa;gBAC5B,KAAK,EAAE,SAAS;aACjB,CAAC;QACF,CAAC,CAAC,EAAE,CAAC,OACR,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,CACL,cAAK,SAAS,EAAE,iDAA0C,SAAS,CAAE,CAAC,IAAI,EAAE,YACzE,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,CACvB,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,EACvC,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,KAAK,EAAE,MAAM,CAAC,KAAK,gBACP,MAAM,CAAC,KAAK,YAEvB,MAAM,CAAC,KAAK,IAPR,MAAM,CAAC,GAAG,CAQR,CACV,EAXwB,CAWxB,CAAC,GACE,CACP,CAAC;KACH;IAED,OAAO,CACL,eAAK,SAAS,EAAE,oDAA6C,SAAS,CAAE,CAAC,IAAI,EAAE,aAC7E,KAAC,yBAAyB,KAAG,EAC5B,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM;gBAClB,IAAI,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE;oBAC3B,OAAO,CACL,kBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0BAA0B,EACpC,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,KAAK,EAAE,MAAM,CAAC,KAAK,gBACP,MAAM,CAAC,KAAK,aAEvB,MAAM,CAAC,IAAI,EACZ,eAAM,SAAS,EAAC,4BAA4B,YAAE,MAAM,CAAC,KAAK,GAAQ,KAR7D,MAAM,CAAC,GAAG,CASR,CACV,CAAC;iBACH;gBAED,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,EAAE;oBAC1B,OAAO,CACL,kBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0BAA0B,EACpC,OAAO,EAAE,MAAM,CAAC,OAAO,gBACX,MAAM,CAAC,KAAK,EACxB,KAAK,EAAE,MAAM,CAAC,KAAK,aAElB,MAAM,CAAC,IAAI,EACZ,eAAM,SAAS,EAAC,eAAe,YAAE,MAAM,CAAC,KAAK,GAAQ,KARhD,MAAM,CAAC,GAAG,CASR,CACV,CAAC;iBACH;gBAED,OAAO,CACL,iBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,sBAAsB,EAChC,OAAO,EAAE,MAAM,CAAC,OAAO,gBACX,MAAM,CAAC,KAAK,YAEvB,MAAM,CAAC,KAAK,IANR,MAAM,CAAC,GAAG,CAOR,CACV,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { ReactNode, useContext } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useRouter } from \"../../hooks/useRouter\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { env } from \"../../adapters/env\";\nimport { hasAnyRole } from \"../../helpers/rolesHelper\";\nimport { enterStudioMode } from \"../../redux/features/solidStudioSlice\";\nimport { LayoutContext } from \"./context/layoutcontext\";\nimport { BackendReconnectIndicator } from \"../common/BackendReconnectIndicator\";\n\ntype AdminHeaderActionsProps = {\n variant: \"header\" | \"sidebar\";\n className?: string;\n};\n\ntype AdminAction = {\n key: string;\n label: string;\n onClick: () => void;\n title: string;\n icon?: ReactNode;\n};\n\nexport const StudioSparkleIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7 1v2M7 11v2M1 7h2M11 7h2M2.93 2.93l1.41 1.41M9.66 9.66l1.41 1.41M2.93 11.07l1.41-1.41M9.66 4.34l1.41-1.41\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n <circle cx=\"7\" cy=\"7\" r=\"2\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n </svg>\n);\n\nconst ThemeToggleIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 3l0 18\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 9l4.65 -4.65\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 14.3l7.37 -7.37\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M12 19.6l8.85 -8.85\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\nexport const AdminHeaderActions = ({ variant, className = \"\" }: AdminHeaderActionsProps) => {\n const pathname = usePathname();\n const router = useRouter();\n const dispatch = useDispatch();\n const { data: session } = useSession();\n const { toggleThemeMode, themeMode } = useContext(LayoutContext);\n const user = session?.user;\n const isAdmin = hasAnyRole(user?.roles, [\"Admin\"]);\n const isStudioMode = useSelector((state: any) => state.solidStudio?.isStudioMode ?? false);\n const isDev = env(\"VITE_SOLIDX_ENV\") === \"dev\";\n const showBack = /\\/admin\\/core\\/[^/]+\\/[^/]+\\/form\\/[^/]+/.test(pathname);\n\n const actions: AdminAction[] = [\n ...(isAdmin && isDev && !isStudioMode\n ? [{\n key: \"studio\",\n label: \"Studio\",\n onClick: () => {\n dispatch(enterStudioMode());\n router.push(\"/studio\");\n },\n title: \"Enter SolidX Studio\",\n icon: <StudioSparkleIcon />,\n }]\n : []),\n {\n key: \"theme\",\n label: themeMode === \"dark\" ? \"Light Mode\" : \"Dark Mode\",\n onClick: toggleThemeMode,\n title: \"Toggle theme\",\n icon: <ThemeToggleIcon />,\n },\n ...(showBack\n ? [{\n key: \"back\",\n label: \"Back\",\n onClick: () => router.back(),\n title: \"Go back\",\n }]\n : []),\n ];\n\n if (!actions.length) {\n return null;\n }\n\n if (variant === \"sidebar\") {\n return (\n <div className={`solid-sidebar-mobile-actions md:hidden ${className}`.trim()}>\n {actions.map((action) => (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-sidebar-mobile-action\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.label}\n </button>\n ))}\n </div>\n );\n }\n\n return (\n <div className={`solid-admin-header-actions hidden md:flex ${className}`.trim()}>\n <BackendReconnectIndicator />\n {actions.map((action) => {\n if (action.key === \"studio\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-studio-trigger-btn\"\n onClick={action.onClick}\n title={action.title}\n aria-label={action.title}\n >\n {action.icon}\n <span className=\"solid-studio-trigger-label\">{action.label}</span>\n </button>\n );\n }\n\n if (action.key === \"theme\") {\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-theme-toggle\"\n onClick={action.onClick}\n aria-label={action.title}\n title={action.title}\n >\n {action.icon}\n <span className=\"solid-sr-only\">{action.label}</span>\n </button>\n );\n }\n\n return (\n <button\n key={action.key}\n type=\"button\"\n className=\"solid-admin-back-btn\"\n onClick={action.onClick}\n aria-label={action.title}\n >\n {action.label}\n </button>\n );\n })}\n </div>\n );\n};\n"]}
|
|
@@ -7,6 +7,7 @@ import { env } from "../../adapters/env";
|
|
|
7
7
|
import { hasAnyRole } from "../../helpers/rolesHelper";
|
|
8
8
|
import { enterStudioMode } from "../../redux/features/solidStudioSlice";
|
|
9
9
|
import { LayoutContext } from "./context/layoutcontext";
|
|
10
|
+
import { BackendReconnectIndicator } from "../common/BackendReconnectIndicator";
|
|
10
11
|
|
|
11
12
|
type AdminHeaderActionsProps = {
|
|
12
13
|
variant: "header" | "sidebar";
|
|
@@ -105,6 +106,7 @@ export const AdminHeaderActions = ({ variant, className = "" }: AdminHeaderActio
|
|
|
105
106
|
|
|
106
107
|
return (
|
|
107
108
|
<div className={`solid-admin-header-actions hidden md:flex ${className}`.trim()}>
|
|
109
|
+
<BackendReconnectIndicator />
|
|
108
110
|
{actions.map((action) => {
|
|
109
111
|
if (action.key === "studio") {
|
|
110
112
|
return (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AppSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"AA0MA,QAAA,MAAM,UAAU,+CAuNf,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -23,6 +23,7 @@ import { usePathname } from "../../hooks/usePathname";
|
|
|
23
23
|
import { useSearchParams } from "../../hooks/useSearchParams";
|
|
24
24
|
import { env } from "../../adapters/env";
|
|
25
25
|
import { resolveRetainedModelViewRoute } from "../../helpers/modelViewPersistence";
|
|
26
|
+
import { SolidMenuItemIcon } from "./SolidMenuItemIcon";
|
|
26
27
|
var defaultMenuKey = env("NEXT_PUBLIC_DEFAULT_MENU_KEY");
|
|
27
28
|
var SIDEBAR_STORAGE_KEY = "solidx.sidebar.collapsed";
|
|
28
29
|
var SELECTED_WORKSPACE_STORAGE_KEY = "solidx.sidebar.selected-workspace";
|
|
@@ -135,7 +136,7 @@ var SidebarMenuTree = function (_a) {
|
|
|
135
136
|
var isActive = isMenuPathActive(node.path, pathname, searchParams);
|
|
136
137
|
var resolvedPath = node.path ? resolveRetainedModelViewRoute(node.path) : undefined;
|
|
137
138
|
var paddingLeft = 12 + depth * 14;
|
|
138
|
-
return (_jsxs("li", { className: "solid-sidebar-tree-item", children: [_jsxs("div", { className: "solid-sidebar-tree-row ".concat(isActive ? "is-active" : ""), style: { paddingLeft: paddingLeft }, children: [hasChildren ? (
|
|
139
|
+
return (_jsxs("li", { className: "solid-sidebar-tree-item", children: [_jsxs("div", { className: "solid-sidebar-tree-row ".concat(isActive ? "is-active" : ""), style: { paddingLeft: paddingLeft }, children: [hasChildren ? (_jsxs("button", { type: "button", className: "solid-sidebar-tree-parent flex items-center gap-2", onClick: function () { return toggleExpanded(nodeId); }, "aria-expanded": isExpanded, "aria-label": "Toggle ".concat(node.title), children: [_jsx(SolidMenuItemIcon, { item: node }), _jsx("span", { className: "solid-sidebar-tree-label", children: node.title })] })) : node.path ? (_jsxs(SolidLink, { href: resolvedPath, className: "solid-sidebar-tree-link flex items-center gap-2", children: [_jsx(SolidMenuItemIcon, { item: node }), _jsx("span", { className: "solid-sidebar-tree-label", children: node.title })] })) : (_jsxs("span", { className: "solid-sidebar-tree-link flex items-center gap-2", children: [_jsx(SolidMenuItemIcon, { item: node }), _jsx("span", { className: "solid-sidebar-tree-label", children: node.title })] })), hasChildren && (_jsx("button", { type: "button", className: "solid-sidebar-tree-toggle", onClick: function () { return toggleExpanded(nodeId); }, "aria-label": "Toggle ".concat(node.title), children: _jsx("span", { className: "solid-tree-plusminus", children: isExpanded ? "−" : "+" }) }))] }), hasChildren && isExpanded && (_jsx("ul", { className: "solid-sidebar-tree-list solid-sidebar-tree-children", children: node.children.map(function (child, childIndex) { return renderNode(child, depth + 1, nodeId, childIndex); }) }))] }, nodeId));
|
|
139
140
|
};
|
|
140
141
|
return _jsx("ul", { className: "solid-sidebar-tree-list", children: items.map(function (item, index) { return renderNode(item, 0, "root", index); }) });
|
|
141
142
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppSidebar.js","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useGetSolidMenuBasedOnRoleQuery } from \"../../redux/api/solidMenuApi\";\nimport { hideNavbar, toggleNavbar } from \"../../redux/features/navbarSlice\";\nimport { setIsAuthenticated, setUser } from \"../../redux/features/userSlice\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { AdminHeaderActions } from \"./AdminHeaderActions\";\nimport UserProfileMenu from \"./user-profile-menu\";\nimport SolidLink from \"../common/Link\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { env } from \"../../adapters/env\";\nimport { resolveRetainedModelViewRoute } from \"../../helpers/modelViewPersistence\";\n\ntype SolidMenuItem = {\n key?: string;\n title: string;\n path?: string;\n icon?: string | { src?: string };\n children?: SolidMenuItem[];\n};\n\nconst defaultMenuKey = env(\"NEXT_PUBLIC_DEFAULT_MENU_KEY\");\nconst SIDEBAR_STORAGE_KEY = \"solidx.sidebar.collapsed\";\nconst SELECTED_WORKSPACE_STORAGE_KEY = \"solidx.sidebar.selected-workspace\";\nconst SIDEBAR_TOGGLE_EVENT = \"solidx:sidebar-toggle\";\nconst DESKTOP_SIDEBAR_WIDTH = \"272px\";\nconst DEFAULT_WORKSPACE_TITLE = \"Solid Core\";\nconst DEFAULT_WORKSPACE_KEY = \"solid-core\";\n\nfunction normalizePath(path: string): string {\n if (!path || path === \"/\") return \"/\";\n return path.endsWith(\"/\") ? path.slice(0, -1) : path;\n}\n\nfunction getPathAndParams(targetPath: string): { pathname: string; searchParams: URLSearchParams } {\n const parsed = new URL(targetPath, \"http://localhost\");\n return {\n pathname: normalizePath(parsed.pathname),\n searchParams: new URLSearchParams(parsed.search),\n };\n}\n\nfunction doesSearchParamsMatchSubset(requiredParams: URLSearchParams, currentParams: URLSearchParams): boolean {\n const currentValueCounts = new Map<string, number>();\n currentParams.forEach((value, key) => {\n const token = `${key}=${value}`;\n currentValueCounts.set(token, (currentValueCounts.get(token) || 0) + 1);\n });\n\n let isSubset = true;\n requiredParams.forEach((value, key) => {\n if (!isSubset) return;\n const token = `${key}=${value}`;\n const count = currentValueCounts.get(token) || 0;\n if (count <= 0) {\n isSubset = false;\n return;\n }\n currentValueCounts.set(token, count - 1);\n });\n\n return isSubset;\n}\n\nfunction isMenuPathActive(itemPath: string | undefined, currentPathname: string, currentSearchParams: URLSearchParams): boolean {\n if (!itemPath) return false;\n\n const resolvedItemPath = resolveRetainedModelViewRoute(itemPath);\n const { pathname: itemPathname, searchParams: itemSearchParams } = getPathAndParams(resolvedItemPath);\n if (itemPathname !== normalizePath(currentPathname)) return false;\n\n return doesSearchParamsMatchSubset(itemSearchParams, currentSearchParams);\n}\n\nfunction filterMenuItems(items: SolidMenuItem[], query: string): SolidMenuItem[] {\n const normalizedQuery = query.trim().toLowerCase();\n if (!normalizedQuery) return items;\n\n const next: SolidMenuItem[] = [];\n items.forEach((item) => {\n const children = item.children ? filterMenuItems(item.children, normalizedQuery) : [];\n const matchesSelf = item.title.toLowerCase().includes(normalizedQuery);\n if (matchesSelf || children.length > 0) {\n next.push({ ...item, children });\n }\n });\n return next;\n}\n\nfunction resolveDefaultWorkspace(items: SolidMenuItem[]) {\n return (\n items.find((item) => item.key === DEFAULT_WORKSPACE_KEY) ||\n items.find((item) => item.title.trim().toLowerCase() === DEFAULT_WORKSPACE_TITLE.toLowerCase()) ||\n items.find((item) => item.key === defaultMenuKey) ||\n items[0]\n );\n}\n\nconst SidebarMenuTree = ({\n items,\n pathname,\n searchParams,\n forceExpand,\n}: {\n items: SolidMenuItem[];\n pathname: string;\n searchParams: URLSearchParams;\n forceExpand?: boolean;\n}) => {\n const [expandedKeys, setExpandedKeys] = useState<Record<string, boolean>>({});\n\n const buildNodeId = (node: SolidMenuItem, parentId: string, index: number) => {\n const base = node.key || node.path || node.title || `node-${index}`;\n return `${parentId}/${base}`;\n };\n\n useEffect(() => {\n const initialExpanded: Record<string, boolean> = {};\n if (forceExpand) {\n const walk = (nodes: SolidMenuItem[], parentId = \"root\") => {\n nodes.forEach((node, index) => {\n const nodeId = buildNodeId(node, parentId, index);\n if (node.children && node.children.length > 0 && node.key) {\n initialExpanded[nodeId] = true;\n walk(node.children, nodeId);\n } else if (node.children && node.children.length > 0) {\n initialExpanded[nodeId] = true;\n walk(node.children, nodeId);\n }\n });\n };\n walk(items);\n }\n setExpandedKeys(initialExpanded);\n }, [items, forceExpand]);\n\n const toggleExpanded = (nodeId: string) => {\n setExpandedKeys((prev) => ({ ...prev, [nodeId]: !prev[nodeId] }));\n };\n\n const renderNode = (node: SolidMenuItem, depth = 0, parentId = \"root\", index = 0) => {\n const nodeId = buildNodeId(node, parentId, index);\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = expandedKeys[nodeId] === true;\n const isActive = isMenuPathActive(node.path, pathname, searchParams);\n const resolvedPath = node.path ? resolveRetainedModelViewRoute(node.path) : undefined;\n const paddingLeft = 12 + depth * 14;\n\n return (\n <li key={nodeId} className=\"solid-sidebar-tree-item\">\n <div\n className={`solid-sidebar-tree-row ${isActive ? \"is-active\" : \"\"}`}\n style={{ paddingLeft }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"solid-sidebar-tree-parent\"\n onClick={() => toggleExpanded(nodeId)}\n aria-expanded={isExpanded}\n aria-label={`Toggle ${node.title}`}\n >\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </button>\n ) : node.path ? (\n <SolidLink href={resolvedPath} className=\"solid-sidebar-tree-link\">\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </SolidLink>\n ) : (\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n )}\n {hasChildren && (\n <button\n type=\"button\"\n className=\"solid-sidebar-tree-toggle\"\n onClick={() => toggleExpanded(nodeId)}\n aria-label={`Toggle ${node.title}`}\n >\n <span className=\"solid-tree-plusminus\">{isExpanded ? \"−\" : \"+\"}</span>\n </button>\n )}\n </div>\n {hasChildren && isExpanded && (\n <ul className=\"solid-sidebar-tree-list solid-sidebar-tree-children\">\n {node.children!.map((child, childIndex) => renderNode(child, depth + 1, nodeId, childIndex))}\n </ul>\n )}\n </li>\n );\n };\n\n return <ul className=\"solid-sidebar-tree-list\">{items.map((item, index) => renderNode(item, 0, \"root\", index))}</ul>;\n};\n\nconst AppSidebar = () => {\n const dispatch = useDispatch();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const visibleNavbar = useSelector((state: any) => state.navbarState.visibleNavbar);\n const { data: menu } = useGetSolidMenuBasedOnRoleQuery(\"\");\n\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [workspaceOpen, setWorkspaceOpen] = useState(false);\n const [selectedWorkspaceKey, setSelectedWorkspaceKey] = useState<string>(() => {\n if (typeof window === \"undefined\") return \"\";\n return window.localStorage.getItem(SELECTED_WORKSPACE_STORAGE_KEY) || \"\";\n });\n const [isDesktop, setIsDesktop] = useState<boolean>(typeof window === \"undefined\" ? true : window.innerWidth > 1199);\n const [isCollapsed, setIsCollapsed] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n const stored = window.localStorage.getItem(SIDEBAR_STORAGE_KEY);\n if (stored === null) return true;\n return stored === \"true\";\n });\n\n const { data } = useSession();\n\n useEffect(() => {\n if (data) {\n dispatch(setUser(data?.user));\n dispatch(setIsAuthenticated(true));\n }\n }, [data, dispatch]);\n\n useEffect(() => {\n const onResize = () => {\n const desktop = window.innerWidth > 1199;\n setIsDesktop(desktop);\n if (desktop) {\n dispatch(hideNavbar());\n }\n };\n\n onResize();\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, [dispatch]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n window.localStorage.setItem(SIDEBAR_STORAGE_KEY, String(isCollapsed));\n }, [isCollapsed]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n if (!selectedWorkspaceKey) {\n window.localStorage.removeItem(SELECTED_WORKSPACE_STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(SELECTED_WORKSPACE_STORAGE_KEY, selectedWorkspaceKey);\n }, [selectedWorkspaceKey]);\n\n useEffect(() => {\n const width = isDesktop ? (isCollapsed ? \"0px\" : DESKTOP_SIDEBAR_WIDTH) : \"0px\";\n document.documentElement.style.setProperty(\"--solid-sidebar-width\", width);\n }, [isDesktop, isCollapsed]);\n\n useEffect(() => {\n if (!menu?.data?.length) return;\n const defaultWorkspace = resolveDefaultWorkspace(menu.data);\n const hasSelectedWorkspace = menu.data.some((workspace: SolidMenuItem) => workspace.key === selectedWorkspaceKey);\n const nextWorkspaceKey = hasSelectedWorkspace ? selectedWorkspaceKey : defaultWorkspace?.key || \"\";\n\n if (nextWorkspaceKey !== selectedWorkspaceKey) {\n setSelectedWorkspaceKey(nextWorkspaceKey);\n }\n }, [menu, selectedWorkspaceKey]);\n\n useEffect(() => {\n if (!isDesktop) {\n dispatch(hideNavbar());\n }\n }, [pathname, dispatch, isDesktop]);\n\n useEffect(() => {\n const onToggleRequest = () => {\n if (window.innerWidth > 1199) {\n setIsCollapsed((prev) => !prev);\n return;\n }\n dispatch(toggleNavbar());\n };\n\n window.addEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);\n return () => window.removeEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);\n }, [dispatch]);\n\n const workspaces: SolidMenuItem[] = menu?.data || [];\n const selectedWorkspace = workspaces.find((m) => m.key === selectedWorkspaceKey) || workspaces[0];\n const selectedWorkspaceChildren = selectedWorkspace?.children || [];\n\n const filteredMenu = useMemo(\n () => filterMenuItems(selectedWorkspaceChildren, searchTerm),\n [selectedWorkspaceChildren, searchTerm]\n );\n\n const shellClasses = [\n \"solid-sidebar\",\n isDesktop && isCollapsed ? \"is-collapsed\" : \"\",\n !isDesktop && visibleNavbar ? \"is-open\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const selectWorkspace = (workspace: SolidMenuItem) => {\n setSelectedWorkspaceKey(workspace.key || \"\");\n setSearchTerm(\"\");\n setWorkspaceOpen(false);\n };\n\n return (\n <>\n {!isDesktop && visibleNavbar && <div className=\"solid-sidebar-backdrop\" onClick={() => dispatch(toggleNavbar())} />}\n\n <aside className={shellClasses}>\n <div className=\"solid-sidebar-header\">\n <div className=\"solid-workspace-switcher\">\n <button\n type=\"button\"\n className=\"solid-workspace-trigger\"\n onClick={() => setWorkspaceOpen((prev) => !prev)}\n aria-label=\"Select workspace\"\n >\n <span className=\"solid-workspace-avatar\">\n {(selectedWorkspace?.title || \"W\").slice(0, 1).toUpperCase()}\n </span>\n {!isCollapsed && (\n <>\n <span className=\"solid-workspace-label-wrap\">\n <span className=\"solid-workspace-label-top\">Workspace</span>\n <span className=\"solid-workspace-label\">{selectedWorkspace?.title || \"Workspace\"}</span>\n </span>\n <span className={`solid-workspace-chevron-dual ${workspaceOpen ? \"is-open\" : \"\"}`} aria-hidden=\"true\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M4 6L7 3L10 6\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4 8L7 11L10 8\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n </>\n )}\n </button>\n\n {workspaceOpen && !isCollapsed && (\n <div className=\"solid-workspace-menu\">\n {workspaces.map((workspace) => (\n <button\n type=\"button\"\n key={workspace.key || workspace.title}\n className={`solid-workspace-item ${workspace.key === selectedWorkspace?.key ? \"is-active\" : \"\"}`}\n onClick={() => selectWorkspace(workspace)}\n >\n <span className=\"solid-workspace-item-avatar\">{workspace.title.slice(0, 1).toUpperCase()}</span>\n <span className=\"solid-workspace-item-label\">{workspace.title}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n </div>\n\n {!isCollapsed ? (\n <>\n <div className=\"solid-sidebar-search-wrap\">\n <input\n type=\"text\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n placeholder=\"Search in menu...\"\n className=\"solid-sidebar-search\"\n />\n </div>\n\n <div className=\"solid-sidebar-tree-wrap\">\n <SidebarMenuTree items={filteredMenu} pathname={pathname} searchParams={searchParams} forceExpand={!!searchTerm.trim()} />\n </div>\n </>\n ) : (\n <div className=\"solid-sidebar-collapsed-nav\">\n {filteredMenu.slice(0, 10).map((item) => (\n <SolidLink\n key={item.key || item.title}\n href={item.path || \"#\"}\n className={`solid-collapsed-item ${isMenuPathActive(item.path, pathname, searchParams) ? \"is-active\" : \"\"}`}\n title={item.title}\n >\n {item.title.slice(0, 1).toUpperCase()}\n </SolidLink>\n ))}\n </div>\n )}\n\n <div className=\"solid-sidebar-footer\">\n <AdminHeaderActions variant=\"sidebar\" />\n <UserProfileMenu />\n </div>\n </aside>\n\n {isDesktop && isCollapsed && (\n <button\n type=\"button\"\n className=\"solid-sidebar-hotspot\"\n onClick={() => setIsCollapsed(false)}\n aria-label=\"Expand sidebar\"\n title=\"Expand sidebar\"\n />\n )}\n </>\n );\n};\n\nexport default AppSidebar;\n"]}
|
|
1
|
+
{"version":3,"file":"AppSidebar.js","sourceRoot":"","sources":["../../../src/components/layout/AppSidebar.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAUxD,IAAM,cAAc,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC3D,IAAM,mBAAmB,GAAG,0BAA0B,CAAC;AACvD,IAAM,8BAA8B,GAAG,mCAAmC,CAAC;AAC3E,IAAM,oBAAoB,GAAG,uBAAuB,CAAC;AACrD,IAAM,qBAAqB,GAAG,OAAO,CAAC;AACtC,IAAM,uBAAuB,GAAG,YAAY,CAAC;AAC7C,IAAM,qBAAqB,GAAG,YAAY,CAAC;AAE3C,SAAS,aAAa,CAAC,IAAY;IAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkB;IACxC,IAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IACvD,OAAO;QACH,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,YAAY,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;KACnD,CAAC;AACN,CAAC;AAED,SAAS,2BAA2B,CAAC,cAA+B,EAAE,aAA8B;IAChG,IAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrD,aAAa,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;QAC7B,IAAM,KAAK,GAAG,UAAG,GAAG,cAAI,KAAK,CAAE,CAAC;QAChC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,cAAc,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;QAC9B,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,IAAM,KAAK,GAAG,UAAG,GAAG,cAAI,KAAK,CAAE,CAAC;QAChC,IAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,KAAK,IAAI,CAAC,EAAE;YACZ,QAAQ,GAAG,KAAK,CAAC;YACjB,OAAO;SACV;QACD,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA4B,EAAE,eAAuB,EAAE,mBAAoC;IACnH,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,IAAM,gBAAgB,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAA,KAA6D,gBAAgB,CAAC,gBAAgB,CAAC,EAAnF,YAAY,cAAA,EAAgB,gBAAgB,kBAAuC,CAAC;IACtG,IAAI,YAAY,KAAK,aAAa,CAAC,eAAe,CAAC;QAAE,OAAO,KAAK,CAAC;IAEhE,OAAO,2BAA2B,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,eAAe,CAAC,KAAsB,EAAE,KAAa;IAC1D,IAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnD,IAAI,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IAEnC,IAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;QACf,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACvE,IAAI,WAAW,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACpC,IAAI,CAAC,IAAI,uBAAM,IAAI,KAAE,QAAQ,UAAA,IAAG,CAAC;SACpC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAsB;IACnD,OAAO,CACH,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,qBAAqB,EAAlC,CAAkC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,uBAAuB,CAAC,WAAW,EAAE,EAAzE,CAAyE,CAAC;QAC/F,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,cAAc,EAA3B,CAA2B,CAAC;QACjD,KAAK,CAAC,CAAC,CAAC,CACX,CAAC;AACN,CAAC;AAED,IAAM,eAAe,GAAG,UAAC,EAUxB;QATG,KAAK,WAAA,EACL,QAAQ,cAAA,EACR,YAAY,kBAAA,EACZ,WAAW,iBAAA;IAOL,IAAA,KAAkC,QAAQ,CAA0B,EAAE,CAAC,EAAtE,YAAY,QAAA,EAAE,eAAe,QAAyC,CAAC;IAE9E,IAAM,WAAW,GAAG,UAAC,IAAmB,EAAE,QAAgB,EAAE,KAAa;QACrE,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,eAAQ,KAAK,CAAE,CAAC;QACpE,OAAO,UAAG,QAAQ,cAAI,IAAI,CAAE,CAAC;IACjC,CAAC,CAAC;IAEF,SAAS,CAAC;QACN,IAAM,eAAe,GAA4B,EAAE,CAAC;QACpD,IAAI,WAAW,EAAE;YACb,IAAM,MAAI,GAAG,UAAC,KAAsB,EAAE,QAAiB;gBAAjB,yBAAA,EAAA,iBAAiB;gBACnD,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,KAAK;oBACtB,IAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;oBAClD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;wBACvD,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;wBAC/B,MAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC/B;yBAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClD,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;wBAC/B,MAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC/B;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC;YACF,MAAI,CAAC,KAAK,CAAC,CAAC;SACf;QACD,eAAe,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzB,IAAM,cAAc,GAAG,UAAC,MAAc;QAClC,eAAe,CAAC,UAAC,IAAI;;YAAK,OAAA,uBAAM,IAAI,gBAAG,MAAM,IAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAG;QAAtC,CAAsC,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF,IAAM,UAAU,GAAG,UAAC,IAAmB,EAAE,KAAS,EAAE,QAAiB,EAAE,KAAS;QAAvC,sBAAA,EAAA,SAAS;QAAE,yBAAA,EAAA,iBAAiB;QAAE,sBAAA,EAAA,SAAS;QAC5E,IAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAClD,IAAM,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClE,IAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;QACjD,IAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrE,IAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,IAAM,WAAW,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;QAEpC,OAAO,CACH,cAAiB,SAAS,EAAC,yBAAyB,aAChD,eACI,SAAS,EAAE,iCAA0B,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAE,EAClE,KAAK,EAAE,EAAE,WAAW,aAAA,EAAE,aAErB,WAAW,CAAC,CAAC,CAAC,CACX,kBACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mDAAmD,EAC7D,OAAO,EAAE,cAAM,OAAA,cAAc,CAAC,MAAM,CAAC,EAAtB,CAAsB,mBACtB,UAAU,gBACb,iBAAU,IAAI,CAAC,KAAK,CAAE,aAElC,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,GAAI,EACjC,eAAM,SAAS,EAAC,0BAA0B,YAAE,IAAI,CAAC,KAAK,GAAQ,IACzD,CACZ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACZ,MAAC,SAAS,IAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAC,iDAAiD,aACtF,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,GAAI,EACjC,eAAM,SAAS,EAAC,0BAA0B,YAAE,IAAI,CAAC,KAAK,GAAQ,IACtD,CACf,CAAC,CAAC,CAAC,CACA,gBAAM,SAAS,EAAC,iDAAiD,aAC7D,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,GAAI,EACjC,eAAM,SAAS,EAAC,0BAA0B,YAAE,IAAI,CAAC,KAAK,GAAQ,IAC3D,CACV,EACA,WAAW,IAAI,CACZ,iBACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,2BAA2B,EACrC,OAAO,EAAE,cAAM,OAAA,cAAc,CAAC,MAAM,CAAC,EAAtB,CAAsB,gBACzB,iBAAU,IAAI,CAAC,KAAK,CAAE,YAElC,eAAM,SAAS,EAAC,sBAAsB,YAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAQ,GACjE,CACZ,IACC,EACL,WAAW,IAAI,UAAU,IAAI,CAC1B,aAAI,SAAS,EAAC,qDAAqD,YAC9D,IAAI,CAAC,QAAS,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,UAAU,IAAK,OAAA,UAAU,CAAC,KAAsB,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAjE,CAAiE,CAAC,GAC5G,CACR,KA1CI,MAAM,CA2CV,CACR,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,aAAI,SAAS,EAAC,yBAAyB,YAAE,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAlC,CAAkC,CAAC,GAAM,CAAC;AACzH,CAAC,CAAC;AAEF,IAAM,UAAU,GAAG;IACf,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,IAAM,aAAa,GAAG,WAAW,CAAC,UAAC,KAAU,IAAK,OAAA,KAAK,CAAC,WAAW,CAAC,aAAa,EAA/B,CAA+B,CAAC,CAAC;IAC3E,IAAM,IAAI,GAAK,+BAA+B,CAAC,EAAE,CAAC,KAAxC,CAAyC;IAErD,IAAA,KAA8B,QAAQ,CAAC,EAAE,CAAC,EAAzC,UAAU,QAAA,EAAE,aAAa,QAAgB,CAAC;IAC3C,IAAA,KAAoC,QAAQ,CAAC,KAAK,CAAC,EAAlD,aAAa,QAAA,EAAE,gBAAgB,QAAmB,CAAC;IACpD,IAAA,KAAkD,QAAQ,CAAS;QACrE,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,8BAA8B,CAAC,IAAI,EAAE,CAAC;IAC7E,CAAC,CAAC,EAHK,oBAAoB,QAAA,EAAE,uBAAuB,QAGlD,CAAC;IACG,IAAA,KAA4B,QAAQ,CAAU,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,EAA7G,SAAS,QAAA,EAAE,YAAY,QAAsF,CAAC;IAC/G,IAAA,KAAgC,QAAQ,CAAU;QACpD,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,KAAK,CAAC;QAChD,IAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAChE,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjC,OAAO,MAAM,KAAK,MAAM,CAAC;IAC7B,CAAC,CAAC,EALK,WAAW,QAAA,EAAE,cAAc,QAKhC,CAAC;IAEK,IAAA,IAAI,GAAK,UAAU,EAAE,KAAjB,CAAkB;IAE9B,SAAS,CAAC;QACN,IAAI,IAAI,EAAE;YACN,QAAQ,CAAC,OAAO,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,CAAC,CAAC;YAC9B,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;SACtC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAErB,SAAS,CAAC;QACN,IAAM,QAAQ,GAAG;YACb,IAAM,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YACzC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,OAAO,EAAE;gBACT,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;aAC1B;QACL,CAAC,CAAC;QAEF,QAAQ,EAAE,CAAC;QACX,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5C,OAAO,cAAM,OAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAA9C,CAA8C,CAAC;IAChE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC;QACN,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,SAAS,CAAC;QACN,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,IAAI,CAAC,oBAAoB,EAAE;YACvB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;YAC/D,OAAO;SACV;QACD,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;IACtF,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE3B,SAAS,CAAC;QACN,IAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAChF,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAC/E,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAE7B,SAAS,CAAC;;QACN,IAAI,CAAC,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,0CAAE,MAAM,CAAA;YAAE,OAAO;QAChC,IAAM,gBAAgB,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAC,SAAwB,IAAK,OAAA,SAAS,CAAC,GAAG,KAAK,oBAAoB,EAAtC,CAAsC,CAAC,CAAC;QAClH,IAAM,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,GAAG,KAAI,EAAE,CAAC;QAEnG,IAAI,gBAAgB,KAAK,oBAAoB,EAAE;YAC3C,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;SAC7C;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAEjC,SAAS,CAAC;QACN,IAAI,CAAC,SAAS,EAAE;YACZ,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;SAC1B;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAEpC,SAAS,CAAC;QACN,IAAM,eAAe,GAAG;YACpB,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,EAAE;gBAC1B,cAAc,CAAC,UAAC,IAAI,IAAK,OAAA,CAAC,IAAI,EAAL,CAAK,CAAC,CAAC;gBAChC,OAAO;aACV;YACD,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;QAC/D,OAAO,cAAM,OAAA,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,eAAe,CAAC,EAAjE,CAAiE,CAAC;IACnF,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,IAAM,UAAU,GAAoB,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,EAAE,CAAC;IACrD,IAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,GAAG,KAAK,oBAAoB,EAA9B,CAA8B,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAClG,IAAM,yBAAyB,GAAG,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,QAAQ,KAAI,EAAE,CAAC;IAEpE,IAAM,YAAY,GAAG,OAAO,CACxB,cAAM,OAAA,eAAe,CAAC,yBAAyB,EAAE,UAAU,CAAC,EAAtD,CAAsD,EAC5D,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAC1C,CAAC;IAEF,IAAM,YAAY,GAAG;QACjB,eAAe;QACf,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;QAC9C,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;KAC/C;SACI,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEf,IAAM,eAAe,GAAG,UAAC,SAAwB;QAC7C,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,OAAO,CACH,8BACK,CAAC,SAAS,IAAI,aAAa,IAAI,cAAK,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,cAAM,OAAA,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAxB,CAAwB,GAAI,EAEnH,iBAAO,SAAS,EAAE,YAAY,aAC1B,cAAK,SAAS,EAAC,sBAAsB,YACjC,eAAK,SAAS,EAAC,0BAA0B,aACrC,kBACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,cAAM,OAAA,gBAAgB,CAAC,UAAC,IAAI,IAAK,OAAA,CAAC,IAAI,EAAL,CAAK,CAAC,EAAjC,CAAiC,gBACrC,kBAAkB,aAE7B,eAAM,SAAS,EAAC,wBAAwB,YACnC,CAAC,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,KAAK,KAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GACzD,EACN,CAAC,WAAW,IAAI,CACb,8BACI,gBAAM,SAAS,EAAC,4BAA4B,aACxC,eAAM,SAAS,EAAC,2BAA2B,0BAAiB,EAC5D,eAAM,SAAS,EAAC,uBAAuB,YAAE,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,KAAK,KAAI,WAAW,GAAQ,IACrF,EACP,eAAM,SAAS,EAAE,uCAAgC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAE,iBAAc,MAAM,YACjG,eAAK,KAAK,EAAC,4BAA4B,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,aAC1F,eAAM,CAAC,EAAC,eAAe,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,MAAM,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,EAChH,eAAM,CAAC,EAAC,gBAAgB,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,MAAM,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,GAAG,IAC/G,GACH,IACR,CACN,IACI,EAER,aAAa,IAAI,CAAC,WAAW,IAAI,CAC9B,cAAK,SAAS,EAAC,sBAAsB,YAChC,UAAU,CAAC,GAAG,CAAC,UAAC,SAAS,IAAK,OAAA,CAC3B,kBACI,IAAI,EAAC,QAAQ,EAEb,SAAS,EAAE,+BAAwB,SAAS,CAAC,GAAG,MAAK,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,GAAG,CAAA,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAE,EAChG,OAAO,EAAE,cAAM,OAAA,eAAe,CAAC,SAAS,CAAC,EAA1B,CAA0B,aAEzC,eAAM,SAAS,EAAC,6BAA6B,YAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAQ,EAChG,eAAM,SAAS,EAAC,4BAA4B,YAAE,SAAS,CAAC,KAAK,GAAQ,KALhE,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,KAAK,CAMhC,CACZ,EAV8B,CAU9B,CAAC,GACA,CACT,IACC,GAEJ,EAEL,CAAC,WAAW,CAAC,CAAC,CAAC,CACZ,8BACI,cAAK,SAAS,EAAC,2BAA2B,YACtC,gBACI,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAA7B,CAA6B,EAC9C,WAAW,EAAC,mBAAmB,EAC/B,SAAS,EAAC,sBAAsB,GAClC,GACA,EAEN,cAAK,SAAS,EAAC,yBAAyB,YACpC,KAAC,eAAe,IAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAI,GACxH,IACP,CACN,CAAC,CAAC,CAAC,CACA,cAAK,SAAS,EAAC,6BAA6B,YACvC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,IAAI,IAAK,OAAA,CACrC,KAAC,SAAS,IAEN,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG,EACtB,SAAS,EAAE,+BAAwB,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAE,EAC3G,KAAK,EAAE,IAAI,CAAC,KAAK,YAEhB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IALhC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAMnB,CACf,EATwC,CASxC,CAAC,GACA,CACT,EAED,eAAK,SAAS,EAAC,sBAAsB,aACjC,KAAC,kBAAkB,IAAC,OAAO,EAAC,SAAS,GAAG,EACxC,KAAC,eAAe,KAAG,IACjB,IACF,EAEP,SAAS,IAAI,WAAW,IAAI,CACzB,iBACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uBAAuB,EACjC,OAAO,EAAE,cAAM,OAAA,cAAc,CAAC,KAAK,CAAC,EAArB,CAAqB,gBACzB,gBAAgB,EAC3B,KAAK,EAAC,gBAAgB,GACxB,CACL,IACF,CACN,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC","sourcesContent":["import { useGetSolidMenuBasedOnRoleQuery } from \"../../redux/api/solidMenuApi\";\nimport { hideNavbar, toggleNavbar } from \"../../redux/features/navbarSlice\";\nimport { setIsAuthenticated, setUser } from \"../../redux/features/userSlice\";\nimport { useSession } from \"../../hooks/useSession\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { AdminHeaderActions } from \"./AdminHeaderActions\";\nimport UserProfileMenu from \"./user-profile-menu\";\nimport SolidLink from \"../common/Link\";\nimport { usePathname } from \"../../hooks/usePathname\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { env } from \"../../adapters/env\";\nimport { resolveRetainedModelViewRoute } from \"../../helpers/modelViewPersistence\";\nimport type { MenuItemIconSource } from \"../../helpers/menuItemIcons\";\nimport { SolidMenuItemIcon } from \"./SolidMenuItemIcon\";\n\ntype SolidMenuItem = MenuItemIconSource & {\n key?: string;\n title: string;\n path?: string;\n icon?: string | { src?: string };\n children?: SolidMenuItem[];\n};\n\nconst defaultMenuKey = env(\"NEXT_PUBLIC_DEFAULT_MENU_KEY\");\nconst SIDEBAR_STORAGE_KEY = \"solidx.sidebar.collapsed\";\nconst SELECTED_WORKSPACE_STORAGE_KEY = \"solidx.sidebar.selected-workspace\";\nconst SIDEBAR_TOGGLE_EVENT = \"solidx:sidebar-toggle\";\nconst DESKTOP_SIDEBAR_WIDTH = \"272px\";\nconst DEFAULT_WORKSPACE_TITLE = \"Solid Core\";\nconst DEFAULT_WORKSPACE_KEY = \"solid-core\";\n\nfunction normalizePath(path: string): string {\n if (!path || path === \"/\") return \"/\";\n return path.endsWith(\"/\") ? path.slice(0, -1) : path;\n}\n\nfunction getPathAndParams(targetPath: string): { pathname: string; searchParams: URLSearchParams } {\n const parsed = new URL(targetPath, \"http://localhost\");\n return {\n pathname: normalizePath(parsed.pathname),\n searchParams: new URLSearchParams(parsed.search),\n };\n}\n\nfunction doesSearchParamsMatchSubset(requiredParams: URLSearchParams, currentParams: URLSearchParams): boolean {\n const currentValueCounts = new Map<string, number>();\n currentParams.forEach((value, key) => {\n const token = `${key}=${value}`;\n currentValueCounts.set(token, (currentValueCounts.get(token) || 0) + 1);\n });\n\n let isSubset = true;\n requiredParams.forEach((value, key) => {\n if (!isSubset) return;\n const token = `${key}=${value}`;\n const count = currentValueCounts.get(token) || 0;\n if (count <= 0) {\n isSubset = false;\n return;\n }\n currentValueCounts.set(token, count - 1);\n });\n\n return isSubset;\n}\n\nfunction isMenuPathActive(itemPath: string | undefined, currentPathname: string, currentSearchParams: URLSearchParams): boolean {\n if (!itemPath) return false;\n\n const resolvedItemPath = resolveRetainedModelViewRoute(itemPath);\n const { pathname: itemPathname, searchParams: itemSearchParams } = getPathAndParams(resolvedItemPath);\n if (itemPathname !== normalizePath(currentPathname)) return false;\n\n return doesSearchParamsMatchSubset(itemSearchParams, currentSearchParams);\n}\n\nfunction filterMenuItems(items: SolidMenuItem[], query: string): SolidMenuItem[] {\n const normalizedQuery = query.trim().toLowerCase();\n if (!normalizedQuery) return items;\n\n const next: SolidMenuItem[] = [];\n items.forEach((item) => {\n const children = item.children ? filterMenuItems(item.children, normalizedQuery) : [];\n const matchesSelf = item.title.toLowerCase().includes(normalizedQuery);\n if (matchesSelf || children.length > 0) {\n next.push({ ...item, children });\n }\n });\n return next;\n}\n\nfunction resolveDefaultWorkspace(items: SolidMenuItem[]) {\n return (\n items.find((item) => item.key === DEFAULT_WORKSPACE_KEY) ||\n items.find((item) => item.title.trim().toLowerCase() === DEFAULT_WORKSPACE_TITLE.toLowerCase()) ||\n items.find((item) => item.key === defaultMenuKey) ||\n items[0]\n );\n}\n\nconst SidebarMenuTree = ({\n items,\n pathname,\n searchParams,\n forceExpand,\n}: {\n items: SolidMenuItem[];\n pathname: string;\n searchParams: URLSearchParams;\n forceExpand?: boolean;\n}) => {\n const [expandedKeys, setExpandedKeys] = useState<Record<string, boolean>>({});\n\n const buildNodeId = (node: SolidMenuItem, parentId: string, index: number) => {\n const base = node.key || node.path || node.title || `node-${index}`;\n return `${parentId}/${base}`;\n };\n\n useEffect(() => {\n const initialExpanded: Record<string, boolean> = {};\n if (forceExpand) {\n const walk = (nodes: SolidMenuItem[], parentId = \"root\") => {\n nodes.forEach((node, index) => {\n const nodeId = buildNodeId(node, parentId, index);\n if (node.children && node.children.length > 0 && node.key) {\n initialExpanded[nodeId] = true;\n walk(node.children, nodeId);\n } else if (node.children && node.children.length > 0) {\n initialExpanded[nodeId] = true;\n walk(node.children, nodeId);\n }\n });\n };\n walk(items);\n }\n setExpandedKeys(initialExpanded);\n }, [items, forceExpand]);\n\n const toggleExpanded = (nodeId: string) => {\n setExpandedKeys((prev) => ({ ...prev, [nodeId]: !prev[nodeId] }));\n };\n\n const renderNode = (node: SolidMenuItem, depth = 0, parentId = \"root\", index = 0) => {\n const nodeId = buildNodeId(node, parentId, index);\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = expandedKeys[nodeId] === true;\n const isActive = isMenuPathActive(node.path, pathname, searchParams);\n const resolvedPath = node.path ? resolveRetainedModelViewRoute(node.path) : undefined;\n const paddingLeft = 12 + depth * 14;\n\n return (\n <li key={nodeId} className=\"solid-sidebar-tree-item\">\n <div\n className={`solid-sidebar-tree-row ${isActive ? \"is-active\" : \"\"}`}\n style={{ paddingLeft }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n className=\"solid-sidebar-tree-parent flex items-center gap-2\"\n onClick={() => toggleExpanded(nodeId)}\n aria-expanded={isExpanded}\n aria-label={`Toggle ${node.title}`}\n >\n <SolidMenuItemIcon item={node} />\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </button>\n ) : node.path ? (\n <SolidLink href={resolvedPath} className=\"solid-sidebar-tree-link flex items-center gap-2\">\n <SolidMenuItemIcon item={node} />\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </SolidLink>\n ) : (\n <span className=\"solid-sidebar-tree-link flex items-center gap-2\">\n <SolidMenuItemIcon item={node} />\n <span className=\"solid-sidebar-tree-label\">{node.title}</span>\n </span>\n )}\n {hasChildren && (\n <button\n type=\"button\"\n className=\"solid-sidebar-tree-toggle\"\n onClick={() => toggleExpanded(nodeId)}\n aria-label={`Toggle ${node.title}`}\n >\n <span className=\"solid-tree-plusminus\">{isExpanded ? \"−\" : \"+\"}</span>\n </button>\n )}\n </div>\n {hasChildren && isExpanded && (\n <ul className=\"solid-sidebar-tree-list solid-sidebar-tree-children\">\n {node.children!.map((child, childIndex) => renderNode(child as SolidMenuItem, depth + 1, nodeId, childIndex))}\n </ul>\n )}\n </li>\n );\n };\n\n return <ul className=\"solid-sidebar-tree-list\">{items.map((item, index) => renderNode(item, 0, \"root\", index))}</ul>;\n};\n\nconst AppSidebar = () => {\n const dispatch = useDispatch();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const visibleNavbar = useSelector((state: any) => state.navbarState.visibleNavbar);\n const { data: menu } = useGetSolidMenuBasedOnRoleQuery(\"\");\n\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [workspaceOpen, setWorkspaceOpen] = useState(false);\n const [selectedWorkspaceKey, setSelectedWorkspaceKey] = useState<string>(() => {\n if (typeof window === \"undefined\") return \"\";\n return window.localStorage.getItem(SELECTED_WORKSPACE_STORAGE_KEY) || \"\";\n });\n const [isDesktop, setIsDesktop] = useState<boolean>(typeof window === \"undefined\" ? true : window.innerWidth > 1199);\n const [isCollapsed, setIsCollapsed] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n const stored = window.localStorage.getItem(SIDEBAR_STORAGE_KEY);\n if (stored === null) return true;\n return stored === \"true\";\n });\n\n const { data } = useSession();\n\n useEffect(() => {\n if (data) {\n dispatch(setUser(data?.user));\n dispatch(setIsAuthenticated(true));\n }\n }, [data, dispatch]);\n\n useEffect(() => {\n const onResize = () => {\n const desktop = window.innerWidth > 1199;\n setIsDesktop(desktop);\n if (desktop) {\n dispatch(hideNavbar());\n }\n };\n\n onResize();\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, [dispatch]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n window.localStorage.setItem(SIDEBAR_STORAGE_KEY, String(isCollapsed));\n }, [isCollapsed]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n if (!selectedWorkspaceKey) {\n window.localStorage.removeItem(SELECTED_WORKSPACE_STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(SELECTED_WORKSPACE_STORAGE_KEY, selectedWorkspaceKey);\n }, [selectedWorkspaceKey]);\n\n useEffect(() => {\n const width = isDesktop ? (isCollapsed ? \"0px\" : DESKTOP_SIDEBAR_WIDTH) : \"0px\";\n document.documentElement.style.setProperty(\"--solid-sidebar-width\", width);\n }, [isDesktop, isCollapsed]);\n\n useEffect(() => {\n if (!menu?.data?.length) return;\n const defaultWorkspace = resolveDefaultWorkspace(menu.data);\n const hasSelectedWorkspace = menu.data.some((workspace: SolidMenuItem) => workspace.key === selectedWorkspaceKey);\n const nextWorkspaceKey = hasSelectedWorkspace ? selectedWorkspaceKey : defaultWorkspace?.key || \"\";\n\n if (nextWorkspaceKey !== selectedWorkspaceKey) {\n setSelectedWorkspaceKey(nextWorkspaceKey);\n }\n }, [menu, selectedWorkspaceKey]);\n\n useEffect(() => {\n if (!isDesktop) {\n dispatch(hideNavbar());\n }\n }, [pathname, dispatch, isDesktop]);\n\n useEffect(() => {\n const onToggleRequest = () => {\n if (window.innerWidth > 1199) {\n setIsCollapsed((prev) => !prev);\n return;\n }\n dispatch(toggleNavbar());\n };\n\n window.addEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);\n return () => window.removeEventListener(SIDEBAR_TOGGLE_EVENT, onToggleRequest);\n }, [dispatch]);\n\n const workspaces: SolidMenuItem[] = menu?.data || [];\n const selectedWorkspace = workspaces.find((m) => m.key === selectedWorkspaceKey) || workspaces[0];\n const selectedWorkspaceChildren = selectedWorkspace?.children || [];\n\n const filteredMenu = useMemo(\n () => filterMenuItems(selectedWorkspaceChildren, searchTerm),\n [selectedWorkspaceChildren, searchTerm]\n );\n\n const shellClasses = [\n \"solid-sidebar\",\n isDesktop && isCollapsed ? \"is-collapsed\" : \"\",\n !isDesktop && visibleNavbar ? \"is-open\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const selectWorkspace = (workspace: SolidMenuItem) => {\n setSelectedWorkspaceKey(workspace.key || \"\");\n setSearchTerm(\"\");\n setWorkspaceOpen(false);\n };\n\n return (\n <>\n {!isDesktop && visibleNavbar && <div className=\"solid-sidebar-backdrop\" onClick={() => dispatch(toggleNavbar())} />}\n\n <aside className={shellClasses}>\n <div className=\"solid-sidebar-header\">\n <div className=\"solid-workspace-switcher\">\n <button\n type=\"button\"\n className=\"solid-workspace-trigger\"\n onClick={() => setWorkspaceOpen((prev) => !prev)}\n aria-label=\"Select workspace\"\n >\n <span className=\"solid-workspace-avatar\">\n {(selectedWorkspace?.title || \"W\").slice(0, 1).toUpperCase()}\n </span>\n {!isCollapsed && (\n <>\n <span className=\"solid-workspace-label-wrap\">\n <span className=\"solid-workspace-label-top\">Workspace</span>\n <span className=\"solid-workspace-label\">{selectedWorkspace?.title || \"Workspace\"}</span>\n </span>\n <span className={`solid-workspace-chevron-dual ${workspaceOpen ? \"is-open\" : \"\"}`} aria-hidden=\"true\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M4 6L7 3L10 6\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <path d=\"M4 8L7 11L10 8\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n </>\n )}\n </button>\n\n {workspaceOpen && !isCollapsed && (\n <div className=\"solid-workspace-menu\">\n {workspaces.map((workspace) => (\n <button\n type=\"button\"\n key={workspace.key || workspace.title}\n className={`solid-workspace-item ${workspace.key === selectedWorkspace?.key ? \"is-active\" : \"\"}`}\n onClick={() => selectWorkspace(workspace)}\n >\n <span className=\"solid-workspace-item-avatar\">{workspace.title.slice(0, 1).toUpperCase()}</span>\n <span className=\"solid-workspace-item-label\">{workspace.title}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n </div>\n\n {!isCollapsed ? (\n <>\n <div className=\"solid-sidebar-search-wrap\">\n <input\n type=\"text\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n placeholder=\"Search in menu...\"\n className=\"solid-sidebar-search\"\n />\n </div>\n\n <div className=\"solid-sidebar-tree-wrap\">\n <SidebarMenuTree items={filteredMenu} pathname={pathname} searchParams={searchParams} forceExpand={!!searchTerm.trim()} />\n </div>\n </>\n ) : (\n <div className=\"solid-sidebar-collapsed-nav\">\n {filteredMenu.slice(0, 10).map((item) => (\n <SolidLink\n key={item.key || item.title}\n href={item.path || \"#\"}\n className={`solid-collapsed-item ${isMenuPathActive(item.path, pathname, searchParams) ? \"is-active\" : \"\"}`}\n title={item.title}\n >\n {item.title.slice(0, 1).toUpperCase()}\n </SolidLink>\n ))}\n </div>\n )}\n\n <div className=\"solid-sidebar-footer\">\n <AdminHeaderActions variant=\"sidebar\" />\n <UserProfileMenu />\n </div>\n </aside>\n\n {isDesktop && isCollapsed && (\n <button\n type=\"button\"\n className=\"solid-sidebar-hotspot\"\n onClick={() => setIsCollapsed(false)}\n aria-label=\"Expand sidebar\"\n title=\"Expand sidebar\"\n />\n )}\n </>\n );\n};\n\nexport default AppSidebar;\n"]}
|
|
@@ -11,8 +11,10 @@ import { usePathname } from "../../hooks/usePathname";
|
|
|
11
11
|
import { useSearchParams } from "../../hooks/useSearchParams";
|
|
12
12
|
import { env } from "../../adapters/env";
|
|
13
13
|
import { resolveRetainedModelViewRoute } from "../../helpers/modelViewPersistence";
|
|
14
|
+
import type { MenuItemIconSource } from "../../helpers/menuItemIcons";
|
|
15
|
+
import { SolidMenuItemIcon } from "./SolidMenuItemIcon";
|
|
14
16
|
|
|
15
|
-
type SolidMenuItem = {
|
|
17
|
+
type SolidMenuItem = MenuItemIconSource & {
|
|
16
18
|
key?: string;
|
|
17
19
|
title: string;
|
|
18
20
|
path?: string;
|
|
@@ -156,19 +158,24 @@ const SidebarMenuTree = ({
|
|
|
156
158
|
{hasChildren ? (
|
|
157
159
|
<button
|
|
158
160
|
type="button"
|
|
159
|
-
className="solid-sidebar-tree-parent"
|
|
161
|
+
className="solid-sidebar-tree-parent flex items-center gap-2"
|
|
160
162
|
onClick={() => toggleExpanded(nodeId)}
|
|
161
163
|
aria-expanded={isExpanded}
|
|
162
164
|
aria-label={`Toggle ${node.title}`}
|
|
163
165
|
>
|
|
166
|
+
<SolidMenuItemIcon item={node} />
|
|
164
167
|
<span className="solid-sidebar-tree-label">{node.title}</span>
|
|
165
168
|
</button>
|
|
166
169
|
) : node.path ? (
|
|
167
|
-
<SolidLink href={resolvedPath} className="solid-sidebar-tree-link">
|
|
170
|
+
<SolidLink href={resolvedPath} className="solid-sidebar-tree-link flex items-center gap-2">
|
|
171
|
+
<SolidMenuItemIcon item={node} />
|
|
168
172
|
<span className="solid-sidebar-tree-label">{node.title}</span>
|
|
169
173
|
</SolidLink>
|
|
170
174
|
) : (
|
|
171
|
-
<span className="solid-sidebar-tree-
|
|
175
|
+
<span className="solid-sidebar-tree-link flex items-center gap-2">
|
|
176
|
+
<SolidMenuItemIcon item={node} />
|
|
177
|
+
<span className="solid-sidebar-tree-label">{node.title}</span>
|
|
178
|
+
</span>
|
|
172
179
|
)}
|
|
173
180
|
{hasChildren && (
|
|
174
181
|
<button
|
|
@@ -183,7 +190,7 @@ const SidebarMenuTree = ({
|
|
|
183
190
|
</div>
|
|
184
191
|
{hasChildren && isExpanded && (
|
|
185
192
|
<ul className="solid-sidebar-tree-list solid-sidebar-tree-children">
|
|
186
|
-
{node.children!.map((child, childIndex) => renderNode(child, depth + 1, nodeId, childIndex))}
|
|
193
|
+
{node.children!.map((child, childIndex) => renderNode(child as SolidMenuItem, depth + 1, nodeId, childIndex))}
|
|
187
194
|
</ul>
|
|
188
195
|
)}
|
|
189
196
|
</li>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type MenuItemIconSource } from "../../helpers/menuItemIcons";
|
|
2
|
+
type SolidMenuItemIconProps = {
|
|
3
|
+
item?: MenuItemIconSource | null;
|
|
4
|
+
className?: string;
|
|
5
|
+
size?: number | string;
|
|
6
|
+
};
|
|
7
|
+
export declare const SolidMenuItemIcon: ({ item, className, size, }: SolidMenuItemIconProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=SolidMenuItemIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolidMenuItemIcon.d.ts","sourceRoot":"","sources":["../../../src/components/layout/SolidMenuItemIcon.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,KAAK,sBAAsB,GAAG;IAC5B,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,iBAAiB,+BAAqC,sBAAsB,mDA+BxF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { SolidIcon } from "../shad-cn-ui";
|
|
3
|
+
import { SolidMaterialSymbol } from "../common/SolidMaterialSymbol";
|
|
4
|
+
import { resolveMenuItemIcon, } from "../../helpers/menuItemIcons";
|
|
5
|
+
export var SolidMenuItemIcon = function (_a) {
|
|
6
|
+
var item = _a.item, className = _a.className, _b = _a.size, size = _b === void 0 ? 18 : _b;
|
|
7
|
+
// if (item?.isSystem) {
|
|
8
|
+
// return null;
|
|
9
|
+
// }
|
|
10
|
+
var icon = resolveMenuItemIcon(item);
|
|
11
|
+
if (!icon) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
if (icon.kind === "solid") {
|
|
15
|
+
return (_jsx(SolidIcon, { "aria-hidden": "true", className: className, name: icon.name, size: size, spin: icon.spin }));
|
|
16
|
+
}
|
|
17
|
+
// Material icon
|
|
18
|
+
return (_jsx(SolidMaterialSymbol, { "aria-hidden": "true", className: className, name: icon.name, size: size, fallback: null }));
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=SolidMenuItemIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolidMenuItemIcon.js","sourceRoot":"","sources":["../../../src/components/layout/SolidMenuItemIcon.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,mBAAmB,GAEpB,MAAM,6BAA6B,CAAC;AAQrC,MAAM,CAAC,IAAM,iBAAiB,GAAG,UAAC,EAAuD;QAArD,IAAI,UAAA,EAAE,SAAS,eAAA,EAAE,YAAS,EAAT,IAAI,mBAAG,EAAE,KAAA;IAC5D,wBAAwB;IACxB,iBAAiB;IACjB,IAAI;IACJ,IAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAC;KACb;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;QACzB,OAAO,CACL,KAAC,SAAS,mBACI,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,CAAC,IAAI,GACf,CACH,CAAC;KACH;IAED,gBAAgB;IAChB,OAAO,CACL,KAAC,mBAAmB,mBACN,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,GACd,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { SolidIcon } from \"../shad-cn-ui\";\nimport { SolidMaterialSymbol } from \"../common/SolidMaterialSymbol\";\nimport {\n resolveMenuItemIcon,\n type MenuItemIconSource,\n} from \"../../helpers/menuItemIcons\";\n\ntype SolidMenuItemIconProps = {\n item?: MenuItemIconSource | null;\n className?: string;\n size?: number | string;\n};\n\nexport const SolidMenuItemIcon = ({ item, className, size = 18, }: SolidMenuItemIconProps) => {\n // if (item?.isSystem) {\n // return null;\n // }\n const icon = resolveMenuItemIcon(item);\n if (!icon) {\n return null;\n }\n\n if (icon.kind === \"solid\") {\n return (\n <SolidIcon\n aria-hidden=\"true\"\n className={className}\n name={icon.name}\n size={size}\n spin={icon.spin}\n />\n );\n }\n\n // Material icon\n return (\n <SolidMaterialSymbol\n aria-hidden=\"true\"\n className={className}\n name={icon.name}\n size={size}\n fallback={null}\n />\n );\n};"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { SolidIcon } from "../shad-cn-ui";
|
|
2
|
+
import { SolidMaterialSymbol } from "../common/SolidMaterialSymbol";
|
|
3
|
+
import {
|
|
4
|
+
resolveMenuItemIcon,
|
|
5
|
+
type MenuItemIconSource,
|
|
6
|
+
} from "../../helpers/menuItemIcons";
|
|
7
|
+
|
|
8
|
+
type SolidMenuItemIconProps = {
|
|
9
|
+
item?: MenuItemIconSource | null;
|
|
10
|
+
className?: string;
|
|
11
|
+
size?: number | string;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const SolidMenuItemIcon = ({ item, className, size = 18, }: SolidMenuItemIconProps) => {
|
|
15
|
+
// if (item?.isSystem) {
|
|
16
|
+
// return null;
|
|
17
|
+
// }
|
|
18
|
+
const icon = resolveMenuItemIcon(item);
|
|
19
|
+
if (!icon) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (icon.kind === "solid") {
|
|
24
|
+
return (
|
|
25
|
+
<SolidIcon
|
|
26
|
+
aria-hidden="true"
|
|
27
|
+
className={className}
|
|
28
|
+
name={icon.name}
|
|
29
|
+
size={size}
|
|
30
|
+
spin={icon.spin}
|
|
31
|
+
/>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Material icon
|
|
36
|
+
return (
|
|
37
|
+
<SolidMaterialSymbol
|
|
38
|
+
aria-hidden="true"
|
|
39
|
+
className={className}
|
|
40
|
+
name={icon.name}
|
|
41
|
+
size={size}
|
|
42
|
+
fallback={null}
|
|
43
|
+
/>
|
|
44
|
+
);
|
|
45
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navbar-two-menu.d.ts","sourceRoot":"","sources":["../../../src/components/layout/navbar-two-menu.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"navbar-two-menu.d.ts","sourceRoot":"","sources":["../../../src/components/layout/navbar-two-menu.tsx"],"names":[],"mappings":"AAMA,QAAA,MAAM,aAAa,kBAAmB,GAAG,4CA+GxC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -14,6 +14,7 @@ import Link from "../common/Link";
|
|
|
14
14
|
import { useState, useEffect } from "react";
|
|
15
15
|
import { useSearchParams } from "../../hooks/useSearchParams";
|
|
16
16
|
import { resolveRetainedModelViewRoute } from "../../helpers/modelViewPersistence";
|
|
17
|
+
import { SolidMenuItemIcon } from "./SolidMenuItemIcon";
|
|
17
18
|
var NavbarTwoMenu = function (_a) {
|
|
18
19
|
var menuItems = _a.menuItems;
|
|
19
20
|
var searchParams = useSearchParams();
|
|
@@ -25,24 +26,21 @@ var NavbarTwoMenu = function (_a) {
|
|
|
25
26
|
return items === null || items === void 0 ? void 0 : items.some(function (item) { var _a; return (item.id !== null && item.id === activeId) || hasActiveChild((_a = item.items) !== null && _a !== void 0 ? _a : []); });
|
|
26
27
|
};
|
|
27
28
|
var itemRenderer = function (item, options) {
|
|
28
|
-
var _a, _b;
|
|
29
|
+
var _a, _b, _c;
|
|
29
30
|
var isSelected = activeId !== null && item.id !== null && item.id === activeId;
|
|
30
31
|
var isParentActive = activeId !== null && ((_a = item.items) === null || _a === void 0 ? void 0 : _a.length) > 0 && hasActiveChild(item.items);
|
|
31
|
-
return (_jsx("div", { className: "flex items-center cursor-pointer menuHead px-4 ".concat(isSelected || isParentActive ? "p-highlight" : ""), onClick: options.onClick, children: _jsxs(Link, { href: (item === null || item === void 0 ? void 0 : item.url) ? item === null || item === void 0 ? void 0 : item.url : "#", className: "w-full flex justify-between font-normal", children: [_jsxs("div", { className: "flex items-center", style: { gap: 10 }, children: [item.
|
|
32
|
-
// material-symbols-${item.iconVariant ?? 'outlined'}
|
|
33
|
-
_jsx("span", { className: "material-symbols-outlined", style: { fontSize: 18 }, children: item.icon })), _jsx("span", { children: item.label })] }), ((_b = item === null || item === void 0 ? void 0 : item.items) === null || _b === void 0 ? void 0 : _b.length) > 0 &&
|
|
32
|
+
return (_jsx("div", { className: "flex items-center cursor-pointer menuHead px-4 ".concat(isSelected || isParentActive ? "p-highlight" : ""), onClick: options.onClick, children: _jsxs(Link, { href: (item === null || item === void 0 ? void 0 : item.url) ? item === null || item === void 0 ? void 0 : item.url : "#", className: "w-full flex justify-between font-normal", children: [_jsxs("div", { className: "flex items-center", style: { gap: 10 }, children: [_jsx(SolidMenuItemIcon, { item: (_b = item.source) !== null && _b !== void 0 ? _b : item }), _jsx("span", { children: item.label })] }), ((_c = item === null || item === void 0 ? void 0 : item.items) === null || _c === void 0 ? void 0 : _c.length) > 0 &&
|
|
34
33
|
_jsx("span", { className: "sidebar-chevrons ".concat(expandedKeys[item.key] ? "pi pi-angle-up" : "pi pi-angle-down") })] }) }, item === null || item === void 0 ? void 0 : item.key));
|
|
35
34
|
};
|
|
36
35
|
var createMenuItems = function (menuItems) {
|
|
37
36
|
return menuItems.map(function (mi) {
|
|
38
|
-
var _a;
|
|
39
37
|
var resolvedPath = mi.path ? resolveRetainedModelViewRoute(mi.path) : null;
|
|
40
38
|
var menuItemId = new URLSearchParams(resolvedPath === null || resolvedPath === void 0 ? void 0 : resolvedPath.split("?")[1]).get("menuItemId");
|
|
41
39
|
return {
|
|
42
40
|
key: mi.key,
|
|
43
41
|
id: menuItemId,
|
|
44
42
|
label: mi.title,
|
|
45
|
-
|
|
43
|
+
source: mi,
|
|
46
44
|
// iconVariant: mi.iconVariant,
|
|
47
45
|
template: itemRenderer,
|
|
48
46
|
url: resolvedPath,
|
|
@@ -74,11 +72,12 @@ var NavbarTwoMenu = function (_a) {
|
|
|
74
72
|
};
|
|
75
73
|
var renderMenuItems = function (menuItems) {
|
|
76
74
|
return (_jsx("ul", { className: "solid-panel-menu-list", children: menuItems.map(function (item) {
|
|
75
|
+
var _a;
|
|
77
76
|
var hasChildren = item.items && item.items.length > 0;
|
|
78
77
|
var isExpanded = !!expandedKeys[item.key];
|
|
79
78
|
var isSelected = activeId !== null && item.id !== null && item.id === activeId;
|
|
80
79
|
var isParentActive = hasChildren && hasActiveChild(item.items);
|
|
81
|
-
return (_jsxs("li", { children: [_jsxs("div", { className: "flex items-center cursor-pointer menuHead px-4 ".concat(isSelected || isParentActive ? "p-highlight" : ""), children: [_jsx(Link, { href: (item === null || item === void 0 ? void 0 : item.url) ? item === null || item === void 0 ? void 0 : item.url : "#", className: "w-full flex justify-between font-normal", children: _jsxs("div", { className: "flex items-center", style: { gap: 10 }, children: [
|
|
80
|
+
return (_jsxs("li", { children: [_jsxs("div", { className: "flex items-center cursor-pointer menuHead px-4 ".concat(isSelected || isParentActive ? "p-highlight" : ""), children: [_jsx(Link, { href: (item === null || item === void 0 ? void 0 : item.url) ? item === null || item === void 0 ? void 0 : item.url : "#", className: "w-full flex justify-between font-normal", children: _jsxs("div", { className: "flex items-center", style: { gap: 10 }, children: [_jsx(SolidMenuItemIcon, { item: (_a = item.source) !== null && _a !== void 0 ? _a : item }), _jsx("span", { children: item.label })] }) }), hasChildren && (_jsx("button", { type: "button", className: "sidebar-chevrons-button", onClick: function () { return toggleExpansion(item.key); }, "aria-label": "Toggle ".concat(item.label, " menu"), children: _jsx("span", { className: "sidebar-chevrons ".concat(isExpanded ? "pi pi-angle-up" : "pi pi-angle-down") }) }))] }), hasChildren && isExpanded && (_jsx("div", { className: "solid-panel-menu-children pl-6", children: renderMenuItems(item.items) }))] }, item.key));
|
|
82
81
|
}) }));
|
|
83
82
|
};
|
|
84
83
|
return _jsx("div", { className: "solid-panel-menu", children: renderMenuItems(items) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navbar-two-menu.js","sourceRoot":"","sources":["../../../src/components/layout/navbar-two-menu.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,IAAM,aAAa,GAAG,UAAC,EAAkB;QAAhB,SAAS,eAAA;IAC9B,IAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACjC,IAAA,KAAkC,QAAQ,CAAM,EAAE,CAAC,EAAlD,YAAY,QAAA,EAAE,eAAe,QAAqB,CAAC;IAE1D,IAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAChD,IAAM,cAAc,GAAG,UAAC,KAAY;QAChC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5B,OAAO,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,UAAC,IAAI,YACpB,OAAA,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,IAAI,cAAc,CAAC,MAAA,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC,CAAA,EAAA,CACjF,CAAC;IACN,CAAC,CAAC;IACF,IAAM,YAAY,GAAG,UAAC,IAAS,EAAE,OAAY;;QACzC,IAAM,UAAU,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC;QACjF,IAAM,cAAc,GAAG,QAAQ,KAAK,IAAI,IAAI,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,IAAG,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjG,OAAO,CACH,cAAqB,SAAS,EAAE,yDAAkD,UAAU,IAAI,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,YAC3J,MAAC,IAAI,IAAC,IAAI,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,EAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAC,yCAAyC,aACxF,eAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,aAChD,IAAI,CAAC,IAAI,IAAI;4BACV,qDAAqD;4BACrD,eAAM,SAAS,EAAC,2BAA2B,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,YAC9D,IAAI,CAAC,IAAI,GACP,CACV,EACD,yBACK,IAAI,CAAC,KAAK,GACR,IACL,EACL,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,0CAAE,MAAM,IAAG,CAAC;wBACpB,eAAM,SAAS,EAAE,2BAAoB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAE,GAAI,IAE1G,IAhBD,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAiBb,CACT,CAAA;IACL,CAAC,CAAC;IAEF,IAAM,eAAe,GAAG,UAAC,SAAgB;QACrC,OAAA,SAAS,CAAC,GAAG,CAAC,UAAC,EAAE;;YACb,IAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7E,IAAM,UAAU,GAAG,IAAI,eAAe,CAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtF,OAAO;gBACH,GAAG,EAAE,EAAE,CAAC,GAAG;gBACX,EAAE,EAAE,UAAU;gBACd,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,IAAI,EAAE,MAAA,EAAE,CAAC,IAAI,mCAAI,EAAE;gBACnB,+BAA+B;gBAC/B,QAAQ,EAAE,YAAY;gBACtB,GAAG,EAAE,YAAY;gBACjB,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;aAC3D,CAAC;QACN,CAAC,CAAC;IAbF,CAaE,CAAA;IAGN,IAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAEzC,8DAA8D;IAC9D,SAAS,CAAC;QACN,IAAM,eAAe,GAAQ,EAAE,CAAC;QAChC,IAAM,cAAc,GAAG,UAAC,KAAY;YAChC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAC,UAAC,IAAI;;gBAChB,IAAI,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,KAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBAClD,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBACjC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC9B;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QACF,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,eAAe,CAAC,UAAC,IAAS,IAAK,OAAA,uBAAM,IAAI,GAAK,eAAe,EAAG,EAAjC,CAAiC,CAAC,CAAC;IACtE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,IAAM,eAAe,GAAG,UAAC,GAAW;QAChC,eAAe,CAAC,UAAC,IAAS;;YAAK,OAAA,uBAAM,IAAI,gBAAG,GAAG,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAG;QAAhC,CAAgC,CAAC,CAAC;IACrE,CAAC,CAAC;IAEF,IAAM,eAAe,GAAG,UAAC,SAAgB;QACrC,OAAO,CACH,aAAI,SAAS,EAAC,uBAAuB,YAChC,SAAS,CAAC,GAAG,CAAC,UAAC,IAAI;gBAChB,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACxD,IAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAM,UAAU,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC;gBACjF,IAAM,cAAc,GAAG,WAAW,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEjE,OAAO,CACH,yBACI,eAAK,SAAS,EAAE,yDAAkD,UAAU,IAAI,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAE,aACjH,KAAC,IAAI,IAAC,IAAI,EAAE,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,EAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,EAAC,yCAAyC,YACxF,eAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,aAChD,IAAI,CAAC,IAAI,IAAI,CACV,eAAM,SAAS,EAAC,2BAA2B,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,YAC9D,IAAI,CAAC,IAAI,GACP,CACV,EACD,yBAAO,IAAI,CAAC,KAAK,GAAQ,IACvB,GACH,EACN,WAAW,IAAI,CACZ,iBACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,cAAM,OAAA,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAzB,CAAyB,gBAC5B,iBAAU,IAAI,CAAC,KAAK,UAAO,YAEvC,eAAM,SAAS,EAAE,2BAAoB,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAE,GAAI,GACxF,CACZ,IACC,EACL,WAAW,IAAI,UAAU,IAAI,CAC1B,cAAK,SAAS,EAAC,gCAAgC,YAC1C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAC1B,CACT,KA3BI,IAAI,CAAC,GAAG,CA4BZ,CACR,CAAC;YACN,CAAC,CAAC,GACD,CACR,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,cAAK,SAAS,EAAC,kBAAkB,YAAE,eAAe,CAAC,KAAK,CAAC,GAAO,CAAC;AAC5E,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import Link from \"../common/Link\";\nimport { useState, useEffect } from \"react\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { resolveRetainedModelViewRoute } from \"../../helpers/modelViewPersistence\";\n\nconst NavbarTwoMenu = ({ menuItems }: any) => {\n const searchParams = useSearchParams();\n const [expandedKeys, setExpandedKeys] = useState<any>({});\n\n const activeId = searchParams.get(\"menuItemId\");\n const hasActiveChild = (items: any[]): boolean => {\n if (!activeId) return false;\n return items?.some((item) =>\n (item.id !== null && item.id === activeId) || hasActiveChild(item.items ?? [])\n );\n };\n const itemRenderer = (item: any, options: any) => {\n const isSelected = activeId !== null && item.id !== null && item.id === activeId;\n const isParentActive = activeId !== null && item.items?.length > 0 && hasActiveChild(item.items);\n return (\n <div key={item?.key} className={`flex items-center cursor-pointer menuHead px-4 ${isSelected || isParentActive ? \"p-highlight\" : \"\"}`} onClick={options.onClick} >\n <Link href={item?.url ? item?.url : \"#\"} className=\"w-full flex justify-between font-normal\">\n <div className=\"flex items-center\" style={{ gap: 10 }}>\n {item.icon && (\n // material-symbols-${item.iconVariant ?? 'outlined'}\n <span className=\"material-symbols-outlined\" style={{ fontSize: 18 }}>\n {item.icon}\n </span>\n )}\n <span>\n {item.label}\n </span>\n </div>\n {item?.items?.length > 0 &&\n <span className={`sidebar-chevrons ${expandedKeys[item.key] ? \"pi pi-angle-up\" : \"pi pi-angle-down\"}`} />\n }\n </Link>\n </div>\n )\n };\n\n const createMenuItems = (menuItems: any[]): any[] =>\n menuItems.map((mi) => {\n const resolvedPath = mi.path ? resolveRetainedModelViewRoute(mi.path) : null;\n const menuItemId = new URLSearchParams(resolvedPath?.split(\"?\")[1]).get(\"menuItemId\");\n return {\n key: mi.key,\n id: menuItemId, // ← extracted from path\n label: mi.title,\n icon: mi.icon ?? \"\",\n // iconVariant: mi.iconVariant,\n template: itemRenderer,\n url: resolvedPath,\n items: mi.children ? createMenuItems(mi.children) : null,\n };\n })\n\n\n const items = createMenuItems(menuItems);\n\n // Auto-expand parents with active child when activeId changes\n useEffect(() => {\n const newExpandedKeys: any = {};\n const expandIfActive = (items: any[]) => {\n items?.forEach((item) => {\n if (item.items?.length && hasActiveChild(item.items)) {\n newExpandedKeys[item.key] = true;\n expandIfActive(item.items);\n }\n });\n };\n expandIfActive(createMenuItems(menuItems));\n setExpandedKeys((prev: any) => ({ ...prev, ...newExpandedKeys }));\n }, [activeId]);\n\n const toggleExpansion = (key: string) => {\n setExpandedKeys((prev: any) => ({ ...prev, [key]: !prev[key] }));\n };\n\n const renderMenuItems = (menuItems: any[]): React.ReactNode => {\n return (\n <ul className=\"solid-panel-menu-list\">\n {menuItems.map((item) => {\n const hasChildren = item.items && item.items.length > 0;\n const isExpanded = !!expandedKeys[item.key];\n const isSelected = activeId !== null && item.id !== null && item.id === activeId;\n const isParentActive = hasChildren && hasActiveChild(item.items);\n\n return (\n <li key={item.key}>\n <div className={`flex items-center cursor-pointer menuHead px-4 ${isSelected || isParentActive ? \"p-highlight\" : \"\"}`}>\n <Link href={item?.url ? item?.url : \"#\"} className=\"w-full flex justify-between font-normal\">\n <div className=\"flex items-center\" style={{ gap: 10 }}>\n {item.icon && (\n <span className=\"material-symbols-outlined\" style={{ fontSize: 18 }}>\n {item.icon}\n </span>\n )}\n <span>{item.label}</span>\n </div>\n </Link>\n {hasChildren && (\n <button\n type=\"button\"\n className=\"sidebar-chevrons-button\"\n onClick={() => toggleExpansion(item.key)}\n aria-label={`Toggle ${item.label} menu`}\n >\n <span className={`sidebar-chevrons ${isExpanded ? \"pi pi-angle-up\" : \"pi pi-angle-down\"}`} />\n </button>\n )}\n </div>\n {hasChildren && isExpanded && (\n <div className=\"solid-panel-menu-children pl-6\">\n {renderMenuItems(item.items)}\n </div>\n )}\n </li>\n );\n })}\n </ul>\n );\n };\n\n return <div className=\"solid-panel-menu\">{renderMenuItems(items)}</div>;\n};\n\nexport default NavbarTwoMenu;\n"]}
|
|
1
|
+
{"version":3,"file":"navbar-two-menu.js","sourceRoot":"","sources":["../../../src/components/layout/navbar-two-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import Link from \"../common/Link\";\nimport { useState, useEffect } from \"react\";\nimport { useSearchParams } from \"../../hooks/useSearchParams\";\nimport { resolveRetainedModelViewRoute } from \"../../helpers/modelViewPersistence\";\nimport { SolidMenuItemIcon } from \"./SolidMenuItemIcon\";\n\nconst NavbarTwoMenu = ({ menuItems }: any) => {\n const searchParams = useSearchParams();\n const [expandedKeys, setExpandedKeys] = useState<any>({});\n\n const activeId = searchParams.get(\"menuItemId\");\n const hasActiveChild = (items: any[]): boolean => {\n if (!activeId) return false;\n return items?.some((item) =>\n (item.id !== null && item.id === activeId) || hasActiveChild(item.items ?? [])\n );\n };\n const itemRenderer = (item: any, options: any) => {\n const isSelected = activeId !== null && item.id !== null && item.id === activeId;\n const isParentActive = activeId !== null && item.items?.length > 0 && hasActiveChild(item.items);\n return (\n <div key={item?.key} className={`flex items-center cursor-pointer menuHead px-4 ${isSelected || isParentActive ? \"p-highlight\" : \"\"}`} onClick={options.onClick} >\n <Link href={item?.url ? item?.url : \"#\"} className=\"w-full flex justify-between font-normal\">\n <div className=\"flex items-center\" style={{ gap: 10 }}>\n <SolidMenuItemIcon item={item.source ?? item} />\n <span>\n {item.label}\n </span>\n </div>\n {item?.items?.length > 0 &&\n <span className={`sidebar-chevrons ${expandedKeys[item.key] ? \"pi pi-angle-up\" : \"pi pi-angle-down\"}`} />\n }\n </Link>\n </div>\n )\n };\n\n const createMenuItems = (menuItems: any[]): any[] =>\n menuItems.map((mi) => {\n const resolvedPath = mi.path ? resolveRetainedModelViewRoute(mi.path) : null;\n const menuItemId = new URLSearchParams(resolvedPath?.split(\"?\")[1]).get(\"menuItemId\");\n return {\n key: mi.key,\n id: menuItemId, // ← extracted from path\n label: mi.title,\n source: mi,\n // iconVariant: mi.iconVariant,\n template: itemRenderer,\n url: resolvedPath,\n items: mi.children ? createMenuItems(mi.children) : null,\n };\n })\n\n\n const items = createMenuItems(menuItems);\n\n // Auto-expand parents with active child when activeId changes\n useEffect(() => {\n const newExpandedKeys: any = {};\n const expandIfActive = (items: any[]) => {\n items?.forEach((item) => {\n if (item.items?.length && hasActiveChild(item.items)) {\n newExpandedKeys[item.key] = true;\n expandIfActive(item.items);\n }\n });\n };\n expandIfActive(createMenuItems(menuItems));\n setExpandedKeys((prev: any) => ({ ...prev, ...newExpandedKeys }));\n }, [activeId]);\n\n const toggleExpansion = (key: string) => {\n setExpandedKeys((prev: any) => ({ ...prev, [key]: !prev[key] }));\n };\n\n const renderMenuItems = (menuItems: any[]): React.ReactNode => {\n return (\n <ul className=\"solid-panel-menu-list\">\n {menuItems.map((item) => {\n const hasChildren = item.items && item.items.length > 0;\n const isExpanded = !!expandedKeys[item.key];\n const isSelected = activeId !== null && item.id !== null && item.id === activeId;\n const isParentActive = hasChildren && hasActiveChild(item.items);\n\n return (\n <li key={item.key}>\n <div className={`flex items-center cursor-pointer menuHead px-4 ${isSelected || isParentActive ? \"p-highlight\" : \"\"}`}>\n <Link href={item?.url ? item?.url : \"#\"} className=\"w-full flex justify-between font-normal\">\n <div className=\"flex items-center\" style={{ gap: 10 }}>\n <SolidMenuItemIcon item={item.source ?? item} />\n <span>{item.label}</span>\n </div>\n </Link>\n {hasChildren && (\n <button\n type=\"button\"\n className=\"sidebar-chevrons-button\"\n onClick={() => toggleExpansion(item.key)}\n aria-label={`Toggle ${item.label} menu`}\n >\n <span className={`sidebar-chevrons ${isExpanded ? \"pi pi-angle-up\" : \"pi pi-angle-down\"}`} />\n </button>\n )}\n </div>\n {hasChildren && isExpanded && (\n <div className=\"solid-panel-menu-children pl-6\">\n {renderMenuItems(item.items)}\n </div>\n )}\n </li>\n );\n })}\n </ul>\n );\n };\n\n return <div className=\"solid-panel-menu\">{renderMenuItems(items)}</div>;\n};\n\nexport default NavbarTwoMenu;\n"]}
|
|
@@ -2,6 +2,7 @@ import Link from "../common/Link";
|
|
|
2
2
|
import { useState, useEffect } from "react";
|
|
3
3
|
import { useSearchParams } from "../../hooks/useSearchParams";
|
|
4
4
|
import { resolveRetainedModelViewRoute } from "../../helpers/modelViewPersistence";
|
|
5
|
+
import { SolidMenuItemIcon } from "./SolidMenuItemIcon";
|
|
5
6
|
|
|
6
7
|
const NavbarTwoMenu = ({ menuItems }: any) => {
|
|
7
8
|
const searchParams = useSearchParams();
|
|
@@ -21,12 +22,7 @@ const NavbarTwoMenu = ({ menuItems }: any) => {
|
|
|
21
22
|
<div key={item?.key} className={`flex items-center cursor-pointer menuHead px-4 ${isSelected || isParentActive ? "p-highlight" : ""}`} onClick={options.onClick} >
|
|
22
23
|
<Link href={item?.url ? item?.url : "#"} className="w-full flex justify-between font-normal">
|
|
23
24
|
<div className="flex items-center" style={{ gap: 10 }}>
|
|
24
|
-
{item.
|
|
25
|
-
// material-symbols-${item.iconVariant ?? 'outlined'}
|
|
26
|
-
<span className="material-symbols-outlined" style={{ fontSize: 18 }}>
|
|
27
|
-
{item.icon}
|
|
28
|
-
</span>
|
|
29
|
-
)}
|
|
25
|
+
<SolidMenuItemIcon item={item.source ?? item} />
|
|
30
26
|
<span>
|
|
31
27
|
{item.label}
|
|
32
28
|
</span>
|
|
@@ -47,7 +43,7 @@ const NavbarTwoMenu = ({ menuItems }: any) => {
|
|
|
47
43
|
key: mi.key,
|
|
48
44
|
id: menuItemId, // ← extracted from path
|
|
49
45
|
label: mi.title,
|
|
50
|
-
|
|
46
|
+
source: mi,
|
|
51
47
|
// iconVariant: mi.iconVariant,
|
|
52
48
|
template: itemRenderer,
|
|
53
49
|
url: resolvedPath,
|
|
@@ -91,11 +87,7 @@ const NavbarTwoMenu = ({ menuItems }: any) => {
|
|
|
91
87
|
<div className={`flex items-center cursor-pointer menuHead px-4 ${isSelected || isParentActive ? "p-highlight" : ""}`}>
|
|
92
88
|
<Link href={item?.url ? item?.url : "#"} className="w-full flex justify-between font-normal">
|
|
93
89
|
<div className="flex items-center" style={{ gap: 10 }}>
|
|
94
|
-
{item.
|
|
95
|
-
<span className="material-symbols-outlined" style={{ fontSize: 18 }}>
|
|
96
|
-
{item.icon}
|
|
97
|
-
</span>
|
|
98
|
-
)}
|
|
90
|
+
<SolidMenuItemIcon item={item.source ?? item} />
|
|
99
91
|
<span>{item.label}</span>
|
|
100
92
|
</div>
|
|
101
93
|
</Link>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidCodeEditor.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SolidCodeEditor.d.ts","sourceRoot":"","sources":["../../../src/components/shad-cn-ui/SolidCodeEditor.tsx"],"names":[],"mappings":"AAGA,KAAK,oBAAoB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,KAAU,EACV,QAAQ,EACR,MAAgB,EAChB,QAAiB,EACjB,QAAgB,EAChB,SAAS,EACT,QAAuB,GACxB,EAAE,oBAAoB,2CAkEtB"}
|