@pilotiq/pilotiq 0.7.2 → 0.8.0
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/.turbo/turbo-build.log +2 -2
- package/CHANGELOG.md +142 -0
- package/CLAUDE.md +59 -3
- package/dist/Pilotiq.d.ts +83 -0
- package/dist/Pilotiq.d.ts.map +1 -1
- package/dist/Pilotiq.js +39 -0
- package/dist/Pilotiq.js.map +1 -1
- package/dist/actions/Action.d.ts +27 -99
- package/dist/actions/Action.d.ts.map +1 -1
- package/dist/actions/Action.js +52 -754
- package/dist/actions/Action.js.map +1 -1
- package/dist/actions/bulkFactories.d.ts +46 -0
- package/dist/actions/bulkFactories.d.ts.map +1 -0
- package/dist/actions/bulkFactories.js +144 -0
- package/dist/actions/bulkFactories.js.map +1 -0
- package/dist/actions/crudFactories.d.ts +94 -0
- package/dist/actions/crudFactories.d.ts.map +1 -0
- package/dist/actions/crudFactories.js +209 -0
- package/dist/actions/crudFactories.js.map +1 -0
- package/dist/actions/factoryHelpers.d.ts +108 -0
- package/dist/actions/factoryHelpers.d.ts.map +1 -0
- package/dist/actions/factoryHelpers.js +138 -0
- package/dist/actions/factoryHelpers.js.map +1 -0
- package/dist/actions/m2mFactories.d.ts +47 -0
- package/dist/actions/m2mFactories.d.ts.map +1 -0
- package/dist/actions/m2mFactories.js +173 -0
- package/dist/actions/m2mFactories.js.map +1 -0
- package/dist/actions/relationFactories.d.ts +93 -0
- package/dist/actions/relationFactories.d.ts.map +1 -0
- package/dist/actions/relationFactories.js +321 -0
- package/dist/actions/relationFactories.js.map +1 -0
- package/dist/elements/dispatchForm.js +1 -1
- package/dist/elements/dispatchForm.js.map +1 -1
- package/dist/elements/dispatchTable.js +1 -1
- package/dist/elements/dispatchTable.js.map +1 -1
- package/dist/fields/Field.d.ts +31 -0
- package/dist/fields/Field.d.ts.map +1 -1
- package/dist/fields/Field.js +25 -0
- package/dist/fields/Field.js.map +1 -1
- package/dist/pageData/breadcrumbs.d.ts +42 -0
- package/dist/pageData/breadcrumbs.d.ts.map +1 -0
- package/dist/pageData/breadcrumbs.js +172 -0
- package/dist/pageData/breadcrumbs.js.map +1 -0
- package/dist/pageData/forms.d.ts +137 -0
- package/dist/pageData/forms.d.ts.map +1 -0
- package/dist/pageData/forms.js +427 -0
- package/dist/pageData/forms.js.map +1 -0
- package/dist/pageData/helpers.d.ts +239 -0
- package/dist/pageData/helpers.d.ts.map +1 -0
- package/dist/pageData/helpers.js +703 -0
- package/dist/pageData/helpers.js.map +1 -0
- package/dist/pageData/misc.d.ts +76 -0
- package/dist/pageData/misc.d.ts.map +1 -0
- package/dist/pageData/misc.js +263 -0
- package/dist/pageData/misc.js.map +1 -0
- package/dist/pageData/navigation.d.ts +292 -0
- package/dist/pageData/navigation.d.ts.map +1 -0
- package/dist/pageData/navigation.js +591 -0
- package/dist/pageData/navigation.js.map +1 -0
- package/dist/pageData/relationPages.d.ts +172 -0
- package/dist/pageData/relationPages.d.ts.map +1 -0
- package/dist/pageData/relationPages.js +867 -0
- package/dist/pageData/relationPages.js.map +1 -0
- package/dist/pageData/relationTabs.d.ts +65 -0
- package/dist/pageData/relationTabs.d.ts.map +1 -0
- package/dist/pageData/relationTabs.js +258 -0
- package/dist/pageData/relationTabs.js.map +1 -0
- package/dist/pageData/resourcePages.d.ts +48 -0
- package/dist/pageData/resourcePages.d.ts.map +1 -0
- package/dist/pageData/resourcePages.js +504 -0
- package/dist/pageData/resourcePages.js.map +1 -0
- package/dist/pageData.d.ts +12 -792
- package/dist/pageData.d.ts.map +1 -1
- package/dist/pageData.js +24 -3797
- package/dist/pageData.js.map +1 -1
- package/dist/react/AppShell.d.ts +8 -0
- package/dist/react/AppShell.d.ts.map +1 -1
- package/dist/react/AppShell.js +11 -1
- package/dist/react/AppShell.js.map +1 -1
- package/dist/react/CollabExtensionFactoryRegistry.d.ts +47 -0
- package/dist/react/CollabExtensionFactoryRegistry.d.ts.map +1 -0
- package/dist/react/CollabExtensionFactoryRegistry.js +14 -0
- package/dist/react/CollabExtensionFactoryRegistry.js.map +1 -0
- package/dist/react/CollabRoomContext.d.ts +37 -0
- package/dist/react/CollabRoomContext.d.ts.map +1 -0
- package/dist/react/CollabRoomContext.js +12 -0
- package/dist/react/CollabRoomContext.js.map +1 -0
- package/dist/react/FormCollabBindingRegistry.d.ts +62 -0
- package/dist/react/FormCollabBindingRegistry.d.ts.map +1 -0
- package/dist/react/FormCollabBindingRegistry.js +14 -0
- package/dist/react/FormCollabBindingRegistry.js.map +1 -0
- package/dist/react/RecordWrapperGate.d.ts +25 -0
- package/dist/react/RecordWrapperGate.d.ts.map +1 -0
- package/dist/react/RecordWrapperGate.js +30 -0
- package/dist/react/RecordWrapperGate.js.map +1 -0
- package/dist/react/RecordWrapperRegistry.d.ts +31 -0
- package/dist/react/RecordWrapperRegistry.d.ts.map +1 -0
- package/dist/react/RecordWrapperRegistry.js +15 -0
- package/dist/react/RecordWrapperRegistry.js.map +1 -0
- package/dist/react/SchemaRenderer.d.ts +17 -23
- package/dist/react/SchemaRenderer.d.ts.map +1 -1
- package/dist/react/SchemaRenderer.js +71 -3647
- package/dist/react/SchemaRenderer.js.map +1 -1
- package/dist/react/component-slots.d.ts +103 -0
- package/dist/react/component-slots.d.ts.map +1 -0
- package/dist/react/component-slots.js +18 -0
- package/dist/react/component-slots.js.map +1 -0
- package/dist/react/fields/BuilderInput.d.ts.map +1 -1
- package/dist/react/fields/BuilderInput.js +21 -117
- package/dist/react/fields/BuilderInput.js.map +1 -1
- package/dist/react/fields/MarkdownInput.d.ts.map +1 -1
- package/dist/react/fields/MarkdownInput.js +1 -3
- package/dist/react/fields/MarkdownInput.js.map +1 -1
- package/dist/react/fields/RepeaterInput.d.ts.map +1 -1
- package/dist/react/fields/RepeaterInput.js +22 -127
- package/dist/react/fields/RepeaterInput.js.map +1 -1
- package/dist/react/fields/rowState.d.ts +40 -0
- package/dist/react/fields/rowState.d.ts.map +1 -0
- package/dist/react/fields/rowState.js +60 -0
- package/dist/react/fields/rowState.js.map +1 -0
- package/dist/react/fields/useRowReorderDnd.d.ts +28 -0
- package/dist/react/fields/useRowReorderDnd.d.ts.map +1 -0
- package/dist/react/fields/useRowReorderDnd.js +51 -0
- package/dist/react/fields/useRowReorderDnd.js.map +1 -0
- package/dist/react/index.d.ts +9 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +8 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/layouts/SidebarLayout.d.ts +1 -1
- package/dist/react/layouts/SidebarLayout.d.ts.map +1 -1
- package/dist/react/layouts/SidebarLayout.js +10 -2
- package/dist/react/layouts/SidebarLayout.js.map +1 -1
- package/dist/react/layouts/TopbarLayout.d.ts +1 -1
- package/dist/react/layouts/TopbarLayout.d.ts.map +1 -1
- package/dist/react/layouts/TopbarLayout.js +19 -11
- package/dist/react/layouts/TopbarLayout.js.map +1 -1
- package/dist/react/parseRecordEditUrl.d.ts +29 -0
- package/dist/react/parseRecordEditUrl.d.ts.map +1 -0
- package/dist/react/parseRecordEditUrl.js +25 -0
- package/dist/react/parseRecordEditUrl.js.map +1 -0
- package/dist/react/persistedState.d.ts +19 -0
- package/dist/react/persistedState.d.ts.map +1 -0
- package/dist/react/persistedState.js +51 -0
- package/dist/react/persistedState.js.map +1 -0
- package/dist/react/schemaRenderer/AlertRenderer.d.ts +12 -0
- package/dist/react/schemaRenderer/AlertRenderer.d.ts.map +1 -0
- package/dist/react/schemaRenderer/AlertRenderer.js +61 -0
- package/dist/react/schemaRenderer/AlertRenderer.js.map +1 -0
- package/dist/react/schemaRenderer/EntryRenderer.d.ts +13 -0
- package/dist/react/schemaRenderer/EntryRenderer.d.ts.map +1 -0
- package/dist/react/schemaRenderer/EntryRenderer.js +277 -0
- package/dist/react/schemaRenderer/EntryRenderer.js.map +1 -0
- package/dist/react/schemaRenderer/SectionRenderer.d.ts +16 -0
- package/dist/react/schemaRenderer/SectionRenderer.d.ts.map +1 -0
- package/dist/react/schemaRenderer/SectionRenderer.js +62 -0
- package/dist/react/schemaRenderer/SectionRenderer.js.map +1 -0
- package/dist/react/schemaRenderer/SimpleElements.d.ts +25 -0
- package/dist/react/schemaRenderer/SimpleElements.d.ts.map +1 -0
- package/dist/react/schemaRenderer/SimpleElements.js +147 -0
- package/dist/react/schemaRenderer/SimpleElements.js.map +1 -0
- package/dist/react/schemaRenderer/TabsRenderer.d.ts +17 -0
- package/dist/react/schemaRenderer/TabsRenderer.d.ts.map +1 -0
- package/dist/react/schemaRenderer/TabsRenderer.js +31 -0
- package/dist/react/schemaRenderer/TabsRenderer.js.map +1 -0
- package/dist/react/schemaRenderer/WizardRenderer.d.ts +34 -0
- package/dist/react/schemaRenderer/WizardRenderer.d.ts.map +1 -0
- package/dist/react/schemaRenderer/WizardRenderer.js +208 -0
- package/dist/react/schemaRenderer/WizardRenderer.js.map +1 -0
- package/dist/react/schemaRenderer/action/ActionGroupTrigger.d.ts +21 -0
- package/dist/react/schemaRenderer/action/ActionGroupTrigger.d.ts.map +1 -0
- package/dist/react/schemaRenderer/action/ActionGroupTrigger.js +82 -0
- package/dist/react/schemaRenderer/action/ActionGroupTrigger.js.map +1 -0
- package/dist/react/schemaRenderer/action/ActionModalDialog.d.ts +30 -0
- package/dist/react/schemaRenderer/action/ActionModalDialog.d.ts.map +1 -0
- package/dist/react/schemaRenderer/action/ActionModalDialog.js +182 -0
- package/dist/react/schemaRenderer/action/ActionModalDialog.js.map +1 -0
- package/dist/react/schemaRenderer/action/ConfirmActionDialog.d.ts +17 -0
- package/dist/react/schemaRenderer/action/ConfirmActionDialog.d.ts.map +1 -0
- package/dist/react/schemaRenderer/action/ConfirmActionDialog.js +19 -0
- package/dist/react/schemaRenderer/action/ConfirmActionDialog.js.map +1 -0
- package/dist/react/schemaRenderer/action/HandlerActionButton.d.ts +16 -0
- package/dist/react/schemaRenderer/action/HandlerActionButton.d.ts.map +1 -0
- package/dist/react/schemaRenderer/action/HandlerActionButton.js +16 -0
- package/dist/react/schemaRenderer/action/HandlerActionButton.js.map +1 -0
- package/dist/react/schemaRenderer/action/MethodActionButton.d.ts +22 -0
- package/dist/react/schemaRenderer/action/MethodActionButton.d.ts.map +1 -0
- package/dist/react/schemaRenderer/action/MethodActionButton.js +26 -0
- package/dist/react/schemaRenderer/action/MethodActionButton.js.map +1 -0
- package/dist/react/schemaRenderer/action/buttons.d.ts +18 -0
- package/dist/react/schemaRenderer/action/buttons.d.ts.map +1 -0
- package/dist/react/schemaRenderer/action/buttons.js +74 -0
- package/dist/react/schemaRenderer/action/buttons.js.map +1 -0
- package/dist/react/schemaRenderer/action/helpers.d.ts +26 -0
- package/dist/react/schemaRenderer/action/helpers.d.ts.map +1 -0
- package/dist/react/schemaRenderer/action/helpers.js +126 -0
- package/dist/react/schemaRenderer/action/helpers.js.map +1 -0
- package/dist/react/schemaRenderer/action/renderAction.d.ts +21 -0
- package/dist/react/schemaRenderer/action/renderAction.d.ts.map +1 -0
- package/dist/react/schemaRenderer/action/renderAction.js +102 -0
- package/dist/react/schemaRenderer/action/renderAction.js.map +1 -0
- package/dist/react/schemaRenderer/columnFormat.d.ts +10 -0
- package/dist/react/schemaRenderer/columnFormat.d.ts.map +1 -0
- package/dist/react/schemaRenderer/columnFormat.js +76 -0
- package/dist/react/schemaRenderer/columnFormat.js.map +1 -0
- package/dist/react/schemaRenderer/constants.d.ts +8 -0
- package/dist/react/schemaRenderer/constants.d.ts.map +1 -0
- package/dist/react/schemaRenderer/constants.js +45 -0
- package/dist/react/schemaRenderer/constants.js.map +1 -0
- package/dist/react/schemaRenderer/form/FormRenderer.d.ts +29 -0
- package/dist/react/schemaRenderer/form/FormRenderer.d.ts.map +1 -0
- package/dist/react/schemaRenderer/form/FormRenderer.js +152 -0
- package/dist/react/schemaRenderer/form/FormRenderer.js.map +1 -0
- package/dist/react/schemaRenderer/form/renderField.d.ts +6 -0
- package/dist/react/schemaRenderer/form/renderField.d.ts.map +1 -0
- package/dist/react/schemaRenderer/form/renderField.js +239 -0
- package/dist/react/schemaRenderer/form/renderField.js.map +1 -0
- package/dist/react/schemaRenderer/helpers.d.ts +32 -0
- package/dist/react/schemaRenderer/helpers.d.ts.map +1 -0
- package/dist/react/schemaRenderer/helpers.js +52 -0
- package/dist/react/schemaRenderer/helpers.js.map +1 -0
- package/dist/react/schemaRenderer/table/CardsLayoutBody.d.ts +60 -0
- package/dist/react/schemaRenderer/table/CardsLayoutBody.d.ts.map +1 -0
- package/dist/react/schemaRenderer/table/CardsLayoutBody.js +189 -0
- package/dist/react/schemaRenderer/table/CardsLayoutBody.js.map +1 -0
- package/dist/react/schemaRenderer/table/TableRenderer.d.ts +29 -0
- package/dist/react/schemaRenderer/table/TableRenderer.d.ts.map +1 -0
- package/dist/react/schemaRenderer/table/TableRenderer.js +85 -0
- package/dist/react/schemaRenderer/table/TableRenderer.js.map +1 -0
- package/dist/react/schemaRenderer/table/TableRendererBody.d.ts +18 -0
- package/dist/react/schemaRenderer/table/TableRendererBody.d.ts.map +1 -0
- package/dist/react/schemaRenderer/table/TableRendererBody.js +555 -0
- package/dist/react/schemaRenderer/table/TableRendererBody.js.map +1 -0
- package/dist/react/schemaRenderer/table/filters.d.ts +263 -0
- package/dist/react/schemaRenderer/table/filters.d.ts.map +1 -0
- package/dist/react/schemaRenderer/table/filters.js +497 -0
- package/dist/react/schemaRenderer/table/filters.js.map +1 -0
- package/dist/react/schemaRenderer/table/formatCell.d.ts +11 -0
- package/dist/react/schemaRenderer/table/formatCell.d.ts.map +1 -0
- package/dist/react/schemaRenderer/table/formatCell.js +172 -0
- package/dist/react/schemaRenderer/table/formatCell.js.map +1 -0
- package/dist/react/schemaRenderer/table/links.d.ts +42 -0
- package/dist/react/schemaRenderer/table/links.d.ts.map +1 -0
- package/dist/react/schemaRenderer/table/links.js +55 -0
- package/dist/react/schemaRenderer/table/links.js.map +1 -0
- package/dist/react/schemaRenderer/table/renderRowActions.d.ts +13 -0
- package/dist/react/schemaRenderer/table/renderRowActions.d.ts.map +1 -0
- package/dist/react/schemaRenderer/table/renderRowActions.js +25 -0
- package/dist/react/schemaRenderer/table/renderRowActions.js.map +1 -0
- package/dist/react/schemaRenderer/table/url.d.ts +41 -0
- package/dist/react/schemaRenderer/table/url.d.ts.map +1 -0
- package/dist/react/schemaRenderer/table/url.js +114 -0
- package/dist/react/schemaRenderer/table/url.js.map +1 -0
- package/dist/routes/globals.d.ts +13 -0
- package/dist/routes/globals.d.ts.map +1 -0
- package/dist/routes/globals.js +131 -0
- package/dist/routes/globals.js.map +1 -0
- package/dist/routes/helpers.d.ts +217 -0
- package/dist/routes/helpers.d.ts.map +1 -0
- package/dist/routes/helpers.js +498 -0
- package/dist/routes/helpers.js.map +1 -0
- package/dist/routes/pages.d.ts +15 -0
- package/dist/routes/pages.d.ts.map +1 -0
- package/dist/routes/pages.js +145 -0
- package/dist/routes/pages.js.map +1 -0
- package/dist/routes/panel.d.ts +19 -0
- package/dist/routes/panel.d.ts.map +1 -0
- package/dist/routes/panel.js +191 -0
- package/dist/routes/panel.js.map +1 -0
- package/dist/routes/relations.d.ts +21 -0
- package/dist/routes/relations.d.ts.map +1 -0
- package/dist/routes/relations.js +1239 -0
- package/dist/routes/relations.js.map +1 -0
- package/dist/routes/resources.d.ts +28 -0
- package/dist/routes/resources.d.ts.map +1 -0
- package/dist/routes/resources.js +741 -0
- package/dist/routes/resources.js.map +1 -0
- package/dist/routes/theme.d.ts +12 -0
- package/dist/routes/theme.d.ts.map +1 -0
- package/dist/routes/theme.js +82 -0
- package/dist/routes/theme.js.map +1 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +64 -3078
- package/dist/routes.js.map +1 -1
- package/dist/vite.d.ts +1 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +26 -5
- package/dist/vite.js.map +1 -1
- package/package.json +2 -1
- package/src/Pilotiq.ts +95 -0
- package/src/actions/Action.ts +79 -723
- package/src/actions/bulkFactories.ts +168 -0
- package/src/actions/crudFactories.ts +220 -0
- package/src/actions/factoryHelpers.ts +177 -0
- package/src/actions/m2mFactories.ts +193 -0
- package/src/actions/relationFactories.ts +372 -0
- package/src/elements/dispatchForm.ts +1 -1
- package/src/elements/dispatchTable.ts +1 -1
- package/src/fields/Field.ts +39 -0
- package/src/pageData/breadcrumbs.ts +288 -0
- package/src/pageData/forms.ts +578 -0
- package/src/pageData/helpers.ts +764 -0
- package/src/pageData/misc.ts +347 -0
- package/src/pageData/navigation.ts +779 -0
- package/src/pageData/relationPages.ts +1246 -0
- package/src/pageData/relationTabs.ts +286 -0
- package/src/pageData/resourcePages.ts +593 -0
- package/src/pageData.ts +122 -4731
- package/src/react/AppShell.tsx +27 -1
- package/src/react/CollabExtensionFactoryRegistry.ts +55 -0
- package/src/react/CollabRoomContext.ts +42 -0
- package/src/react/FormCollabBindingRegistry.ts +72 -0
- package/src/react/RecordWrapperGate.tsx +40 -0
- package/src/react/RecordWrapperRegistry.ts +39 -0
- package/src/react/SchemaRenderer.tsx +230 -6479
- package/src/react/component-slots.test.ts +103 -0
- package/src/react/component-slots.ts +116 -0
- package/src/react/fields/BuilderInput.tsx +29 -117
- package/src/react/fields/MarkdownInput.tsx +0 -1
- package/src/react/fields/RepeaterInput.tsx +29 -130
- package/src/react/fields/rowState.ts +106 -0
- package/src/react/fields/useRowReorderDnd.ts +78 -0
- package/src/react/index.ts +38 -0
- package/src/react/layouts/SidebarLayout.tsx +39 -28
- package/src/react/layouts/TopbarLayout.tsx +70 -57
- package/src/react/parseRecordEditUrl.test.ts +75 -0
- package/src/react/parseRecordEditUrl.ts +55 -0
- package/src/react/persistedState.ts +40 -0
- package/src/react/schemaRenderer/AlertRenderer.tsx +112 -0
- package/src/react/schemaRenderer/EntryRenderer.tsx +501 -0
- package/src/react/schemaRenderer/SectionRenderer.tsx +120 -0
- package/src/react/schemaRenderer/SimpleElements.tsx +306 -0
- package/src/react/schemaRenderer/TabsRenderer.tsx +62 -0
- package/src/react/schemaRenderer/WizardRenderer.tsx +338 -0
- package/src/react/schemaRenderer/action/ActionGroupTrigger.tsx +177 -0
- package/src/react/schemaRenderer/action/ActionModalDialog.tsx +273 -0
- package/src/react/schemaRenderer/action/ConfirmActionDialog.tsx +61 -0
- package/src/react/schemaRenderer/action/HandlerActionButton.tsx +43 -0
- package/src/react/schemaRenderer/action/MethodActionButton.tsx +64 -0
- package/src/react/schemaRenderer/action/buttons.tsx +99 -0
- package/src/react/schemaRenderer/action/helpers.ts +140 -0
- package/src/react/schemaRenderer/action/renderAction.tsx +245 -0
- package/src/react/schemaRenderer/columnFormat.ts +65 -0
- package/src/react/schemaRenderer/constants.ts +50 -0
- package/src/react/schemaRenderer/form/FormRenderer.tsx +233 -0
- package/src/react/schemaRenderer/form/renderField.tsx +511 -0
- package/src/react/schemaRenderer/helpers.tsx +81 -0
- package/src/react/schemaRenderer/table/CardsLayoutBody.tsx +308 -0
- package/src/react/schemaRenderer/table/TableRenderer.tsx +123 -0
- package/src/react/schemaRenderer/table/TableRendererBody.tsx +974 -0
- package/src/react/schemaRenderer/table/filters.tsx +1233 -0
- package/src/react/schemaRenderer/table/formatCell.tsx +264 -0
- package/src/react/schemaRenderer/table/links.tsx +112 -0
- package/src/react/schemaRenderer/table/renderRowActions.tsx +52 -0
- package/src/react/schemaRenderer/table/url.tsx +143 -0
- package/src/routes/globals.ts +154 -0
- package/src/routes/helpers.ts +668 -0
- package/src/routes/pages.ts +173 -0
- package/src/routes/panel.ts +204 -0
- package/src/routes/relations.ts +1219 -0
- package/src/routes/resources.ts +786 -0
- package/src/routes/theme.ts +109 -0
- package/src/routes.test.ts +1 -1
- package/src/routes.ts +64 -3176
- package/src/schema/TableWidget.test.ts +2 -2
- package/src/theme/migrate.test.ts +178 -0
- package/src/vite.test.ts +184 -0
- package/src/vite.ts +26 -4
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
import { resourceBasePath, globalBasePath, pageBasePath } from '../clusterPaths.js';
|
|
2
|
+
import { resolveTheme } from '../theme/resolve.js';
|
|
3
|
+
import { serializeIcon } from '../icons/types.js';
|
|
4
|
+
import { RIGHT_PANEL_DEFAULT_WIDTH, RIGHT_PANEL_MIN_WIDTH, RIGHT_PANEL_MAX_WIDTH, } from '../RightPanel.js';
|
|
5
|
+
import { resolveRenderHooks, CHROME_HOOK_NAMES, } from '../RenderHook.js';
|
|
6
|
+
import { applyPageHooks, pageHooksFor } from '../applyPageHooks.js';
|
|
7
|
+
import { notificationChannel, NOTIFICATION_CREATED_EVENT, } from '../notifications/broadcast.js';
|
|
8
|
+
import { safeBool } from './helpers.js';
|
|
9
|
+
export async function panelInfo(pilotiq, req, route = {}) {
|
|
10
|
+
const cfg = pilotiq.getConfig();
|
|
11
|
+
const merged = pilotiq.getMergedTheme();
|
|
12
|
+
const theme = merged ? resolveTheme(merged) : undefined;
|
|
13
|
+
const user = await pilotiq.resolveUser(req);
|
|
14
|
+
const [navigation, userMenu, renderHooks, rightSidebar] = await Promise.all([
|
|
15
|
+
buildNavigation(pilotiq, user),
|
|
16
|
+
buildUserMenu(pilotiq, user),
|
|
17
|
+
resolveChromeHooks(pilotiq, user, route),
|
|
18
|
+
buildRightSidebarMeta(cfg, user),
|
|
19
|
+
]);
|
|
20
|
+
const databaseNotifications = buildDatabaseNotificationsMeta(cfg, user);
|
|
21
|
+
// AI suggestion mode — sparse: omit when 'auto' (the default) so the
|
|
22
|
+
// wire shape stays minimal for panels that don't opt into review mode.
|
|
23
|
+
// Plugin clients (e.g. @pilotiq-pro/ai's `AiClientToolBindings`) read
|
|
24
|
+
// this to decide whether to apply writes immediately or stage them as
|
|
25
|
+
// PendingSuggestions for user approval.
|
|
26
|
+
const aiSuggestionsMode = pilotiq.getAiSuggestionsMode();
|
|
27
|
+
return {
|
|
28
|
+
name: cfg.name,
|
|
29
|
+
branding: cfg.branding,
|
|
30
|
+
navigation,
|
|
31
|
+
theme,
|
|
32
|
+
themeEditor: cfg.themeEditor ?? false,
|
|
33
|
+
...(userMenu ? { userMenu } : {}),
|
|
34
|
+
...(databaseNotifications ? { databaseNotifications } : {}),
|
|
35
|
+
...(rightSidebar ? { rightSidebar } : {}),
|
|
36
|
+
...(Object.keys(renderHooks).length > 0 ? { renderHooks } : {}),
|
|
37
|
+
...(aiSuggestionsMode !== 'auto' ? { aiSuggestionsMode } : {}),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build the bell-icon meta. Returns `null` when:
|
|
42
|
+
* - `Pilotiq.databaseNotifications()` was never called, OR
|
|
43
|
+
* - no user resolves (no inbox to surface).
|
|
44
|
+
*
|
|
45
|
+
* Defaults follow Filament: 30s polling, 25 rows per page, primary
|
|
46
|
+
* badge color, topbar position.
|
|
47
|
+
*/
|
|
48
|
+
export function buildDatabaseNotificationsMeta(cfg, user) {
|
|
49
|
+
if (!cfg.databaseNotifications?.enabled)
|
|
50
|
+
return null;
|
|
51
|
+
if (user === null || user === undefined)
|
|
52
|
+
return null;
|
|
53
|
+
const dn = cfg.databaseNotifications;
|
|
54
|
+
const base = cfg.path;
|
|
55
|
+
const meta = {
|
|
56
|
+
position: dn.position ?? 'topbar',
|
|
57
|
+
polling: dn.polling === null ? null : (dn.polling ?? 30),
|
|
58
|
+
pageSize: dn.pageSize ?? 25,
|
|
59
|
+
badgeColor: dn.badgeColor ?? 'primary',
|
|
60
|
+
listUrl: `${base}/_notifications`,
|
|
61
|
+
readAllUrl: `${base}/_notifications/read-all`,
|
|
62
|
+
readUrl: `${base}/_notifications/:id/read`,
|
|
63
|
+
unreadUrl: `${base}/_notifications/:id/unread`,
|
|
64
|
+
actionUrl: `${base}/_notifications/:id/_action/:actionName`,
|
|
65
|
+
};
|
|
66
|
+
if (dn.trigger)
|
|
67
|
+
meta.trigger = { ...dn.trigger };
|
|
68
|
+
// Phase 2 broadcast hint — only ship when broadcast is enabled AND the
|
|
69
|
+
// resolved user has an `id` to scope the channel to. The client uses
|
|
70
|
+
// `wsUrl` for the WebSocket connection and `channel` for the subscribe
|
|
71
|
+
// call (the private- prefix is already baked in).
|
|
72
|
+
if (dn.broadcast) {
|
|
73
|
+
const userId = user?.id;
|
|
74
|
+
if (userId !== undefined && userId !== null) {
|
|
75
|
+
const wsUrl = typeof dn.broadcast === 'object' && dn.broadcast.wsUrl
|
|
76
|
+
? dn.broadcast.wsUrl
|
|
77
|
+
: ''; // empty = client falls back to same-origin /ws
|
|
78
|
+
meta.broadcast = {
|
|
79
|
+
wsUrl,
|
|
80
|
+
channel: notificationChannel(String(userId)),
|
|
81
|
+
event: NOTIFICATION_CREATED_EVENT,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return meta;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build the right-sidebar meta from registered contributions. Returns
|
|
89
|
+
* `null` when:
|
|
90
|
+
*
|
|
91
|
+
* - no contributions were registered, OR
|
|
92
|
+
* - every contribution failed `canAccess(user)` (or its predicate
|
|
93
|
+
* threw — fail-closed), OR
|
|
94
|
+
* - every passing contribution is `hidden: true` (no tab-strip
|
|
95
|
+
* surface to mount; programmatic-open consumers should ship at
|
|
96
|
+
* least one visible tab).
|
|
97
|
+
*
|
|
98
|
+
* Visible contributions are sorted by `sort` ascending (default 100),
|
|
99
|
+
* with registration order as a stable tiebreaker. Each entry's icon is
|
|
100
|
+
* serialized through `serializeIcon` keyed on the contribution `id`
|
|
101
|
+
* (Phase B's Vite plugin extends `_components.ts` to round-trip
|
|
102
|
+
* component-typed icons under that key). `defaultWidth` rolls up:
|
|
103
|
+
* panel-level baseline is `RIGHT_PANEL_DEFAULT_WIDTH`; per-contribution
|
|
104
|
+
* overrides ride on `RightPanelMeta.defaultWidth`.
|
|
105
|
+
*
|
|
106
|
+
* Errors thrown by `canAccess` are swallowed (the contribution is
|
|
107
|
+
* dropped + a single console warn is emitted) so a flaky predicate on
|
|
108
|
+
* one pane never blanks the whole sidebar.
|
|
109
|
+
*/
|
|
110
|
+
export async function buildRightSidebarMeta(cfg, user) {
|
|
111
|
+
const list = cfg.rightPanels ?? [];
|
|
112
|
+
if (list.length === 0)
|
|
113
|
+
return null;
|
|
114
|
+
const indexed = list.map((c, idx) => ({ c, idx }));
|
|
115
|
+
const gated = await Promise.all(indexed.map(async ({ c, idx }) => {
|
|
116
|
+
if (c.canAccess) {
|
|
117
|
+
try {
|
|
118
|
+
const ok = await c.canAccess(user);
|
|
119
|
+
if (!ok)
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
// eslint-disable-next-line no-console
|
|
124
|
+
console.warn(`[Pilotiq] rightPanel "${c.id}" canAccess threw — dropping`, err);
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return { c, idx };
|
|
129
|
+
}));
|
|
130
|
+
const visible = gated
|
|
131
|
+
.filter((x) => x !== null)
|
|
132
|
+
.filter((x) => !x.c.hidden)
|
|
133
|
+
.sort((a, b) => {
|
|
134
|
+
const sa = a.c.sort ?? 100;
|
|
135
|
+
const sb = b.c.sort ?? 100;
|
|
136
|
+
if (sa !== sb)
|
|
137
|
+
return sa - sb;
|
|
138
|
+
return a.idx - b.idx;
|
|
139
|
+
});
|
|
140
|
+
if (visible.length === 0)
|
|
141
|
+
return null;
|
|
142
|
+
const panels = visible.map(({ c }) => {
|
|
143
|
+
const meta = {
|
|
144
|
+
id: c.id,
|
|
145
|
+
label: c.label ?? c.id,
|
|
146
|
+
defaultWidth: c.defaultWidth ?? RIGHT_PANEL_DEFAULT_WIDTH,
|
|
147
|
+
};
|
|
148
|
+
if (c.icon !== undefined) {
|
|
149
|
+
meta.icon = serializeIcon(c.icon, c.id);
|
|
150
|
+
}
|
|
151
|
+
return meta;
|
|
152
|
+
});
|
|
153
|
+
return {
|
|
154
|
+
panels,
|
|
155
|
+
defaultWidth: panels[0]?.defaultWidth ?? RIGHT_PANEL_DEFAULT_WIDTH,
|
|
156
|
+
minWidth: RIGHT_PANEL_MIN_WIDTH,
|
|
157
|
+
maxWidth: RIGHT_PANEL_MAX_WIDTH,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Resolve every chrome render hook (body / topbar / sidebar / user-menu
|
|
162
|
+
* / footer / head). Returns a sparse map — slots with no matching
|
|
163
|
+
* registered entries are omitted so the wire payload stays minimal on
|
|
164
|
+
* panels that don't use render hooks at all.
|
|
165
|
+
*/
|
|
166
|
+
export async function resolveChromeHooks(pilotiq, user, route) {
|
|
167
|
+
const cfg = pilotiq.getConfig();
|
|
168
|
+
const entries = cfg.renderHooks ?? [];
|
|
169
|
+
if (entries.length === 0)
|
|
170
|
+
return {};
|
|
171
|
+
const ctx = {
|
|
172
|
+
user,
|
|
173
|
+
basePath: cfg.path,
|
|
174
|
+
url: route.url ?? cfg.path,
|
|
175
|
+
};
|
|
176
|
+
if (route.resource !== undefined)
|
|
177
|
+
ctx.resource = route.resource;
|
|
178
|
+
if (route.page !== undefined)
|
|
179
|
+
ctx.page = route.page;
|
|
180
|
+
if (route.global !== undefined)
|
|
181
|
+
ctx.global = route.global;
|
|
182
|
+
if (route.recordId !== undefined)
|
|
183
|
+
ctx.recordId = route.recordId;
|
|
184
|
+
return resolveRenderHooks(entries, CHROME_HOOK_NAMES, ctx);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Resolve a subset of page-role render hooks (e.g. `panels::page.start`
|
|
188
|
+
* + the list-records / create-record / view-record / edit-record /
|
|
189
|
+
* global-search slot families). Per-page-role data builders call this
|
|
190
|
+
* after schema resolution and stamp the result on `viewProps.renderHooks`.
|
|
191
|
+
*
|
|
192
|
+
* `names` lets each builder declare exactly which slots it serves so a
|
|
193
|
+
* list-page builder doesn't ship slots that only fire on the edit page.
|
|
194
|
+
*/
|
|
195
|
+
/**
|
|
196
|
+
* Per-builder one-shot — resolve the role's slot set + splice the
|
|
197
|
+
* results into the resolved schema. Wraps the two steps a per-builder
|
|
198
|
+
* data fn always does in lockstep:
|
|
199
|
+
*
|
|
200
|
+
* 1. `resolvePageHooks(pilotiq, user, pageHooksFor(role), route)`
|
|
201
|
+
* 2. `applyPageHooks(schemaData, hooks, role)`
|
|
202
|
+
*
|
|
203
|
+
* Returns the wrapped `ElementMeta[]`. No-op when the panel has no
|
|
204
|
+
* registered hooks. Pass through what you'd pass to `panelInfo()`'s
|
|
205
|
+
* route arg — same shape.
|
|
206
|
+
*/
|
|
207
|
+
export async function applyRoleHooks(pilotiq, user, role, schemaData, route = {}) {
|
|
208
|
+
const cfg = pilotiq.getConfig();
|
|
209
|
+
if (!cfg.renderHooks || cfg.renderHooks.length === 0)
|
|
210
|
+
return schemaData;
|
|
211
|
+
const hooks = await resolvePageHooks(pilotiq, user, pageHooksFor(role), route);
|
|
212
|
+
return applyPageHooks(schemaData, hooks, role);
|
|
213
|
+
}
|
|
214
|
+
export async function resolvePageHooks(pilotiq, user, names, route) {
|
|
215
|
+
const cfg = pilotiq.getConfig();
|
|
216
|
+
const entries = cfg.renderHooks ?? [];
|
|
217
|
+
if (entries.length === 0 || names.length === 0)
|
|
218
|
+
return {};
|
|
219
|
+
const ctx = {
|
|
220
|
+
user,
|
|
221
|
+
basePath: cfg.path,
|
|
222
|
+
url: route.url ?? cfg.path,
|
|
223
|
+
};
|
|
224
|
+
if (route.resource !== undefined)
|
|
225
|
+
ctx.resource = route.resource;
|
|
226
|
+
if (route.page !== undefined)
|
|
227
|
+
ctx.page = route.page;
|
|
228
|
+
if (route.global !== undefined)
|
|
229
|
+
ctx.global = route.global;
|
|
230
|
+
if (route.recordId !== undefined)
|
|
231
|
+
ctx.recordId = route.recordId;
|
|
232
|
+
return resolveRenderHooks(entries, names, ctx);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Build the top-right user-menu meta. Returns `null` when:
|
|
236
|
+
* - `Pilotiq.user()` isn't configured, or
|
|
237
|
+
* - the resolver returned `null` (anonymous request), or
|
|
238
|
+
* - the user object has no extractable identity AND the panel
|
|
239
|
+
* configured no items / no sign-out (nothing to render).
|
|
240
|
+
*
|
|
241
|
+
* Items resolve in parallel with their visibility predicates
|
|
242
|
+
* (`UserMenuItem.visible`). Throwing predicates fail closed (item
|
|
243
|
+
* dropped). Sort by `.sort(n)` ascending → registration order.
|
|
244
|
+
*/
|
|
245
|
+
export async function buildUserMenu(pilotiq, user) {
|
|
246
|
+
if (user === null || user === undefined)
|
|
247
|
+
return null;
|
|
248
|
+
const cfg = pilotiq.getConfig();
|
|
249
|
+
const items = cfg.userMenuItems ?? [];
|
|
250
|
+
const ctx = { user };
|
|
251
|
+
// Resolve every item in parallel. `null` returns mean "filtered by
|
|
252
|
+
// visibility predicate" — drop them. Indexed pre-sort so stable ties
|
|
253
|
+
// resolve to registration order.
|
|
254
|
+
const resolved = await Promise.all(items.map(async (item, idx) => {
|
|
255
|
+
try {
|
|
256
|
+
const meta = await item.resolve(ctx);
|
|
257
|
+
return meta ? { meta, idx, sort: item.getSort() } : null;
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
}));
|
|
263
|
+
const visibleItems = resolved
|
|
264
|
+
.filter((x) => x !== null)
|
|
265
|
+
.sort((a, b) => {
|
|
266
|
+
const aHas = a.sort !== undefined, bHas = b.sort !== undefined;
|
|
267
|
+
if (aHas && bHas)
|
|
268
|
+
return a.sort - b.sort || a.idx - b.idx;
|
|
269
|
+
if (aHas)
|
|
270
|
+
return -1;
|
|
271
|
+
if (bHas)
|
|
272
|
+
return 1;
|
|
273
|
+
return a.idx - b.idx;
|
|
274
|
+
})
|
|
275
|
+
.map(x => x.meta);
|
|
276
|
+
// Auto-inject the profile entry from `cfg.profilePage` when set.
|
|
277
|
+
// Prepended (Filament-style) so it always sits at the top of the
|
|
278
|
+
// dropdown regardless of user-authored item ordering. Falls through
|
|
279
|
+
// its own `canAccess(user)` so per-user gating works without the
|
|
280
|
+
// user repeating the predicate at the menu level.
|
|
281
|
+
const profileItem = await buildProfileMenuItem(cfg, user);
|
|
282
|
+
const finalItems = profileItem ? [profileItem, ...visibleItems] : visibleItems;
|
|
283
|
+
const meta = {
|
|
284
|
+
user: extractUserIdentity(user),
|
|
285
|
+
items: finalItems,
|
|
286
|
+
};
|
|
287
|
+
if (cfg.signOut) {
|
|
288
|
+
meta.signOut = {
|
|
289
|
+
url: cfg.signOut.url,
|
|
290
|
+
label: cfg.signOut.label ?? 'Sign out',
|
|
291
|
+
method: cfg.signOut.method ?? 'POST',
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
return meta;
|
|
295
|
+
}
|
|
296
|
+
/** Build the auto-injected profile entry from `cfg.profilePage`. The
|
|
297
|
+
* Page's `static label` / `static icon` win; defaults `'Edit profile'`
|
|
298
|
+
* + `'user-circle'` (registry-resolved). Returns `null` when no
|
|
299
|
+
* profile page is configured or `Page.canAccess(user)` denies. */
|
|
300
|
+
export async function buildProfileMenuItem(cfg, user) {
|
|
301
|
+
const P = cfg.profilePage;
|
|
302
|
+
if (!P)
|
|
303
|
+
return null;
|
|
304
|
+
if (!(await safeBool(() => P.canAccess(user))))
|
|
305
|
+
return null;
|
|
306
|
+
const url = pageBasePath(cfg.path, P);
|
|
307
|
+
const icon = serializeIcon(P.icon ?? 'user-circle', P.name);
|
|
308
|
+
const meta = {
|
|
309
|
+
name: '__profile',
|
|
310
|
+
label: P.label ?? 'Edit profile',
|
|
311
|
+
url,
|
|
312
|
+
};
|
|
313
|
+
if (icon !== undefined)
|
|
314
|
+
meta.icon = icon;
|
|
315
|
+
return meta;
|
|
316
|
+
}
|
|
317
|
+
/** Duck-type the user object for display fields. We never throw — a
|
|
318
|
+
* user resolver might return literally anything (a primitive, a class
|
|
319
|
+
* instance with getters, a plain object) and the dropdown should
|
|
320
|
+
* degrade gracefully (initials fallback to '?' when no name found). */
|
|
321
|
+
export function extractUserIdentity(user) {
|
|
322
|
+
if (user === null || user === undefined)
|
|
323
|
+
return {};
|
|
324
|
+
if (typeof user !== 'object')
|
|
325
|
+
return { name: String(user) };
|
|
326
|
+
const obj = user;
|
|
327
|
+
const out = {};
|
|
328
|
+
const name = obj.name ?? obj.fullName ?? obj.displayName ?? obj.username;
|
|
329
|
+
if (typeof name === 'string' && name)
|
|
330
|
+
out.name = name;
|
|
331
|
+
if (typeof obj.email === 'string' && obj.email)
|
|
332
|
+
out.email = obj.email;
|
|
333
|
+
const avatar = obj.avatar ?? obj.avatarUrl ?? obj.image;
|
|
334
|
+
if (typeof avatar === 'string' && avatar)
|
|
335
|
+
out.avatar = avatar;
|
|
336
|
+
return out;
|
|
337
|
+
}
|
|
338
|
+
/** Plan #10 — stamp the resolved user onto a SchemaContext so action
|
|
339
|
+
* visibility predicates can see it during `resolveSchema`. The `user`
|
|
340
|
+
* field is opaque (whatever `Pilotiq.user(req => …)` returns); skipped
|
|
341
|
+
* when null/undefined to keep ctx tidy. */
|
|
342
|
+
export async function buildNavigation(pilotiq, user) {
|
|
343
|
+
const cfg = pilotiq.getConfig();
|
|
344
|
+
const base = cfg.path;
|
|
345
|
+
// Flatten + resolve badges in parallel. We build the raw list first so
|
|
346
|
+
// every entry has its identity (`name`) and parent set; badges resolve
|
|
347
|
+
// alongside.
|
|
348
|
+
const raw = [];
|
|
349
|
+
let idx = 0;
|
|
350
|
+
const pushBadge = [];
|
|
351
|
+
// Plan #10 — pre-evaluate canAccess for every owner in parallel so we
|
|
352
|
+
// can drop forbidden items before flattening. Failed predicates fail
|
|
353
|
+
// closed (treated as `false`) so a thrown auth check doesn't accidentally
|
|
354
|
+
// expose nav items. Clusters compose: a child gated through its
|
|
355
|
+
// cluster's `canAccess` returning false drops the child even when the
|
|
356
|
+
// child's own predicate would have passed.
|
|
357
|
+
const [resourceAccess, globalAccess, pageAccess, clusterAccess] = await Promise.all([
|
|
358
|
+
Promise.all(cfg.resources.map(R => safeBool(() => R.canAccess(user)))),
|
|
359
|
+
Promise.all(cfg.globals.map(G => safeBool(() => G.canAccess(user)))),
|
|
360
|
+
Promise.all(cfg.pages.map(P => safeBool(() => P.canAccess(user)))),
|
|
361
|
+
Promise.all(cfg.clusters.map(C => safeBool(() => C.canAccess(user)))),
|
|
362
|
+
]);
|
|
363
|
+
// Identity-keyed so two clusters that happen to share a `.name`
|
|
364
|
+
// (minifier collisions, hot-reload duplicate imports) don't clobber.
|
|
365
|
+
const clusterAccessByClass = new Map();
|
|
366
|
+
cfg.clusters.forEach((C, i) => clusterAccessByClass.set(C, !!clusterAccess[i]));
|
|
367
|
+
const firstChildUrlByCluster = new Map();
|
|
368
|
+
const recordChildUrl = (cluster, url) => {
|
|
369
|
+
if (!firstChildUrlByCluster.has(cluster))
|
|
370
|
+
firstChildUrlByCluster.set(cluster, url);
|
|
371
|
+
};
|
|
372
|
+
for (let i = 0; i < cfg.resources.length; i++) {
|
|
373
|
+
const R = cfg.resources[i];
|
|
374
|
+
if (!resourceAccess[i])
|
|
375
|
+
continue;
|
|
376
|
+
if (R.cluster && !clusterAccessByClass.get(R.cluster))
|
|
377
|
+
continue;
|
|
378
|
+
const url = resourceBasePath(base, R);
|
|
379
|
+
if (R.cluster)
|
|
380
|
+
recordChildUrl(R.cluster, url);
|
|
381
|
+
const item = {
|
|
382
|
+
name: R.name,
|
|
383
|
+
label: R.getNavigationLabel(),
|
|
384
|
+
url,
|
|
385
|
+
icon: serializeIcon(R.getNavigationIcon(), R.name),
|
|
386
|
+
_idx: idx++,
|
|
387
|
+
};
|
|
388
|
+
if (R.navigationGroup !== undefined)
|
|
389
|
+
item.group = R.navigationGroup;
|
|
390
|
+
if (R.navigationSort !== undefined)
|
|
391
|
+
item.sort = R.navigationSort;
|
|
392
|
+
// Cluster nesting wins over `navigationParentItem`. Both being set
|
|
393
|
+
// is a misconfiguration; cluster placement is the structural one.
|
|
394
|
+
if (R.cluster)
|
|
395
|
+
item.parent = R.cluster.name;
|
|
396
|
+
else if (R.navigationParentItem !== undefined)
|
|
397
|
+
item.parent = R.navigationParentItem;
|
|
398
|
+
if (R.navigationBadgeColor !== 'default')
|
|
399
|
+
item.badgeColor = R.navigationBadgeColor;
|
|
400
|
+
if (R.navigationBadge)
|
|
401
|
+
pushBadge.push({ item, handler: R.navigationBadge });
|
|
402
|
+
raw.push(item);
|
|
403
|
+
}
|
|
404
|
+
for (let i = 0; i < cfg.globals.length; i++) {
|
|
405
|
+
if (!globalAccess[i])
|
|
406
|
+
continue;
|
|
407
|
+
const G = cfg.globals[i];
|
|
408
|
+
if (G.cluster && !clusterAccessByClass.get(G.cluster))
|
|
409
|
+
continue;
|
|
410
|
+
// Globals default `navigationGroup` to `'Settings'`. Allow `null` as
|
|
411
|
+
// an explicit opt-out → render at top level.
|
|
412
|
+
const group = G.navigationGroup === null ? undefined : G.navigationGroup;
|
|
413
|
+
const url = globalBasePath(base, G);
|
|
414
|
+
if (G.cluster)
|
|
415
|
+
recordChildUrl(G.cluster, url);
|
|
416
|
+
const item = {
|
|
417
|
+
name: G.name,
|
|
418
|
+
label: G.getNavigationLabel(),
|
|
419
|
+
url,
|
|
420
|
+
icon: serializeIcon(G.getNavigationIcon(), G.name),
|
|
421
|
+
_idx: idx++,
|
|
422
|
+
};
|
|
423
|
+
if (group !== undefined)
|
|
424
|
+
item.group = group;
|
|
425
|
+
if (G.navigationSort !== undefined)
|
|
426
|
+
item.sort = G.navigationSort;
|
|
427
|
+
if (G.cluster)
|
|
428
|
+
item.parent = G.cluster.name;
|
|
429
|
+
else if (G.navigationParentItem !== undefined)
|
|
430
|
+
item.parent = G.navigationParentItem;
|
|
431
|
+
if (G.navigationBadgeColor !== 'default')
|
|
432
|
+
item.badgeColor = G.navigationBadgeColor;
|
|
433
|
+
if (G.navigationBadge)
|
|
434
|
+
pushBadge.push({ item, handler: G.navigationBadge });
|
|
435
|
+
raw.push(item);
|
|
436
|
+
}
|
|
437
|
+
for (let i = 0; i < cfg.pages.length; i++) {
|
|
438
|
+
if (!pageAccess[i])
|
|
439
|
+
continue;
|
|
440
|
+
const P = cfg.pages[i];
|
|
441
|
+
if (P.cluster && !clusterAccessByClass.get(P.cluster))
|
|
442
|
+
continue;
|
|
443
|
+
// The dashboard page collapses its nav URL to `${base}` so the
|
|
444
|
+
// sidebar entry deep-links to the panel root rather than
|
|
445
|
+
// `${base}/${P.getSlug()}` (which would 404 — the slug route skips
|
|
446
|
+
// the dashboard page at boot).
|
|
447
|
+
const isDashboard = cfg.dashboardPage === P;
|
|
448
|
+
const url = isDashboard ? base : pageBasePath(base, P);
|
|
449
|
+
if (P.cluster && !isDashboard)
|
|
450
|
+
recordChildUrl(P.cluster, url);
|
|
451
|
+
const item = {
|
|
452
|
+
name: P.name,
|
|
453
|
+
label: P.getNavigationLabel(),
|
|
454
|
+
url,
|
|
455
|
+
icon: serializeIcon(P.getNavigationIcon(), P.name),
|
|
456
|
+
_idx: idx++,
|
|
457
|
+
};
|
|
458
|
+
if (P.navigationGroup !== undefined)
|
|
459
|
+
item.group = P.navigationGroup;
|
|
460
|
+
if (P.navigationSort !== undefined)
|
|
461
|
+
item.sort = P.navigationSort;
|
|
462
|
+
if (P.cluster && !isDashboard)
|
|
463
|
+
item.parent = P.cluster.name;
|
|
464
|
+
else if (P.navigationParentItem !== undefined)
|
|
465
|
+
item.parent = P.navigationParentItem;
|
|
466
|
+
if (P.navigationBadgeColor !== 'default')
|
|
467
|
+
item.badgeColor = P.navigationBadgeColor;
|
|
468
|
+
if (P.navigationBadge)
|
|
469
|
+
pushBadge.push({ item, handler: P.navigationBadge });
|
|
470
|
+
raw.push(item);
|
|
471
|
+
}
|
|
472
|
+
// Clusters render as first-class nav items. Each gets a URL pointing
|
|
473
|
+
// at its `landingPage` (when set + accessible) or its first accessible
|
|
474
|
+
// child. Clusters whose every child was gated out are dropped silently
|
|
475
|
+
// — same posture as `navigationParentItem` with no resolvable parent.
|
|
476
|
+
for (let i = 0; i < cfg.clusters.length; i++) {
|
|
477
|
+
if (!clusterAccess[i])
|
|
478
|
+
continue;
|
|
479
|
+
const C = cfg.clusters[i];
|
|
480
|
+
let url;
|
|
481
|
+
if (C.landingPage) {
|
|
482
|
+
const lpIdx = cfg.pages.indexOf(C.landingPage);
|
|
483
|
+
if (lpIdx !== -1 && pageAccess[lpIdx]) {
|
|
484
|
+
url = cfg.dashboardPage === C.landingPage ? base : pageBasePath(base, C.landingPage);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
if (url === undefined)
|
|
488
|
+
url = firstChildUrlByCluster.get(C);
|
|
489
|
+
if (url === undefined)
|
|
490
|
+
continue; // empty cluster — drop entirely
|
|
491
|
+
const item = {
|
|
492
|
+
name: C.name,
|
|
493
|
+
label: C.getNavigationLabel(),
|
|
494
|
+
url,
|
|
495
|
+
icon: serializeIcon(C.getNavigationIcon(), C.name),
|
|
496
|
+
_idx: idx++,
|
|
497
|
+
};
|
|
498
|
+
if (C.navigationGroup !== undefined)
|
|
499
|
+
item.group = C.navigationGroup;
|
|
500
|
+
if (C.navigationSort !== undefined)
|
|
501
|
+
item.sort = C.navigationSort;
|
|
502
|
+
if (C.navigationParentItem !== undefined)
|
|
503
|
+
item.parent = C.navigationParentItem;
|
|
504
|
+
if (C.navigationBadgeColor !== 'default')
|
|
505
|
+
item.badgeColor = C.navigationBadgeColor;
|
|
506
|
+
if (C.navigationBadge)
|
|
507
|
+
pushBadge.push({ item, handler: C.navigationBadge });
|
|
508
|
+
raw.push(item);
|
|
509
|
+
}
|
|
510
|
+
await Promise.all(pushBadge.map(async ({ item, handler }) => {
|
|
511
|
+
try {
|
|
512
|
+
const v = await handler();
|
|
513
|
+
if (v === undefined || v === null)
|
|
514
|
+
return;
|
|
515
|
+
item.badge = String(v);
|
|
516
|
+
}
|
|
517
|
+
catch {
|
|
518
|
+
// Per-badge errors stay silent.
|
|
519
|
+
}
|
|
520
|
+
}));
|
|
521
|
+
return nestAndSort(raw);
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Resolve `parent` references → nest, drop cycles, sort within each
|
|
525
|
+
* grouping, then strip internal scaffolding (`parent`, `_idx`).
|
|
526
|
+
*/
|
|
527
|
+
export function nestAndSort(raw) {
|
|
528
|
+
const byName = new Map();
|
|
529
|
+
for (const it of raw)
|
|
530
|
+
byName.set(it.name, it);
|
|
531
|
+
// Detect parent cycles: walk upwards from each item; any name seen
|
|
532
|
+
// twice → cycle. Items in a cycle get treated as top-level.
|
|
533
|
+
const inCycle = new Set();
|
|
534
|
+
for (const it of raw) {
|
|
535
|
+
if (it.parent === undefined)
|
|
536
|
+
continue;
|
|
537
|
+
const seen = new Set([it.name]);
|
|
538
|
+
let cur = it.parent;
|
|
539
|
+
while (cur !== undefined) {
|
|
540
|
+
if (seen.has(cur)) {
|
|
541
|
+
if (typeof console !== 'undefined' && typeof console.warn === 'function') {
|
|
542
|
+
console.warn(`[Pilotiq] navigationParentItem cycle detected at "${it.name}" — rendering at top level.`);
|
|
543
|
+
}
|
|
544
|
+
inCycle.add(it.name);
|
|
545
|
+
break;
|
|
546
|
+
}
|
|
547
|
+
seen.add(cur);
|
|
548
|
+
const parent = byName.get(cur);
|
|
549
|
+
if (!parent)
|
|
550
|
+
break;
|
|
551
|
+
cur = parent.parent;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
const childrenOf = new Map();
|
|
555
|
+
const top = [];
|
|
556
|
+
for (const it of raw) {
|
|
557
|
+
const parent = it.parent;
|
|
558
|
+
if (parent && byName.has(parent) && !inCycle.has(it.name)) {
|
|
559
|
+
const list = childrenOf.get(parent) ?? [];
|
|
560
|
+
list.push(it);
|
|
561
|
+
childrenOf.set(parent, list);
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
top.push(it);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
// Sort items in a sibling group by sort (asc), ties → registration order.
|
|
568
|
+
const sortItems = (items) => {
|
|
569
|
+
return [...items].sort((a, b) => {
|
|
570
|
+
const aHas = a.sort !== undefined, bHas = b.sort !== undefined;
|
|
571
|
+
if (aHas && bHas)
|
|
572
|
+
return a.sort - b.sort || a._idx - b._idx;
|
|
573
|
+
if (aHas)
|
|
574
|
+
return -1; // sorted items come before unsorted
|
|
575
|
+
if (bHas)
|
|
576
|
+
return 1;
|
|
577
|
+
return a._idx - b._idx;
|
|
578
|
+
});
|
|
579
|
+
};
|
|
580
|
+
// Strip internals + recurse into children.
|
|
581
|
+
const finalize = (items) => sortItems(items).map(it => {
|
|
582
|
+
const kids = childrenOf.get(it.name);
|
|
583
|
+
const { parent, _idx, ...rest } = it;
|
|
584
|
+
const out = { ...rest };
|
|
585
|
+
if (kids && kids.length > 0)
|
|
586
|
+
out.children = finalize(kids);
|
|
587
|
+
return out;
|
|
588
|
+
});
|
|
589
|
+
return finalize(top);
|
|
590
|
+
}
|
|
591
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/pageData/navigation.ts"],"names":[],"mappings":"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"}
|