@pilotiq/pilotiq 0.7.2 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +2 -2
- package/CHANGELOG.md +208 -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/FormStateContext.d.ts.map +1 -1
- package/dist/react/FormStateContext.js +87 -0
- package/dist/react/FormStateContext.js.map +1 -1
- 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 +163 -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/FormStateContext.tsx +91 -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 +245 -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,288 @@
|
|
|
1
|
+
import type { PilotiqConfig } from '../Pilotiq.js'
|
|
2
|
+
import type { ResourceClass } from '../Resource.js'
|
|
3
|
+
import type { GlobalClass } from '../Global.js'
|
|
4
|
+
import type { ClusterClass } from '../Cluster.js'
|
|
5
|
+
import type { Page } from '../Page.js'
|
|
6
|
+
import type { RelationManager } from '../RelationManager.js'
|
|
7
|
+
import { clusterBasePath, resourceBasePath } from '../clusterPaths.js'
|
|
8
|
+
import { Breadcrumbs, type BreadcrumbItem } from '../schema/Breadcrumbs.js'
|
|
9
|
+
|
|
10
|
+
// ─── Breadcrumb builders ────────────────────────────────────
|
|
11
|
+
//
|
|
12
|
+
// All builders return `Breadcrumbs | undefined` so the route handler
|
|
13
|
+
// can spread the result into `schemaData` without a guard. Each path
|
|
14
|
+
// roles to a known crumb chain (Home / cluster? / Resource / record? /
|
|
15
|
+
// relation? / nested? / verb?).
|
|
16
|
+
|
|
17
|
+
/** Depth-2 chain shape — each step identifies a path through the
|
|
18
|
+
* manager tree. Lives here because both the breadcrumb builders and
|
|
19
|
+
* the depth-2 relation manager builders consume it. */
|
|
20
|
+
export interface RelationChainStep {
|
|
21
|
+
recordId: string
|
|
22
|
+
relationship: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
// `resourceBasePath`, etc., so a clustered resource resolves to
|
|
27
|
+
// `Home / Cluster / Resource / …` instead of skipping the cluster
|
|
28
|
+
// rung.
|
|
29
|
+
|
|
30
|
+
export function homeBreadcrumb(cfg: PilotiqConfig): BreadcrumbItem {
|
|
31
|
+
return {
|
|
32
|
+
label: cfg.branding?.title ?? cfg.name ?? 'Home',
|
|
33
|
+
url: cfg.path,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function clusterBreadcrumb(cfg: PilotiqConfig, child: { cluster?: ClusterClass }): BreadcrumbItem | undefined {
|
|
38
|
+
if (!child.cluster) return undefined
|
|
39
|
+
return {
|
|
40
|
+
label: child.cluster.label,
|
|
41
|
+
url: clusterBasePath(cfg.path, child.cluster),
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function buildBreadcrumbs(items: BreadcrumbItem[]): Breadcrumbs | undefined {
|
|
46
|
+
// A single "Home" rung carries no information beyond the dashboard
|
|
47
|
+
// link the layout already exposes — drop it. Every other length is
|
|
48
|
+
// worth rendering.
|
|
49
|
+
if (items.length < 2) return undefined
|
|
50
|
+
return Breadcrumbs.make(items)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function resourceListBreadcrumbs(cfg: PilotiqConfig, R: ResourceClass): Breadcrumbs | undefined {
|
|
54
|
+
const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
|
|
55
|
+
const cluster = clusterBreadcrumb(cfg, R)
|
|
56
|
+
if (cluster) items.push(cluster)
|
|
57
|
+
items.push({ label: R.getBreadcrumb() })
|
|
58
|
+
return buildBreadcrumbs(items)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function resourceCreateBreadcrumbs(cfg: PilotiqConfig, R: ResourceClass): Breadcrumbs | undefined {
|
|
62
|
+
const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
|
|
63
|
+
const cluster = clusterBreadcrumb(cfg, R)
|
|
64
|
+
if (cluster) items.push(cluster)
|
|
65
|
+
items.push({ label: R.getBreadcrumb(), url: resourceBasePath(cfg.path, R) })
|
|
66
|
+
items.push({ label: 'Create' })
|
|
67
|
+
return buildBreadcrumbs(items)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function resourceViewBreadcrumbs(cfg: PilotiqConfig, R: ResourceClass, recordTitle: string): Breadcrumbs | undefined {
|
|
71
|
+
const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
|
|
72
|
+
const cluster = clusterBreadcrumb(cfg, R)
|
|
73
|
+
if (cluster) items.push(cluster)
|
|
74
|
+
items.push({ label: R.getBreadcrumb(), url: resourceBasePath(cfg.path, R) })
|
|
75
|
+
items.push({ label: recordTitle })
|
|
76
|
+
return buildBreadcrumbs(items)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function resourceEditBreadcrumbs(
|
|
80
|
+
cfg: PilotiqConfig,
|
|
81
|
+
R: ResourceClass,
|
|
82
|
+
recordId: string,
|
|
83
|
+
recordTitle: string,
|
|
84
|
+
): Breadcrumbs | undefined {
|
|
85
|
+
const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
|
|
86
|
+
const cluster = clusterBreadcrumb(cfg, R)
|
|
87
|
+
if (cluster) items.push(cluster)
|
|
88
|
+
const resourceBase = resourceBasePath(cfg.path, R)
|
|
89
|
+
items.push({ label: R.getBreadcrumb(), url: resourceBase })
|
|
90
|
+
// Link the record title to the View page when registered — falls
|
|
91
|
+
// back to plain text so users who pruned ViewPage don't hit a 404.
|
|
92
|
+
const hasView = R.resolvePages().view !== undefined
|
|
93
|
+
items.push(hasView
|
|
94
|
+
? { label: recordTitle, url: `${resourceBase}/${recordId}` }
|
|
95
|
+
: { label: recordTitle })
|
|
96
|
+
items.push({ label: 'Edit' })
|
|
97
|
+
return buildBreadcrumbs(items)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function globalBreadcrumbs(cfg: PilotiqConfig, G: GlobalClass): Breadcrumbs | undefined {
|
|
101
|
+
// Globals don't have a list page — `Home > <Global Label>` is the
|
|
102
|
+
// shortest meaningful chain. Edit and View collapse to the same
|
|
103
|
+
// breadcrumb (both render the singleton).
|
|
104
|
+
const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
|
|
105
|
+
const cluster = clusterBreadcrumb(cfg, G)
|
|
106
|
+
if (cluster) items.push(cluster)
|
|
107
|
+
items.push({ label: G.label })
|
|
108
|
+
return buildBreadcrumbs(items)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function customPageBreadcrumbs(cfg: PilotiqConfig, P: typeof Page): Breadcrumbs | undefined {
|
|
112
|
+
const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
|
|
113
|
+
const cluster = clusterBreadcrumb(cfg, P)
|
|
114
|
+
if (cluster) items.push(cluster)
|
|
115
|
+
items.push({ label: P.getLabel() })
|
|
116
|
+
return buildBreadcrumbs(items)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Common "Home / cluster? / Resource / parent record" prefix used by
|
|
120
|
+
* every relation-* / nested-relation-* breadcrumb. The parent record
|
|
121
|
+
* links to its View page when registered; the resource list is the
|
|
122
|
+
* fallback so users still have a back-link out of the relation chain. */
|
|
123
|
+
export function relationBreadcrumbPrefix(
|
|
124
|
+
cfg: PilotiqConfig,
|
|
125
|
+
R: ResourceClass,
|
|
126
|
+
parentId: string,
|
|
127
|
+
parentTitle: string,
|
|
128
|
+
): BreadcrumbItem[] {
|
|
129
|
+
const items: BreadcrumbItem[] = [homeBreadcrumb(cfg)]
|
|
130
|
+
const cluster = clusterBreadcrumb(cfg, R)
|
|
131
|
+
if (cluster) items.push(cluster)
|
|
132
|
+
const resourceBase = resourceBasePath(cfg.path, R)
|
|
133
|
+
items.push({ label: R.getBreadcrumb(), url: resourceBase })
|
|
134
|
+
const hasView = R.resolvePages().view !== undefined
|
|
135
|
+
items.push(hasView
|
|
136
|
+
? { label: parentTitle, url: `${resourceBase}/${parentId}` }
|
|
137
|
+
: { label: parentTitle })
|
|
138
|
+
return items
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function relationListBreadcrumbs(
|
|
142
|
+
cfg: PilotiqConfig,
|
|
143
|
+
R: ResourceClass,
|
|
144
|
+
M: typeof RelationManager,
|
|
145
|
+
parentId: string,
|
|
146
|
+
parentTitle: string,
|
|
147
|
+
): Breadcrumbs | undefined {
|
|
148
|
+
const items = relationBreadcrumbPrefix(cfg, R, parentId, parentTitle)
|
|
149
|
+
items.push({ label: M.getLabel() })
|
|
150
|
+
return buildBreadcrumbs(items)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export function relationCreateBreadcrumbs(
|
|
154
|
+
cfg: PilotiqConfig,
|
|
155
|
+
R: ResourceClass,
|
|
156
|
+
M: typeof RelationManager,
|
|
157
|
+
parentId: string,
|
|
158
|
+
parentTitle: string,
|
|
159
|
+
): Breadcrumbs | undefined {
|
|
160
|
+
const items = relationBreadcrumbPrefix(cfg, R, parentId, parentTitle)
|
|
161
|
+
const relList = `${resourceBasePath(cfg.path, R)}/${parentId}/${M.getRelationship()}`
|
|
162
|
+
items.push({ label: M.getLabel(), url: relList })
|
|
163
|
+
items.push({ label: 'Create' })
|
|
164
|
+
return buildBreadcrumbs(items)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export function relationViewBreadcrumbs(
|
|
168
|
+
cfg: PilotiqConfig,
|
|
169
|
+
R: ResourceClass,
|
|
170
|
+
M: typeof RelationManager,
|
|
171
|
+
parentId: string,
|
|
172
|
+
parentTitle: string,
|
|
173
|
+
childTitle: string,
|
|
174
|
+
): Breadcrumbs | undefined {
|
|
175
|
+
const items = relationBreadcrumbPrefix(cfg, R, parentId, parentTitle)
|
|
176
|
+
const relList = `${resourceBasePath(cfg.path, R)}/${parentId}/${M.getRelationship()}`
|
|
177
|
+
items.push({ label: M.getLabel(), url: relList })
|
|
178
|
+
items.push({ label: childTitle })
|
|
179
|
+
return buildBreadcrumbs(items)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export function relationEditBreadcrumbs(
|
|
183
|
+
cfg: PilotiqConfig,
|
|
184
|
+
R: ResourceClass,
|
|
185
|
+
M: typeof RelationManager,
|
|
186
|
+
parentId: string,
|
|
187
|
+
parentTitle: string,
|
|
188
|
+
childId: string,
|
|
189
|
+
childTitle: string,
|
|
190
|
+
): Breadcrumbs | undefined {
|
|
191
|
+
const items = relationBreadcrumbPrefix(cfg, R, parentId, parentTitle)
|
|
192
|
+
const relBase = `${resourceBasePath(cfg.path, R)}/${parentId}/${M.getRelationship()}`
|
|
193
|
+
items.push({ label: M.getLabel(), url: relBase })
|
|
194
|
+
// Phase A always mounts the relation-view page per (R, M), so the
|
|
195
|
+
// child title can always link back to it.
|
|
196
|
+
items.push({ label: childTitle, url: `${relBase}/${childId}` })
|
|
197
|
+
items.push({ label: 'Edit' })
|
|
198
|
+
return buildBreadcrumbs(items)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/** Phase B — depth-2 prefix shared by every nested-relation-* role.
|
|
202
|
+
* Returns "Home / cluster? / Resource / parent / M1 / child1". */
|
|
203
|
+
export function nestedRelationBreadcrumbPrefix(
|
|
204
|
+
cfg: PilotiqConfig,
|
|
205
|
+
R: ResourceClass,
|
|
206
|
+
M1: typeof RelationManager,
|
|
207
|
+
step0: RelationChainStep,
|
|
208
|
+
parentTitle: string,
|
|
209
|
+
child1Id: string,
|
|
210
|
+
child1Title: string,
|
|
211
|
+
): BreadcrumbItem[] {
|
|
212
|
+
const items = relationBreadcrumbPrefix(cfg, R, step0.recordId, parentTitle)
|
|
213
|
+
const rel1Base = `${resourceBasePath(cfg.path, R)}/${step0.recordId}/${step0.relationship}`
|
|
214
|
+
items.push({ label: M1.getLabel(), url: rel1Base })
|
|
215
|
+
// Phase A relation-view always mounted, so child1 always links.
|
|
216
|
+
items.push({ label: child1Title, url: `${rel1Base}/${child1Id}` })
|
|
217
|
+
return items
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
export function nestedRelationListBreadcrumbs(
|
|
221
|
+
cfg: PilotiqConfig,
|
|
222
|
+
R: ResourceClass,
|
|
223
|
+
M1: typeof RelationManager,
|
|
224
|
+
M2: typeof RelationManager,
|
|
225
|
+
step0: RelationChainStep,
|
|
226
|
+
parentTitle: string,
|
|
227
|
+
child1Id: string,
|
|
228
|
+
child1Title: string,
|
|
229
|
+
): Breadcrumbs | undefined {
|
|
230
|
+
const items = nestedRelationBreadcrumbPrefix(cfg, R, M1, step0, parentTitle, child1Id, child1Title)
|
|
231
|
+
items.push({ label: M2.getLabel() })
|
|
232
|
+
return buildBreadcrumbs(items)
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export function nestedRelationCreateBreadcrumbs(
|
|
236
|
+
cfg: PilotiqConfig,
|
|
237
|
+
R: ResourceClass,
|
|
238
|
+
M1: typeof RelationManager,
|
|
239
|
+
M2: typeof RelationManager,
|
|
240
|
+
step0: RelationChainStep,
|
|
241
|
+
parentTitle: string,
|
|
242
|
+
child1Id: string,
|
|
243
|
+
child1Title: string,
|
|
244
|
+
): Breadcrumbs | undefined {
|
|
245
|
+
const items = nestedRelationBreadcrumbPrefix(cfg, R, M1, step0, parentTitle, child1Id, child1Title)
|
|
246
|
+
const rel2Base = `${resourceBasePath(cfg.path, R)}/${step0.recordId}/${step0.relationship}/${child1Id}/${M2.getRelationship()}`
|
|
247
|
+
items.push({ label: M2.getLabel(), url: rel2Base })
|
|
248
|
+
items.push({ label: 'Create' })
|
|
249
|
+
return buildBreadcrumbs(items)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export function nestedRelationViewBreadcrumbs(
|
|
253
|
+
cfg: PilotiqConfig,
|
|
254
|
+
R: ResourceClass,
|
|
255
|
+
M1: typeof RelationManager,
|
|
256
|
+
M2: typeof RelationManager,
|
|
257
|
+
step0: RelationChainStep,
|
|
258
|
+
parentTitle: string,
|
|
259
|
+
child1Id: string,
|
|
260
|
+
child1Title: string,
|
|
261
|
+
child2Title: string,
|
|
262
|
+
): Breadcrumbs | undefined {
|
|
263
|
+
const items = nestedRelationBreadcrumbPrefix(cfg, R, M1, step0, parentTitle, child1Id, child1Title)
|
|
264
|
+
const rel2Base = `${resourceBasePath(cfg.path, R)}/${step0.recordId}/${step0.relationship}/${child1Id}/${M2.getRelationship()}`
|
|
265
|
+
items.push({ label: M2.getLabel(), url: rel2Base })
|
|
266
|
+
items.push({ label: child2Title })
|
|
267
|
+
return buildBreadcrumbs(items)
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function nestedRelationEditBreadcrumbs(
|
|
271
|
+
cfg: PilotiqConfig,
|
|
272
|
+
R: ResourceClass,
|
|
273
|
+
M1: typeof RelationManager,
|
|
274
|
+
M2: typeof RelationManager,
|
|
275
|
+
step0: RelationChainStep,
|
|
276
|
+
parentTitle: string,
|
|
277
|
+
child1Id: string,
|
|
278
|
+
child1Title: string,
|
|
279
|
+
child2Id: string,
|
|
280
|
+
child2Title: string,
|
|
281
|
+
): Breadcrumbs | undefined {
|
|
282
|
+
const items = nestedRelationBreadcrumbPrefix(cfg, R, M1, step0, parentTitle, child1Id, child1Title)
|
|
283
|
+
const rel2Base = `${resourceBasePath(cfg.path, R)}/${step0.recordId}/${step0.relationship}/${child1Id}/${M2.getRelationship()}`
|
|
284
|
+
items.push({ label: M2.getLabel(), url: rel2Base })
|
|
285
|
+
items.push({ label: child2Title, url: `${rel2Base}/${child2Id}` })
|
|
286
|
+
items.push({ label: 'Edit' })
|
|
287
|
+
return buildBreadcrumbs(items)
|
|
288
|
+
}
|