@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
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @pilotiq/pilotiq@0.
|
|
2
|
+
> @pilotiq/pilotiq@0.8.0 build /home/runner/work/pilotiq/pilotiq/packages/pilotiq
|
|
3
3
|
> tsc -p tsconfig.build.json && pnpm run copy-assets
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @pilotiq/pilotiq@0.
|
|
6
|
+
> @pilotiq/pilotiq@0.8.0 copy-assets /home/runner/work/pilotiq/pilotiq/packages/pilotiq
|
|
7
7
|
> mkdir -p dist/styles && cp -R src/styles/*.css dist/styles/
|
|
8
8
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,147 @@
|
|
|
1
1
|
# @pilotiq/pilotiq
|
|
2
2
|
|
|
3
|
+
## 0.8.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 92b99a1: feat(pilotiq): collab open-core wiring + `Field.collab()` opt-out
|
|
8
|
+
|
|
9
|
+
Three new module-singleton registries + a URL gate + a `.collab()` setter
|
|
10
|
+
on the `Field` base — the open-core scaffolding pro collab plugins (e.g.
|
|
11
|
+
`@pilotiq-pro/collab`) plug into. Pilotiq core stays Yjs-free; the
|
|
12
|
+
registries hand opaque values back and forth.
|
|
13
|
+
|
|
14
|
+
### Registries (all exported from `@pilotiq/pilotiq/react`)
|
|
15
|
+
|
|
16
|
+
- **`CollabRoomContext`** — React context exposing the active record's
|
|
17
|
+
`{ ydoc, provider, user? }` triplet. `useCollabRoom()` returns `null`
|
|
18
|
+
when no `<RecordCollabRoom>` is mounted up-tree.
|
|
19
|
+
- **`registerCollabExtensions(factory)`** / **`getCollabExtensions()`** —
|
|
20
|
+
module slot for a `CollabExtensionFactory` that returns Tiptap-style
|
|
21
|
+
collab extensions for a given `{ ydoc, provider, fieldName, user }`.
|
|
22
|
+
Pilotiq treats the returned values as opaque `unknown[]`; the consumer
|
|
23
|
+
(typically `@pilotiq/tiptap`) spreads them into its editor.
|
|
24
|
+
- **`registerRecordWrapper(C)`** / **`getRecordWrapper()`** — module
|
|
25
|
+
slot for a record-scoped React wrapper. `AppShell` wraps every
|
|
26
|
+
record-edit page's children with the registered wrapper, scoped to
|
|
27
|
+
`{ resourceSlug, recordId }`.
|
|
28
|
+
- **`registerFormCollabBinding(factory)`** / **`getFormCollabBinding()`** —
|
|
29
|
+
module slot for a form-level CRDT binding (form-data `Y.Map` proxy);
|
|
30
|
+
consumed by `FormStateProvider` in Phase F2.
|
|
31
|
+
|
|
32
|
+
### URL gate
|
|
33
|
+
|
|
34
|
+
- **`RecordWrapperGate`** — internal component AppShell mounts around
|
|
35
|
+
`props.children`. Parses the current path against `basePath`; when it
|
|
36
|
+
matches a `/.../:id/edit` URL AND a wrapper is registered, wraps with
|
|
37
|
+
`<Wrapper resourceSlug={slug} recordId={id}>{children}</Wrapper>`.
|
|
38
|
+
Pass-through otherwise.
|
|
39
|
+
- **`parseRecordEditUrl(currentPath, basePath)`** — pure helper exported
|
|
40
|
+
alongside. Handles bare resource edit, cluster-prefixed edits, and
|
|
41
|
+
nested-relation edits (slash-joined slug-path picks up the parent +
|
|
42
|
+
relation chain so two URLs that target different records always
|
|
43
|
+
produce different rooms downstream).
|
|
44
|
+
|
|
45
|
+
### `Field.collab(enabled = true)`
|
|
46
|
+
|
|
47
|
+
New setter on the base class — every subclass (Text, Toggle, Select,
|
|
48
|
+
Date, Slider, …, RichText) inherits. `.collab(false)` stamps
|
|
49
|
+
`meta.collab === false`; the renderer is expected to skip the collab
|
|
50
|
+
layer entirely (no value sync, no presence chip). Absent = inherit the
|
|
51
|
+
panel default.
|
|
52
|
+
|
|
53
|
+
### Acceptance
|
|
54
|
+
|
|
55
|
+
- Pilotiq builds + 2938 tests pass (12 new for `parseRecordEditUrl`).
|
|
56
|
+
- Consumers (e.g. `@pilotiq-pro/collab`) wire collab through these
|
|
57
|
+
registries; pilotiq core carries no Yjs / Tiptap dep.
|
|
58
|
+
|
|
59
|
+
- fd06c0d: feat(pilotiq): `Pilotiq.components({ nav, header, footer })` chrome slots
|
|
60
|
+
|
|
61
|
+
Three new chrome-slot overrides let a panel swap an entire region of
|
|
62
|
+
the default layout for a custom React component, alongside the
|
|
63
|
+
existing render-hook splicing surface. Use slots when render hooks
|
|
64
|
+
can't reach far enough — slots _replace_ a whole region; hooks
|
|
65
|
+
_splice_ at named positions.
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
import { Pilotiq } from "@pilotiq/pilotiq";
|
|
69
|
+
import { MyCustomSidebar } from "./MyCustomSidebar.tsx";
|
|
70
|
+
import { MyTopBar } from "./MyTopBar.tsx";
|
|
71
|
+
import { MyFooter } from "./MyFooter.tsx";
|
|
72
|
+
|
|
73
|
+
Pilotiq.make("admin").components({
|
|
74
|
+
nav: MyCustomSidebar,
|
|
75
|
+
header: MyTopBar,
|
|
76
|
+
footer: MyFooter,
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Slots
|
|
81
|
+
|
|
82
|
+
- **`nav`** — replaces the default nav tree. In `SidebarLayout`
|
|
83
|
+
that's the `<SidebarContent>` body (`<SidebarMenu>` tree); in
|
|
84
|
+
`TopbarLayout` it's the `<nav>` cluster between the brand and
|
|
85
|
+
the right-side controls. Surrounding chrome (branding header,
|
|
86
|
+
render-hook splices, footer, sign-out menu) stays.
|
|
87
|
+
- **`header`** — replaces the whole `<header>` chrome bar. In
|
|
88
|
+
`SidebarLayout` that's the top bar with search / theme / bell /
|
|
89
|
+
user menu; in `TopbarLayout` it's the whole top region including
|
|
90
|
+
the brand cluster AND the nav (setting `header` makes the `nav`
|
|
91
|
+
slot irrelevant there).
|
|
92
|
+
- **`footer`** — mounts a `<footer>` element below the main content
|
|
93
|
+
area in both layouts. Separate from the `panels::footer` render
|
|
94
|
+
hook, which keeps firing INSIDE the content area for per-page
|
|
95
|
+
trailing chrome.
|
|
96
|
+
|
|
97
|
+
### Prop contracts
|
|
98
|
+
|
|
99
|
+
`nav` and `header` both receive `{ navigation, basePath, currentPath? }`
|
|
100
|
+
(matching `NavComponentProps` / `HeaderComponentProps`) — same
|
|
101
|
+
pre-grouped, pre-sorted nav tree the default renderers consume, so a
|
|
102
|
+
custom topbar can render its own nav inline without juggling two
|
|
103
|
+
slots. `footer` receives the minimal `{ basePath, currentPath? }`.
|
|
104
|
+
|
|
105
|
+
### Render-hook caveat for `header`
|
|
106
|
+
|
|
107
|
+
Hooks rooted _inside_ the default header — `panels::topbar.start`,
|
|
108
|
+
`panels::topbar.end`, `panels::user-menu.before`,
|
|
109
|
+
`panels::user-menu.after` — do NOT fire when the header is replaced
|
|
110
|
+
(the surrounding container is gone). Hooks rooted outside
|
|
111
|
+
(`panels::sidebar.*`, `panels::footer`, `panels::sidebar.nav.*`) keep
|
|
112
|
+
firing. Consumers rebuilding the header can mount
|
|
113
|
+
`<RenderHookSlot name="…" hooks={panel.renderHooks} />` themselves
|
|
114
|
+
from inside the custom component to preserve the splice contract for
|
|
115
|
+
plugins.
|
|
116
|
+
|
|
117
|
+
### Chrome components exported for rebuilding headers
|
|
118
|
+
|
|
119
|
+
`SearchTrigger`, `ThemeToggle`, `NotificationBell`,
|
|
120
|
+
`RightSidebarTrigger`, and `UserMenu` are all re-exported from
|
|
121
|
+
`@pilotiq/pilotiq/react` so a `header` slot consumer can drop the
|
|
122
|
+
default controls back in à la carte rather than reimplementing every
|
|
123
|
+
one. `HeaderComponentProps`, `FooterComponentProps`, and
|
|
124
|
+
`isNavItemActive` are also re-exported alongside the existing
|
|
125
|
+
`NavComponentProps` and `ComponentSlotRegistry`.
|
|
126
|
+
|
|
127
|
+
### Authoring `.tsx` inside the panel module
|
|
128
|
+
|
|
129
|
+
The Vite plugin loads `app/Pilotiq/AdminPanel.ts` through `jiti` at
|
|
130
|
+
boot to harvest `cfg.components` into the build-time
|
|
131
|
+
`_components.ts` manifest. To make this play nicely with `.tsx`
|
|
132
|
+
component files alongside the panel module, the jiti loader now
|
|
133
|
+
enables JSX support (`jsx: { runtime: 'automatic' }`). Two gotchas to
|
|
134
|
+
know:
|
|
135
|
+
|
|
136
|
+
1. JSX support is enabled by default — no per-file `import React from 'react'`
|
|
137
|
+
needed when authoring `.tsx` panel-adjacent files.
|
|
138
|
+
2. jiti's resolver falls through `.js` → `.ts` but NOT `.js` → `.tsx`.
|
|
139
|
+
The import in the panel module must use the literal `.tsx`
|
|
140
|
+
extension: `import { MyCustomSidebar } from './MyCustomSidebar.tsx'`.
|
|
141
|
+
`allowImportingTsExtensions: true` in your tsconfig keeps TS happy.
|
|
142
|
+
|
|
143
|
+
See `docs/guide/component-slots.md` for the full guide.
|
|
144
|
+
|
|
3
145
|
## 0.7.2
|
|
4
146
|
|
|
5
147
|
### Patch Changes
|
package/CLAUDE.md
CHANGED
|
@@ -41,7 +41,16 @@ Deep notes for many of these also live in `~/.claude/projects/-Users-sleman-Proj
|
|
|
41
41
|
- `src/sessionFilters.ts` — Tier-3 filter persistence helpers. `Resource.persistFiltersInSession = true` opts in; the GET list handler in `routes.ts` writes the active query slice (filters / `group` / `search` / `sort` / `perPage`; `page` + `tab` excluded) to `req.session` under `pilotiq:filters:<basePath>:<slug>` on every non-bare visit, and 302-redirects bare visits (zero query params) to the persisted slice. Duck-typed `req.session.get / put` (mirrors `notifications/flash.ts`) so it no-ops when `@rudderjs/session` isn't installed. Idempotent — short-circuits the `put()` when the slice deep-equals the stored value to avoid `Set-Cookie` churn on revisits. v1 = one slot per resource (all tabs share one filter slot); guide: `docs/guide/filter-persistence.md`.
|
|
42
42
|
- `src/PilotiqServiceProvider.ts` — Provider + `pilotiq()` factory.
|
|
43
43
|
- `src/search.ts` — Plan #12 `searchAllResources(pilotiq, query, user, opts?) → GlobalSearchResult[]`. Walks `cfg.resources` filtered by `globalSearch=true`, runs `canAccess + canViewAny` in parallel, builds a per-resource `ModelQuery` (override-or-default LIKE chain on `globallySearchableAttributes()`), `paginate(1, limitPerResource)`. Returns `[]` for queries shorter than 2 chars. Throws on a single resource silently drop its results; others still resolve. No new ORM contract — reuses the existing `paginate` from Plan #2/#6.
|
|
44
|
-
- `src/pageData.ts` —
|
|
44
|
+
- `src/pageData.ts` — Barrel module (~480 lines) + `dispatchPageData(pageContext)` Vike `+data` switchboard. Re-exports the per-page-role builders (`dashboardData`, `resourceIndexData`, `resourceCreateData`, `resourceEditData`, `resourceViewData`, `resourceRecordPageData`, `globalEditData`, `globalViewData`, `customPageData`, `formStateData`, `formWizardData`, `formCreateOptionData`, `mentionResolveData`, `widgetData`, `searchData`, `relationManagerData`, `panelInfo`, `applyRoleHooks`, `resolvePageHooks`) + the URL-tag helpers + the fill pipeline through the `./pageData.js` import path so external callers (`routes.ts`, tests, custom dispatchers) stay stable. **Plan #5 `formStateData(pilotiq, scope, body, req?)`** drives partial-resolve — runs `applyStateUpdate`, re-resolves form with bound read-only `$get` (resolve-time `$set` is a no-op closure; only `afterStateUpdated` writes survive), returns `{ ok, form: FormMeta, dirty }` or 404/422. **`tagFormStateUrls(elements, urlBuilder)`** stamps `Form.withStateUrl()` only on forms with at least one `live()` descendant. **Plan #8 `formWizardData(pilotiq, scope, body, req?)`** runs `validateSchema` over the requested step's children only — returns `{ ok }` (200) or `{ ok:false, status:422, errors }`. **`tagFormWizardUrls(elements, urlBuilder)`** stamps `Form.withWizardUrl()` only on forms with a `Wizard` descendant. **Navigation tree:** `panelInfo(pilotiq, req?)` is async — flattens resources/globals/pages, resolves `navigationParentItem` refs, sorts by `navigationSort`, parallel-resolves `navigationBadge()` via `Promise.all` (errors swallow). `buildNavigation` pre-evaluates `canAccess(user)` in parallel; failed items dropped. Both rudder GET handlers AND the auto-gen Vike `+data` hook call these so SSR + SPA-nav serve identical data; renderers read from `(ctx.data ?? ctx.viewProps)`. `resolveActiveTab(elements, query, currentPath)` stamps active tab + per-tab URL + parallel-resolved badge counts before `loadTableRecords`.
|
|
45
|
+
- `src/pageData/` — Modular page-data subtree. Split out of `pageData.ts` in 6 phases (PR #34–#39, 4,948 → 481 lines):
|
|
46
|
+
- `breadcrumbs.ts` — 16 builder helpers (home / cluster / resource×4 / global / customPage / relation×4 + prefix / nestedRelation×4 + prefix) + `RelationChainStep` type.
|
|
47
|
+
- `helpers.ts` — `userCtx` / `uploadCtx` (`SchemaContext` builders), `callPageSchema`, 12 URL-tag helpers (`tagFormActions` / `tagFormStateUrls` / `tagTableReorderUrls` / `tagTableDeferred` / `tagCellEditUrls` / `tagFormWizardUrls` / `tagFieldAiUrls` / `tagSelectCreateOptionUrls` / `tagRichTextMentionUrls` / `tagWidgetUrls` / `tagActionDispatch`), the fill pipeline (`applyFillPipeline` + `applyRelationshipRepeaterFill` + `applyRelationshipBuilderFill` + `pickChildPrimaryKey` / `pickChildForeignKey` / `findRelationshipRepeaters` / `findRelationshipBuilders` / `parseBuilderDataPayload`), `resolveServerDataElements` + `collectServerDataElements` + `ServerDataMap`, and field-walker helpers (`walkSelectFields` / `isAsyncMentionField` / `formHasLiveField` / `formHasWizard`).
|
|
48
|
+
- `navigation.ts` — `panelInfo` (entry point for chrome envelopes), the meta interfaces (`UserMenuMeta` / `DatabaseNotificationsMeta` / `RightPanelMeta` / `RightSidebarMeta` / `NavItem` / `PanelInfoRoute`), `buildNavigation` + `nestAndSort` + `RawNavItem`, the render-hook resolvers (`resolveChromeHooks` / `applyRoleHooks` / `resolvePageHooks`), and the user-menu / sidebar / notification-meta builders.
|
|
49
|
+
- `resourcePages.ts` — `dashboardData`, `resourceIndexData`, `resourceTableData`, `collectTableMetas`, `resolveActiveTab` + `findListTabs` + `buildTabUrl`, `resourceCreateData`, `resourceEditData`, `resourceViewData`, `resourceRecordPageData`.
|
|
50
|
+
- `relationPages.ts` — Plan #11 relation manager builders. Types (`RelationManagerScope` / `RelationManagerResult` / `ResolvedChain`), lookup helpers (`findRelatedResource` / `findManager` / `childBelongsToParent` for IDOR), auto-wiring (`autoWireManagerTable` / `injectManagerTrashedFilter` / `autoWireManagerForm` / `safePolicy` / `safeManagerPolicy`), depth-1 builders (`relationManagerData` + `buildRelation*Data`), depth-2 chain resolution + builders (`resolveRelationChain` + `nestedRelationManagerData` + `nestedManagerCtx` + `nestedResponseEnvelope` + `buildNestedRelation*Data`).
|
|
51
|
+
- `relationTabs.ts` — `buildRelationTabs` (depth 1) + `buildNestedRelationTabs` (depth 2) + `deriveParentTitle` + `safeBool`. Lives in its own module because both `resourcePages.ts` (parent record view/edit strip) AND `relationPages.ts` (nested-tab strip on record manager pages) consume them — keeps the resource ↔ relation sibling import graph acyclic.
|
|
52
|
+
- `forms.ts` — Plan #5 `formStateData`, Plan #8 `formWizardData`, `formCreateOptionData` (SelectField inline-create), `mentionResolveData` (async-mention typeahead), plus per-builder helpers (`stepHookErrorMessage` / `findSelectFieldByName` / `isMentionResolverField` / `findRichTextFieldByName` / `stripRepeaterRowPrefix` / `stripBuilderRowPrefix`) and 9 wire-shape types.
|
|
53
|
+
- `misc.ts` — `globalEditData`, `globalViewData`, `customPageData`, `widgetData` (Plan #15 widget polling) + `findWidgetById`, `searchData` (Plan #12 global search), plus the `WidgetScope` / `WidgetRequest` / `WidgetSuccess` / `WidgetFailure` wire-shape types.
|
|
45
54
|
- `src/routes.ts` — `registerPilotiqRoutes()` using `view()`. Each GET handler delegates to `pageData.ts`; POST handlers stay here. **Plan #10 wiring:** every handler runs `checkPolicy(() => R.canX(user, …))`; failure → `forbidden(res, json)` (403 JSON or HTML). Record-aware predicates load via `R.model.find(id)` when set. 403 ≠ 401 — `Pilotiq.guard()` is the 401 layer. Routes:
|
|
46
55
|
- `GET ${base}` → dashboard
|
|
47
56
|
- `GET ${base}/${slug}` → resource list
|
|
@@ -91,8 +100,15 @@ Deep notes for many of these also live in `~/.claude/projects/-Users-sleman-Proj
|
|
|
91
100
|
|
|
92
101
|
**Conditional visibility**: `.visible / .hidden / .disabled / .authorize` — rule is `boolean | (ctx) => boolean | Promise<boolean>` with `ActionVisibilityContext { record?, records?, user? }`. `Action.evaluate(ctx)` async; throws → `visible: false`. Non-row placements eval at schema-resolve. Row-placement actions defer to per-row eval in `loadTableRecords`, stamping `_visibleActions` / `_disabledActions`.
|
|
93
102
|
|
|
103
|
+
- `src/actions/Action.ts` — `Action` class itself (~1,515 lines): types (`ActionContext / ActionResult / ActionHandler / ActionVisibilityContext / VisibilityRule / ResourceLike / ReplicateOptions` etc), instance fields + setters, modal chrome, link / form / submit mode wiring, `evaluate()` and `toMeta()`. Static factory methods stay on the class as thin delegators (`Action.create / .edit / .view / .delete / .replicate / .restore / .forceDelete / .markAsRead / .bulkDelete / .bulkRestore / .bulkForceDelete / .bulkReplicate / .relationCreate / .relationEdit / .relationDelete / .relationRestore / .relationForceDelete / .relationReplicate / .relationBulkReplicate / .relationAttach / .relationDetach / .relationBulkDetach`) — call sites stay stable; bodies live in the factory sub-modules. `Action.import / .export / .bulkExport` are the exceptions — their bodies stay in Action.ts since they already delegate their internals to the older `*Factory.ts` files via static + dynamic imports. Split via 4 phases (`docs/plans/action-split.md`, 2,159 → 1,515 lines).
|
|
104
|
+
- `src/actions/factoryHelpers.ts` — Shared helpers consumed by every factory sub-module: `resourceBase(basePath, R)` (cluster-aware URL builder), `callPredicate(fn, user, record?)` (Plan #10 fail-open predicate caller), `isTrashed(record, R)` (soft-delete state probe), `isM2MMode(mode)` (true for `belongsToMany / morphToMany / morphedByMany`), `relationUrlPrefix(ctx)` (depth-1 + depth-2 relation URL prefix).
|
|
105
|
+
- `src/actions/crudFactories.ts` — Single-row resource factories: `createAction / editAction / viewAction / deleteAction / replicateAction / restoreAction / forceDeleteAction / markAsReadAction`. Each builds an `Action` shaped by `ResourceLike`'s policy predicates + soft-delete flags.
|
|
106
|
+
- `src/actions/bulkFactories.ts` — Bulk-placement factories: `bulkDeleteAction / bulkRestoreAction / bulkForceDeleteAction / bulkReplicateAction`. Handler-style — iterate `ctx.records`, run per-row policy, call matching model method, return notification with the count succeeded. Owns the phase-local `labelForCount(R, n)` helper for "1 post" / "5 posts" pluralization.
|
|
107
|
+
- `src/actions/relationFactories.ts` — Relation hasMany / morph factories: `relationCreateAction / relationEditAction / relationDeleteAction / relationRestoreAction / relationForceDeleteAction` plus the replicate pair `relationReplicateAction / relationBulkReplicateAction`. Replicate helpers (`computeRelationPin / persistRelationReplica / runRelationReplicateRow`) are private to this file — they force-pin the parent attachment columns (`<foreignKey>` for hasMany; `<morphName>Id` + `<morphName>Type` for morphMany via `computeMorphPayload`) AFTER the strip + BEFORE `beforeReplicaSaved`, so a tampered source row can't slip a different parent in. All factories auto-hide under M2M (factories deferred to `m2mFactories.ts`) and under `morphTo` (child-side polymorphic — no single owner to pin to).
|
|
108
|
+
- `src/actions/m2mFactories.ts` — Pivot factories: `relationAttachAction / relationDetachAction / relationBulkDetachAction`. All three auto-hide outside any M2M mode. `relationAttach` builds a modal-form `SelectField` picker via `attachFactory.buildAttachModalSchema` and POSTs the selected id to the manager's `_action/relationAttach` endpoint; `relationDetach` is a direct row-POST to `_detach/:childId`; `relationBulkDetach` runs the per-row `canDetach` gate inside the handler before calling `parent.related(rel).detach(ids)` once.
|
|
94
109
|
- `src/actions/exportFactory.ts` — `Action.export / Action.bulkExport` internals (resolveExportColumns / collectExportRows / buildExportRow / encodeExport / defaultExportFilename). Lives in its own module so the Action ↔ Table cycle stays clean — `Action.export`'s handler dynamic-imports it at request time. Drives the table's existing `records()` handler in pages so filters / search / sort flow through unchanged. CSV body via `src/io/csv.ts` (RFC 4180 encoder + parser, in-memory only). Handler return shape extended with `{ download: { filename, contentType, body } }` on `ActionResult` + `DispatchActionSuccess`; route layer detects, sets `Content-Type` + `Content-Disposition: attachment` + `res.send(body)` (mutually exclusive with `redirect`); client `dispatchHandlerAction` content-sniffs `Content-Disposition` and triggers a synthetic `<a download>` blob download. Plan: `docs/plans/import-export-actions.md`.
|
|
95
110
|
- `src/actions/importFactory.ts` — `Action.import` internals (parseImportText / runImport / buildImportSchema / buildImportNotification). Auto-builds the modal-form schema (FileUpload + a Mode select when `upsertBy` is set); handler reads `ctx.values.file`, fetches the URL the FileUpload stamped, parses CSV/JSON, walks rows through `R.model.create` (or `R.model.update` for matched upserts). Per-row `validate / beforeCreate / beforeUpdate` hooks; partial-failure-soft (rows that throw / fail validate accumulate in `summary.errors` and the import keeps going). Format auto-detected from filename when not set; `maxRows` cap (default 10_000). Visibility delegates to `R.canCreate`. No transaction wrapper in v1 (rudder ORM doesn't expose one to pilotiq yet).
|
|
111
|
+
- `src/actions/attachFactory.ts` — `Action.relationAttach` modal-form internals: `buildAttachModalSchema({ Related, relationship, recordTitleAttr, labelSingular })` returns a `[SelectField]` populated by `loadAttachableCandidates(parent, rel, relatedModel, recordTitleAttr, limit?)` which fetches up to 50 candidate rows and filters out already-attached ids server-side. Mirrors the `importFactory.ts` / `exportFactory.ts` split — lives outside the Action class so M2M-specific imports (SelectField + ORM helpers) stay out of the main file.
|
|
96
112
|
- `src/io/csv.ts` — `encodeCsv(rows, columns) / parseCsv(input)`. RFC 4180: CRLF emit, LF/CRLF accept, double-quote escaping for embedded quotes, BOM stripped on input. Every cell parsed as a string — type coercion is the importer's job. No third-party dep.
|
|
97
113
|
- `src/actions/ActionGroup.ts` — `ActionGroup.make(name).label().icon().tooltip().actions([Action, ...])`. Renders as DropdownMenu. Same trigger styling + visibility rules as Action. Nested groups flatten. Bulk placement unsupported.
|
|
98
114
|
- `src/schema/Heading.ts` — `Heading.actions([Action…])` — title left + actions right. Used by `CreatePage / EditPage` to put Save in header.
|
|
@@ -108,7 +124,39 @@ Deep notes for many of these also live in `~/.claude/projects/-Users-sleman-Proj
|
|
|
108
124
|
- `src/react/layouts/SidebarLayout.tsx` — shadcn Sidebar. `<SidebarGroup>` per nav group, `<SidebarMenuSub>` for children, `<SidebarMenuBadge>` for badges. Active = longest URL prefix.
|
|
109
125
|
- `src/react/layouts/TopbarLayout.tsx` — horizontal nav variant. Group label → dropdown trigger.
|
|
110
126
|
- `src/react/ThemeSettingsPage.tsx` — Theme editor: controls + live iframe preview.
|
|
111
|
-
- `src/react/SchemaRenderer.tsx` —
|
|
127
|
+
- `src/react/SchemaRenderer.tsx` — Thin top-level dispatcher (~550 lines) for resolved schema. Walks elements via `renderElement` and delegates each type to a sibling renderer under `src/react/schemaRenderer/`. Public surface: `<SchemaRenderer elements={...} widgetData={...} />` + the `FormFields` helper. Re-exports `dispatchHandlerAction` + `renderFormChild` for consumers (`RepeaterInput.tsx`, `SelectFieldInput.tsx`). Page-chrome renderers that don't fit a sub-namespace (`ListTabsRenderer`, `BreadcrumbsRenderer`, `RelationTabsRenderer`, `RelationTabIcon`) still live here.
|
|
128
|
+
- `src/react/schemaRenderer/` — Modular renderer subtree. Split out of `SchemaRenderer.tsx` in 5 phases (PR #29–#33, 6,798 → 549 lines):
|
|
129
|
+
- `constants.ts` — `TEXT_*` / `COLUMN_*` / `BADGE_COLOR_CLASSES` lookup tables + `alertStyles`.
|
|
130
|
+
- `columnFormat.ts` — `applyColumnFormat` (dateTime / since / money / numeric / limit / words). Used by both table cells and entries.
|
|
131
|
+
- `helpers.tsx` — `resolveIcon`, `layoutClasses`, `renderChildren`, `withTooltip`, `IconCmp` type.
|
|
132
|
+
- `SimpleElements.tsx` — 13 stateless leaf + layout primitives (text/image/icon/markdown/html/heading/emptyState/divider/unorderedList/card/grid/group/split/fieldset). Exports `renderSimpleElement(el, index, deps)`; deps inject `renderElement` + `renderActionLike` for cases that recurse or mount action children.
|
|
133
|
+
- `AlertRenderer.tsx` — dismissible alert + localStorage persist.
|
|
134
|
+
- `SectionRenderer.tsx` — collapsible / persistable Section; takes `renderElement` prop for child recursion.
|
|
135
|
+
- `TabsRenderer.tsx` — pills + underline variants.
|
|
136
|
+
- `WizardRenderer.tsx` — multi-step form, URL/localStorage step persist, `WizardNavButton` chrome customizers.
|
|
137
|
+
- `EntryRenderer.tsx` — `renderEntry` (8 entry types: text/badge/icon/image/keyValue/color/code/component/repeatable) + `EntryShell` chrome + tooltip/copy helpers.
|
|
138
|
+
- `action/` — Phase 3 action layer:
|
|
139
|
+
- `renderAction.tsx` — main switch (submit / href / method / handler / disabled placeholder) + `renderActionLike` (action / actionGroup / slotComponent).
|
|
140
|
+
- `ActionModalDialog.tsx` / `ConfirmActionDialog.tsx` — modal + confirm dialogs.
|
|
141
|
+
- `MethodActionButton.tsx` / `HandlerActionButton.tsx` — POST-style and JSON-dispatch buttons.
|
|
142
|
+
- `ActionGroupTrigger.tsx` — dropdown trigger + pending-dialog state.
|
|
143
|
+
- `buttons.tsx` — `actionButtonClass` / `renderActionIcon` / `renderActionBadge` + `COLOR_VARIANTS` / `OUTLINED_VARIANTS` / `SIZE_CLASSES` / `ICON_SIZE_CLASSES` + `RenderActionOptions` interface.
|
|
144
|
+
- `helpers.ts` — `dispatchNotifications`, `dispatchMethodAction`, `dispatchHandlerAction`, attachment-download helpers + `Notify` / `Navigate` types.
|
|
145
|
+
- `form/` — Phase 4 form layer:
|
|
146
|
+
- `FormRenderer.tsx` — HTML form chrome + fetch+JSON submit + error stamping + `FormStateProvider` mount + `FormBody` / `renderFormChild` / `renderFieldWithValue`.
|
|
147
|
+
- `renderField.tsx` — 13-way field-type switch + `TextFieldShell` (handles password reveal / mask / datalist via `useTextInputControls`).
|
|
148
|
+
- `table/` — Phase 5 table layer:
|
|
149
|
+
- `TableRenderer.tsx` — deferred-load wrapper + `TableSkeleton`.
|
|
150
|
+
- `TableRendererBody.tsx` — the body itself. Column rendering / sort+pagination+search URL state / group banding+drill-in / per-row inline edit+delete / bulk-action toolbar / cards-layout dispatch / empty+loading states. Accepts a `TableBodyDeps` bag (`renderElement` + `renderActionLike` + `renderFormChild`).
|
|
151
|
+
- `CardsLayoutBody.tsx` — `contentLayout('cards')` body + responsive `CARDS_GRID_COLS_*` lookup tables + `pickCardCols` / `cardsPerRowClasses`.
|
|
152
|
+
- `filters.tsx` — every filter widget (`FilterSelect` / `FilterMultiSelect` / `FilterDateRange` / `FilterForm` / `FilterQueryBuilder` + query-builder sub-components) plus chrome (`FilterPopover` / `FilterStrip` / `FilterStripToggle` / `ActiveFiltersBar`) plus toolbar siblings (`TableGroupPicker` / `SortByPicker` / `ColumnsToggleDropdown` / `GroupHeaderText` / `renderFilterControl` / `resolveColumnUrl`).
|
|
153
|
+
- `formatCell.tsx` — `formatCell` (8 column-type dispatch) + `wrapCell` / `wrapCellList` + `CellCopyButton` + `rowId`.
|
|
154
|
+
- `url.tsx` — `TableUrlState` + `prefixK` / `buildTableQuery` / `nextSortDir` / `SearchFormHiddenInputs` / `getCurrentSearchParams`.
|
|
155
|
+
- `links.tsx` — `RecordCellLink` (cell-level SPA link wrapper) + `ActiveGroupKeyChip` + `GroupHeadingLink`.
|
|
156
|
+
- `renderRowActions.tsx` — per-row action strip; takes `renderActionLike` as a parameter so it stays free of the action import cycle.
|
|
157
|
+
- **Dependency injection convention.** Renderers that need to recurse take `renderElement` (and sometimes `renderActionLike` / `renderFormChild`) as props or function arguments. `SchemaRenderer.tsx` binds them via closure with thin wrappers (`renderActionLike`, `renderField`, `renderFormChild`, `FormRenderer`, `TableRenderer`) so the rest of the file passes the closure-bound versions into the switch.
|
|
158
|
+
|
|
159
|
+
**Row click navigation (table layer):** `Table.recordUrl(r => …)` stamps `_recordUrl`; each *data cell* wraps content in a real `<a href>` (`RecordCellLink`). Plain left-clicks SPA-nav via `useNavigate()`; modified clicks fall through. Action and bulk-select cells stay unwrapped. Per-column overrides: `Column.recordUrl(fn|false)`. `formatCell` switches on `col.columnType`, applies built-in `format` spec, reads `row._formatted[colName]` first. **Per-row classes:** `Table.recordClasses(r => '…')` stamps `_recordClasses` and the renderer concatenates onto the `<tr>` className (after striped + cursor-pointer). **Auto-refresh:** `Table.poll(seconds)` emits `pollInterval` on the meta; `TableRendererBody`'s `useEffect` runs `setInterval(navigate(pathname+search), n*1000)` and pauses while `document.visibilityState !== 'visible'`. **Group banding:** `Table.defaultGroup(col)` stable-sorts rows via `sortRowsByGroupValue` in `dispatchTable` (empty/null group values bubble to the bottom), stamps `_groupValue` per row; the renderer inserts a heading `<TableRow>` whenever the value changes between adjacent rows. **Footer summaries:** `Column.summarize([…])` makes `loadTableRecords` compute aggregates over the rendered rows; renderer mounts a `<TableFooter>` row aligned to the columns when `meta.summaries` is non-empty.
|
|
112
160
|
|
|
113
161
|
**All non-modal action triggers SPA-update:** `dispatchHandlerAction / dispatchMethodAction` fetch with `Accept: application/json`, drain notifications via `useToast()`, then `useNavigate()` to redirect. Handler actions WITH confirm/modal → `ActionModalDialog` (controlled or uncontrolled). Confirm-only modals reuse same dialog.
|
|
114
162
|
|
|
@@ -120,7 +168,7 @@ Deep notes for many of these also live in `~/.claude/projects/-Users-sleman-Proj
|
|
|
120
168
|
|
|
121
169
|
**Plan #5 reactive fields (client).** `react/FormStateContext.tsx` ships `FormStateProvider` + `useFieldState(name)` + `useFormState()`. `FormRenderer` is dual-path: with `stateUrl` set it wraps children in the provider (controlled inputs); without it, falls back to today's uncontrolled `defaultValue` path. Each field renderer (`TextLikeInput` for text/email/number/textarea/slug; specialized inputs for toggle/select/date) consults `useFieldState` first, falls back to `defaultValue` when outside the provider — so non-live forms cost nothing. `triggerLive(name)` reads each field's `live` config and POSTs `{ changed, values }` to `stateUrl` (immediate / debounced via `setTimeout` / on blur). In-flight race handling via `requestSeqRef + latestSeenRef` (refs, not state — StrictMode trap). 422 → inline errors; other failures → toast. **Live forms must pin `Form.make().formId('stable-id')`** — see `feedback_pilotiq_live_forms_pin_formid.md`. Public exports: `FormStateProvider`, `useFieldState`, `useFormState` from `@pilotiq/pilotiq/react`.
|
|
122
170
|
- `src/react/ui/` — shadcn primitives (sidebar, button, sheet, separator, tooltip, skeleton, input, checkbox, calendar, dialog, dropdown-menu, popover, select, switch, table, tabs, textarea, **slider** added in Plan #6).
|
|
123
|
-
- `src/react/fields/` — extracted per-fieldtype renderers (`FieldShell`, `TextLikeInput`, `SelectFieldInput`, `ToggleFieldInput`, `DateFieldInput`, `HiddenInput`, `CheckboxInput`, `RadioInput`, `ToggleButtonsInput`, `CheckboxListInput`, `SliderInput`, `ColorInput`, `DateTimeInput`, `KeyValueInput`, `TagsInput`, `FileUploadInput`, `MarkdownInput`). `FieldShell` wraps every input with the label / required asterisk / prefix / suffix / helperText chrome — `
|
|
171
|
+
- `src/react/fields/` — extracted per-fieldtype renderers (`FieldShell`, `TextLikeInput`, `SelectFieldInput`, `ToggleFieldInput`, `DateFieldInput`, `HiddenInput`, `CheckboxInput`, `RadioInput`, `ToggleButtonsInput`, `CheckboxListInput`, `SliderInput`, `ColorInput`, `DateTimeInput`, `KeyValueInput`, `TagsInput`, `FileUploadInput`, `MarkdownInput`). `FieldShell` wraps every input with the label / required asterisk / prefix / suffix / helperText chrome — consumed by `schemaRenderer/form/renderField.tsx`'s 13-way field-type switch.
|
|
124
172
|
- `src/uploads/` — `UploadAdapter` interface + `localUpload({ root, urlPrefix })` adapter for FileUpload. Apps register via `Pilotiq.uploads({ adapter })`; route `POST {base}/_uploads` (multipart) hands the file off to the adapter and returns `{ ok, url }`. `_uploads` route validates `accept` + `maxSize` server-side from the field meta (re-checked even though the client also enforces, so a tampered client can't bypass). Adapter contract is storage-agnostic — disk / S3 / R2 / `@pilotiq/media` all implement the same shape. **`RenderContext.uploadUrl` vs `hasUploadAdapter` (2026-05-04 cont'd):** `uploadUrl` is *always* stamped by `pageData.uploadCtx` (so `FileUpload` can show a clear "no upload route configured" error when missed); the companion `hasUploadAdapter: true` is only set when `cfg.uploads` is present, and tells fields with *optional* upload affordances (e.g. `MarkdownField`'s `attachFiles` toolbar button) to hide themselves rather than render a broken control. `uploadCtx(ctx, cfg)` takes the full PilotiqConfig now (was: `basePath`).
|
|
125
173
|
- `src/plugins/themeEditor.ts` — `themeEditor()` plugin.
|
|
126
174
|
|
|
@@ -166,6 +214,14 @@ Deep notes for many of these also live in `~/.claude/projects/-Users-sleman-Proj
|
|
|
166
214
|
- Plugin authors expose factories: `panel.rightPanel(...)` from inside their `register(panel)` so consumers wire via `.plugins([…])`.
|
|
167
215
|
- Plan: `docs/plans/right-sidebar.md`. Guide: `docs/guide/right-sidebar.md`.
|
|
168
216
|
|
|
217
|
+
### Component slots
|
|
218
|
+
|
|
219
|
+
- `Pilotiq.components({ nav, header, footer })` registers build-time chrome-slot overrides. Three slots ship: `nav` (replaces default nav tree — `<SidebarMenu>` body in `SidebarLayout`, `<nav>` cluster in `TopbarLayout`), `header` (replaces the whole `<header>` chrome bar in both layouts — in `TopbarLayout` this subsumes the nav region, so setting `header` makes `nav` irrelevant for that layout), `footer` (mounts a `<footer>` element below the main content area in both layouts — separate from the `panels::footer` render hook, which keeps firing INSIDE the content area). The shape is open-ended so additions don't break this surface. `.components()` is order-independent and merges across calls (later call wins per slot; unset keys preserved).
|
|
220
|
+
- Build-time wiring mirrors `rightPanels` — the Vite plugin's `_components.ts` emitter walks `cfg.components` and stamps `componentSlotRegistry: { [slot]: Component }` parallel to `componentRegistry` + `rightPanelRegistry`. The component ref never travels over the wire; the auto-gen `+Layout.tsx` imports the registry and forwards it to `<AppShell componentSlotRegistry=…>`, which threads it through to the layout via `AppShellProps`.
|
|
221
|
+
- Render-hooks vs slots: render-hooks (`panels::sidebar.nav.start` / `panels::sidebar.nav.end`) *splice* around the nav region — they still fire whether the nav is the framework default OR a custom slot component, so plugins that just want to inject a header banner above the nav don't fight with consumers that swap the whole nav. **`header` is the exception** — render hooks rooted INSIDE the default header (`panels::topbar.start`, `panels::topbar.end`, `panels::user-menu.before`, `panels::user-menu.after`) do NOT fire when the header is replaced, since the container they splice into is gone. Plugin authors who care about preserving those splices inside a custom header can mount `<RenderHookSlot name="…" hooks={panel.renderHooks} />` themselves from within the custom header.
|
|
222
|
+
- Public surface: `NavComponentProps`, `HeaderComponentProps`, `FooterComponentProps`, `isNavItemActive` re-exported from `@pilotiq/pilotiq/react`. `NavItem` is also re-exported there for convenience (it already exists on the main barrel). Prop contracts: `nav` + `header` both receive `{ navigation: NavItem[]; basePath: string; currentPath?: string }` (header mirrors nav so a topbar-replacement header can render the nav inline without juggling a second slot); `footer` receives `{ basePath: string; currentPath?: string }` (minimal — footers rarely need the nav tree). For `header` replacements, the existing pilotiq chrome components (`SearchTrigger`, `ThemeToggle`, `NotificationBell`, `RightSidebarTrigger`, `UserMenu`) are exported from `@pilotiq/pilotiq/react` so consumers can drop them back in à la carte rather than reimplementing every control. Authoring example: a user-defined `MyCustomSidebar` lives in `app/Pilotiq/` next to the panel module, gets registered via `Pilotiq.make('Admin').components({ nav: MyCustomSidebar })`.
|
|
223
|
+
- **Authoring `.tsx` inside the panel module dir:** the Vite plugin jiti-loads the panel module at boot so it can harvest `cfg.components` into `_components.ts`. Two gotchas surfaced when this happens: (1) jiti needs JSX support enabled to parse `.tsx` — the plugin passes `jsx: { runtime: 'automatic' }` to `createJiti`, matching the playground tsconfig's `"jsx": "react-jsx"` (no per-file React import needed); (2) jiti's resolver falls through `.js` → `.ts` but NOT `.js` → `.tsx`, so the import statement in the panel module must use the literal `.tsx` extension (e.g. `import { MyCustomSidebar } from './MyCustomSidebar.tsx'`). `allowImportingTsExtensions: true` in the playground tsconfig keeps TS happy with this. The non-panel-module sibling pattern (a `.tsx` registered via `registerWidgetComponents` / `registerEntryComponents` from `+Layout.tsx`) sidesteps both — it's read by Vite, not jiti — but that pattern doesn't apply to component slots because the slot needs a real component ref at panel-build time, not a registry name.
|
|
224
|
+
|
|
169
225
|
---
|
|
170
226
|
|
|
171
227
|
## Theme system
|
package/dist/Pilotiq.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type { NavigationBadgeColor } from './Resource.js';
|
|
|
12
12
|
import type { RenderHookEntry, RenderHookFn, RenderHookName, RenderHookScope } from './RenderHook.js';
|
|
13
13
|
import type { NotificationActionHandler } from './notifications/types.js';
|
|
14
14
|
import { type RightPanelContribution } from './RightPanel.js';
|
|
15
|
+
import type { NavComponentProps, HeaderComponentProps, FooterComponentProps } from './react/component-slots.js';
|
|
15
16
|
export type PilotiqLayout = 'sidebar' | 'topbar';
|
|
16
17
|
/** Plugin interface for extending Pilotiq panels. */
|
|
17
18
|
export interface PilotiqPlugin {
|
|
@@ -234,6 +235,19 @@ export interface PilotiqConfig {
|
|
|
234
235
|
* closest to the page tree (innermost wrap).
|
|
235
236
|
*/
|
|
236
237
|
layoutProviders?: LayoutProviderComponent[];
|
|
238
|
+
/**
|
|
239
|
+
* Build-time component overrides for panel chrome slots. Registered
|
|
240
|
+
* via `Pilotiq.components({ nav })`. The Vite plugin harvests the
|
|
241
|
+
* actual React refs into `pages/(pilotiq)/_components.ts`; component
|
|
242
|
+
* refs never travel over the wire.
|
|
243
|
+
*
|
|
244
|
+
* v1 ships only the `nav` slot — full replacement of the sidebar's
|
|
245
|
+
* `<SidebarContent>` body and the topbar's `<nav>` element. Other
|
|
246
|
+
* slots (`header`, `footer`, …) will land when a concrete consumer
|
|
247
|
+
* asks; the shape is open-ended so additions don't break this
|
|
248
|
+
* surface.
|
|
249
|
+
*/
|
|
250
|
+
components?: ComponentSlots;
|
|
237
251
|
/**
|
|
238
252
|
* AI suggestion mode — controls what happens when an AI agent calls a
|
|
239
253
|
* write tool against a form field.
|
|
@@ -261,6 +275,41 @@ export type LayoutProviderComponent = React.ComponentType<{
|
|
|
261
275
|
children: React.ReactNode;
|
|
262
276
|
basePath?: string;
|
|
263
277
|
}>;
|
|
278
|
+
/**
|
|
279
|
+
* Chrome-slot overrides registered through `Pilotiq.components({ … })`.
|
|
280
|
+
*
|
|
281
|
+
* Three slots ship today:
|
|
282
|
+
*
|
|
283
|
+
* - `nav` — replaces the default nav tree (`<SidebarMenu>` body in
|
|
284
|
+
* `SidebarLayout`, the `<nav>` cluster in `TopbarLayout`). Surrounding
|
|
285
|
+
* chrome (branding header, render-hook splices, footer, sign-out
|
|
286
|
+
* menu) stays.
|
|
287
|
+
* - `header` — replaces the whole `<header>` chrome bar. In
|
|
288
|
+
* `SidebarLayout` that's the top bar with search / theme / bell /
|
|
289
|
+
* user menu; in `TopbarLayout` that's the whole top region including
|
|
290
|
+
* the brand cluster AND the nav (setting `header` makes `nav`
|
|
291
|
+
* irrelevant in `TopbarLayout`). Render hooks that splice INSIDE the
|
|
292
|
+
* default header (`panels::topbar.*`, `panels::user-menu.*`) don't
|
|
293
|
+
* fire when the header is replaced — the surrounding container is
|
|
294
|
+
* gone. The consumer reimplements the chrome controls they want
|
|
295
|
+
* (import `<SearchTrigger>`, `<ThemeToggle>`, `<NotificationBell>`,
|
|
296
|
+
* `<RightSidebarTrigger>`, `<UserMenu>` from `@pilotiq/pilotiq/react`).
|
|
297
|
+
* - `footer` — mounts a `<footer>` element BELOW the main content area
|
|
298
|
+
* in both layouts (outside the scroll region). Separate from the
|
|
299
|
+
* `panels::footer` render hook, which keeps firing inside the content
|
|
300
|
+
* area for per-page trailing chrome.
|
|
301
|
+
*
|
|
302
|
+
* The shape is open-ended so additional slots can land without a
|
|
303
|
+
* breaking change when a concrete consumer asks for them.
|
|
304
|
+
*/
|
|
305
|
+
export interface ComponentSlots {
|
|
306
|
+
/** Component rendered in place of the default nav tree. */
|
|
307
|
+
nav?: React.ComponentType<NavComponentProps>;
|
|
308
|
+
/** Component rendered in place of the default `<header>` chrome. */
|
|
309
|
+
header?: React.ComponentType<HeaderComponentProps>;
|
|
310
|
+
/** Component rendered as the panel footer, below the main content. */
|
|
311
|
+
footer?: React.ComponentType<FooterComponentProps>;
|
|
312
|
+
}
|
|
264
313
|
export declare class Pilotiq {
|
|
265
314
|
private config;
|
|
266
315
|
private installedPlugins;
|
|
@@ -578,6 +627,40 @@ export declare class Pilotiq {
|
|
|
578
627
|
layoutProviders(list: LayoutProviderComponent[]): this;
|
|
579
628
|
/** @internal — read by the Vite plugin's `_components.ts` emitter. */
|
|
580
629
|
getLayoutProviders(): readonly LayoutProviderComponent[];
|
|
630
|
+
/**
|
|
631
|
+
* Override one of pilotiq's built-in chrome slots with a custom React
|
|
632
|
+
* component. Calling twice merges — the latest registration wins per
|
|
633
|
+
* slot; unset keys preserve the prior value (so a plugin can override
|
|
634
|
+
* `nav` without clearing a host app's `footer`).
|
|
635
|
+
*
|
|
636
|
+
* Three slots ship today: `nav` (replaces the default nav tree),
|
|
637
|
+
* `header` (replaces the whole `<header>` chrome bar in both
|
|
638
|
+
* layouts — in `TopbarLayout` this subsumes the nav), and `footer`
|
|
639
|
+
* (mounts a `<footer>` below the main content area in both layouts).
|
|
640
|
+
* See {@link ComponentSlots} for the per-slot semantics and which
|
|
641
|
+
* render hooks compose vs. stop firing under each replacement.
|
|
642
|
+
*
|
|
643
|
+
* Component refs are harvested by the Vite plugin into
|
|
644
|
+
* `pages/(pilotiq)/_components.ts` — they never travel over the wire,
|
|
645
|
+
* so authoring inside the panel module (which is import-safe on both
|
|
646
|
+
* server and client) is the supported entry point.
|
|
647
|
+
*
|
|
648
|
+
* @example
|
|
649
|
+
* ```ts
|
|
650
|
+
* import { MyCustomSidebar } from './MyCustomSidebar.js'
|
|
651
|
+
*
|
|
652
|
+
* Pilotiq.make('Admin').components({ nav: MyCustomSidebar })
|
|
653
|
+
* ```
|
|
654
|
+
*
|
|
655
|
+
* The supplied component receives `{ navigation, basePath, currentPath }`
|
|
656
|
+
* — the same shape `panelInfo()` produces for the default renderers.
|
|
657
|
+
* Import `NavComponentProps` and `isNavItemActive` from
|
|
658
|
+
* `@pilotiq/pilotiq/react` to author a typed component that reuses
|
|
659
|
+
* the framework's longest-prefix active-link semantics.
|
|
660
|
+
*/
|
|
661
|
+
components(slots: ComponentSlots): this;
|
|
662
|
+
/** @internal — read by the Vite plugin's `_components.ts` emitter. */
|
|
663
|
+
getComponentSlots(): Readonly<ComponentSlots>;
|
|
581
664
|
/**
|
|
582
665
|
* Set the panel-wide AI suggestion mode.
|
|
583
666
|
*
|
package/dist/Pilotiq.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pilotiq.d.ts","sourceRoot":"","sources":["../src/Pilotiq.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"Pilotiq.d.ts","sourceRoot":"","sources":["../src/Pilotiq.ts"],"names":[],"mappings":"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"}
|
package/dist/Pilotiq.js
CHANGED
|
@@ -475,6 +475,45 @@ export class Pilotiq {
|
|
|
475
475
|
getLayoutProviders() {
|
|
476
476
|
return this.config.layoutProviders ?? [];
|
|
477
477
|
}
|
|
478
|
+
/**
|
|
479
|
+
* Override one of pilotiq's built-in chrome slots with a custom React
|
|
480
|
+
* component. Calling twice merges — the latest registration wins per
|
|
481
|
+
* slot; unset keys preserve the prior value (so a plugin can override
|
|
482
|
+
* `nav` without clearing a host app's `footer`).
|
|
483
|
+
*
|
|
484
|
+
* Three slots ship today: `nav` (replaces the default nav tree),
|
|
485
|
+
* `header` (replaces the whole `<header>` chrome bar in both
|
|
486
|
+
* layouts — in `TopbarLayout` this subsumes the nav), and `footer`
|
|
487
|
+
* (mounts a `<footer>` below the main content area in both layouts).
|
|
488
|
+
* See {@link ComponentSlots} for the per-slot semantics and which
|
|
489
|
+
* render hooks compose vs. stop firing under each replacement.
|
|
490
|
+
*
|
|
491
|
+
* Component refs are harvested by the Vite plugin into
|
|
492
|
+
* `pages/(pilotiq)/_components.ts` — they never travel over the wire,
|
|
493
|
+
* so authoring inside the panel module (which is import-safe on both
|
|
494
|
+
* server and client) is the supported entry point.
|
|
495
|
+
*
|
|
496
|
+
* @example
|
|
497
|
+
* ```ts
|
|
498
|
+
* import { MyCustomSidebar } from './MyCustomSidebar.js'
|
|
499
|
+
*
|
|
500
|
+
* Pilotiq.make('Admin').components({ nav: MyCustomSidebar })
|
|
501
|
+
* ```
|
|
502
|
+
*
|
|
503
|
+
* The supplied component receives `{ navigation, basePath, currentPath }`
|
|
504
|
+
* — the same shape `panelInfo()` produces for the default renderers.
|
|
505
|
+
* Import `NavComponentProps` and `isNavItemActive` from
|
|
506
|
+
* `@pilotiq/pilotiq/react` to author a typed component that reuses
|
|
507
|
+
* the framework's longest-prefix active-link semantics.
|
|
508
|
+
*/
|
|
509
|
+
components(slots) {
|
|
510
|
+
this.config.components = { ...(this.config.components ?? {}), ...slots };
|
|
511
|
+
return this;
|
|
512
|
+
}
|
|
513
|
+
/** @internal — read by the Vite plugin's `_components.ts` emitter. */
|
|
514
|
+
getComponentSlots() {
|
|
515
|
+
return this.config.components ?? {};
|
|
516
|
+
}
|
|
478
517
|
/**
|
|
479
518
|
* Set the panel-wide AI suggestion mode.
|
|
480
519
|
*
|
package/dist/Pilotiq.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pilotiq.js","sourceRoot":"","sources":["../src/Pilotiq.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAE1B,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"Pilotiq.js","sourceRoot":"","sources":["../src/Pilotiq.ts"],"names":[],"mappings":"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"}
|