@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,62 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { readStoredFlag, writeStoredFlag } from '../persistedState.js';
|
|
4
|
+
import { layoutClasses, resolveIcon } from './helpers.js';
|
|
5
|
+
// ─── Section (stateful when collapsible) ────────────────────
|
|
6
|
+
/**
|
|
7
|
+
* `Section` chrome with optional collapse + persisted open/closed state.
|
|
8
|
+
* Renders a card-style border, header (title / description / icon / badge
|
|
9
|
+
* / after-header actions), body, and the collapse toggle when enabled.
|
|
10
|
+
*
|
|
11
|
+
* `renderElement` is injected so the body can re-enter the main switch
|
|
12
|
+
* without creating a SchemaRenderer ↔ SectionRenderer import cycle.
|
|
13
|
+
*/
|
|
14
|
+
export function SectionRenderer({ el, index, renderElement, }) {
|
|
15
|
+
const title = el['title'] ? String(el['title']) : undefined;
|
|
16
|
+
const description = el['description'] ? String(el['description']) : undefined;
|
|
17
|
+
const iconName = el['icon'] ? String(el['icon']) : undefined;
|
|
18
|
+
const badge = el['badge'] ? String(el['badge']) : undefined;
|
|
19
|
+
const columns = Number(el['columns'] ?? 1);
|
|
20
|
+
const collapsible = Boolean(el['collapsible']);
|
|
21
|
+
const compact = Boolean(el['compact']);
|
|
22
|
+
const dense = Boolean(el['dense']);
|
|
23
|
+
const secondary = Boolean(el['secondary']);
|
|
24
|
+
const afterHeader = el['afterHeader'] ?? [];
|
|
25
|
+
const persist = Boolean(el['persistCollapsed']);
|
|
26
|
+
const persistKey = el['persistKey']
|
|
27
|
+
? `pilotiq.section.${String(el['persistKey'])}`
|
|
28
|
+
: title
|
|
29
|
+
? `pilotiq.section.${title.toLowerCase().replace(/\s+/g, '-')}`
|
|
30
|
+
: undefined;
|
|
31
|
+
const defaultCollapsed = Boolean(el['defaultCollapsed']);
|
|
32
|
+
const [collapsed, setCollapsed] = useState(defaultCollapsed);
|
|
33
|
+
// Plan #8 — persist open/closed state to localStorage. Hydration-safe:
|
|
34
|
+
// initial render uses `defaultCollapsed`; effect overrides from storage
|
|
35
|
+
// after mount so server + client first paint agree.
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (!persist || !persistKey)
|
|
38
|
+
return;
|
|
39
|
+
setCollapsed(readStoredFlag(persistKey, defaultCollapsed));
|
|
40
|
+
}, [persist, persistKey, defaultCollapsed]);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (!persist || !persistKey)
|
|
43
|
+
return;
|
|
44
|
+
writeStoredFlag(persistKey, collapsed);
|
|
45
|
+
}, [persist, persistKey, collapsed]);
|
|
46
|
+
// `dense` tightens the inner spacing between the section's children
|
|
47
|
+
// (orthogonal to `compact`, which trims the section's outer padding /
|
|
48
|
+
// heading). gap-2 ≈ 8px vs gap-4 ≈ 16px.
|
|
49
|
+
const innerGap = dense ? 'gap-2' : 'gap-4';
|
|
50
|
+
const gridClass = columns === 2 ? `grid grid-cols-2 ${innerGap}` : columns === 3 ? `grid grid-cols-3 ${innerGap}` : `flex flex-col ${innerGap}`;
|
|
51
|
+
const padding = compact ? 'p-3' : 'p-4';
|
|
52
|
+
const titleSize = compact ? 'text-sm' : 'text-base';
|
|
53
|
+
const Icon = resolveIcon(iconName);
|
|
54
|
+
// `secondary()` flips the section background to the muted token so it
|
|
55
|
+
// visually recedes beneath a primary section. The border thins to the
|
|
56
|
+
// same muted tone for the same reason — a sharp `border-input` line
|
|
57
|
+
// around a muted block looks like a typographic ledger rather than a
|
|
58
|
+
// grouping container.
|
|
59
|
+
const surfaceClass = secondary ? 'bg-muted/40 border-muted' : 'bg-card';
|
|
60
|
+
return (_jsxs("section", { className: `flex flex-col ${compact ? 'gap-2' : 'gap-3'} rounded-lg border ${surfaceClass} ${padding} ${layoutClasses(el)}`.trim(), children: [(title || description || collapsible || badge || afterHeader.length > 0) && (_jsxs("header", { className: "flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex items-start gap-2", children: [Icon && _jsx(Icon, { className: "size-4 mt-0.5 text-muted-foreground", "aria-hidden": "true" }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [title && _jsx("h3", { className: `${titleSize} font-semibold`, children: title }), badge && (_jsx("span", { className: "rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: badge }))] }), description && _jsx("p", { className: "text-xs text-muted-foreground mt-0.5", children: description })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [afterHeader.length > 0 && (_jsx("div", { className: "flex items-center gap-1", children: afterHeader.map((a, i) => renderElement(a, i)) })), collapsible && (_jsx("button", { type: "button", onClick: () => setCollapsed(c => !c), className: "text-xs text-muted-foreground hover:text-foreground", children: collapsed ? 'Expand' : 'Collapse' }))] })] })), !collapsed && el.children && el.children.length > 0 && (_jsx("div", { className: gridClass, children: el.children.map((c, i) => renderElement(c, i)) }))] }, index));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=SectionRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionRenderer.js","sourceRoot":"","sources":["../../../src/react/schemaRenderer/SectionRenderer.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAEzD,+DAA+D;AAE/D;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,EAAE,EACF,KAAK,EACL,aAAa,GAKd;IACC,MAAM,KAAK,GAAS,EAAE,CAAC,OAAO,CAAC,CAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACvE,MAAM,WAAW,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC7E,MAAM,QAAQ,GAAM,EAAE,CAAC,MAAM,CAAC,CAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACtE,MAAM,KAAK,GAAS,EAAE,CAAC,OAAO,CAAC,CAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACvE,MAAM,OAAO,GAAO,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAO,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAC1C,MAAM,KAAK,GAAS,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACxC,MAAM,SAAS,GAAK,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAC5C,MAAM,WAAW,GAAI,EAAE,CAAC,aAAa,CAA+B,IAAI,EAAE,CAAA;IAC1E,MAAM,OAAO,GAAO,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;IACnD,MAAM,UAAU,GAAI,EAAE,CAAC,YAAY,CAAC;QAClC,CAAC,CAAC,mBAAmB,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE;QAC/C,CAAC,CAAC,KAAK;YACL,CAAC,CAAC,mBAAmB,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;YAC/D,CAAC,CAAC,SAAS,CAAA;IAEf,MAAM,gBAAgB,GAAG,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;IACxD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IAE5D,uEAAuE;IACvE,wEAAwE;IACxE,oDAAoD;IACpD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU;YAAE,OAAM;QACnC,YAAY,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC5D,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU;YAAE,OAAM;QACnC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IACxC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAA;IAEpC,oEAAoE;IACpE,sEAAsE;IACtE,yCAAyC;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;IAC1C,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CAAC,CAAC,iBAAiB,QAAQ,EAAE,CAAA;IAC/I,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAA;IACnD,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IAElC,sEAAsE;IACtE,sEAAsE;IACtE,oEAAoE;IACpE,qEAAqE;IACrE,sBAAsB;IACtB,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAAA;IAEvE,OAAO,CACL,mBAEE,SAAS,EAAE,iBAAiB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,sBAAsB,YAAY,IAAI,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,aAEjI,CAAC,KAAK,IAAI,WAAW,IAAI,WAAW,IAAI,KAAK,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAC3E,kBAAQ,SAAS,EAAC,wCAAwC,aACxD,eAAK,SAAS,EAAC,wBAAwB,aACpC,IAAI,IAAI,KAAC,IAAI,IAAC,SAAS,EAAC,qCAAqC,iBAAa,MAAM,GAAG,EACpF,0BACE,eAAK,SAAS,EAAC,yBAAyB,aACrC,KAAK,IAAI,aAAI,SAAS,EAAE,GAAG,SAAS,gBAAgB,YAAG,KAAK,GAAM,EAClE,KAAK,IAAI,CACR,eAAM,SAAS,EAAC,yGAAyG,YACtH,KAAK,GACD,CACR,IACG,EACL,WAAW,IAAI,YAAG,SAAS,EAAC,sCAAsC,YAAE,WAAW,GAAK,IACjF,IACF,EACN,eAAK,SAAS,EAAC,yBAAyB,aACrC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,cAAK,SAAS,EAAC,yBAAyB,YACrC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC3C,CACP,EACA,WAAW,IAAI,CACd,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EACpC,SAAS,EAAC,qDAAqD,YAE9D,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAC3B,CACV,IACG,IACC,CACV,EACA,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtD,cAAK,SAAS,EAAE,SAAS,YACtB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAC3C,CACP,KAzCI,KAAK,CA0CF,CACX,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ElementMeta } from '../../schema/Element.js';
|
|
3
|
+
/** Stateless leaf renderers — every element here is a pure function of
|
|
4
|
+
* its meta. Cases that own children defer back to the caller's
|
|
5
|
+
* `renderElement` via `deps.renderElement`. Cases that mount Action
|
|
6
|
+
* triggers in header / footer slots defer to `deps.renderActionLike`.
|
|
7
|
+
*
|
|
8
|
+
* `renderSimpleElement` returns `null` only when the type is one of the
|
|
9
|
+
* handled leaves and resolves to no output (e.g. `icon` with no
|
|
10
|
+
* registered name). For unknown types it returns the sentinel
|
|
11
|
+
* `undefined` so the caller falls through to the rest of its switch. */
|
|
12
|
+
export interface SimpleElementDeps {
|
|
13
|
+
/** Recurse into a child element. Injected to avoid the cycle with
|
|
14
|
+
* SchemaRenderer's main dispatch. */
|
|
15
|
+
renderElement: (el: ElementMeta, index: number) => React.ReactNode;
|
|
16
|
+
/** Render an action / actionGroup / slotComponent meta as a button or
|
|
17
|
+
* trigger. Used by `heading` and `emptyState` for their header /
|
|
18
|
+
* footer action slots. */
|
|
19
|
+
renderActionLike: (el: ElementMeta, index: number) => React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
/** Dispatch helper for stateless leaf + layout-primitive element types.
|
|
22
|
+
* Returns `undefined` when the type isn't handled here, letting the
|
|
23
|
+
* caller fall through to its remaining switch arms. */
|
|
24
|
+
export declare function renderSimpleElement(el: ElementMeta, index: number, deps: SimpleElementDeps): React.ReactNode | undefined;
|
|
25
|
+
//# sourceMappingURL=SimpleElements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimpleElements.d.ts","sourceRoot":"","sources":["../../../src/react/schemaRenderer/SimpleElements.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAU1D;;;;;;;;yEAQyE;AAEzE,MAAM,WAAW,iBAAiB;IAChC;0CACsC;IACtC,aAAa,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IAClE;;+BAE2B;IAC3B,gBAAgB,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;CACtE;AAmCD;;wDAEwD;AACxD,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,iBAAiB,GACtB,KAAK,CAAC,SAAS,GAAG,SAAS,CA0O7B"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { BADGE_COLOR_CLASSES, COLUMN_COLOR_CLASSES, TEXT_COLOR_CLASSES, TEXT_SIZE_CLASSES, TEXT_WEIGHT_CLASSES, } from './constants.js';
|
|
3
|
+
import { layoutClasses, renderChildren, resolveIcon } from './helpers.js';
|
|
4
|
+
/** Render the `text` element. Hot path — pulled out so the `case 'text'`
|
|
5
|
+
* branch in the main switch stays a one-liner. */
|
|
6
|
+
function renderText(el, index) {
|
|
7
|
+
const content = String(el['content'] ?? '');
|
|
8
|
+
const color = el['color'] ? String(el['color']) : undefined;
|
|
9
|
+
const size = el['size'] ? String(el['size']) : undefined;
|
|
10
|
+
const weight = el['weight'] ? String(el['weight']) : undefined;
|
|
11
|
+
const isBadge = el['badge'] === true;
|
|
12
|
+
if (isBadge) {
|
|
13
|
+
const badgeKey = el['badgeColor'] ? String(el['badgeColor']) : 'gray';
|
|
14
|
+
const cls = BADGE_COLOR_CLASSES[badgeKey] ?? BADGE_COLOR_CLASSES['gray'];
|
|
15
|
+
return (_jsx("span", { className: `inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${cls}`, children: content }, index));
|
|
16
|
+
}
|
|
17
|
+
// Defaults match the previous bare `<p>` for back-compat: text-sm + muted.
|
|
18
|
+
const sizeCls = size ? (TEXT_SIZE_CLASSES[size] ?? '') : 'text-sm';
|
|
19
|
+
const colorCls = color ? (TEXT_COLOR_CLASSES[color] ?? '') : 'text-muted-foreground';
|
|
20
|
+
const weightCls = weight ? (TEXT_WEIGHT_CLASSES[weight] ?? '') : '';
|
|
21
|
+
return (_jsx("p", { className: `${sizeCls} ${colorCls} ${weightCls}`.trim(), children: content }, index));
|
|
22
|
+
}
|
|
23
|
+
/** Dispatch helper for stateless leaf + layout-primitive element types.
|
|
24
|
+
* Returns `undefined` when the type isn't handled here, letting the
|
|
25
|
+
* caller fall through to its remaining switch arms. */
|
|
26
|
+
export function renderSimpleElement(el, index, deps) {
|
|
27
|
+
const { renderElement, renderActionLike } = deps;
|
|
28
|
+
switch (el.type) {
|
|
29
|
+
case 'text':
|
|
30
|
+
return renderText(el, index);
|
|
31
|
+
case 'image': {
|
|
32
|
+
const url = String(el['url'] ?? '');
|
|
33
|
+
const alt = String(el['alt'] ?? '');
|
|
34
|
+
const width = el['width'];
|
|
35
|
+
const height = el['height'];
|
|
36
|
+
const shape = String(el['shape'] ?? 'square');
|
|
37
|
+
const shapeCls = shape === 'circle' ? 'rounded-full' : shape === 'rounded' ? 'rounded-md' : '';
|
|
38
|
+
return (_jsx("img", { src: url, alt: alt, ...(width !== undefined ? { width } : {}), ...(height !== undefined ? { height } : {}), className: `inline-block object-cover ${shapeCls}` }, index));
|
|
39
|
+
}
|
|
40
|
+
case 'icon': {
|
|
41
|
+
const name = el['name'] ? String(el['name']) : undefined;
|
|
42
|
+
const size = el['size'] ?? 16;
|
|
43
|
+
const color = String(el['color'] ?? 'default');
|
|
44
|
+
const label = el['label'] ? String(el['label']) : undefined;
|
|
45
|
+
const Cmp = resolveIcon(name);
|
|
46
|
+
if (!Cmp)
|
|
47
|
+
return null;
|
|
48
|
+
const colorClass = COLUMN_COLOR_CLASSES[color] ?? '';
|
|
49
|
+
return (_jsx(Cmp, { className: `inline ${colorClass}`, ...(label ? { 'aria-label': label } : { 'aria-hidden': true }), style: { width: size, height: size } }, index));
|
|
50
|
+
}
|
|
51
|
+
case 'markdown':
|
|
52
|
+
case 'html': {
|
|
53
|
+
const html = String(el['html'] ?? '');
|
|
54
|
+
const prose = el['prose'] !== false;
|
|
55
|
+
const size = el['size'] ? String(el['size']) : undefined;
|
|
56
|
+
const proseCls = prose
|
|
57
|
+
? `prose max-w-none ${size === 'sm' ? 'prose-sm' : size === 'lg' ? 'prose-lg' : ''}`.trim()
|
|
58
|
+
: '';
|
|
59
|
+
return (_jsx("div", { className: proseCls || undefined, dangerouslySetInnerHTML: { __html: html } }, index));
|
|
60
|
+
}
|
|
61
|
+
case 'heading': {
|
|
62
|
+
const level = el['level'] ?? 1;
|
|
63
|
+
const content = String(el['content'] ?? '');
|
|
64
|
+
const description = el['description'] ? String(el['description']) : undefined;
|
|
65
|
+
const headerActions = (el.children ?? []).filter(c => c.type === 'action' || c.type === 'actionGroup' || c.type === 'slotComponent');
|
|
66
|
+
const Tag = level === 1 ? 'h1' : level === 2 ? 'h2' : 'h3';
|
|
67
|
+
const sizes = { 1: 'text-2xl', 2: 'text-xl', 3: 'text-lg' };
|
|
68
|
+
const titleBlock = (_jsxs("div", { children: [_jsx(Tag, { className: `${sizes[level]} font-bold tracking-tight`, children: content }), description && (_jsx("p", { className: "text-sm text-muted-foreground mt-1", children: description }))] }));
|
|
69
|
+
if (headerActions.length === 0) {
|
|
70
|
+
return _jsx("div", { children: titleBlock }, index);
|
|
71
|
+
}
|
|
72
|
+
return (_jsxs("div", { className: "flex items-start justify-between gap-4", children: [titleBlock, _jsx("div", { className: "flex items-center gap-2 shrink-0", children: headerActions.map((a, i) => renderActionLike(a, i)) })] }, index));
|
|
73
|
+
}
|
|
74
|
+
case 'emptyState': {
|
|
75
|
+
const heading = String(el['heading'] ?? '');
|
|
76
|
+
const description = el['description'] ? String(el['description']) : undefined;
|
|
77
|
+
const iconName = el['icon'] ? String(el['icon']) : undefined;
|
|
78
|
+
const contained = el['contained'] !== false;
|
|
79
|
+
const Icon = iconName ? resolveIcon(iconName) : undefined;
|
|
80
|
+
const footer = (el.children ?? []).filter(c => c.type === 'action' || c.type === 'actionGroup' || c.type === 'slotComponent');
|
|
81
|
+
const wrapper = contained
|
|
82
|
+
? 'rounded-lg border border-border bg-card text-card-foreground py-12 px-6'
|
|
83
|
+
: 'py-8';
|
|
84
|
+
return (_jsxs("div", { className: `${wrapper} flex flex-col items-center text-center gap-3`, children: [Icon && _jsx(Icon, { className: "size-10 text-muted-foreground", "aria-hidden": "true" }), _jsx("h3", { className: "text-lg font-semibold", children: heading }), description && _jsx("p", { className: "text-sm text-muted-foreground max-w-md", children: description }), footer.length > 0 && (_jsx("div", { className: "flex items-center gap-2 mt-2", children: footer.map((a, i) => renderActionLike(a, i)) }))] }, index));
|
|
85
|
+
}
|
|
86
|
+
case 'divider': {
|
|
87
|
+
const label = el['label'] ? String(el['label']) : undefined;
|
|
88
|
+
return label
|
|
89
|
+
? _jsxs("div", { className: "relative py-2", children: [_jsx("div", { className: "absolute inset-0 flex items-center", children: _jsx("span", { className: "w-full border-t border-border" }) }), _jsx("div", { className: "relative flex justify-center", children: _jsx("span", { className: "bg-background px-2 text-xs text-muted-foreground", children: label }) })] }, index)
|
|
90
|
+
: _jsx("hr", { className: "border-border" }, index);
|
|
91
|
+
}
|
|
92
|
+
case 'unorderedList': {
|
|
93
|
+
const items = el['items'] ?? [];
|
|
94
|
+
const color = el['color'] ? String(el['color']) : undefined;
|
|
95
|
+
const size = el['size'] ? String(el['size']) : undefined;
|
|
96
|
+
const weight = el['weight'] ? String(el['weight']) : undefined;
|
|
97
|
+
const sizeCls = size ? (TEXT_SIZE_CLASSES[size] ?? '') : 'text-sm';
|
|
98
|
+
const colorCls = color ? (TEXT_COLOR_CLASSES[color] ?? '') : '';
|
|
99
|
+
const weightCls = weight ? (TEXT_WEIGHT_CLASSES[weight] ?? '') : '';
|
|
100
|
+
return (_jsx("ul", { className: `list-disc list-inside space-y-1 ${sizeCls} ${colorCls} ${weightCls}`.trim(), children: items.map((item, i) => (_jsx("li", { children: String(item) }, i))) }, index));
|
|
101
|
+
}
|
|
102
|
+
case 'card': {
|
|
103
|
+
const title = el['title'] ? String(el['title']) : undefined;
|
|
104
|
+
const description = el['description'] ? String(el['description']) : undefined;
|
|
105
|
+
return (_jsxs("div", { className: "rounded-xl border bg-card p-6 shadow-sm", children: [title && _jsx("h3", { className: "font-semibold mb-1", children: title }), description && _jsx("p", { className: "text-sm text-muted-foreground mb-4", children: description }), renderChildren(el.children, 'gap-4', renderElement)] }, index));
|
|
106
|
+
}
|
|
107
|
+
case 'grid': {
|
|
108
|
+
const columns = Math.max(1, Math.min(12, Number(el['columns'] ?? 2)));
|
|
109
|
+
const gapPx = el['gap'] !== undefined ? `${Number(el['gap'])}px` : undefined;
|
|
110
|
+
return (_jsx("div", { className: `grid gap-4 ${layoutClasses(el)}`.trim(), style: {
|
|
111
|
+
gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,
|
|
112
|
+
...(gapPx ? { gap: gapPx } : {}),
|
|
113
|
+
}, children: (el.children ?? []).map((c, i) => renderElement(c, i)) }, index));
|
|
114
|
+
}
|
|
115
|
+
case 'group': {
|
|
116
|
+
const layout = layoutClasses(el);
|
|
117
|
+
return (_jsx("div", { className: layout || undefined, children: renderChildren(el.children, 'gap-4', renderElement) }, index));
|
|
118
|
+
}
|
|
119
|
+
case 'split': {
|
|
120
|
+
const from = el['from'] === 'left' ? 'left' : 'right';
|
|
121
|
+
const gap = Math.max(0, Math.min(12, Number(el['gap'] ?? 6)));
|
|
122
|
+
const children = el.children ?? [];
|
|
123
|
+
// Find the explicit aside child first; fall back to "second child is
|
|
124
|
+
// aside" so terse Split.make().schema([main, aside]) still works.
|
|
125
|
+
let asideIdx = children.findIndex(c => c['aside'] === true);
|
|
126
|
+
if (asideIdx === -1 && children.length >= 2)
|
|
127
|
+
asideIdx = 1;
|
|
128
|
+
const mainChildren = children.filter((_, i) => i !== asideIdx);
|
|
129
|
+
const asideChild = asideIdx >= 0 ? children[asideIdx] : undefined;
|
|
130
|
+
const orderClasses = from === 'left'
|
|
131
|
+
? { aside: '@md:order-first', main: '@md:order-last' }
|
|
132
|
+
: { aside: '@md:order-last', main: '@md:order-first' };
|
|
133
|
+
return (_jsxs("div", { className: `@container flex flex-col @md:flex-row gap-${gap} ${layoutClasses(el)}`.trim(), children: [_jsx("div", { className: `flex flex-col gap-4 flex-1 min-w-0 ${orderClasses.main}`, children: mainChildren.map((c, i) => renderElement(c, i)) }), asideChild && (_jsx("aside", { className: `flex flex-col gap-4 @md:w-80 @md:shrink-0 ${orderClasses.aside}`, children: renderElement(asideChild, asideIdx) }))] }, index));
|
|
134
|
+
}
|
|
135
|
+
case 'fieldset': {
|
|
136
|
+
const label = String(el['label'] ?? '');
|
|
137
|
+
const columns = Math.max(1, Math.min(3, Number(el['columns'] ?? 1)));
|
|
138
|
+
const gridStyle = columns > 1
|
|
139
|
+
? { display: 'grid', gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`, gap: '1rem' }
|
|
140
|
+
: undefined;
|
|
141
|
+
return (_jsxs("fieldset", { className: `rounded-md border border-border px-4 pt-3 pb-4 ${layoutClasses(el)}`.trim(), children: [label && _jsx("legend", { className: "px-1 text-xs font-medium text-muted-foreground", children: label }), _jsx("div", { className: columns === 1 ? 'flex flex-col gap-3' : undefined, style: gridStyle, children: (el.children ?? []).map((c, i) => renderElement(c, i)) })] }, index));
|
|
142
|
+
}
|
|
143
|
+
default:
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=SimpleElements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimpleElements.js","sourceRoot":"","sources":["../../../src/react/schemaRenderer/SimpleElements.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ElementMeta } from '../../schema/Element.js';
|
|
3
|
+
/**
|
|
4
|
+
* Top-level `Tabs` element. Variants:
|
|
5
|
+
* - `'pills'` (default) — uses the shadcn Tabs primitive's stock chrome.
|
|
6
|
+
* - `'underline'` — flat tab strip with a bottom border and per-tab
|
|
7
|
+
* underline on selection.
|
|
8
|
+
*
|
|
9
|
+
* `renderElement` is injected for the body content of each tab so the
|
|
10
|
+
* renderer can recurse without re-importing the main switch.
|
|
11
|
+
*/
|
|
12
|
+
export declare function TabsRenderer({ el, index, renderElement, }: {
|
|
13
|
+
el: ElementMeta;
|
|
14
|
+
index: number;
|
|
15
|
+
renderElement: (el: ElementMeta, index: number) => React.ReactNode;
|
|
16
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
17
|
+
//# sourceMappingURL=TabsRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsRenderer.d.ts","sourceRoot":"","sources":["../../../src/react/schemaRenderer/TabsRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAI1D;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,aAAa,GACd,EAAE;IACD,EAAE,EAAa,WAAW,CAAA;IAC1B,KAAK,EAAU,MAAM,CAAA;IACrB,aAAa,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;CACnE,kDAuCA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/tabs.js';
|
|
3
|
+
import { renderChildren } from './helpers.js';
|
|
4
|
+
/**
|
|
5
|
+
* Top-level `Tabs` element. Variants:
|
|
6
|
+
* - `'pills'` (default) — uses the shadcn Tabs primitive's stock chrome.
|
|
7
|
+
* - `'underline'` — flat tab strip with a bottom border and per-tab
|
|
8
|
+
* underline on selection.
|
|
9
|
+
*
|
|
10
|
+
* `renderElement` is injected for the body content of each tab so the
|
|
11
|
+
* renderer can recurse without re-importing the main switch.
|
|
12
|
+
*/
|
|
13
|
+
export function TabsRenderer({ el, index, renderElement, }) {
|
|
14
|
+
const tabs = (el.children ?? []).filter(c => c.type === 'tab');
|
|
15
|
+
if (tabs.length === 0)
|
|
16
|
+
return null;
|
|
17
|
+
const variant = el['variant'] === 'underline' ? 'underline' : 'pills';
|
|
18
|
+
const tabValues = tabs.map((_, i) => `tab-${i}`);
|
|
19
|
+
const defaultValue = tabValues[0];
|
|
20
|
+
// Underline variant overrides the primitive's pill chrome with a bottom
|
|
21
|
+
// border on the list and per-trigger underline-on-selected. No
|
|
22
|
+
// `<TabsIndicator>` is rendered, so there's no sliding pill to hide.
|
|
23
|
+
const listClass = variant === 'underline'
|
|
24
|
+
? 'relative flex h-auto w-fit justify-start gap-0 rounded-none bg-transparent p-0 text-muted-foreground border-b border-border'
|
|
25
|
+
: undefined;
|
|
26
|
+
const triggerClass = variant === 'underline'
|
|
27
|
+
? 'rounded-none border-0 border-b-2 border-transparent bg-transparent px-4 py-2 text-sm font-medium -mb-px data-[active]:border-primary data-[active]:text-foreground data-[active]:bg-transparent data-[active]:shadow-none'
|
|
28
|
+
: undefined;
|
|
29
|
+
return (_jsxs(Tabs, { defaultValue: defaultValue, children: [_jsx(TabsList, { className: listClass, children: tabs.map((tab, i) => (_jsxs(TabsTrigger, { value: tabValues[i], className: triggerClass, children: [String(tab['label'] ?? ''), tab['badge'] ? (_jsx("span", { className: "ml-2 text-xs px-1.5 py-0.5 rounded-full bg-muted", children: String(tab['badge']) })) : null] }, i))) }), tabs.map((tab, i) => (_jsx(TabsContent, { value: tabValues[i], className: "pt-2", children: renderChildren(tab['children'], 'gap-4', renderElement) }, i)))] }, index));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=TabsRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabsRenderer.js","sourceRoot":"","sources":["../../../src/react/schemaRenderer/TabsRenderer.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,EAAE,EACF,KAAK,EACL,aAAa,GAKd;IACC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAA;IAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAElC,MAAM,OAAO,GAAK,EAAE,CAAC,SAAS,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAA;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAChD,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAE,CAAA;IAElC,wEAAwE;IACxE,+DAA+D;IAC/D,qEAAqE;IACrE,MAAM,SAAS,GAAG,OAAO,KAAK,WAAW;QACvC,CAAC,CAAC,6HAA6H;QAC/H,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,YAAY,GAAG,OAAO,KAAK,WAAW;QAC1C,CAAC,CAAC,2NAA2N;QAC7N,CAAC,CAAC,SAAS,CAAA;IAEb,OAAO,CACL,MAAC,IAAI,IAAa,YAAY,EAAE,YAAY,aAC1C,KAAC,QAAQ,IAAC,SAAS,EAAE,SAAS,YAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,MAAC,WAAW,IAAS,KAAK,EAAE,SAAS,CAAC,CAAC,CAAE,EAAE,SAAS,EAAE,YAAY,aAC/D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAC1B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACd,eAAM,SAAS,EAAC,kDAAkD,YAC/D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAChB,CACR,CAAC,CAAC,CAAC,IAAI,KANQ,CAAC,CAOL,CACf,CAAC,GACO,EACV,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,KAAC,WAAW,IAAS,KAAK,EAAE,SAAS,CAAC,CAAC,CAAE,EAAE,SAAS,EAAC,MAAM,YACxD,cAAc,CAAC,GAAG,CAAC,UAAU,CAA8B,EAAE,OAAO,EAAE,aAAa,CAAC,IADrE,CAAC,CAEL,CACf,CAAC,KAjBO,KAAK,CAkBT,CACR,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ElementMeta } from '../../schema/Element.js';
|
|
3
|
+
/**
|
|
4
|
+
* Deps injected from the top-level dispatch so the wizard body can
|
|
5
|
+
* recurse into the main element renderer without creating a cycle
|
|
6
|
+
* with SchemaRenderer.tsx.
|
|
7
|
+
*/
|
|
8
|
+
export interface WizardRendererDeps {
|
|
9
|
+
renderElement: (el: ElementMeta, index: number) => React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Multi-step form layout. Tracks active step in `useState`, optionally
|
|
13
|
+
* persisted to localStorage and/or the URL query string. On Next click,
|
|
14
|
+
* POSTs `{ step, values }` to the form's `wizardUrl` (stamped by the
|
|
15
|
+
* route handler when the form has a Wizard descendant). 200 → advance;
|
|
16
|
+
* 422 → stamp inline errors; absent `wizardUrl` → advance immediately
|
|
17
|
+
* (no validation).
|
|
18
|
+
*
|
|
19
|
+
* Inactive steps render hidden (display:none) rather than unmounted so
|
|
20
|
+
* controlled inputs preserve their values across step transitions and
|
|
21
|
+
* cross-step `$get` works on the resolved meta.
|
|
22
|
+
*
|
|
23
|
+
* Nav buttons honor `Wizard.submitAction() / nextAction() / previousAction()`
|
|
24
|
+
* — chrome (label / icon / color / size / outlined / iconOnly / tooltip /
|
|
25
|
+
* disabled rules) carries through to the rendered button while the click
|
|
26
|
+
* behavior stays hardwired (advance / recede / submit-form). Bare wizards
|
|
27
|
+
* keep the built-in defaults.
|
|
28
|
+
*/
|
|
29
|
+
export declare function WizardRenderer({ el, index, deps, }: {
|
|
30
|
+
el: ElementMeta;
|
|
31
|
+
index: number;
|
|
32
|
+
deps: WizardRendererDeps;
|
|
33
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
//# sourceMappingURL=WizardRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WizardRenderer.d.ts","sourceRoot":"","sources":["../../../src/react/schemaRenderer/WizardRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAQ1D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;CACnE;AAqCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,EAAE,EACF,KAAK,EACL,IAAI,GACL,EAAE;IACD,EAAE,EAAK,WAAW,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAG,kBAAkB,CAAA;CAC1B,2CA+LA"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { useFormState } from '../FormStateContext.js';
|
|
4
|
+
import { readStoredString, writeStoredString } from '../persistedState.js';
|
|
5
|
+
import { layoutClasses, resolveIcon, withTooltip } from './helpers.js';
|
|
6
|
+
import { actionButtonClass, renderActionBadge, renderActionIcon } from './action/buttons.js';
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the initial active step for `WizardRenderer`. Priority:
|
|
9
|
+
* 1. URL `?<queryKey>=N` (1-based — wizards expose human-friendly indexes
|
|
10
|
+
* when `Wizard.persistStepInQueryString()` is enabled).
|
|
11
|
+
* 2. `localStorage[<storageKey>]` (0-based, set by the persist effect).
|
|
12
|
+
* 3. `startOnStep` configured on the Wizard.
|
|
13
|
+
*
|
|
14
|
+
* SSR-safe: returns `startOnStep` when `window` is undefined.
|
|
15
|
+
*/
|
|
16
|
+
function readInitialWizardStep(total, startOnStep, storageKey, queryKey) {
|
|
17
|
+
if (typeof window === 'undefined')
|
|
18
|
+
return startOnStep;
|
|
19
|
+
if (queryKey) {
|
|
20
|
+
try {
|
|
21
|
+
const raw = new URL(window.location.href).searchParams.get(queryKey);
|
|
22
|
+
if (raw !== null && raw !== '') {
|
|
23
|
+
const n = Number(raw) - 1;
|
|
24
|
+
if (Number.isFinite(n) && n >= 0 && n < total)
|
|
25
|
+
return n;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch { /* ignore */ }
|
|
29
|
+
}
|
|
30
|
+
if (storageKey) {
|
|
31
|
+
const stored = readStoredString(storageKey);
|
|
32
|
+
if (stored !== null) {
|
|
33
|
+
const n = Number(stored);
|
|
34
|
+
if (Number.isFinite(n) && n >= 0 && n < total)
|
|
35
|
+
return n;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return startOnStep;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Multi-step form layout. Tracks active step in `useState`, optionally
|
|
42
|
+
* persisted to localStorage and/or the URL query string. On Next click,
|
|
43
|
+
* POSTs `{ step, values }` to the form's `wizardUrl` (stamped by the
|
|
44
|
+
* route handler when the form has a Wizard descendant). 200 → advance;
|
|
45
|
+
* 422 → stamp inline errors; absent `wizardUrl` → advance immediately
|
|
46
|
+
* (no validation).
|
|
47
|
+
*
|
|
48
|
+
* Inactive steps render hidden (display:none) rather than unmounted so
|
|
49
|
+
* controlled inputs preserve their values across step transitions and
|
|
50
|
+
* cross-step `$get` works on the resolved meta.
|
|
51
|
+
*
|
|
52
|
+
* Nav buttons honor `Wizard.submitAction() / nextAction() / previousAction()`
|
|
53
|
+
* — chrome (label / icon / color / size / outlined / iconOnly / tooltip /
|
|
54
|
+
* disabled rules) carries through to the rendered button while the click
|
|
55
|
+
* behavior stays hardwired (advance / recede / submit-form). Bare wizards
|
|
56
|
+
* keep the built-in defaults.
|
|
57
|
+
*/
|
|
58
|
+
export function WizardRenderer({ el, index, deps, }) {
|
|
59
|
+
const { renderElement } = deps;
|
|
60
|
+
const formState = useFormState();
|
|
61
|
+
const formId = formState?.formMeta['formId'] ? String(formState.formMeta['formId']) : undefined;
|
|
62
|
+
const wizardUrl = formState?.formMeta['wizardUrl'] ? String(formState.formMeta['wizardUrl']) : undefined;
|
|
63
|
+
const steps = (el.children ?? []).filter(c => c.type === 'step');
|
|
64
|
+
const skippable = Boolean(el['skippable']);
|
|
65
|
+
const startOnStep = Math.max(0, Math.min(Math.max(0, steps.length - 1), Number(el['startOnStep'] ?? 0)));
|
|
66
|
+
const persist = el['persist'] !== false;
|
|
67
|
+
const storageKey = persist && formId ? `pilotiq.wizard.${formId}.step` : undefined;
|
|
68
|
+
const queryKey = typeof el['persistStepInQueryString'] === 'string'
|
|
69
|
+
? String(el['persistStepInQueryString'])
|
|
70
|
+
: undefined;
|
|
71
|
+
const submitActionMeta = el['submitAction'];
|
|
72
|
+
const nextActionMeta = el['nextAction'];
|
|
73
|
+
const previousActionMeta = el['previousAction'];
|
|
74
|
+
// Initial-step resolution priority: URL (?<key>=N, 1-based) > localStorage >
|
|
75
|
+
// startOnStep. URL wins on first paint so deep links land on the right step
|
|
76
|
+
// before localStorage can override. Lazy initializer — resolution runs once.
|
|
77
|
+
const [active, setActive] = useState(() => readInitialWizardStep(steps.length, startOnStep, storageKey, queryKey));
|
|
78
|
+
const [advancing, setAdvancing] = useState(false);
|
|
79
|
+
const [advanceError, setAdvanceError] = useState(null);
|
|
80
|
+
// Persist active step changes to localStorage (when enabled).
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (!storageKey)
|
|
83
|
+
return;
|
|
84
|
+
writeStoredString(storageKey, String(active));
|
|
85
|
+
}, [storageKey, active]);
|
|
86
|
+
// Mirror active step to the URL via replaceState — purely client-side state
|
|
87
|
+
// sync, no SPA re-fetch. 1-based externally; cleared when on the first step
|
|
88
|
+
// so bare URLs don't grow ?step=1 noise.
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (!queryKey)
|
|
91
|
+
return;
|
|
92
|
+
if (typeof window === 'undefined')
|
|
93
|
+
return;
|
|
94
|
+
try {
|
|
95
|
+
const url = new URL(window.location.href);
|
|
96
|
+
if (active === 0)
|
|
97
|
+
url.searchParams.delete(queryKey);
|
|
98
|
+
else
|
|
99
|
+
url.searchParams.set(queryKey, String(active + 1));
|
|
100
|
+
window.history.replaceState(window.history.state, '', url.toString());
|
|
101
|
+
}
|
|
102
|
+
catch { /* ignore */ }
|
|
103
|
+
}, [queryKey, active]);
|
|
104
|
+
if (steps.length === 0) {
|
|
105
|
+
return (_jsx("div", { className: "rounded-lg border border-dashed p-8 text-center text-sm text-muted-foreground", children: "No steps configured." }, index));
|
|
106
|
+
}
|
|
107
|
+
const isLast = active === steps.length - 1;
|
|
108
|
+
const isFirst = active === 0;
|
|
109
|
+
const advance = async (target) => {
|
|
110
|
+
setAdvanceError(null);
|
|
111
|
+
if (!wizardUrl) {
|
|
112
|
+
setActive(target);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
setAdvancing(true);
|
|
116
|
+
try {
|
|
117
|
+
const values = formState?.values ?? {};
|
|
118
|
+
// Validate intermediate steps in order when jumping ahead.
|
|
119
|
+
const path = target > active
|
|
120
|
+
? Array.from({ length: target - active }, (_, k) => active + k)
|
|
121
|
+
: [active]; // jumping back is unconstrained
|
|
122
|
+
let landed = active;
|
|
123
|
+
for (const stepIdx of path) {
|
|
124
|
+
const res = await fetch(wizardUrl, {
|
|
125
|
+
method: 'POST',
|
|
126
|
+
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
|
|
127
|
+
body: JSON.stringify({ step: stepIdx, values }),
|
|
128
|
+
});
|
|
129
|
+
if (res.status === 422) {
|
|
130
|
+
const data = await res.json().catch(() => ({}));
|
|
131
|
+
const errors = (data?.errors ?? {});
|
|
132
|
+
if (formState?.applyErrors)
|
|
133
|
+
formState.applyErrors(errors);
|
|
134
|
+
landed = stepIdx;
|
|
135
|
+
setAdvanceError('Please fix the highlighted fields.');
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
if (!res.ok) {
|
|
139
|
+
setAdvanceError('Step validation failed.');
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
landed = stepIdx + 1;
|
|
143
|
+
}
|
|
144
|
+
setActive(target > active ? landed : target);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
setAdvanceError('Step validation failed.');
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
setAdvancing(false);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
return (_jsxs("div", { className: `flex flex-col gap-6 ${layoutClasses(el)}`.trim(), children: [_jsx("ol", { className: "flex items-center gap-3 overflow-x-auto", "aria-label": "Wizard progress", children: steps.map((s, i) => {
|
|
154
|
+
const Icon = resolveIcon(s['icon'] ? String(s['icon']) : undefined);
|
|
155
|
+
const reachable = skippable || i <= active;
|
|
156
|
+
const isActive = i === active;
|
|
157
|
+
const isDone = i < active;
|
|
158
|
+
return (_jsxs("li", { className: "flex items-center gap-2 shrink-0", children: [_jsxs("button", { type: "button", disabled: !reachable || advancing, onClick: () => reachable && advance(i), className: [
|
|
159
|
+
'flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm transition',
|
|
160
|
+
isActive ? 'border-primary bg-primary/10 text-foreground'
|
|
161
|
+
: isDone ? 'border-border text-muted-foreground hover:bg-muted'
|
|
162
|
+
: 'border-border text-muted-foreground',
|
|
163
|
+
reachable ? 'cursor-pointer' : 'opacity-50 cursor-not-allowed',
|
|
164
|
+
].join(' '), "aria-current": isActive ? 'step' : undefined, children: [_jsx("span", { className: [
|
|
165
|
+
'flex size-5 items-center justify-center rounded-full text-[11px] font-semibold',
|
|
166
|
+
isActive ? 'bg-primary text-primary-foreground'
|
|
167
|
+
: isDone ? 'bg-muted-foreground/20 text-foreground'
|
|
168
|
+
: 'bg-muted text-muted-foreground',
|
|
169
|
+
].join(' '), children: Icon ? _jsx(Icon, { className: "size-3", "aria-hidden": "true" }) : i + 1 }), _jsx("span", { className: "font-medium", children: String(s['label'] ?? `Step ${i + 1}`) })] }), i < steps.length - 1 && _jsx("span", { className: "h-px w-6 bg-border", "aria-hidden": "true" })] }, i));
|
|
170
|
+
}) }), Boolean(steps[active]?.['description']) && (_jsx("p", { className: "text-sm text-muted-foreground", children: String(steps[active]['description']) })), steps.map((s, i) => (_jsx("div", { className: i === active ? 'flex flex-col gap-4' : 'hidden', "aria-hidden": i === active ? undefined : true, children: (s.children ?? []).map((c, ci) => renderElement(c, ci)) }, i))), advanceError && (_jsx("p", { className: "text-sm text-destructive", role: "alert", children: advanceError })), _jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(WizardNavButton, { actionMeta: previousActionMeta, fallbackLabel: "Back", disabled: isFirst || advancing, onClick: () => advance(active - 1) }), isLast
|
|
171
|
+
? (submitActionMeta
|
|
172
|
+
? _jsx(WizardNavButton, { actionMeta: submitActionMeta, fallbackLabel: "Submit", type: "submit", disabled: advancing })
|
|
173
|
+
: _jsx("span", { className: "text-xs text-muted-foreground", children: "Submit the form to finish." }))
|
|
174
|
+
: _jsx(WizardNavButton, { actionMeta: nextActionMeta, fallbackLabel: advancing ? 'Validating…' : 'Next', disabled: advancing, onClick: () => advance(active + 1) })] })] }, index));
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Renders one wizard nav slot (Back / Next / Submit). Falls back to plain
|
|
178
|
+
* built-in chrome (border button for Back, primary button for Next/Submit)
|
|
179
|
+
* when no `actionMeta` is supplied; otherwise reads the resolved Action's
|
|
180
|
+
* chrome (`label / icon / color / size / outlined / iconOnly / tooltip /
|
|
181
|
+
* disabled`) and applies it to a button whose click is hardwired by the
|
|
182
|
+
* surrounding wizard. `type="submit"` lets the Submit slot trigger the
|
|
183
|
+
* surrounding form's onSubmit dispatcher (no `onClick` needed).
|
|
184
|
+
*
|
|
185
|
+
* Hidden actions (`.visible(false)` resolved-away) drop the slot entirely
|
|
186
|
+
* — the resolver returns `undefined` for hidden Action elements, which
|
|
187
|
+
* arrives here as `actionMeta == null` so we fall through to the default
|
|
188
|
+
* chrome. Use `Wizard.skippable()` semantics to hide nav buttons when
|
|
189
|
+
* appropriate; for permanent removal subclass the wizard.
|
|
190
|
+
*/
|
|
191
|
+
function WizardNavButton({ actionMeta, fallbackLabel, type = 'button', disabled, onClick, }) {
|
|
192
|
+
// Bare default — keep historical chrome for back-compat (un-customized
|
|
193
|
+
// wizards look identical to before this change).
|
|
194
|
+
if (!actionMeta) {
|
|
195
|
+
const isPrimary = type === 'submit' || fallbackLabel !== 'Back';
|
|
196
|
+
return (_jsx("button", { type: type, disabled: disabled, onClick: onClick, className: isPrimary
|
|
197
|
+
? 'rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground hover:opacity-90 disabled:opacity-50 disabled:cursor-not-allowed'
|
|
198
|
+
: 'rounded-md border border-border px-3 py-1.5 text-sm font-medium text-foreground hover:bg-muted disabled:opacity-50 disabled:cursor-not-allowed', children: fallbackLabel }));
|
|
199
|
+
}
|
|
200
|
+
const ownDisabled = Boolean(actionMeta['disabled']);
|
|
201
|
+
const label = String(actionMeta['label'] ?? fallbackLabel);
|
|
202
|
+
const tooltip = actionMeta['tooltip'] ? String(actionMeta['tooltip']) : undefined;
|
|
203
|
+
const iconOnly = Boolean(actionMeta['iconOnly']);
|
|
204
|
+
const className = actionButtonClass(actionMeta, {});
|
|
205
|
+
const node = (_jsxs("button", { type: type, disabled: disabled || ownDisabled, onClick: onClick, className: `${className} disabled:opacity-50 disabled:cursor-not-allowed`, "aria-label": iconOnly ? label : undefined, children: [renderActionIcon(actionMeta), !iconOnly && _jsx("span", { children: label }), renderActionBadge(actionMeta)] }));
|
|
206
|
+
return _jsx(_Fragment, { children: withTooltip(node, tooltip) });
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=WizardRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WizardRenderer.js","sourceRoot":"","sources":["../../../src/react/schemaRenderer/WizardRenderer.tsx"],"names":[],"mappings":"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"}
|