@flanksource/clicky-ui 0.3.40 → 0.3.42
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/README.md +24 -0
- package/dist/ai.cjs +14 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +14 -0
- package/dist/ai.js.map +1 -1
- package/dist/comments/CommentCard.cjs +3 -1
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +4 -2
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentCardParts.cjs +16 -0
- package/dist/comments/CommentCardParts.cjs.map +1 -1
- package/dist/comments/CommentCardParts.d.ts +4 -1
- package/dist/comments/CommentCardParts.d.ts.map +1 -1
- package/dist/comments/CommentCardParts.js +16 -0
- package/dist/comments/CommentCardParts.js.map +1 -1
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +4 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.js.map +1 -1
- package/dist/components/AccordionList.cjs +5 -1
- package/dist/components/AccordionList.cjs.map +1 -1
- package/dist/components/AccordionList.d.ts +3 -1
- package/dist/components/AccordionList.d.ts.map +1 -1
- package/dist/components/AccordionList.js +5 -1
- package/dist/components/AccordionList.js.map +1 -1
- package/dist/components/Combobox.cjs +54 -8
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +56 -10
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ComboboxMenu.cjs +139 -113
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts +3 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +139 -113
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/ComboboxMenuTrigger.cjs +87 -0
- package/dist/components/ComboboxMenuTrigger.cjs.map +1 -0
- package/dist/components/ComboboxMenuTrigger.d.ts +23 -0
- package/dist/components/ComboboxMenuTrigger.d.ts.map +1 -0
- package/dist/components/ComboboxMenuTrigger.js +87 -0
- package/dist/components/ComboboxMenuTrigger.js.map +1 -0
- package/dist/components/JsonSchemaForm.cjs +39 -11
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +38 -10
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/SegmentedControl.cjs +20 -3
- package/dist/components/SegmentedControl.cjs.map +1 -1
- package/dist/components/SegmentedControl.d.ts +11 -0
- package/dist/components/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl.js +21 -4
- package/dist/components/SegmentedControl.js.map +1 -1
- package/dist/components/combobox-types.d.ts +8 -0
- package/dist/components/combobox-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-accordion-array.cjs +3 -1
- package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
- package/dist/components/json-schema-form-accordion-array.d.ts +4 -1
- package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-accordion-array.js +3 -1
- package/dist/components/json-schema-form-accordion-array.js.map +1 -1
- package/dist/components/json-schema-form-array-view.cjs +63 -0
- package/dist/components/json-schema-form-array-view.cjs.map +1 -0
- package/dist/components/json-schema-form-array-view.d.ts +21 -0
- package/dist/components/json-schema-form-array-view.d.ts.map +1 -0
- package/dist/components/json-schema-form-array-view.js +63 -0
- package/dist/components/json-schema-form-array-view.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +3 -7
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +3 -7
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-conditionals.cjs +67 -0
- package/dist/components/json-schema-form-conditionals.cjs.map +1 -0
- package/dist/components/json-schema-form-conditionals.d.ts +9 -0
- package/dist/components/json-schema-form-conditionals.d.ts.map +1 -0
- package/dist/components/json-schema-form-conditionals.js +67 -0
- package/dist/components/json-schema-form-conditionals.js.map +1 -0
- package/dist/components/json-schema-form-debug-badge.cjs +108 -0
- package/dist/components/json-schema-form-debug-badge.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-badge.d.ts +10 -0
- package/dist/components/json-schema-form-debug-badge.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-badge.js +108 -0
- package/dist/components/json-schema-form-debug-badge.js.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs +129 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.d.ts +20 -0
- package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.js +129 -0
- package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -0
- package/dist/components/json-schema-form-debug-glyph.cjs +13 -0
- package/dist/components/json-schema-form-debug-glyph.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-glyph.d.ts +6 -0
- package/dist/components/json-schema-form-debug-glyph.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-glyph.js +13 -0
- package/dist/components/json-schema-form-debug-glyph.js.map +1 -0
- package/dist/components/json-schema-form-debug-groups.cjs +56 -0
- package/dist/components/json-schema-form-debug-groups.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-groups.d.ts +8 -0
- package/dist/components/json-schema-form-debug-groups.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-groups.js +56 -0
- package/dist/components/json-schema-form-debug-groups.js.map +1 -0
- package/dist/components/json-schema-form-debug-keywords.cjs +159 -0
- package/dist/components/json-schema-form-debug-keywords.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-keywords.d.ts +6 -0
- package/dist/components/json-schema-form-debug-keywords.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-keywords.js +159 -0
- package/dist/components/json-schema-form-debug-keywords.js.map +1 -0
- package/dist/components/json-schema-form-debug-listeners.cjs +102 -0
- package/dist/components/json-schema-form-debug-listeners.cjs.map +1 -0
- package/dist/components/json-schema-form-debug-listeners.d.ts +6 -0
- package/dist/components/json-schema-form-debug-listeners.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug-listeners.js +102 -0
- package/dist/components/json-schema-form-debug-listeners.js.map +1 -0
- package/dist/components/json-schema-form-debug.cjs +31 -0
- package/dist/components/json-schema-form-debug.cjs.map +1 -0
- package/dist/components/json-schema-form-debug.d.ts +11 -0
- package/dist/components/json-schema-form-debug.d.ts.map +1 -0
- package/dist/components/json-schema-form-debug.js +31 -0
- package/dist/components/json-schema-form-debug.js.map +1 -0
- package/dist/components/json-schema-form-defaults.cjs +68 -0
- package/dist/components/json-schema-form-defaults.cjs.map +1 -0
- package/dist/components/json-schema-form-defaults.d.ts +4 -0
- package/dist/components/json-schema-form-defaults.d.ts.map +1 -0
- package/dist/components/json-schema-form-defaults.js +68 -0
- package/dist/components/json-schema-form-defaults.js.map +1 -0
- package/dist/components/json-schema-form-enum-choice.cjs +114 -0
- package/dist/components/json-schema-form-enum-choice.cjs.map +1 -0
- package/dist/components/json-schema-form-enum-choice.d.ts +14 -0
- package/dist/components/json-schema-form-enum-choice.d.ts.map +1 -0
- package/dist/components/json-schema-form-enum-choice.js +114 -0
- package/dist/components/json-schema-form-enum-choice.js.map +1 -0
- package/dist/components/json-schema-form-errors.cjs +49 -31
- package/dist/components/json-schema-form-errors.cjs.map +1 -1
- package/dist/components/json-schema-form-errors.d.ts +4 -2
- package/dist/components/json-schema-form-errors.d.ts.map +1 -1
- package/dist/components/json-schema-form-errors.js +51 -33
- package/dist/components/json-schema-form-errors.js.map +1 -1
- package/dist/components/json-schema-form-fields.cjs +3 -93
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +1 -91
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-filter.cjs +2 -1
- package/dist/components/json-schema-form-filter.cjs.map +1 -1
- package/dist/components/json-schema-form-filter.js +2 -1
- package/dist/components/json-schema-form-filter.js.map +1 -1
- package/dist/components/json-schema-form-item-summary.cjs +6 -2
- package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
- package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
- package/dist/components/json-schema-form-item-summary.js +6 -2
- package/dist/components/json-schema-form-item-summary.js.map +1 -1
- package/dist/components/json-schema-form-layout.cjs +28 -19
- package/dist/components/json-schema-form-layout.cjs.map +1 -1
- package/dist/components/json-schema-form-layout.d.ts +8 -6
- package/dist/components/json-schema-form-layout.d.ts.map +1 -1
- package/dist/components/json-schema-form-layout.js +29 -20
- package/dist/components/json-schema-form-layout.js.map +1 -1
- package/dist/components/json-schema-form-listener-paths.cjs +52 -0
- package/dist/components/json-schema-form-listener-paths.cjs.map +1 -0
- package/dist/components/json-schema-form-listener-paths.d.ts +10 -0
- package/dist/components/json-schema-form-listener-paths.d.ts.map +1 -0
- package/dist/components/json-schema-form-listener-paths.js +52 -0
- package/dist/components/json-schema-form-listener-paths.js.map +1 -0
- package/dist/components/json-schema-form-listener-types.d.ts +22 -0
- package/dist/components/json-schema-form-listener-types.d.ts.map +1 -0
- package/dist/components/json-schema-form-listeners.cjs +256 -0
- package/dist/components/json-schema-form-listeners.cjs.map +1 -0
- package/dist/components/json-schema-form-listeners.d.ts +13 -0
- package/dist/components/json-schema-form-listeners.d.ts.map +1 -0
- package/dist/components/json-schema-form-listeners.js +256 -0
- package/dist/components/json-schema-form-listeners.js.map +1 -0
- package/dist/components/json-schema-form-object-array-view.cjs +62 -0
- package/dist/components/json-schema-form-object-array-view.cjs.map +1 -0
- package/dist/components/json-schema-form-object-array-view.d.ts +14 -0
- package/dist/components/json-schema-form-object-array-view.d.ts.map +1 -0
- package/dist/components/json-schema-form-object-array-view.js +62 -0
- package/dist/components/json-schema-form-object-array-view.js.map +1 -0
- package/dist/components/json-schema-form-object.cjs +3 -0
- package/dist/components/json-schema-form-object.cjs.map +1 -1
- package/dist/components/json-schema-form-object.d.ts.map +1 -1
- package/dist/components/json-schema-form-object.js +3 -0
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-preferences.cjs +1 -0
- package/dist/components/json-schema-form-preferences.cjs.map +1 -1
- package/dist/components/json-schema-form-preferences.d.ts +1 -0
- package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
- package/dist/components/json-schema-form-preferences.js +1 -0
- package/dist/components/json-schema-form-preferences.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +36 -12
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +38 -14
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +6 -99
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts +1 -8
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +5 -98
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-runtime-types.d.ts +16 -0
- package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-table-array.cjs +67 -16
- package/dist/components/json-schema-form-table-array.cjs.map +1 -1
- package/dist/components/json-schema-form-table-array.d.ts +4 -1
- package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-table-array.js +70 -19
- package/dist/components/json-schema-form-table-array.js.map +1 -1
- package/dist/components/json-schema-form-tone.cjs +12 -0
- package/dist/components/json-schema-form-tone.cjs.map +1 -1
- package/dist/components/json-schema-form-tone.js +12 -0
- package/dist/components/json-schema-form-tone.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +17 -0
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +7 -1
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +2 -1
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +7 -1
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components.cjs +3 -2
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +3 -2
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +2 -1
- package/dist/components.js.map +1 -1
- package/dist/data/DataTable.cjs +9 -3
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +6 -0
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +9 -3
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/FixtureEditor/FixtureEditor.cjs +43 -24
- package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -1
- package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -1
- package/dist/data/FixtureEditor/FixtureEditor.js +43 -24
- package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -1
- package/dist/data/GraphDiagram.cjs +125 -138
- package/dist/data/GraphDiagram.cjs.map +1 -1
- package/dist/data/GraphDiagram.d.ts +30 -23
- package/dist/data/GraphDiagram.d.ts.map +1 -1
- package/dist/data/GraphDiagram.js +128 -141
- package/dist/data/GraphDiagram.js.map +1 -1
- package/dist/data/GraphDiagramEdges.cjs +208 -0
- package/dist/data/GraphDiagramEdges.cjs.map +1 -0
- package/dist/data/GraphDiagramEdges.d.ts +40 -0
- package/dist/data/GraphDiagramEdges.d.ts.map +1 -0
- package/dist/data/GraphDiagramEdges.js +208 -0
- package/dist/data/GraphDiagramEdges.js.map +1 -0
- package/dist/data/GraphDiagramNodes.cjs +142 -0
- package/dist/data/GraphDiagramNodes.cjs.map +1 -0
- package/dist/data/GraphDiagramNodes.d.ts +22 -0
- package/dist/data/GraphDiagramNodes.d.ts.map +1 -0
- package/dist/data/GraphDiagramNodes.js +142 -0
- package/dist/data/GraphDiagramNodes.js.map +1 -0
- package/dist/data/Tree.cjs +10 -2
- package/dist/data/Tree.cjs.map +1 -1
- package/dist/data/Tree.d.ts +6 -1
- package/dist/data/Tree.d.ts.map +1 -1
- package/dist/data/Tree.js +10 -2
- package/dist/data/Tree.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs +8 -3
- package/dist/data/ai/PromptRunEditor/RuntimeRows.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/RuntimeRows.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/RuntimeRows.js +8 -3
- package/dist/data/ai/PromptRunEditor/RuntimeRows.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +37 -43
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +3 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +38 -44
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +16 -5
- package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts +4 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/runtimeActions.js +17 -6
- package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
- package/dist/data/ai/SessionInspector.approvals-model.cjs +12 -0
- package/dist/data/ai/SessionInspector.approvals-model.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.approvals-model.d.ts +11 -2
- package/dist/data/ai/SessionInspector.approvals-model.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.approvals-model.js +12 -0
- package/dist/data/ai/SessionInspector.approvals-model.js.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.cjs +25 -1
- package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.approvals.js +26 -2
- package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
- package/dist/data/ai/SessionInspector.cjs +143 -167
- package/dist/data/ai/SessionInspector.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.collection-types.d.ts +5 -0
- package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.collection.cjs +18 -5
- package/dist/data/ai/SessionInspector.collection.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.collection.d.ts +2 -0
- package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.collection.fixtures.d.ts +6 -0
- package/dist/data/ai/SessionInspector.collection.fixtures.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.collection.js +18 -5
- package/dist/data/ai/SessionInspector.collection.js.map +1 -1
- package/dist/data/ai/SessionInspector.d.ts +24 -2
- package/dist/data/ai/SessionInspector.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy-state.cjs +105 -7
- package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +12 -1
- package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy-state.js +107 -9
- package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
- package/dist/data/ai/SessionInspector.js +144 -168
- package/dist/data/ai/SessionInspector.js.map +1 -1
- package/dist/data/ai/SessionInspector.legacy.cjs +116 -0
- package/dist/data/ai/SessionInspector.legacy.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.legacy.d.ts +19 -0
- package/dist/data/ai/SessionInspector.legacy.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.legacy.js +116 -0
- package/dist/data/ai/SessionInspector.legacy.js.map +1 -0
- package/dist/data/ai/SessionInspector.panels.cjs +3 -0
- package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.panels.js +3 -0
- package/dist/data/ai/SessionInspector.panels.js.map +1 -1
- package/dist/data/ai/SessionInspector.plan.cjs +29 -12
- package/dist/data/ai/SessionInspector.plan.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.plan.js +30 -13
- package/dist/data/ai/SessionInspector.plan.js.map +1 -1
- package/dist/data/ai/SessionInspector.remote-view.cjs +44 -0
- package/dist/data/ai/SessionInspector.remote-view.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.remote-view.d.ts +11 -0
- package/dist/data/ai/SessionInspector.remote-view.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.remote-view.js +44 -0
- package/dist/data/ai/SessionInspector.remote-view.js.map +1 -0
- package/dist/data/ai/SessionInspector.remote.cjs +275 -0
- package/dist/data/ai/SessionInspector.remote.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.remote.d.ts +57 -0
- package/dist/data/ai/SessionInspector.remote.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.remote.js +275 -0
- package/dist/data/ai/SessionInspector.remote.js.map +1 -0
- package/dist/data/ai/SessionInspector.summary.cjs +9 -159
- package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.summary.d.ts +0 -3
- package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.summary.js +11 -161
- package/dist/data/ai/SessionInspector.summary.js.map +1 -1
- package/dist/data/ai/SessionInspector.tab-state.cjs +15 -0
- package/dist/data/ai/SessionInspector.tab-state.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.tab-state.d.ts +3 -0
- package/dist/data/ai/SessionInspector.tab-state.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.tab-state.js +15 -0
- package/dist/data/ai/SessionInspector.tab-state.js.map +1 -0
- package/dist/data/ai/SessionInspector.tabs.model.cjs +31 -18
- package/dist/data/ai/SessionInspector.tabs.model.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.tabs.model.d.ts +3 -1
- package/dist/data/ai/SessionInspector.tabs.model.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.tabs.model.js +32 -19
- package/dist/data/ai/SessionInspector.tabs.model.js.map +1 -1
- package/dist/data/ai/SessionInspector.transcript.cjs +4 -0
- package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.transcript.js +4 -0
- package/dist/data/ai/SessionInspector.transcript.js.map +1 -1
- package/dist/data/ai/SessionInspector.verification.cjs +53 -0
- package/dist/data/ai/SessionInspector.verification.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.verification.d.ts +7 -0
- package/dist/data/ai/SessionInspector.verification.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.verification.js +53 -0
- package/dist/data/ai/SessionInspector.verification.js.map +1 -0
- package/dist/data/ai/SessionViewer.approval-body.cjs +146 -0
- package/dist/data/ai/SessionViewer.approval-body.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.approval-body.d.ts +11 -0
- package/dist/data/ai/SessionViewer.approval-body.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.approval-body.js +146 -0
- package/dist/data/ai/SessionViewer.approval-body.js.map +1 -0
- package/dist/data/ai/SessionViewer.approval-forms.cjs +150 -0
- package/dist/data/ai/SessionViewer.approval-forms.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.approval-forms.d.ts +23 -0
- package/dist/data/ai/SessionViewer.approval-forms.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.approval-forms.js +150 -0
- package/dist/data/ai/SessionViewer.approval-forms.js.map +1 -0
- package/dist/data/ai/SessionViewer.cjs +57 -20
- package/dist/data/ai/SessionViewer.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +13 -3
- package/dist/data/ai/SessionViewer.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.decision-controls.cjs +313 -0
- package/dist/data/ai/SessionViewer.decision-controls.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.decision-controls.d.ts +43 -0
- package/dist/data/ai/SessionViewer.decision-controls.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.decision-controls.js +313 -0
- package/dist/data/ai/SessionViewer.decision-controls.js.map +1 -0
- package/dist/data/ai/SessionViewer.decision.cjs +21 -0
- package/dist/data/ai/SessionViewer.decision.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.decision.d.ts +12 -0
- package/dist/data/ai/SessionViewer.decision.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.decision.js +21 -0
- package/dist/data/ai/SessionViewer.decision.js.map +1 -0
- package/dist/data/ai/SessionViewer.input.cjs +14 -0
- package/dist/data/ai/SessionViewer.input.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.input.d.ts +5 -0
- package/dist/data/ai/SessionViewer.input.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.input.js +14 -0
- package/dist/data/ai/SessionViewer.input.js.map +1 -1
- package/dist/data/ai/SessionViewer.js +58 -21
- package/dist/data/ai/SessionViewer.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +7 -1
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +25 -3
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +7 -1
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.rows.cjs +6 -3
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts +2 -1
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +6 -3
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.cjs +29 -237
- package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.tool-row.js +27 -235
- package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +17 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.cjs +8 -2
- package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
- package/dist/data/ai/SessionViewerMenu.d.ts +4 -1
- package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.js +8 -2
- package/dist/data/ai/SessionViewerMenu.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +28 -17
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +10 -2
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +29 -18
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs +9 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +9 -2
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js +9 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.cjs +1 -1
- package/dist/data/ai/SpecRuntimeEditor/permission-mode-visuals.js +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +8 -2
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.cjs +14 -6
- package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts +1 -0
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.js +14 -6
- package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
- package/dist/data/ai/approval-request.cjs +75 -0
- package/dist/data/ai/approval-request.cjs.map +1 -0
- package/dist/data/ai/approval-request.d.ts +155 -0
- package/dist/data/ai/approval-request.d.ts.map +1 -0
- package/dist/data/ai/approval-request.js +75 -0
- package/dist/data/ai/approval-request.js.map +1 -0
- package/dist/data/ai/index.d.ts +6 -1
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs +125 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.cjs.map +1 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts +11 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.d.ts.map +1 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js +125 -0
- package/dist/data/ai/runtime-preset-menu/SavePresetDialog.js.map +1 -0
- package/dist/data/ai/runtime-preset-menu/index.d.ts +3 -0
- package/dist/data/ai/runtime-preset-menu/index.d.ts.map +1 -0
- package/dist/data/ai/runtime-preset-menu/model.cjs +73 -0
- package/dist/data/ai/runtime-preset-menu/model.cjs.map +1 -0
- package/dist/data/ai/runtime-preset-menu/model.d.ts +13 -0
- package/dist/data/ai/runtime-preset-menu/model.d.ts.map +1 -0
- package/dist/data/ai/runtime-preset-menu/model.js +73 -0
- package/dist/data/ai/runtime-preset-menu/model.js.map +1 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs +149 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.cjs.map +1 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts +15 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.d.ts.map +1 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js +149 -0
- package/dist/data/ai/runtime-preset-menu/use-runtime-preset-menu.js.map +1 -0
- package/dist/data/ai/runtime-spec-fields.cjs +166 -0
- package/dist/data/ai/runtime-spec-fields.cjs.map +1 -0
- package/dist/data/ai/runtime-spec-fields.d.ts +13 -0
- package/dist/data/ai/runtime-spec-fields.d.ts.map +1 -0
- package/dist/data/ai/runtime-spec-fields.js +166 -0
- package/dist/data/ai/runtime-spec-fields.js.map +1 -0
- package/dist/data/ai/session-categories.cjs +4 -0
- package/dist/data/ai/session-categories.cjs.map +1 -1
- package/dist/data/ai/session-categories.d.ts +1 -0
- package/dist/data/ai/session-categories.d.ts.map +1 -1
- package/dist/data/ai/session-categories.js +4 -0
- package/dist/data/ai/session-categories.js.map +1 -1
- package/dist/data/ai/use-session-scroll.cjs +49 -21
- package/dist/data/ai/use-session-scroll.cjs.map +1 -1
- package/dist/data/ai/use-session-scroll.d.ts +2 -0
- package/dist/data/ai/use-session-scroll.d.ts.map +1 -1
- package/dist/data/ai/use-session-scroll.js +49 -21
- package/dist/data/ai/use-session-scroll.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +1 -1
- package/dist/data/chat/Chat.runtime.cjs.map +1 -1
- package/dist/data/chat/Chat.runtime.d.ts.map +1 -1
- package/dist/data/chat/Chat.runtime.js +1 -1
- package/dist/data/chat/Chat.runtime.js.map +1 -1
- package/dist/data/graph-columns-layout.cjs +216 -0
- package/dist/data/graph-columns-layout.cjs.map +1 -0
- package/dist/data/graph-columns-layout.d.ts +56 -0
- package/dist/data/graph-columns-layout.d.ts.map +1 -0
- package/dist/data/graph-columns-layout.js +216 -0
- package/dist/data/graph-columns-layout.js.map +1 -0
- package/dist/data/graph-diagram-model.cjs +73 -0
- package/dist/data/graph-diagram-model.cjs.map +1 -0
- package/dist/data/graph-diagram-model.d.ts +90 -0
- package/dist/data/graph-diagram-model.d.ts.map +1 -0
- package/dist/data/graph-diagram-model.js +73 -0
- package/dist/data/graph-diagram-model.js.map +1 -0
- package/dist/data/graph-edge-routing.cjs +235 -0
- package/dist/data/graph-edge-routing.cjs.map +1 -0
- package/dist/data/graph-edge-routing.d.ts +73 -0
- package/dist/data/graph-edge-routing.d.ts.map +1 -0
- package/dist/data/graph-edge-routing.js +235 -0
- package/dist/data/graph-edge-routing.js.map +1 -0
- package/dist/data/graph-layout.cjs +0 -82
- package/dist/data/graph-layout.cjs.map +1 -1
- package/dist/data/graph-layout.d.ts +1 -28
- package/dist/data/graph-layout.d.ts.map +1 -1
- package/dist/data/graph-layout.js +1 -83
- package/dist/data/graph-layout.js.map +1 -1
- package/dist/data/har/HarPanel.cjs +129 -33
- package/dist/data/har/HarPanel.cjs.map +1 -1
- package/dist/data/har/HarPanel.d.ts +13 -1
- package/dist/data/har/HarPanel.d.ts.map +1 -1
- package/dist/data/har/HarPanel.js +130 -34
- package/dist/data/har/HarPanel.js.map +1 -1
- package/dist/data/har/fixtures.d.ts +12 -0
- package/dist/data/har/fixtures.d.ts.map +1 -1
- package/dist/data/har/types.d.ts +12 -0
- package/dist/data/har/types.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.cjs +67 -84
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts +4 -5
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.fields.cjs +170 -0
- package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBar.fields.d.ts +16 -0
- package/dist/data/runtime/RuntimeBar.fields.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.fields.js +170 -0
- package/dist/data/runtime/RuntimeBar.fields.js.map +1 -0
- package/dist/data/runtime/RuntimeBar.js +70 -87
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/runtime/RuntimeBar.selection.cjs +56 -0
- package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBar.selection.d.ts +20 -0
- package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.selection.js +56 -0
- package/dist/data/runtime/RuntimeBar.selection.js.map +1 -0
- package/dist/data/runtime/RuntimeBarActions.cjs +10 -6
- package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts +8 -1
- package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarActions.js +10 -6
- package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
- package/dist/data/runtime/RuntimeBarIdentity.cjs +166 -0
- package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBarIdentity.d.ts +25 -0
- package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBarIdentity.js +166 -0
- package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -0
- package/dist/data/runtime/RuntimeBarLayout.cjs +95 -0
- package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBarLayout.d.ts +9 -0
- package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBarLayout.js +95 -0
- package/dist/data/runtime/RuntimeBarLayout.js.map +1 -0
- package/dist/data/runtime/RuntimeBarSegment.cjs +25 -14
- package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.d.ts +4 -0
- package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBarSegment.js +25 -14
- package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
- package/dist/data/runtime/RuntimeLimitInput.cjs +41 -0
- package/dist/data/runtime/RuntimeLimitInput.cjs.map +1 -0
- package/dist/data/runtime/RuntimeLimitInput.d.ts +9 -0
- package/dist/data/runtime/RuntimeLimitInput.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeLimitInput.js +41 -0
- package/dist/data/runtime/RuntimeLimitInput.js.map +1 -0
- package/dist/data/runtime/use-runtime-bar-overflow.cjs +70 -0
- package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -0
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts +13 -0
- package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -0
- package/dist/data/runtime/use-runtime-bar-overflow.js +70 -0
- package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -0
- package/dist/data/use-edge-focus.cjs +20 -0
- package/dist/data/use-edge-focus.cjs.map +1 -0
- package/dist/data/use-edge-focus.d.ts +23 -0
- package/dist/data/use-edge-focus.d.ts.map +1 -0
- package/dist/data/use-edge-focus.js +20 -0
- package/dist/data/use-edge-focus.js.map +1 -0
- package/dist/data/use-pan-zoom.cjs +159 -0
- package/dist/data/use-pan-zoom.cjs.map +1 -0
- package/dist/data/use-pan-zoom.d.ts +79 -0
- package/dist/data/use-pan-zoom.d.ts.map +1 -0
- package/dist/data/use-pan-zoom.js +159 -0
- package/dist/data/use-pan-zoom.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +5 -1
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +4 -3
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +6 -2
- package/dist/data.js.map +1 -1
- package/dist/devtools/useDebugStream.cjs +5 -1
- package/dist/devtools/useDebugStream.cjs.map +1 -1
- package/dist/devtools/useDebugStream.d.ts.map +1 -1
- package/dist/devtools/useDebugStream.js +6 -2
- package/dist/devtools/useDebugStream.js.map +1 -1
- package/dist/hooks/event-source-provider.cjs +9 -0
- package/dist/hooks/event-source-provider.cjs.map +1 -0
- package/dist/hooks/event-source-provider.d.ts +15 -0
- package/dist/hooks/event-source-provider.d.ts.map +1 -0
- package/dist/hooks/event-source-provider.js +9 -0
- package/dist/hooks/event-source-provider.js.map +1 -0
- package/dist/hooks/event-source.cjs +11 -0
- package/dist/hooks/event-source.cjs.map +1 -0
- package/dist/hooks/event-source.d.ts +22 -0
- package/dist/hooks/event-source.d.ts.map +1 -0
- package/dist/hooks/event-source.js +11 -0
- package/dist/hooks/event-source.js.map +1 -0
- package/dist/hooks/use-log-tail.cjs +5 -1
- package/dist/hooks/use-log-tail.cjs.map +1 -1
- package/dist/hooks/use-log-tail.d.ts.map +1 -1
- package/dist/hooks/use-log-tail.js +5 -1
- package/dist/hooks/use-log-tail.js.map +1 -1
- package/dist/hooks/use-prompts.cjs +5 -1
- package/dist/hooks/use-prompts.cjs.map +1 -1
- package/dist/hooks/use-prompts.d.ts.map +1 -1
- package/dist/hooks/use-prompts.js +6 -2
- package/dist/hooks/use-prompts.js.map +1 -1
- package/dist/hooks/use-task-run.cjs +9 -2
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +10 -3
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/hooks.cjs +4 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +4 -0
- package/dist/hooks.js.map +1 -1
- package/dist/icons/programmingCatalog.cjs +34 -34
- package/dist/icons/programmingCatalog.cjs.map +1 -1
- package/dist/icons/programmingCatalog.js +34 -34
- package/dist/icons/programmingCatalog.js.map +1 -1
- package/dist/index.cjs +14 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/monaco/MonacoEditor.cjs +4 -1
- package/dist/monaco/MonacoEditor.cjs.map +1 -1
- package/dist/monaco/MonacoEditor.d.ts +1 -1
- package/dist/monaco/MonacoEditor.d.ts.map +1 -1
- package/dist/monaco/MonacoEditor.js +4 -1
- package/dist/monaco/MonacoEditor.js.map +1 -1
- package/dist/monaco/types.d.ts +2 -1
- package/dist/monaco/types.d.ts.map +1 -1
- package/dist/overlay/CommandPalette.cjs +14 -4
- package/dist/overlay/CommandPalette.cjs.map +1 -1
- package/dist/overlay/CommandPalette.d.ts +5 -1
- package/dist/overlay/CommandPalette.d.ts.map +1 -1
- package/dist/overlay/CommandPalette.js +14 -4
- package/dist/overlay/CommandPalette.js.map +1 -1
- package/dist/overlay/CommandPaletteList.cjs +5 -0
- package/dist/overlay/CommandPaletteList.cjs.map +1 -1
- package/dist/overlay/CommandPaletteList.d.ts +4 -2
- package/dist/overlay/CommandPaletteList.d.ts.map +1 -1
- package/dist/overlay/CommandPaletteList.js +5 -0
- package/dist/overlay/CommandPaletteList.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +2 -0
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +4 -0
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +2 -0
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.cjs +31 -15
- package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.js +31 -15
- package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +32 -27
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +11 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +32 -27
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.cjs +62 -256
- package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.js +64 -258
- package/dist/rpc/OperationEntityContextPicker.js.map +1 -1
- package/dist/rpc/OperationEntityPicker.cjs +185 -0
- package/dist/rpc/OperationEntityPicker.cjs.map +1 -0
- package/dist/rpc/OperationEntityPicker.d.ts +51 -0
- package/dist/rpc/OperationEntityPicker.d.ts.map +1 -0
- package/dist/rpc/OperationEntityPicker.js +185 -0
- package/dist/rpc/OperationEntityPicker.js.map +1 -0
- package/dist/rpc/OperationEntityPicker.model.cjs +39 -0
- package/dist/rpc/OperationEntityPicker.model.cjs.map +1 -0
- package/dist/rpc/OperationEntityPicker.model.d.ts +27 -0
- package/dist/rpc/OperationEntityPicker.model.d.ts.map +1 -0
- package/dist/rpc/OperationEntityPicker.model.js +39 -0
- package/dist/rpc/OperationEntityPicker.model.js.map +1 -0
- package/dist/rpc/operationCatalogRowSelection.cjs +85 -0
- package/dist/rpc/operationCatalogRowSelection.cjs.map +1 -0
- package/dist/rpc/operationCatalogRowSelection.d.ts +57 -0
- package/dist/rpc/operationCatalogRowSelection.d.ts.map +1 -0
- package/dist/rpc/operationCatalogRowSelection.js +85 -0
- package/dist/rpc/operationCatalogRowSelection.js.map +1 -0
- package/dist/rpc/operationEntityPicker.fixtures.d.ts +13 -0
- package/dist/rpc/operationEntityPicker.fixtures.d.ts.map +1 -0
- package/dist/rpc/useOperationPages.cjs +6 -1
- package/dist/rpc/useOperationPages.cjs.map +1 -1
- package/dist/rpc/useOperationPages.d.ts +3 -1
- package/dist/rpc/useOperationPages.d.ts.map +1 -1
- package/dist/rpc/useOperationPages.js +6 -1
- package/dist/rpc/useOperationPages.js.map +1 -1
- package/dist/rpc.cjs +2 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +2 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -0
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +4 -1
- package/schemas/json-schema-form.schema.json +571 -0
- package/dist/data/runtime/RuntimeBarCombo.cjs +0 -423
- package/dist/data/runtime/RuntimeBarCombo.cjs.map +0 -1
- package/dist/data/runtime/RuntimeBarCombo.d.ts +0 -33
- package/dist/data/runtime/RuntimeBarCombo.d.ts.map +0 -1
- package/dist/data/runtime/RuntimeBarCombo.js +0 -423
- package/dist/data/runtime/RuntimeBarCombo.js.map +0 -1
- package/dist/data/runtime/RuntimeBarLimits.cjs +0 -262
- package/dist/data/runtime/RuntimeBarLimits.cjs.map +0 -1
- package/dist/data/runtime/RuntimeBarLimits.d.ts +0 -17
- package/dist/data/runtime/RuntimeBarLimits.d.ts.map +0 -1
- package/dist/data/runtime/RuntimeBarLimits.js +0 -262
- package/dist/data/runtime/RuntimeBarLimits.js.map +0 -1
- package/dist/data/runtime/RuntimeBarSegments.cjs +0 -346
- package/dist/data/runtime/RuntimeBarSegments.cjs.map +0 -1
- package/dist/data/runtime/RuntimeBarSegments.d.ts +0 -37
- package/dist/data/runtime/RuntimeBarSegments.d.ts.map +0 -1
- package/dist/data/runtime/RuntimeBarSegments.js +0 -346
- package/dist/data/runtime/RuntimeBarSegments.js.map +0 -1
|
@@ -5,41 +5,65 @@ import { cn } from "../lib/utils.js";
|
|
|
5
5
|
import { Icon } from "../data/Icon.js";
|
|
6
6
|
import { HoverCard } from "../overlay/HoverCard.js";
|
|
7
7
|
import { Button } from "./button.js";
|
|
8
|
-
import { controlHeightClass, inputSizeClass, controlMinHeightClass } from "./json-schema-form-size.js";
|
|
9
|
-
import { schemaHelper } from "./json-schema-form-resolve.js";
|
|
8
|
+
import { controlHeightClass, inputSizeClass, labelSizeClass, controlMinHeightClass } from "./json-schema-form-size.js";
|
|
9
|
+
import { resolveControl, schemaHelper } from "./json-schema-form-resolve.js";
|
|
10
|
+
import { applyPostExtensions } from "./json-schema-form-extensions.js";
|
|
10
11
|
import { appendInstancePath } from "./json-schema-form-errors.js";
|
|
11
|
-
import {
|
|
12
|
+
import { applyChangeEffects } from "./json-schema-form-listeners.js";
|
|
13
|
+
import { tableColumnOptions, tableLayout } from "./json-schema-form-array-view.js";
|
|
14
|
+
import { resolveItemSpec, noItemsLabel, itemCountLabel } from "./json-schema-form-item-summary.js";
|
|
15
|
+
import { canRemoveItem, canAddItem, seedFromSchema } from "./json-schema-form-utils.js";
|
|
12
16
|
import { UiTrash } from "../icons/components/UiTrash.js";
|
|
13
17
|
import { UiAdd } from "../icons/components/UiAdd.js";
|
|
14
18
|
function TableArray({
|
|
15
19
|
field,
|
|
16
20
|
ctx,
|
|
17
|
-
readOnly
|
|
21
|
+
readOnly,
|
|
22
|
+
toolbar
|
|
18
23
|
}) {
|
|
19
24
|
const items = Array.isArray(field.value) ? field.value : [];
|
|
20
25
|
const itemSchema = field.itemSchema ?? { type: "object" };
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
const options = tableColumnOptions(field, ctx);
|
|
27
|
+
const valueCells = options.valueCells;
|
|
28
|
+
const { columns, rows } = tableLayout(itemSchema, items, options);
|
|
29
|
+
const childCtx = {
|
|
30
|
+
...ctx,
|
|
31
|
+
readOnly,
|
|
32
|
+
depth: ctx.depth + 1,
|
|
33
|
+
...valueCells ? { hideReadOnlyFields: false } : {}
|
|
34
|
+
};
|
|
26
35
|
const removable = !readOnly && canRemoveItem(field, items.length);
|
|
27
|
-
function cell(item, rowIndex, col
|
|
36
|
+
function cell(item, rowIndex, col) {
|
|
37
|
+
var _a;
|
|
28
38
|
const obj = isPlainObject(item) ? item : {};
|
|
29
|
-
const
|
|
39
|
+
const prop = (_a = rows[rowIndex]) == null ? void 0 : _a[col];
|
|
40
|
+
const nodes = prop ? ctx.render.renderFieldNodes(
|
|
30
41
|
{
|
|
31
42
|
key: `${field.key}[${rowIndex}].${col}`,
|
|
32
|
-
prop,
|
|
43
|
+
prop: valueCells ? { ...prop, readOnly: true } : prop,
|
|
33
44
|
required: false,
|
|
34
45
|
value: obj[col],
|
|
35
|
-
onChange: (next) => field.onChange(
|
|
46
|
+
onChange: (next) => field.onChange(
|
|
47
|
+
setIndex(
|
|
48
|
+
items,
|
|
49
|
+
rowIndex,
|
|
50
|
+
applyChangeEffects(itemSchema, {
|
|
51
|
+
root: options.rootValue ?? obj,
|
|
52
|
+
...options.evaluate ? { evaluate: options.evaluate } : {},
|
|
53
|
+
value: obj,
|
|
54
|
+
key: col,
|
|
55
|
+
next
|
|
56
|
+
})
|
|
57
|
+
)
|
|
58
|
+
),
|
|
36
59
|
instancePath: appendInstancePath(
|
|
37
60
|
appendInstancePath(ctx.instancePath, rowIndex),
|
|
38
61
|
col
|
|
39
62
|
)
|
|
40
63
|
},
|
|
41
64
|
childCtx
|
|
42
|
-
);
|
|
65
|
+
) : null;
|
|
66
|
+
if (!nodes) return /* @__PURE__ */ jsx("span", { "data-jsf-cell-placeholder": true, "aria-hidden": "true", className: cn("block", controlMinHeightClass[ctx.size]) });
|
|
43
67
|
return ctx.presentation ? /* @__PURE__ */ jsx(
|
|
44
68
|
"div",
|
|
45
69
|
{
|
|
@@ -47,11 +71,25 @@ function TableArray({
|
|
|
47
71
|
"flex min-w-0 items-center [overflow-wrap:anywhere] [&_span[data-jsf-readonly]]:h-auto [&_span[data-jsf-readonly]]:min-w-0",
|
|
48
72
|
controlMinHeightClass[ctx.size]
|
|
49
73
|
),
|
|
50
|
-
children: nodes
|
|
74
|
+
children: nodes.value
|
|
51
75
|
}
|
|
52
|
-
) :
|
|
76
|
+
) : nodes.value;
|
|
77
|
+
}
|
|
78
|
+
function columnHeader(col, prop, header) {
|
|
79
|
+
const roots = {
|
|
80
|
+
...ctx.rootValue ? { rootValue: ctx.rootValue } : {},
|
|
81
|
+
...ctx.onRootChange ? { onRootChange: ctx.onRootChange } : {}
|
|
82
|
+
};
|
|
83
|
+
let column = resolveControl({ key: col, prop, required: false, value: void 0, onChange: () => {
|
|
84
|
+
} });
|
|
85
|
+
for (const ext of ctx.pre) {
|
|
86
|
+
if (!column) break;
|
|
87
|
+
column = ext(column, { key: col, prop, value: void 0, ...roots });
|
|
88
|
+
}
|
|
89
|
+
if (!column) return header;
|
|
90
|
+
return applyPostExtensions(column, { label: header, value: null }, ctx.post, roots).label;
|
|
53
91
|
}
|
|
54
|
-
|
|
92
|
+
const table = /* @__PURE__ */ jsxs(
|
|
55
93
|
"div",
|
|
56
94
|
{
|
|
57
95
|
className: cn(
|
|
@@ -72,7 +110,11 @@ function TableArray({
|
|
|
72
110
|
"th",
|
|
73
111
|
{
|
|
74
112
|
className: "px-2 py-1 text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]",
|
|
75
|
-
children:
|
|
113
|
+
children: columnHeader(
|
|
114
|
+
col,
|
|
115
|
+
prop,
|
|
116
|
+
ctx.presentation ? prop.title || col : /* @__PURE__ */ jsx(TableColumnHeader, { name: col, schema: prop })
|
|
117
|
+
)
|
|
76
118
|
},
|
|
77
119
|
col
|
|
78
120
|
)),
|
|
@@ -88,7 +130,7 @@ function TableArray({
|
|
|
88
130
|
ctx.presentation ? "border-border" : "border-input"
|
|
89
131
|
),
|
|
90
132
|
children: [
|
|
91
|
-
columns.map(([col
|
|
133
|
+
columns.map(([col]) => /* @__PURE__ */ jsx("td", { className: cn("px-2 py-1", !ctx.presentation && !readOnly && "min-w-40"), children: cell(item, i, col) }, col)),
|
|
92
134
|
removable && /* @__PURE__ */ jsx("td", { className: "px-2 py-1", children: /* @__PURE__ */ jsx(
|
|
93
135
|
"button",
|
|
94
136
|
{
|
|
@@ -123,6 +165,15 @@ function TableArray({
|
|
|
123
165
|
]
|
|
124
166
|
}
|
|
125
167
|
);
|
|
168
|
+
if (toolbar === void 0) return table;
|
|
169
|
+
const spec = field.itemSpec ?? resolveItemSpec(field.schema, itemSchema);
|
|
170
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
171
|
+
/* @__PURE__ */ jsxs("div", { "data-jsf-array-summary": true, className: "flex items-center justify-between gap-2", children: [
|
|
172
|
+
/* @__PURE__ */ jsx("p", { className: cn("text-muted-foreground", labelSizeClass[ctx.size]), children: items.length === 0 ? noItemsLabel(spec) : itemCountLabel(spec, items.length) }),
|
|
173
|
+
/* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center", children: toolbar })
|
|
174
|
+
] }),
|
|
175
|
+
table
|
|
176
|
+
] });
|
|
126
177
|
}
|
|
127
178
|
function TableColumnHeader({
|
|
128
179
|
name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-form-table-array.js","sources":["../../src/components/json-schema-form-table-array.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\nimport { isPlainObject, removeIndex, setIndex } from \"../lib/collections\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiAdd, UiTrash } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport { Button } from \"./button\";\nimport {\n controlHeightClass,\n controlMinHeightClass,\n inputSizeClass,\n} from \"./json-schema-form-size\";\nimport { schemaHelper } from \"./json-schema-form-resolve\";\nimport { appendInstancePath } from \"./json-schema-form-errors\";\nimport {\n canAddItem,\n canRemoveItem,\n orderByClickyOrder,\n orderByXOrder,\n seedFromSchema,\n} from \"./json-schema-form-utils\";\nimport type {\n FieldControl,\n JsonSchemaProperty,\n RenderContext,\n} from \"./json-schema-form-types\";\n\n// TableArray renders an object-item array as a table: a header row of the item's\n// property names and one row per item with value-only controls, plus per-row\n// remove and an add button. Driven by `x-layout: table`.\nexport function TableArray({\n field,\n ctx,\n readOnly,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n readOnly: boolean;\n}) {\n const items = Array.isArray(field.value) ? field.value : [];\n const itemSchema = field.itemSchema ?? { type: \"object\" };\n // The item schema's explicit `x-order` is the authority for the keys it names:\n // per-property `x-clicky-order` sorts first (so it still orders everything\n // `x-order` leaves out, and composes across merged sources), then `x-order`\n // pulls its listed columns to the front in its own sequence.\n const columns = orderByXOrder(\n orderByClickyOrder(Object.entries(itemSchema.properties ?? {})),\n itemSchema[\"x-order\"],\n );\n const childCtx: RenderContext = { ...ctx, readOnly, depth: ctx.depth + 1 };\n // The trash column disappears with the buttons that would have filled it, so\n // an array of a fixed length reads as a table rather than one with a blank\n // gutter down the side.\n const removable = !readOnly && canRemoveItem(field, items.length);\n\n function cell(\n item: unknown,\n rowIndex: number,\n col: string,\n prop: JsonSchemaProperty,\n ): ReactNode {\n const obj = isPlainObject(item) ? item : {};\n const nodes = ctx.render.renderFieldNodes(\n {\n key: `${field.key}[${rowIndex}].${col}`,\n prop,\n required: false,\n value: obj[col],\n onChange: (next) =>\n field.onChange(setIndex(items, rowIndex, { ...obj, [col]: next })),\n instancePath: appendInstancePath(\n appendInstancePath(ctx.instancePath, rowIndex),\n col,\n ),\n },\n childCtx,\n );\n return ctx.presentation ? (\n <div\n className={cn(\n \"flex min-w-0 items-center [overflow-wrap:anywhere] [&_span[data-jsf-readonly]]:h-auto [&_span[data-jsf-readonly]]:min-w-0\",\n controlMinHeightClass[ctx.size],\n )}\n >\n {nodes?.value}\n </div>\n ) : (\n (nodes?.value ?? null)\n );\n }\n\n return (\n <div\n className={cn(\n \"overflow-x-auto\",\n !ctx.presentation && \"rounded-md border border-input\",\n )}\n >\n <table className=\"w-full text-sm\">\n <thead>\n <tr\n className={cn(\n \"border-b bg-muted/40 text-left\",\n ctx.presentation ? \"border-border\" : \"border-input\",\n )}\n >\n {columns.map(([col, prop]) => (\n <th\n key={col}\n className=\"px-2 py-1 text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]\"\n >\n {ctx.presentation ? (\n prop.title || col\n ) : (\n <TableColumnHeader name={col} schema={prop} />\n )}\n </th>\n ))}\n {removable && <th className=\"w-10 px-2 py-1\" />}\n </tr>\n </thead>\n <tbody>\n {items.map((item, i) => (\n <tr\n key={i}\n className={cn(\n \"border-b last:border-b-0 align-top\",\n ctx.presentation ? \"border-border\" : \"border-input\",\n )}\n >\n {columns.map(([col, prop]) => (\n <td key={col} className={cn(\"px-2 py-1\", !ctx.presentation && !readOnly && \"min-w-40\")}>\n {cell(item, i, col, prop)}\n </td>\n ))}\n {removable && (\n <td className=\"px-2 py-1\">\n <button\n type=\"button\"\n aria-label={`Remove item ${i + 1}`}\n className={cn(\n \"inline-flex aspect-square items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\",\n controlHeightClass[ctx.size],\n )}\n onClick={() => field.onChange(removeIndex(items, i))}\n >\n <Icon icon={UiTrash} className=\"text-sm\" />\n </button>\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n {!readOnly && canAddItem(field, items.length) && (\n <div className=\"p-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className={cn(\"gap-1.5\", inputSizeClass[ctx.size])}\n onClick={() =>\n field.onChange([...items, seedFromSchema(itemSchema)])\n }\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n Add item\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nfunction TableColumnHeader({\n name,\n schema,\n}: {\n name: string;\n schema: JsonSchemaProperty;\n}) {\n const label =\n typeof schema.title === \"string\" && schema.title ? schema.title : name;\n const helper = schemaHelper(schema);\n if (!helper) return label;\n\n return (\n <HoverCard\n placement=\"bottom\"\n trigger={\n <button\n type=\"button\"\n aria-label={`${label} help`}\n className=\"cursor-help border-b border-dotted border-current text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {label}\n </button>\n }\n cardClassName=\"max-w-xs whitespace-normal text-left font-normal text-foreground\"\n >\n {helper}\n </HoverCard>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"json-schema-form-table-array.js","sources":["../../src/components/json-schema-form-table-array.tsx"],"sourcesContent":["import { type ReactNode } from \"react\";\nimport { isPlainObject, removeIndex, setIndex } from \"../lib/collections\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiAdd, UiTrash } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport { Button } from \"./button\";\nimport {\n controlHeightClass,\n controlMinHeightClass,\n inputSizeClass,\n} from \"./json-schema-form-size\";\nimport { resolveControl, schemaHelper } from \"./json-schema-form-resolve\";\nimport { applyPostExtensions } from \"./json-schema-form-extensions\";\nimport { appendInstancePath } from \"./json-schema-form-errors\";\nimport { applyChangeEffects } from \"./json-schema-form-listeners\";\nimport { tableColumnOptions, tableLayout } from \"./json-schema-form-array-view\";\nimport { itemCountLabel, noItemsLabel, resolveItemSpec } from \"./json-schema-form-item-summary\";\nimport { labelSizeClass } from \"./json-schema-form-size\";\nimport {\n canAddItem,\n canRemoveItem,\n seedFromSchema,\n} from \"./json-schema-form-utils\";\nimport type {\n FieldControl,\n JsonSchemaObject,\n JsonSchemaProperty,\n RenderContext,\n} from \"./json-schema-form-types\";\n\n// TableArray renders an object-item array as a table: a header row of the item's\n// property names and one row per item with value-only controls, plus per-row\n// remove and an add button. The grid view of an object array; see ObjectArrayView.\nexport function TableArray({\n field,\n ctx,\n readOnly,\n toolbar,\n}: {\n field: FieldControl;\n ctx: RenderContext;\n readOnly: boolean;\n /** List-level actions, right-aligned on a slim line above the table beside the row count. */\n toolbar?: ReactNode;\n}) {\n const items = Array.isArray(field.value) ? field.value : [];\n const itemSchema = field.itemSchema ?? { type: \"object\" };\n // A table read-only as a whole — a view (the form's `readOnly` prop or a\n // readOnly ancestor; see RenderContext.viewOnly) or the array's own\n // `readOnly` — renders every cell as its value, exactly as a column the\n // schema (or a listener patch) marks readOnly does: a readOnly field is value\n // text wherever it sits, and in a table the grid itself is the structure a\n // disabled control would otherwise keep visible. `x-disabled`, which only\n // reaches ctx.readOnly, keeps real controls, disabled.\n const options = tableColumnOptions(field, ctx);\n const valueCells = options.valueCells;\n // Columns are the union across rows of each row's effective item properties\n // under its own listener state — `allOf` members included, so a listener\n // path that patches one cell (appended as an allOf member) reaches it —\n // minus the cells no row would render: `x-hidden`, a readOnly cell under\n // hideReadOnlyFields, and a writeOnly cell in a read-only view. A cell its\n // own row hides renders as an empty placeholder in a column another row\n // shows. The item schema's explicit `x-order` is the authority for the keys\n // it names: per-property `x-clicky-order` sorts first, then `x-order` pulls\n // its listed columns to the front in its own sequence.\n const { columns, rows } = tableLayout(itemSchema, items, options);\n // hideReadOnlyFields already dropped the declared-readOnly columns; the\n // cells a read-only table marks readOnly itself must still render.\n const childCtx: RenderContext = {\n ...ctx,\n readOnly,\n depth: ctx.depth + 1,\n ...(valueCells ? { hideReadOnlyFields: false } : {}),\n };\n // The trash column disappears with the buttons that would have filled it, so\n // an array of a fixed length reads as a table rather than one with a blank\n // gutter down the side.\n const removable = !readOnly && canRemoveItem(field, items.length);\n\n // A cell renders its OWN row's property, so a listener's readOnly, enable or\n // patch reaches that row alone, and commits through the row's value\n // listeners exactly as an item of the list views does.\n function cell(item: unknown, rowIndex: number, col: string): ReactNode {\n const obj = isPlainObject(item) ? item : {};\n const prop = rows[rowIndex]?.[col];\n const nodes = prop\n ? ctx.render.renderFieldNodes(\n {\n key: `${field.key}[${rowIndex}].${col}`,\n prop: valueCells ? { ...prop, readOnly: true } : prop,\n required: false,\n value: obj[col],\n onChange: (next) =>\n field.onChange(\n setIndex(\n items,\n rowIndex,\n applyChangeEffects(itemSchema as JsonSchemaObject, {\n root: options.rootValue ?? obj,\n ...(options.evaluate ? { evaluate: options.evaluate } : {}),\n value: obj,\n key: col,\n next,\n }),\n ),\n ),\n instancePath: appendInstancePath(\n appendInstancePath(ctx.instancePath, rowIndex),\n col,\n ),\n },\n childCtx,\n )\n : null;\n if (!nodes) return <span data-jsf-cell-placeholder aria-hidden=\"true\" className={cn(\"block\", controlMinHeightClass[ctx.size])} />;\n return ctx.presentation ? (\n <div\n className={cn(\n \"flex min-w-0 items-center [overflow-wrap:anywhere] [&_span[data-jsf-readonly]]:h-auto [&_span[data-jsf-readonly]]:min-w-0\",\n controlMinHeightClass[ctx.size],\n )}\n >\n {nodes.value}\n </div>\n ) : (\n nodes.value\n );\n }\n\n // A column header is its column's label, so post extensions decorate it as\n // they decorate every field label, on the column's field (keyed by the\n // property name, after the pre-extensions). Only the returned label is used:\n // a header holds no value, and value adornments belong in the cells. A\n // column names no single value, so the context carries no instancePath.\n function columnHeader(col: string, prop: JsonSchemaProperty, header: ReactNode): ReactNode {\n const roots = {\n ...(ctx.rootValue ? { rootValue: ctx.rootValue } : {}),\n ...(ctx.onRootChange ? { onRootChange: ctx.onRootChange } : {}),\n };\n let column: FieldControl | null = resolveControl({ key: col, prop, required: false, value: undefined, onChange: () => {} });\n for (const ext of ctx.pre) {\n if (!column) break;\n column = ext(column, { key: col, prop, value: undefined, ...roots });\n }\n if (!column) return header;\n return applyPostExtensions(column, { label: header, value: null }, ctx.post, roots).label;\n }\n\n const table = (\n <div\n className={cn(\n \"overflow-x-auto\",\n !ctx.presentation && \"rounded-md border border-input\",\n )}\n >\n <table className=\"w-full text-sm\">\n <thead>\n <tr\n className={cn(\n \"border-b bg-muted/40 text-left\",\n ctx.presentation ? \"border-border\" : \"border-input\",\n )}\n >\n {columns.map(([col, prop]) => (\n <th\n key={col}\n className=\"px-2 py-1 text-xs font-medium text-muted-foreground [overflow-wrap:anywhere]\"\n >\n {columnHeader(\n col,\n prop,\n ctx.presentation ? prop.title || col : <TableColumnHeader name={col} schema={prop} />,\n )}\n </th>\n ))}\n {removable && <th className=\"w-10 px-2 py-1\" />}\n </tr>\n </thead>\n <tbody>\n {items.map((item, i) => (\n <tr\n key={i}\n className={cn(\n \"border-b last:border-b-0 align-top\",\n ctx.presentation ? \"border-border\" : \"border-input\",\n )}\n >\n {columns.map(([col]) => (\n <td key={col} className={cn(\"px-2 py-1\", !ctx.presentation && !readOnly && \"min-w-40\")}>\n {cell(item, i, col)}\n </td>\n ))}\n {removable && (\n <td className=\"px-2 py-1\">\n <button\n type=\"button\"\n aria-label={`Remove item ${i + 1}`}\n className={cn(\n \"inline-flex aspect-square items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\",\n controlHeightClass[ctx.size],\n )}\n onClick={() => field.onChange(removeIndex(items, i))}\n >\n <Icon icon={UiTrash} className=\"text-sm\" />\n </button>\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n {!readOnly && canAddItem(field, items.length) && (\n <div className=\"p-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className={cn(\"gap-1.5\", inputSizeClass[ctx.size])}\n onClick={() =>\n field.onChange([...items, seedFromSchema(itemSchema)])\n }\n >\n <Icon icon={UiAdd} className=\"text-sm\" />\n Add item\n </Button>\n </div>\n )}\n </div>\n );\n if (toolbar === undefined) return table;\n // The same summary line the item list shows, so switching views keeps the\n // count and the toolbar where they were.\n const spec = field.itemSpec ?? resolveItemSpec(field.schema, itemSchema);\n return (\n <div className=\"flex flex-col gap-2\">\n <div data-jsf-array-summary className=\"flex items-center justify-between gap-2\">\n <p className={cn(\"text-muted-foreground\", labelSizeClass[ctx.size])}>\n {items.length === 0 ? noItemsLabel(spec) : itemCountLabel(spec, items.length)}\n </p>\n <div className=\"flex shrink-0 items-center\">{toolbar}</div>\n </div>\n {table}\n </div>\n );\n}\n\nfunction TableColumnHeader({\n name,\n schema,\n}: {\n name: string;\n schema: JsonSchemaProperty;\n}) {\n const label =\n typeof schema.title === \"string\" && schema.title ? schema.title : name;\n const helper = schemaHelper(schema);\n if (!helper) return label;\n\n return (\n <HoverCard\n placement=\"bottom\"\n trigger={\n <button\n type=\"button\"\n aria-label={`${label} help`}\n className=\"cursor-help border-b border-dotted border-current text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {label}\n </button>\n }\n cardClassName=\"max-w-xs whitespace-normal text-left font-normal text-foreground\"\n >\n {helper}\n </HoverCard>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAkCO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,QAAQ,CAAA;AACzD,QAAM,aAAa,MAAM,cAAc,EAAE,MAAM,SAAA;AAQ/C,QAAM,UAAU,mBAAmB,OAAO,GAAG;AAC7C,QAAM,aAAa,QAAQ;AAU3B,QAAM,EAAE,SAAS,KAAA,IAAS,YAAY,YAAY,OAAO,OAAO;AAGhE,QAAM,WAA0B;AAAA,IAC9B,GAAG;AAAA,IACH;AAAA,IACA,OAAO,IAAI,QAAQ;AAAA,IACnB,GAAI,aAAa,EAAE,oBAAoB,UAAU,CAAA;AAAA,EAAC;AAKpD,QAAM,YAAY,CAAC,YAAY,cAAc,OAAO,MAAM,MAAM;AAKhE,WAAS,KAAK,MAAe,UAAkB,KAAwB;;AACrE,UAAM,MAAM,cAAc,IAAI,IAAI,OAAO,CAAA;AACzC,UAAM,QAAO,UAAK,QAAQ,MAAb,mBAAiB;AAC9B,UAAM,QAAQ,OACV,IAAI,OAAO;AAAA,MACT;AAAA,QACE,KAAK,GAAG,MAAM,GAAG,IAAI,QAAQ,KAAK,GAAG;AAAA,QACrC,MAAM,aAAa,EAAE,GAAG,MAAM,UAAU,SAAS;AAAA,QACjD,UAAU;AAAA,QACV,OAAO,IAAI,GAAG;AAAA,QACd,UAAU,CAAC,SACT,MAAM;AAAA,UACJ;AAAA,YACE;AAAA,YACA;AAAA,YACA,mBAAmB,YAAgC;AAAA,cACjD,MAAM,QAAQ,aAAa;AAAA,cAC3B,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAA,IAAa,CAAA;AAAA,cACxD,OAAO;AAAA,cACP,KAAK;AAAA,cACL;AAAA,YAAA,CACD;AAAA,UAAA;AAAA,QACH;AAAA,QAEJ,cAAc;AAAA,UACZ,mBAAmB,IAAI,cAAc,QAAQ;AAAA,UAC7C;AAAA,QAAA;AAAA,MACF;AAAA,MAEF;AAAA,IAAA,IAEF;AACJ,QAAI,CAAC,MAAO,QAAO,oBAAC,QAAA,EAAK,6BAAyB,MAAC,eAAY,QAAO,WAAW,GAAG,SAAS,sBAAsB,IAAI,IAAI,CAAC,GAAG;AAC/H,WAAO,IAAI,eACT;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,sBAAsB,IAAI,IAAI;AAAA,QAAA;AAAA,QAG/B,UAAA,MAAM;AAAA,MAAA;AAAA,IAAA,IAGT,MAAM;AAAA,EAEV;AAOA,WAAS,aAAa,KAAa,MAA0B,QAA8B;AACzF,UAAM,QAAQ;AAAA,MACZ,GAAI,IAAI,YAAY,EAAE,WAAW,IAAI,UAAA,IAAc,CAAA;AAAA,MACnD,GAAI,IAAI,eAAe,EAAE,cAAc,IAAI,aAAA,IAAiB,CAAA;AAAA,IAAC;AAE/D,QAAI,SAA8B,eAAe,EAAE,KAAK,KAAK,MAAM,UAAU,OAAO,OAAO,QAAW,UAAU,MAAM;AAAA,IAAC,GAAG;AAC1H,eAAW,OAAO,IAAI,KAAK;AACzB,UAAI,CAAC,OAAQ;AACb,eAAS,IAAI,QAAQ,EAAE,KAAK,KAAK,MAAM,OAAO,QAAW,GAAG,OAAO;AAAA,IACrE;AACA,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO,oBAAoB,QAAQ,EAAE,OAAO,QAAQ,OAAO,KAAA,GAAQ,IAAI,MAAM,KAAK,EAAE;AAAA,EACtF;AAEA,QAAM,QACJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,CAAC,IAAI,gBAAgB;AAAA,MAAA;AAAA,MAGvB,UAAA;AAAA,QAAA,qBAAC,SAAA,EAAM,WAAU,kBACf,UAAA;AAAA,UAAA,oBAAC,SAAA,EACC,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,IAAI,eAAe,kBAAkB;AAAA,cAAA;AAAA,cAGtC,UAAA;AAAA,gBAAA,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,MACtB;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,WAAU;AAAA,oBAET,UAAA;AAAA,sBACC;AAAA,sBACA;AAAA,sBACA,IAAI,eAAe,KAAK,SAAS,0BAAO,mBAAA,EAAkB,MAAM,KAAK,QAAQ,KAAA,CAAM;AAAA,oBAAA;AAAA,kBACrF;AAAA,kBAPK;AAAA,gBAAA,CASR;AAAA,gBACA,aAAa,oBAAC,MAAA,EAAG,WAAU,iBAAA,CAAiB;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,GAEjD;AAAA,8BACC,SAAA,EACE,UAAA,MAAM,IAAI,CAAC,MAAM,MAChB;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAW;AAAA,gBACT;AAAA,gBACA,IAAI,eAAe,kBAAkB;AAAA,cAAA;AAAA,cAGtC,UAAA;AAAA,gBAAA,QAAQ,IAAI,CAAC,CAAC,GAAG,MAChB,oBAAC,MAAA,EAAa,WAAW,GAAG,aAAa,CAAC,IAAI,gBAAgB,CAAC,YAAY,UAAU,GAClF,UAAA,KAAK,MAAM,GAAG,GAAG,EAAA,GADX,GAET,CACD;AAAA,gBACA,aACC,oBAAC,MAAA,EAAG,WAAU,aACZ,UAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,cAAY,eAAe,IAAI,CAAC;AAAA,oBAChC,WAAW;AAAA,sBACT;AAAA,sBACA,mBAAmB,IAAI,IAAI;AAAA,oBAAA;AAAA,oBAE7B,SAAS,MAAM,MAAM,SAAS,YAAY,OAAO,CAAC,CAAC;AAAA,oBAEnD,UAAA,oBAAC,MAAA,EAAK,MAAM,SAAS,WAAU,UAAA,CAAU;AAAA,kBAAA;AAAA,gBAAA,EAC3C,CACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAxBG;AAAA,UAAA,CA2BR,EAAA,CACH;AAAA,QAAA,GACF;AAAA,QACC,CAAC,YAAY,WAAW,OAAO,MAAM,MAAM,KAC1C,oBAAC,OAAA,EAAI,WAAU,OACb,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,WAAW,GAAG,WAAW,eAAe,IAAI,IAAI,CAAC;AAAA,YACjD,SAAS,MACP,MAAM,SAAS,CAAC,GAAG,OAAO,eAAe,UAAU,CAAC,CAAC;AAAA,YAGvD,UAAA;AAAA,cAAA,oBAAC,MAAA,EAAK,MAAM,OAAO,WAAU,WAAU;AAAA,cAAE;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,EAE3C,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIN,MAAI,YAAY,OAAW,QAAO;AAGlC,QAAM,OAAO,MAAM,YAAY,gBAAgB,MAAM,QAAQ,UAAU;AACvE,SACE,qBAAC,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,IAAA,qBAAC,OAAA,EAAI,0BAAsB,MAAC,WAAU,2CACpC,UAAA;AAAA,MAAA,oBAAC,OAAE,WAAW,GAAG,yBAAyB,eAAe,IAAI,IAAI,CAAC,GAC/D,gBAAM,WAAW,IAAI,aAAa,IAAI,IAAI,eAAe,MAAM,MAAM,MAAM,GAC9E;AAAA,MACA,oBAAC,OAAA,EAAI,WAAU,8BAA8B,UAAA,QAAA,CAAQ;AAAA,IAAA,GACvD;AAAA,IACC;AAAA,EAAA,GACH;AAEJ;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AACF,GAGG;AACD,QAAM,QACJ,OAAO,OAAO,UAAU,YAAY,OAAO,QAAQ,OAAO,QAAQ;AACpE,QAAM,SAAS,aAAa,MAAM;AAClC,MAAI,CAAC,OAAQ,QAAO;AAEpB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SACE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,cAAY,GAAG,KAAK;AAAA,UACpB,WAAU;AAAA,UAET,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGL,eAAc;AAAA,MAEb,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -33,12 +33,24 @@ const TONE_EDGE_CLASS = {
|
|
|
33
33
|
emerald: "border-l-emerald-400 dark:border-l-emerald-500",
|
|
34
34
|
rose: "border-l-rose-400 dark:border-l-rose-500"
|
|
35
35
|
};
|
|
36
|
+
const TONE_DOT_CLASS = {
|
|
37
|
+
neutral: "bg-muted-foreground dark:bg-muted-foreground",
|
|
38
|
+
slate: "bg-slate-400 dark:bg-slate-500",
|
|
39
|
+
violet: "bg-violet-400 dark:bg-violet-500",
|
|
40
|
+
amber: "bg-amber-400 dark:bg-amber-500",
|
|
41
|
+
sky: "bg-sky-400 dark:bg-sky-500",
|
|
42
|
+
teal: "bg-teal-400 dark:bg-teal-500",
|
|
43
|
+
indigo: "bg-indigo-400 dark:bg-indigo-500",
|
|
44
|
+
emerald: "bg-emerald-400 dark:bg-emerald-500",
|
|
45
|
+
rose: "bg-rose-400 dark:bg-rose-500"
|
|
46
|
+
};
|
|
36
47
|
function isFieldTone(value) {
|
|
37
48
|
return typeof value === "string" && TONES.includes(value);
|
|
38
49
|
}
|
|
39
50
|
function normalizeTone(value) {
|
|
40
51
|
return isFieldTone(value) ? value : "neutral";
|
|
41
52
|
}
|
|
53
|
+
exports.TONE_DOT_CLASS = TONE_DOT_CLASS;
|
|
42
54
|
exports.TONE_EDGE_CLASS = TONE_EDGE_CLASS;
|
|
43
55
|
exports.TONE_GLYPH_CLASS = TONE_GLYPH_CLASS;
|
|
44
56
|
exports.isFieldTone = isFieldTone;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-form-tone.cjs","sources":["../../src/components/json-schema-form-tone.ts"],"sourcesContent":["// FieldTone is the closed colour vocabulary a schema may name via `x-enum-tones`\n// to give an enum value its own hue (e.g. a parameter's type). It extends the\n// `IconTone` union in ../data/Icon with the two extra hues a six-value enum needs,\n// so the two vocabularies read as one system.\n//\n// The class strings below are written out IN FULL and never composed. Tailwind\n// scans source text, so `bg-${tone}-100` would emit nothing — and a tone name\n// arriving from a consumer's JSON schema is data the scanner never sees at all.\n// Every entry carries a `dark:` variant; the clicky-ui preset binds `dark:` to\n// [data-theme=\"dark\"], so tones track the theme switcher rather than the OS.\nexport type FieldTone =\n | \"neutral\"\n | \"slate\"\n | \"violet\"\n | \"amber\"\n | \"sky\"\n | \"teal\"\n | \"indigo\"\n | \"emerald\"\n | \"rose\";\n\nconst TONES: readonly FieldTone[] = [\n \"neutral\",\n \"slate\",\n \"violet\",\n \"amber\",\n \"sky\",\n \"teal\",\n \"indigo\",\n \"emerald\",\n \"rose\",\n];\n\n// Soft filled tile + inset ring — the accordion's leading glyph and enum chip.\nexport const TONE_GLYPH_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted text-muted-foreground ring-border\",\n slate:\n \"bg-slate-100 text-slate-700 ring-slate-300/60 dark:bg-slate-400/10 dark:text-slate-300 dark:ring-slate-400/25\",\n violet:\n \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\",\n amber:\n \"bg-amber-100 text-amber-800 ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\",\n sky: \"bg-sky-100 text-sky-700 ring-sky-300/60 dark:bg-sky-400/10 dark:text-sky-300 dark:ring-sky-400/25\",\n teal: \"bg-teal-100 text-teal-700 ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\",\n indigo:\n \"bg-indigo-100 text-indigo-700 ring-indigo-300/60 dark:bg-indigo-400/10 dark:text-indigo-300 dark:ring-indigo-400/25\",\n emerald:\n \"bg-emerald-100 text-emerald-700 ring-emerald-300/60 dark:bg-emerald-400/10 dark:text-emerald-300 dark:ring-emerald-400/25\",\n rose: \"bg-rose-100 text-rose-700 ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\",\n};\n\n// Left border accent — a stack of items is scannable by hue before you read it.\nexport const TONE_EDGE_CLASS: Record<FieldTone, string> = {\n neutral: \"border-l-border dark:border-l-border\",\n slate: \"border-l-slate-400 dark:border-l-slate-500\",\n violet: \"border-l-violet-400 dark:border-l-violet-500\",\n amber: \"border-l-amber-400 dark:border-l-amber-500\",\n sky: \"border-l-sky-400 dark:border-l-sky-500\",\n teal: \"border-l-teal-400 dark:border-l-teal-500\",\n indigo: \"border-l-indigo-400 dark:border-l-indigo-500\",\n emerald: \"border-l-emerald-400 dark:border-l-emerald-500\",\n rose: \"border-l-rose-400 dark:border-l-rose-500\",\n};\n\n// Solid dot — the compact legend/rail marker.\nexport const TONE_DOT_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted-foreground dark:bg-muted-foreground\",\n slate: \"bg-slate-400 dark:bg-slate-500\",\n violet: \"bg-violet-400 dark:bg-violet-500\",\n amber: \"bg-amber-400 dark:bg-amber-500\",\n sky: \"bg-sky-400 dark:bg-sky-500\",\n teal: \"bg-teal-400 dark:bg-teal-500\",\n indigo: \"bg-indigo-400 dark:bg-indigo-500\",\n emerald: \"bg-emerald-400 dark:bg-emerald-500\",\n rose: \"bg-rose-400 dark:bg-rose-500\",\n};\n\nexport function isFieldTone(value: unknown): value is FieldTone {\n return typeof value === \"string\" && (TONES as readonly string[]).includes(value);\n}\n\n// normalizeTone coerces an unvalidated schema value to a known tone. A tone is\n// pure decoration, so an unrecognised one falls back to neutral rather than\n// failing the render.\nexport function normalizeTone(value: unknown): FieldTone {\n return isFieldTone(value) ? value : \"neutral\";\n}\n\nexport function fieldToneNames(): readonly FieldTone[] {\n return TONES;\n}\n"],"names":[],"mappings":";;AAqBA,MAAM,QAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,mBAA8C;AAAA,EACzD,SAAS;AAAA,EACT,OACE;AAAA,EACF,QACE;AAAA,EACF,OACE;AAAA,EACF,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QACE;AAAA,EACF,SACE;AAAA,EACF,MAAM;AACR;AAGO,MAAM,kBAA6C;AAAA,EACxD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;
|
|
1
|
+
{"version":3,"file":"json-schema-form-tone.cjs","sources":["../../src/components/json-schema-form-tone.ts"],"sourcesContent":["// FieldTone is the closed colour vocabulary a schema may name via `x-enum-tones`\n// to give an enum value its own hue (e.g. a parameter's type). It extends the\n// `IconTone` union in ../data/Icon with the two extra hues a six-value enum needs,\n// so the two vocabularies read as one system.\n//\n// The class strings below are written out IN FULL and never composed. Tailwind\n// scans source text, so `bg-${tone}-100` would emit nothing — and a tone name\n// arriving from a consumer's JSON schema is data the scanner never sees at all.\n// Every entry carries a `dark:` variant; the clicky-ui preset binds `dark:` to\n// [data-theme=\"dark\"], so tones track the theme switcher rather than the OS.\nexport type FieldTone =\n | \"neutral\"\n | \"slate\"\n | \"violet\"\n | \"amber\"\n | \"sky\"\n | \"teal\"\n | \"indigo\"\n | \"emerald\"\n | \"rose\";\n\nconst TONES: readonly FieldTone[] = [\n \"neutral\",\n \"slate\",\n \"violet\",\n \"amber\",\n \"sky\",\n \"teal\",\n \"indigo\",\n \"emerald\",\n \"rose\",\n];\n\n// Soft filled tile + inset ring — the accordion's leading glyph and enum chip.\nexport const TONE_GLYPH_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted text-muted-foreground ring-border\",\n slate:\n \"bg-slate-100 text-slate-700 ring-slate-300/60 dark:bg-slate-400/10 dark:text-slate-300 dark:ring-slate-400/25\",\n violet:\n \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\",\n amber:\n \"bg-amber-100 text-amber-800 ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\",\n sky: \"bg-sky-100 text-sky-700 ring-sky-300/60 dark:bg-sky-400/10 dark:text-sky-300 dark:ring-sky-400/25\",\n teal: \"bg-teal-100 text-teal-700 ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\",\n indigo:\n \"bg-indigo-100 text-indigo-700 ring-indigo-300/60 dark:bg-indigo-400/10 dark:text-indigo-300 dark:ring-indigo-400/25\",\n emerald:\n \"bg-emerald-100 text-emerald-700 ring-emerald-300/60 dark:bg-emerald-400/10 dark:text-emerald-300 dark:ring-emerald-400/25\",\n rose: \"bg-rose-100 text-rose-700 ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\",\n};\n\n// Left border accent — a stack of items is scannable by hue before you read it.\nexport const TONE_EDGE_CLASS: Record<FieldTone, string> = {\n neutral: \"border-l-border dark:border-l-border\",\n slate: \"border-l-slate-400 dark:border-l-slate-500\",\n violet: \"border-l-violet-400 dark:border-l-violet-500\",\n amber: \"border-l-amber-400 dark:border-l-amber-500\",\n sky: \"border-l-sky-400 dark:border-l-sky-500\",\n teal: \"border-l-teal-400 dark:border-l-teal-500\",\n indigo: \"border-l-indigo-400 dark:border-l-indigo-500\",\n emerald: \"border-l-emerald-400 dark:border-l-emerald-500\",\n rose: \"border-l-rose-400 dark:border-l-rose-500\",\n};\n\n// Solid dot — the compact legend/rail marker.\nexport const TONE_DOT_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted-foreground dark:bg-muted-foreground\",\n slate: \"bg-slate-400 dark:bg-slate-500\",\n violet: \"bg-violet-400 dark:bg-violet-500\",\n amber: \"bg-amber-400 dark:bg-amber-500\",\n sky: \"bg-sky-400 dark:bg-sky-500\",\n teal: \"bg-teal-400 dark:bg-teal-500\",\n indigo: \"bg-indigo-400 dark:bg-indigo-500\",\n emerald: \"bg-emerald-400 dark:bg-emerald-500\",\n rose: \"bg-rose-400 dark:bg-rose-500\",\n};\n\nexport function isFieldTone(value: unknown): value is FieldTone {\n return typeof value === \"string\" && (TONES as readonly string[]).includes(value);\n}\n\n// normalizeTone coerces an unvalidated schema value to a known tone. A tone is\n// pure decoration, so an unrecognised one falls back to neutral rather than\n// failing the render.\nexport function normalizeTone(value: unknown): FieldTone {\n return isFieldTone(value) ? value : \"neutral\";\n}\n\nexport function fieldToneNames(): readonly FieldTone[] {\n return TONES;\n}\n"],"names":[],"mappings":";;AAqBA,MAAM,QAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,mBAA8C;AAAA,EACzD,SAAS;AAAA,EACT,OACE;AAAA,EACF,QACE;AAAA,EACF,OACE;AAAA,EACF,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QACE;AAAA,EACF,SACE;AAAA,EACF,MAAM;AACR;AAGO,MAAM,kBAA6C;AAAA,EACxD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAGO,MAAM,iBAA4C;AAAA,EACvD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAEO,SAAS,YAAY,OAAoC;AAC9D,SAAO,OAAO,UAAU,YAAa,MAA4B,SAAS,KAAK;AACjF;AAKO,SAAS,cAAc,OAA2B;AACvD,SAAO,YAAY,KAAK,IAAI,QAAQ;AACtC;;;;;;"}
|
|
@@ -31,6 +31,17 @@ const TONE_EDGE_CLASS = {
|
|
|
31
31
|
emerald: "border-l-emerald-400 dark:border-l-emerald-500",
|
|
32
32
|
rose: "border-l-rose-400 dark:border-l-rose-500"
|
|
33
33
|
};
|
|
34
|
+
const TONE_DOT_CLASS = {
|
|
35
|
+
neutral: "bg-muted-foreground dark:bg-muted-foreground",
|
|
36
|
+
slate: "bg-slate-400 dark:bg-slate-500",
|
|
37
|
+
violet: "bg-violet-400 dark:bg-violet-500",
|
|
38
|
+
amber: "bg-amber-400 dark:bg-amber-500",
|
|
39
|
+
sky: "bg-sky-400 dark:bg-sky-500",
|
|
40
|
+
teal: "bg-teal-400 dark:bg-teal-500",
|
|
41
|
+
indigo: "bg-indigo-400 dark:bg-indigo-500",
|
|
42
|
+
emerald: "bg-emerald-400 dark:bg-emerald-500",
|
|
43
|
+
rose: "bg-rose-400 dark:bg-rose-500"
|
|
44
|
+
};
|
|
34
45
|
function isFieldTone(value) {
|
|
35
46
|
return typeof value === "string" && TONES.includes(value);
|
|
36
47
|
}
|
|
@@ -38,6 +49,7 @@ function normalizeTone(value) {
|
|
|
38
49
|
return isFieldTone(value) ? value : "neutral";
|
|
39
50
|
}
|
|
40
51
|
export {
|
|
52
|
+
TONE_DOT_CLASS,
|
|
41
53
|
TONE_EDGE_CLASS,
|
|
42
54
|
TONE_GLYPH_CLASS,
|
|
43
55
|
isFieldTone,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-form-tone.js","sources":["../../src/components/json-schema-form-tone.ts"],"sourcesContent":["// FieldTone is the closed colour vocabulary a schema may name via `x-enum-tones`\n// to give an enum value its own hue (e.g. a parameter's type). It extends the\n// `IconTone` union in ../data/Icon with the two extra hues a six-value enum needs,\n// so the two vocabularies read as one system.\n//\n// The class strings below are written out IN FULL and never composed. Tailwind\n// scans source text, so `bg-${tone}-100` would emit nothing — and a tone name\n// arriving from a consumer's JSON schema is data the scanner never sees at all.\n// Every entry carries a `dark:` variant; the clicky-ui preset binds `dark:` to\n// [data-theme=\"dark\"], so tones track the theme switcher rather than the OS.\nexport type FieldTone =\n | \"neutral\"\n | \"slate\"\n | \"violet\"\n | \"amber\"\n | \"sky\"\n | \"teal\"\n | \"indigo\"\n | \"emerald\"\n | \"rose\";\n\nconst TONES: readonly FieldTone[] = [\n \"neutral\",\n \"slate\",\n \"violet\",\n \"amber\",\n \"sky\",\n \"teal\",\n \"indigo\",\n \"emerald\",\n \"rose\",\n];\n\n// Soft filled tile + inset ring — the accordion's leading glyph and enum chip.\nexport const TONE_GLYPH_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted text-muted-foreground ring-border\",\n slate:\n \"bg-slate-100 text-slate-700 ring-slate-300/60 dark:bg-slate-400/10 dark:text-slate-300 dark:ring-slate-400/25\",\n violet:\n \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\",\n amber:\n \"bg-amber-100 text-amber-800 ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\",\n sky: \"bg-sky-100 text-sky-700 ring-sky-300/60 dark:bg-sky-400/10 dark:text-sky-300 dark:ring-sky-400/25\",\n teal: \"bg-teal-100 text-teal-700 ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\",\n indigo:\n \"bg-indigo-100 text-indigo-700 ring-indigo-300/60 dark:bg-indigo-400/10 dark:text-indigo-300 dark:ring-indigo-400/25\",\n emerald:\n \"bg-emerald-100 text-emerald-700 ring-emerald-300/60 dark:bg-emerald-400/10 dark:text-emerald-300 dark:ring-emerald-400/25\",\n rose: \"bg-rose-100 text-rose-700 ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\",\n};\n\n// Left border accent — a stack of items is scannable by hue before you read it.\nexport const TONE_EDGE_CLASS: Record<FieldTone, string> = {\n neutral: \"border-l-border dark:border-l-border\",\n slate: \"border-l-slate-400 dark:border-l-slate-500\",\n violet: \"border-l-violet-400 dark:border-l-violet-500\",\n amber: \"border-l-amber-400 dark:border-l-amber-500\",\n sky: \"border-l-sky-400 dark:border-l-sky-500\",\n teal: \"border-l-teal-400 dark:border-l-teal-500\",\n indigo: \"border-l-indigo-400 dark:border-l-indigo-500\",\n emerald: \"border-l-emerald-400 dark:border-l-emerald-500\",\n rose: \"border-l-rose-400 dark:border-l-rose-500\",\n};\n\n// Solid dot — the compact legend/rail marker.\nexport const TONE_DOT_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted-foreground dark:bg-muted-foreground\",\n slate: \"bg-slate-400 dark:bg-slate-500\",\n violet: \"bg-violet-400 dark:bg-violet-500\",\n amber: \"bg-amber-400 dark:bg-amber-500\",\n sky: \"bg-sky-400 dark:bg-sky-500\",\n teal: \"bg-teal-400 dark:bg-teal-500\",\n indigo: \"bg-indigo-400 dark:bg-indigo-500\",\n emerald: \"bg-emerald-400 dark:bg-emerald-500\",\n rose: \"bg-rose-400 dark:bg-rose-500\",\n};\n\nexport function isFieldTone(value: unknown): value is FieldTone {\n return typeof value === \"string\" && (TONES as readonly string[]).includes(value);\n}\n\n// normalizeTone coerces an unvalidated schema value to a known tone. A tone is\n// pure decoration, so an unrecognised one falls back to neutral rather than\n// failing the render.\nexport function normalizeTone(value: unknown): FieldTone {\n return isFieldTone(value) ? value : \"neutral\";\n}\n\nexport function fieldToneNames(): readonly FieldTone[] {\n return TONES;\n}\n"],"names":[],"mappings":"AAqBA,MAAM,QAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,mBAA8C;AAAA,EACzD,SAAS;AAAA,EACT,OACE;AAAA,EACF,QACE;AAAA,EACF,OACE;AAAA,EACF,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QACE;AAAA,EACF,SACE;AAAA,EACF,MAAM;AACR;AAGO,MAAM,kBAA6C;AAAA,EACxD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;
|
|
1
|
+
{"version":3,"file":"json-schema-form-tone.js","sources":["../../src/components/json-schema-form-tone.ts"],"sourcesContent":["// FieldTone is the closed colour vocabulary a schema may name via `x-enum-tones`\n// to give an enum value its own hue (e.g. a parameter's type). It extends the\n// `IconTone` union in ../data/Icon with the two extra hues a six-value enum needs,\n// so the two vocabularies read as one system.\n//\n// The class strings below are written out IN FULL and never composed. Tailwind\n// scans source text, so `bg-${tone}-100` would emit nothing — and a tone name\n// arriving from a consumer's JSON schema is data the scanner never sees at all.\n// Every entry carries a `dark:` variant; the clicky-ui preset binds `dark:` to\n// [data-theme=\"dark\"], so tones track the theme switcher rather than the OS.\nexport type FieldTone =\n | \"neutral\"\n | \"slate\"\n | \"violet\"\n | \"amber\"\n | \"sky\"\n | \"teal\"\n | \"indigo\"\n | \"emerald\"\n | \"rose\";\n\nconst TONES: readonly FieldTone[] = [\n \"neutral\",\n \"slate\",\n \"violet\",\n \"amber\",\n \"sky\",\n \"teal\",\n \"indigo\",\n \"emerald\",\n \"rose\",\n];\n\n// Soft filled tile + inset ring — the accordion's leading glyph and enum chip.\nexport const TONE_GLYPH_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted text-muted-foreground ring-border\",\n slate:\n \"bg-slate-100 text-slate-700 ring-slate-300/60 dark:bg-slate-400/10 dark:text-slate-300 dark:ring-slate-400/25\",\n violet:\n \"bg-violet-100 text-violet-700 ring-violet-300/60 dark:bg-violet-400/10 dark:text-violet-300 dark:ring-violet-400/25\",\n amber:\n \"bg-amber-100 text-amber-800 ring-amber-300/60 dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/25\",\n sky: \"bg-sky-100 text-sky-700 ring-sky-300/60 dark:bg-sky-400/10 dark:text-sky-300 dark:ring-sky-400/25\",\n teal: \"bg-teal-100 text-teal-700 ring-teal-300/60 dark:bg-teal-400/10 dark:text-teal-300 dark:ring-teal-400/25\",\n indigo:\n \"bg-indigo-100 text-indigo-700 ring-indigo-300/60 dark:bg-indigo-400/10 dark:text-indigo-300 dark:ring-indigo-400/25\",\n emerald:\n \"bg-emerald-100 text-emerald-700 ring-emerald-300/60 dark:bg-emerald-400/10 dark:text-emerald-300 dark:ring-emerald-400/25\",\n rose: \"bg-rose-100 text-rose-700 ring-rose-300/60 dark:bg-rose-400/10 dark:text-rose-300 dark:ring-rose-400/25\",\n};\n\n// Left border accent — a stack of items is scannable by hue before you read it.\nexport const TONE_EDGE_CLASS: Record<FieldTone, string> = {\n neutral: \"border-l-border dark:border-l-border\",\n slate: \"border-l-slate-400 dark:border-l-slate-500\",\n violet: \"border-l-violet-400 dark:border-l-violet-500\",\n amber: \"border-l-amber-400 dark:border-l-amber-500\",\n sky: \"border-l-sky-400 dark:border-l-sky-500\",\n teal: \"border-l-teal-400 dark:border-l-teal-500\",\n indigo: \"border-l-indigo-400 dark:border-l-indigo-500\",\n emerald: \"border-l-emerald-400 dark:border-l-emerald-500\",\n rose: \"border-l-rose-400 dark:border-l-rose-500\",\n};\n\n// Solid dot — the compact legend/rail marker.\nexport const TONE_DOT_CLASS: Record<FieldTone, string> = {\n neutral: \"bg-muted-foreground dark:bg-muted-foreground\",\n slate: \"bg-slate-400 dark:bg-slate-500\",\n violet: \"bg-violet-400 dark:bg-violet-500\",\n amber: \"bg-amber-400 dark:bg-amber-500\",\n sky: \"bg-sky-400 dark:bg-sky-500\",\n teal: \"bg-teal-400 dark:bg-teal-500\",\n indigo: \"bg-indigo-400 dark:bg-indigo-500\",\n emerald: \"bg-emerald-400 dark:bg-emerald-500\",\n rose: \"bg-rose-400 dark:bg-rose-500\",\n};\n\nexport function isFieldTone(value: unknown): value is FieldTone {\n return typeof value === \"string\" && (TONES as readonly string[]).includes(value);\n}\n\n// normalizeTone coerces an unvalidated schema value to a known tone. A tone is\n// pure decoration, so an unrecognised one falls back to neutral rather than\n// failing the render.\nexport function normalizeTone(value: unknown): FieldTone {\n return isFieldTone(value) ? value : \"neutral\";\n}\n\nexport function fieldToneNames(): readonly FieldTone[] {\n return TONES;\n}\n"],"names":[],"mappings":"AAqBA,MAAM,QAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,mBAA8C;AAAA,EACzD,SAAS;AAAA,EACT,OACE;AAAA,EACF,QACE;AAAA,EACF,OACE;AAAA,EACF,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QACE;AAAA,EACF,SACE;AAAA,EACF,MAAM;AACR;AAGO,MAAM,kBAA6C;AAAA,EACxD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAGO,MAAM,iBAA4C;AAAA,EACvD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AACR;AAEO,SAAS,YAAY,OAAoC;AAC9D,SAAO,OAAO,UAAU,YAAa,MAA4B,SAAS,KAAK;AACjF;AAKO,SAAS,cAAc,OAA2B;AACvD,SAAO,YAAY,KAAK,IAAI,QAAQ;AACtC;"}
|
|
@@ -3,8 +3,10 @@ import { LabelIconSpec } from '../data/Icon.js';
|
|
|
3
3
|
import { FieldTone } from './json-schema-form-tone.js';
|
|
4
4
|
import { MdxEditorPluginOptions } from './mdx-editor-options.js';
|
|
5
5
|
import { LookupDescriptor } from './json-schema-form-runtime-types.js';
|
|
6
|
+
import { ChangeListener } from './json-schema-form-listener-types.js';
|
|
6
7
|
export type { FieldTone };
|
|
7
8
|
export type * from './json-schema-form-runtime-types.js';
|
|
9
|
+
export type * from './json-schema-form-listener-types.js';
|
|
8
10
|
export interface JsonSchemaProperty {
|
|
9
11
|
type?: JsonSchemaType | JsonSchemaType[];
|
|
10
12
|
description?: string;
|
|
@@ -14,6 +16,7 @@ export interface JsonSchemaProperty {
|
|
|
14
16
|
default?: unknown;
|
|
15
17
|
format?: string;
|
|
16
18
|
readOnly?: boolean;
|
|
19
|
+
writeOnly?: boolean;
|
|
17
20
|
minimum?: number;
|
|
18
21
|
maximum?: number;
|
|
19
22
|
multipleOf?: number;
|
|
@@ -30,6 +33,7 @@ export interface JsonSchemaProperty {
|
|
|
30
33
|
if?: JsonSchemaProperty;
|
|
31
34
|
then?: JsonSchemaProperty;
|
|
32
35
|
else?: JsonSchemaProperty;
|
|
36
|
+
not?: JsonSchemaProperty;
|
|
33
37
|
"x-order"?: string[];
|
|
34
38
|
"x-enum-labels"?: Record<string, string>;
|
|
35
39
|
"x-enum-icons"?: Record<string, string>;
|
|
@@ -43,6 +47,11 @@ export interface JsonSchemaProperty {
|
|
|
43
47
|
"x-clicky-order"?: number;
|
|
44
48
|
"x-md-editor"?: MdxEditorPluginOptions;
|
|
45
49
|
"x-help"?: JsonSchemaHelpBlock;
|
|
50
|
+
"x-hidden"?: boolean;
|
|
51
|
+
"x-hidden-by"?: string;
|
|
52
|
+
"x-disabled"?: boolean;
|
|
53
|
+
"x-on-change"?: ChangeListener[];
|
|
54
|
+
"x-on-load"?: ChangeListener[];
|
|
46
55
|
"x-label-classes"?: string;
|
|
47
56
|
"x-input-classes"?: string;
|
|
48
57
|
"x-input-prefix"?: string;
|
|
@@ -55,16 +64,22 @@ export interface JsonSchemaProperty {
|
|
|
55
64
|
"x-column-min-width"?: string;
|
|
56
65
|
"x-columns-max-width"?: string;
|
|
57
66
|
"x-classes"?: string;
|
|
67
|
+
"x-icon"?: string;
|
|
68
|
+
"x-layout"?: "inline" | "stack" | "table";
|
|
69
|
+
"x-table-max-columns"?: number;
|
|
70
|
+
"x-clicky-lookup"?: LookupDescriptor;
|
|
58
71
|
[key: string]: unknown;
|
|
59
72
|
}
|
|
60
73
|
export type JsonSchemaType = "object" | "array" | "string" | "integer" | "number" | "boolean" | "null";
|
|
61
74
|
export interface JsonSchemaConditional {
|
|
62
75
|
if?: JsonSchemaProperty;
|
|
63
76
|
then?: JsonSchemaProperty;
|
|
77
|
+
else?: JsonSchemaProperty;
|
|
64
78
|
properties?: Record<string, JsonSchemaProperty>;
|
|
65
79
|
required?: string[];
|
|
66
80
|
additionalProperties?: boolean | JsonSchemaProperty;
|
|
67
81
|
description?: string;
|
|
82
|
+
"x-on-load"?: ChangeListener[];
|
|
68
83
|
}
|
|
69
84
|
export interface JsonSchemaObject extends JsonSchemaProperty {
|
|
70
85
|
type?: "object";
|
|
@@ -140,6 +155,8 @@ export interface FieldControl {
|
|
|
140
155
|
value: unknown;
|
|
141
156
|
onChange: (next: unknown) => void;
|
|
142
157
|
readOnly?: boolean;
|
|
158
|
+
writeOnly?: boolean;
|
|
159
|
+
disabled?: boolean;
|
|
143
160
|
invalid?: boolean;
|
|
144
161
|
labelIcon?: LabelIconSpec;
|
|
145
162
|
labelClassName?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-form-types.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"json-schema-form-types.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const utils = require("../lib/utils.cjs");
|
|
4
4
|
const jsonSchemaFormSize = require("./json-schema-form-size.cjs");
|
|
5
|
+
const jsonSchemaFormConditionals = require("./json-schema-form-conditionals.cjs");
|
|
5
6
|
const INPUT_BASE = "w-full min-w-0 rounded-md border border-input bg-background text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring";
|
|
6
7
|
function inputClass(size) {
|
|
7
8
|
return utils.cn(INPUT_BASE, jsonSchemaFormSize.inputSizeClass[size]);
|
|
@@ -43,8 +44,12 @@ function toStringArray(value) {
|
|
|
43
44
|
if (!Array.isArray(value)) return [];
|
|
44
45
|
return value.filter((entry) => typeof entry === "string");
|
|
45
46
|
}
|
|
47
|
+
function rendersAsSection(field, mode) {
|
|
48
|
+
return mode !== "properties" && (field.kind === "object" || field.layout === "table" || field.arrayDisplay === "accordion" || field.arrayDisplay === "cards" || field.kind === "array" && field.arrayDisplay !== "stacked" && hasObjectItemProperties(field.itemSchema));
|
|
49
|
+
}
|
|
46
50
|
function hasObjectItemProperties(items) {
|
|
47
|
-
|
|
51
|
+
if (!items) return false;
|
|
52
|
+
return Object.keys(jsonSchemaFormConditionals.effectiveProperties(items, {}).properties).length > 0;
|
|
48
53
|
}
|
|
49
54
|
function normalizeColumns(value) {
|
|
50
55
|
if (value === "auto") return "auto";
|
|
@@ -149,6 +154,7 @@ exports.orderByClickyOrder = orderByClickyOrder;
|
|
|
149
154
|
exports.orderByPriority = orderByPriority;
|
|
150
155
|
exports.orderByXOrder = orderByXOrder;
|
|
151
156
|
exports.orderRequiredFirst = orderRequiredFirst;
|
|
157
|
+
exports.rendersAsSection = rendersAsSection;
|
|
152
158
|
exports.seedFromSchema = seedFromSchema;
|
|
153
159
|
exports.softError = softError;
|
|
154
160
|
exports.toStringArray = toStringArray;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-form-utils.cjs","sources":["../../src/components/json-schema-form-utils.ts"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { inputSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport type {\n FieldControl,\n FieldOption,\n GridColumns,\n JsonSchemaProperty,\n} from \"./json-schema-form-types\";\n\n// Non-size styling shared by every text-like input box; the size token supplies\n// height, horizontal padding, and text size (see inputSizeClass).\nconst INPUT_BASE =\n \"w-full min-w-0 rounded-md border border-input bg-background text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n\nexport function inputClass(size: FormSize): string {\n return cn(INPUT_BASE, inputSizeClass[size]);\n}\n\n// encodeIdPart escapes one path token (or the id prefix) injectively: every\n// character outside [A-Za-z0-9] becomes `_<hex char code>_`, and the empty token\n// — a legal JSON Schema property name — becomes a lone `_`. The escape is\n// self-delimiting (it always starts and ends with `_`, and a literal `_` escapes\n// to `_5f_`), so distinct tokens can never share an encoding and `-` stays free\n// as a segment separator. Percent-encoding was rejected because `%` in an id,\n// while legal HTML, has to be escaped again inside a `#id` CSS selector; this\n// alphabet ([A-Za-z0-9_-]) is safe as-is for `document.querySelector`.\nfunction encodeIdPart(value: string): string {\n if (value === \"\") return \"_\";\n return value.replace(/[^A-Za-z0-9]/g, (char) => `_${char.charCodeAt(0).toString(16)}_`);\n}\n\n// fieldInputId derives a control's DOM id from its JSON-pointer instance path,\n// not from its leaf key: a schema that repeats a property name under two parents\n// (e.g. /journalLine1/asset and /journalLine2/asset) must not produce the same\n// id, or every `label[for]` binds to the first control. Each decoded pointer\n// token is escaped with encodeIdPart and joined with \"-\", so distinct paths\n// always produce distinct ids: \"/asset-class\", \"/asset_class\", \"/asset.class\"\n// and \"/asset/class\" are four different ids, and an empty token is preserved\n// (\"/a//b\" ≠ \"/a/b\"). The prefix is escaped the same way, so prefix \"a\" + \"/b-c\"\n// cannot collide with prefix \"a-b\" + \"/c\".\nexport function fieldInputId(instancePath: string, prefix?: string): string {\n const tokens = instancePath === \"\" ? [] : instancePath.replace(/^\\//, \"\").split(\"/\");\n const safe = tokens\n .map((token) => encodeIdPart(token.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\")))\n .join(\"-\");\n return prefix ? `jsf-${encodeIdPart(prefix)}-${safe}` : `jsf-${safe}`;\n}\n\n// fieldErrorId names the element that holds a field's validation messages, so a\n// control can point at it with aria-describedby.\nexport function fieldErrorId(fieldId: string): string {\n return `${fieldId}-error`;\n}\n\n// fieldAriaProps is the assistive-technology half of a control: the visual `*`\n// and red message mean nothing to a screen reader on their own, so every\n// editable control spreads these onto its input element.\nexport function fieldAriaProps(\n field: FieldControl,\n fieldId: string,\n): {\n \"aria-required\"?: true;\n \"aria-invalid\"?: true;\n \"aria-describedby\"?: string;\n} {\n return {\n ...(field.required ? { \"aria-required\": true as const } : {}),\n ...(field.invalid ? { \"aria-invalid\": true as const, \"aria-describedby\": fieldErrorId(fieldId) } : {}),\n };\n}\n\n// comboboxAriaProps is the fieldAriaProps equivalent for Combobox, which takes\n// the same state as named props rather than raw aria-* attributes.\nexport function comboboxAriaProps(\n field: FieldControl,\n fieldId: string,\n): { ariaRequired?: true; invalid?: true; describedBy?: string } {\n return {\n ...(field.required ? { ariaRequired: true as const } : {}),\n ...(field.invalid ? { invalid: true as const, describedBy: fieldErrorId(fieldId) } : {}),\n };\n}\n\nexport function defaultPlaceholder(schema: JsonSchemaProperty): string {\n if (schema.default != null && typeof schema.default !== \"object\") return String(schema.default);\n return \"\";\n}\n\nexport function toText(value: unknown): string {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"object\") return \"\";\n return String(value);\n}\n\n// toStringArray normalises the committed value of a multi-value control. The\n// schema types it as an array of strings, but a form mid-edit can hold anything,\n// so a non-string entry is dropped rather than rendered as a broken tag.\nexport function toStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\n// hasObjectItemProperties reports whether an array's items are objects with a\n// fixed `properties` set — the precondition for both the column-per-property\n// table and the summary-row accordion, which need to know the item's shape.\nexport function hasObjectItemProperties(\n items: JsonSchemaProperty | undefined,\n): boolean {\n return (\n !!items && !!items.properties && Object.keys(items.properties).length > 0\n );\n}\n\n// Object-level `x-columns`: how many equal columns to split a stacked object\n// into. \"auto\" fits as many as the width allows. A number is clamped to [1, 12]\n// (a standard 12-track grid, so a 3-across row of span-4 fields and a 4-across\n// row of span-3 fields share one object); anything invalid is a single column.\nexport function normalizeColumns(value: unknown): GridColumns {\n if (value === \"auto\") return \"auto\";\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n) || n < 1) return 1;\n return Math.min(Math.trunc(n), 12);\n}\n\n// Per-field `x-col-span`: how many of the object's columns a field occupies.\n// \"full\" spans the whole row. Under `x-columns: \"auto\"` a numeric span cannot be\n// clamped against a track count that only exists at layout time, so it is capped\n// at the 12-track maximum instead. Invalid falls back to 1.\nexport function normalizeColSpan(\n value: unknown,\n columns: GridColumns,\n): number | \"full\" {\n if (value === \"full\") return \"full\";\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n) || n < 1) return 1;\n return Math.min(Math.trunc(n), columns === \"auto\" ? 12 : columns);\n}\n\n// The `x-columns: \"auto\"` column floor: wide enough for a labelled control to\n// stay readable, narrow enough that a 1440px pane gets three columns, not two.\nexport const DEFAULT_COLUMN_MIN_WIDTH = \"15rem\";\n\n// cssLength guards a schema-supplied CSS length before it reaches an inline\n// style. Non-strings (and the empty string) fall back rather than emitting a\n// declaration the browser will drop.\nexport function cssLength(value: unknown, fallback: string): string {\n return typeof value === \"string\" && value.trim() ? value.trim() : fallback;\n}\n\n// withSyntheticValue prepends the current value as an option when it is not in\n// the enum, so an out-of-enum value (e.g. a template token) still displays.\nexport function withSyntheticValue(options: FieldOption[], value: string): FieldOption[] {\n if (!value || options.some((o) => o.value === value)) return options;\n return [{ value, label: value }, ...options];\n}\n\n// keyPickerOptions narrows the map-key enum to keys not already used by another\n// entry, while always keeping this row's current key so it stays selectable.\nexport function keyPickerOptions(\n options: FieldOption[],\n usedKeys: string[],\n currentKey: string,\n): FieldOption[] {\n const taken = new Set(usedKeys.filter((k) => k !== currentKey));\n return options.filter((o) => !taken.has(o.value));\n}\n\n// orderByXOrder reorders property entries by the schema's `x-order` hint: keys\n// named there render first (in that order), the rest keep document order. A\n// missing/empty hint is a no-op, so document order remains the default.\nexport function orderByXOrder<T>(entries: [string, T][], order: unknown): [string, T][] {\n if (!Array.isArray(order) || order.length === 0) return entries;\n const rank = new Map(\n order.filter((k): k is string => typeof k === \"string\").map((k, i) => [k, i]),\n );\n const listed = entries\n .filter(([key]) => rank.has(key))\n .sort((a, b) => rank.get(a[0])! - rank.get(b[0])!);\n const rest = entries.filter(([key]) => !rank.has(key));\n return [...listed, ...rest];\n}\n\n// orderByClickyOrder stably sorts property entries by each property's numeric\n// `x-clicky-order` (lower first); entries without it keep their incoming order\n// after the ordered ones. An explicit index tie-break keeps it stable regardless\n// of the engine's sort stability. Unlike the object-level `x-order` array, this\n// composes across merged if/then branches because each property carries its own\n// order — the right tool when fields come from different (embedded) sources.\nexport function orderByClickyOrder(\n entries: [string, JsonSchemaProperty][],\n): [string, JsonSchemaProperty][] {\n const rank = (prop: JsonSchemaProperty): number => {\n const o = prop[\"x-clicky-order\"];\n return typeof o === \"number\" ? o : Number.POSITIVE_INFINITY;\n };\n return entries\n .map((entry, index) => ({ entry, index, rank: rank(entry[1]) }))\n .sort((a, b) => a.rank - b.rank || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// orderRequiredFirst stably partitions property entries so the keys named in\n// `required` come first (in their original order), then the rest (in theirs).\n// A stable two-pass partition, so it never reshuffles within either group.\nexport function orderRequiredFirst<T>(\n entries: [string, T][],\n required: string[],\n): [string, T][] {\n const isRequired = new Set(required);\n const head = entries.filter(([key]) => isRequired.has(key));\n const tail = entries.filter(([key]) => !isRequired.has(key));\n return [...head, ...tail];\n}\n\n// isEmptyValue reports whether a field's value carries no data, so priority\n// sorting can sink unfilled fields and `hideEmpty` can drop them. Empty =\n// undefined/null/\"\" plus empty arrays and objects; `false` and `0` count as\n// filled (they are choices).\n//\n// An object is empty when everything inside it is, not merely when it has no\n// keys: a section whose every field is blank carries no more data than a missing\n// one, and rendering it as a titled, empty block says otherwise.\nexport function isEmptyValue(value: unknown): boolean {\n if (value === undefined || value === null || value === \"\") return true;\n if (Array.isArray(value)) return value.every(isEmptyValue);\n if (typeof value === \"object\") return Object.values(value).every(isEmptyValue);\n return false;\n}\n\n// orderByPriority sorts property entries so the fields that matter most surface\n// first, ranking each by a score: +2 if required, +1 if its value is non-empty.\n// Required-and-filled lead, then required-and-empty, then optional-and-filled,\n// then optional-and-empty. Ties keep their incoming order (explicit index\n// tie-break, so it does not depend on the engine's sort stability).\nexport function orderByPriority<T>(\n entries: [string, T][],\n required: string[],\n values: Record<string, unknown>,\n): [string, T][] {\n const isRequired = new Set(required);\n const score = (key: string): number =>\n (isRequired.has(key) ? 2 : 0) + (isEmptyValue(values[key]) ? 0 : 1);\n return entries\n .map((entry, index) => ({ entry, index, score: score(entry[0]) }))\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// softError computes a display-only validation hint. It never blocks onChange.\n// Consumers suppress the unknown-enum hint by setting allowCustomValue.\nexport function softError(field: FieldControl): string | undefined {\n const v = field.value;\n const isEmpty = v === undefined || v === null || v === \"\";\n if (field.required && isEmpty) return \"Required\";\n\n if (field.kind === \"number\" && typeof field.minimum === \"number\" && typeof v === \"number\") {\n if (v < field.minimum) return `Must be ≥ ${field.minimum}`;\n }\n\n if (field.kind === \"enum\" && !field.allowCustomValue && !isEmpty) {\n const known = (field.options ?? []).some((o) => o.value === String(v));\n if (!known) return \"Unknown value (allowed)\";\n }\n return undefined;\n}\n\n/**\n * canAddItem / canRemoveItem read the array's maxItems/minItems bounds.\n *\n * The bounds gate the controls rather than validate the value: an array already\n * at or past a bound offers no way to make it worse, but one that arrives\n * outside its bounds is never trapped — removal stays available above minItems\n * whatever the schema says, and an array the producer owns end to end simply\n * declares min === max and offers neither.\n */\nexport function canAddItem(field: FieldControl, count: number): boolean {\n return field.maxItems === undefined || count < field.maxItems;\n}\n\nexport function canRemoveItem(field: FieldControl, count: number): boolean {\n return field.minItems === undefined || count > field.minItems;\n}\n\n// seedFromSchema produces the initial value for a freshly-added array item or\n// object field, honouring an explicit default.\nexport function seedFromSchema(schema: JsonSchemaProperty): unknown {\n if (schema.default !== undefined) return schema.default;\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n if (type === \"array\") return [];\n if (type === \"object\") return {};\n if (type === \"boolean\") return false;\n // Numbers seed as \"\" so the soft Required hint can show without coercion\n // surprises; the number control coerces on first real input.\n return \"\";\n}\n"],"names":["cn","inputSizeClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"json-schema-form-utils.cjs","sources":["../../src/components/json-schema-form-utils.ts"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { inputSizeClass, type FormSize } from \"./json-schema-form-size\";\nimport { effectiveProperties } from \"./json-schema-form-conditionals\";\nimport type {\n FieldControl,\n FieldOption,\n FormLayout,\n GridColumns,\n JsonSchemaObject,\n JsonSchemaProperty,\n} from \"./json-schema-form-types\";\n\n// Non-size styling shared by every text-like input box; the size token supplies\n// height, horizontal padding, and text size (see inputSizeClass).\nconst INPUT_BASE =\n \"w-full min-w-0 rounded-md border border-input bg-background text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n\nexport function inputClass(size: FormSize): string {\n return cn(INPUT_BASE, inputSizeClass[size]);\n}\n\n// encodeIdPart escapes one path token (or the id prefix) injectively: every\n// character outside [A-Za-z0-9] becomes `_<hex char code>_`, and the empty token\n// — a legal JSON Schema property name — becomes a lone `_`. The escape is\n// self-delimiting (it always starts and ends with `_`, and a literal `_` escapes\n// to `_5f_`), so distinct tokens can never share an encoding and `-` stays free\n// as a segment separator. Percent-encoding was rejected because `%` in an id,\n// while legal HTML, has to be escaped again inside a `#id` CSS selector; this\n// alphabet ([A-Za-z0-9_-]) is safe as-is for `document.querySelector`.\nfunction encodeIdPart(value: string): string {\n if (value === \"\") return \"_\";\n return value.replace(/[^A-Za-z0-9]/g, (char) => `_${char.charCodeAt(0).toString(16)}_`);\n}\n\n// fieldInputId derives a control's DOM id from its JSON-pointer instance path,\n// not from its leaf key: a schema that repeats a property name under two parents\n// (e.g. /journalLine1/asset and /journalLine2/asset) must not produce the same\n// id, or every `label[for]` binds to the first control. Each decoded pointer\n// token is escaped with encodeIdPart and joined with \"-\", so distinct paths\n// always produce distinct ids: \"/asset-class\", \"/asset_class\", \"/asset.class\"\n// and \"/asset/class\" are four different ids, and an empty token is preserved\n// (\"/a//b\" ≠ \"/a/b\"). The prefix is escaped the same way, so prefix \"a\" + \"/b-c\"\n// cannot collide with prefix \"a-b\" + \"/c\".\nexport function fieldInputId(instancePath: string, prefix?: string): string {\n const tokens = instancePath === \"\" ? [] : instancePath.replace(/^\\//, \"\").split(\"/\");\n const safe = tokens\n .map((token) => encodeIdPart(token.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\")))\n .join(\"-\");\n return prefix ? `jsf-${encodeIdPart(prefix)}-${safe}` : `jsf-${safe}`;\n}\n\n// fieldErrorId names the element that holds a field's validation messages, so a\n// control can point at it with aria-describedby.\nexport function fieldErrorId(fieldId: string): string {\n return `${fieldId}-error`;\n}\n\n// fieldAriaProps is the assistive-technology half of a control: the visual `*`\n// and red message mean nothing to a screen reader on their own, so every\n// editable control spreads these onto its input element.\nexport function fieldAriaProps(\n field: FieldControl,\n fieldId: string,\n): {\n \"aria-required\"?: true;\n \"aria-invalid\"?: true;\n \"aria-describedby\"?: string;\n} {\n return {\n ...(field.required ? { \"aria-required\": true as const } : {}),\n ...(field.invalid ? { \"aria-invalid\": true as const, \"aria-describedby\": fieldErrorId(fieldId) } : {}),\n };\n}\n\n// comboboxAriaProps is the fieldAriaProps equivalent for Combobox, which takes\n// the same state as named props rather than raw aria-* attributes.\nexport function comboboxAriaProps(\n field: FieldControl,\n fieldId: string,\n): { ariaRequired?: true; invalid?: true; describedBy?: string } {\n return {\n ...(field.required ? { ariaRequired: true as const } : {}),\n ...(field.invalid ? { invalid: true as const, describedBy: fieldErrorId(fieldId) } : {}),\n };\n}\n\nexport function defaultPlaceholder(schema: JsonSchemaProperty): string {\n if (schema.default != null && typeof schema.default !== \"object\") return String(schema.default);\n return \"\";\n}\n\nexport function toText(value: unknown): string {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"object\") return \"\";\n return String(value);\n}\n\n// toStringArray normalises the committed value of a multi-value control. The\n// schema types it as an array of strings, but a form mid-edit can hold anything,\n// so a non-string entry is dropped rather than rendered as a broken tag.\nexport function toStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((entry): entry is string => typeof entry === \"string\");\n}\n\n// rendersAsSection reports whether a field renders as a full-width section\n// (ObjectSection) rather than an inline label + value row: objects, table\n// maps, and object arrays in every view but the stacked opt-out — the grid and\n// the item list the view menu switches between (see ObjectArrayView), and\n// cards — outside the properties layout. Keyed on the schema, not the chosen\n// view, so switching views never moves the array's heading.\nexport function rendersAsSection(field: FieldControl, mode: FormLayout[\"mode\"]): boolean {\n return (\n mode !== \"properties\" &&\n (field.kind === \"object\" ||\n field.layout === \"table\" ||\n field.arrayDisplay === \"accordion\" ||\n field.arrayDisplay === \"cards\" ||\n (field.kind === \"array\" &&\n field.arrayDisplay !== \"stacked\" &&\n hasObjectItemProperties(field.itemSchema)))\n );\n}\n\n// hasObjectItemProperties reports whether an array's items are objects with a\n// fixed set of properties — the precondition for both the column-per-property\n// table and the summary-row accordion, which need to know the item's shape.\n// Read through effectiveProperties, as TableArray reads its columns, so items\n// composed only of `allOf` members (flattened `$ref`s) count too.\nexport function hasObjectItemProperties(\n items: JsonSchemaProperty | undefined,\n): boolean {\n if (!items) return false;\n return Object.keys(effectiveProperties(items as JsonSchemaObject, {}).properties).length > 0;\n}\n\n// Object-level `x-columns`: how many equal columns to split a stacked object\n// into. \"auto\" fits as many as the width allows. A number is clamped to [1, 12]\n// (a standard 12-track grid, so a 3-across row of span-4 fields and a 4-across\n// row of span-3 fields share one object); anything invalid is a single column.\nexport function normalizeColumns(value: unknown): GridColumns {\n if (value === \"auto\") return \"auto\";\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n) || n < 1) return 1;\n return Math.min(Math.trunc(n), 12);\n}\n\n// Per-field `x-col-span`: how many of the object's columns a field occupies.\n// \"full\" spans the whole row. Under `x-columns: \"auto\"` a numeric span cannot be\n// clamped against a track count that only exists at layout time, so it is capped\n// at the 12-track maximum instead. Invalid falls back to 1.\nexport function normalizeColSpan(\n value: unknown,\n columns: GridColumns,\n): number | \"full\" {\n if (value === \"full\") return \"full\";\n const n = typeof value === \"number\" ? value : Number(value);\n if (!Number.isFinite(n) || n < 1) return 1;\n return Math.min(Math.trunc(n), columns === \"auto\" ? 12 : columns);\n}\n\n// The `x-columns: \"auto\"` column floor: wide enough for a labelled control to\n// stay readable, narrow enough that a 1440px pane gets three columns, not two.\nexport const DEFAULT_COLUMN_MIN_WIDTH = \"15rem\";\n\n// cssLength guards a schema-supplied CSS length before it reaches an inline\n// style. Non-strings (and the empty string) fall back rather than emitting a\n// declaration the browser will drop.\nexport function cssLength(value: unknown, fallback: string): string {\n return typeof value === \"string\" && value.trim() ? value.trim() : fallback;\n}\n\n// withSyntheticValue prepends the current value as an option when it is not in\n// the enum, so an out-of-enum value (e.g. a template token) still displays.\nexport function withSyntheticValue(options: FieldOption[], value: string): FieldOption[] {\n if (!value || options.some((o) => o.value === value)) return options;\n return [{ value, label: value }, ...options];\n}\n\n// keyPickerOptions narrows the map-key enum to keys not already used by another\n// entry, while always keeping this row's current key so it stays selectable.\nexport function keyPickerOptions(\n options: FieldOption[],\n usedKeys: string[],\n currentKey: string,\n): FieldOption[] {\n const taken = new Set(usedKeys.filter((k) => k !== currentKey));\n return options.filter((o) => !taken.has(o.value));\n}\n\n// orderByXOrder reorders property entries by the schema's `x-order` hint: keys\n// named there render first (in that order), the rest keep document order. A\n// missing/empty hint is a no-op, so document order remains the default.\nexport function orderByXOrder<T>(entries: [string, T][], order: unknown): [string, T][] {\n if (!Array.isArray(order) || order.length === 0) return entries;\n const rank = new Map(\n order.filter((k): k is string => typeof k === \"string\").map((k, i) => [k, i]),\n );\n const listed = entries\n .filter(([key]) => rank.has(key))\n .sort((a, b) => rank.get(a[0])! - rank.get(b[0])!);\n const rest = entries.filter(([key]) => !rank.has(key));\n return [...listed, ...rest];\n}\n\n// orderByClickyOrder stably sorts property entries by each property's numeric\n// `x-clicky-order` (lower first); entries without it keep their incoming order\n// after the ordered ones. An explicit index tie-break keeps it stable regardless\n// of the engine's sort stability. Unlike the object-level `x-order` array, this\n// composes across merged if/then branches because each property carries its own\n// order — the right tool when fields come from different (embedded) sources.\nexport function orderByClickyOrder(\n entries: [string, JsonSchemaProperty][],\n): [string, JsonSchemaProperty][] {\n const rank = (prop: JsonSchemaProperty): number => {\n const o = prop[\"x-clicky-order\"];\n return typeof o === \"number\" ? o : Number.POSITIVE_INFINITY;\n };\n return entries\n .map((entry, index) => ({ entry, index, rank: rank(entry[1]) }))\n .sort((a, b) => a.rank - b.rank || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// orderRequiredFirst stably partitions property entries so the keys named in\n// `required` come first (in their original order), then the rest (in theirs).\n// A stable two-pass partition, so it never reshuffles within either group.\nexport function orderRequiredFirst<T>(\n entries: [string, T][],\n required: string[],\n): [string, T][] {\n const isRequired = new Set(required);\n const head = entries.filter(([key]) => isRequired.has(key));\n const tail = entries.filter(([key]) => !isRequired.has(key));\n return [...head, ...tail];\n}\n\n// isEmptyValue reports whether a field's value carries no data, so priority\n// sorting can sink unfilled fields and `hideEmpty` can drop them. Empty =\n// undefined/null/\"\" plus empty arrays and objects; `false` and `0` count as\n// filled (they are choices).\n//\n// An object is empty when everything inside it is, not merely when it has no\n// keys: a section whose every field is blank carries no more data than a missing\n// one, and rendering it as a titled, empty block says otherwise.\nexport function isEmptyValue(value: unknown): boolean {\n if (value === undefined || value === null || value === \"\") return true;\n if (Array.isArray(value)) return value.every(isEmptyValue);\n if (typeof value === \"object\") return Object.values(value).every(isEmptyValue);\n return false;\n}\n\n// orderByPriority sorts property entries so the fields that matter most surface\n// first, ranking each by a score: +2 if required, +1 if its value is non-empty.\n// Required-and-filled lead, then required-and-empty, then optional-and-filled,\n// then optional-and-empty. Ties keep their incoming order (explicit index\n// tie-break, so it does not depend on the engine's sort stability).\nexport function orderByPriority<T>(\n entries: [string, T][],\n required: string[],\n values: Record<string, unknown>,\n): [string, T][] {\n const isRequired = new Set(required);\n const score = (key: string): number =>\n (isRequired.has(key) ? 2 : 0) + (isEmptyValue(values[key]) ? 0 : 1);\n return entries\n .map((entry, index) => ({ entry, index, score: score(entry[0]) }))\n .sort((a, b) => b.score - a.score || a.index - b.index)\n .map((ranked) => ranked.entry);\n}\n\n// softError computes a display-only validation hint. It never blocks onChange.\n// Consumers suppress the unknown-enum hint by setting allowCustomValue.\nexport function softError(field: FieldControl): string | undefined {\n const v = field.value;\n const isEmpty = v === undefined || v === null || v === \"\";\n if (field.required && isEmpty) return \"Required\";\n\n if (field.kind === \"number\" && typeof field.minimum === \"number\" && typeof v === \"number\") {\n if (v < field.minimum) return `Must be ≥ ${field.minimum}`;\n }\n\n if (field.kind === \"enum\" && !field.allowCustomValue && !isEmpty) {\n const known = (field.options ?? []).some((o) => o.value === String(v));\n if (!known) return \"Unknown value (allowed)\";\n }\n return undefined;\n}\n\n/**\n * canAddItem / canRemoveItem read the array's maxItems/minItems bounds.\n *\n * The bounds gate the controls rather than validate the value: an array already\n * at or past a bound offers no way to make it worse, but one that arrives\n * outside its bounds is never trapped — removal stays available above minItems\n * whatever the schema says, and an array the producer owns end to end simply\n * declares min === max and offers neither.\n */\nexport function canAddItem(field: FieldControl, count: number): boolean {\n return field.maxItems === undefined || count < field.maxItems;\n}\n\nexport function canRemoveItem(field: FieldControl, count: number): boolean {\n return field.minItems === undefined || count > field.minItems;\n}\n\n// seedFromSchema produces the initial value for a freshly-added array item or\n// object field, honouring an explicit default.\nexport function seedFromSchema(schema: JsonSchemaProperty): unknown {\n if (schema.default !== undefined) return schema.default;\n const type = Array.isArray(schema.type) ? schema.type[0] : schema.type;\n if (type === \"array\") return [];\n if (type === \"object\") return {};\n if (type === \"boolean\") return false;\n // Numbers seed as \"\" so the soft Required hint can show without coercion\n // surprises; the number control coerces on first real input.\n return \"\";\n}\n"],"names":["cn","inputSizeClass","effectiveProperties"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FormSize } from './json-schema-form-size.js';
|
|
2
|
-
import { FieldControl, FieldOption, GridColumns, JsonSchemaProperty } from './json-schema-form-types.js';
|
|
2
|
+
import { FieldControl, FieldOption, FormLayout, GridColumns, JsonSchemaProperty } from './json-schema-form-types.js';
|
|
3
3
|
export declare function inputClass(size: FormSize): string;
|
|
4
4
|
export declare function fieldInputId(instancePath: string, prefix?: string): string;
|
|
5
5
|
export declare function fieldErrorId(fieldId: string): string;
|
|
@@ -16,6 +16,7 @@ export declare function comboboxAriaProps(field: FieldControl, fieldId: string):
|
|
|
16
16
|
export declare function defaultPlaceholder(schema: JsonSchemaProperty): string;
|
|
17
17
|
export declare function toText(value: unknown): string;
|
|
18
18
|
export declare function toStringArray(value: unknown): string[];
|
|
19
|
+
export declare function rendersAsSection(field: FieldControl, mode: FormLayout["mode"]): boolean;
|
|
19
20
|
export declare function hasObjectItemProperties(items: JsonSchemaProperty | undefined): boolean;
|
|
20
21
|
export declare function normalizeColumns(value: unknown): GridColumns;
|
|
21
22
|
export declare function normalizeColSpan(value: unknown, columns: GridColumns): number | "full";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-form-utils.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"json-schema-form-utils.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { cn } from "../lib/utils.js";
|
|
2
2
|
import { inputSizeClass } from "./json-schema-form-size.js";
|
|
3
|
+
import { effectiveProperties } from "./json-schema-form-conditionals.js";
|
|
3
4
|
const INPUT_BASE = "w-full min-w-0 rounded-md border border-input bg-background text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring";
|
|
4
5
|
function inputClass(size) {
|
|
5
6
|
return cn(INPUT_BASE, inputSizeClass[size]);
|
|
@@ -41,8 +42,12 @@ function toStringArray(value) {
|
|
|
41
42
|
if (!Array.isArray(value)) return [];
|
|
42
43
|
return value.filter((entry) => typeof entry === "string");
|
|
43
44
|
}
|
|
45
|
+
function rendersAsSection(field, mode) {
|
|
46
|
+
return mode !== "properties" && (field.kind === "object" || field.layout === "table" || field.arrayDisplay === "accordion" || field.arrayDisplay === "cards" || field.kind === "array" && field.arrayDisplay !== "stacked" && hasObjectItemProperties(field.itemSchema));
|
|
47
|
+
}
|
|
44
48
|
function hasObjectItemProperties(items) {
|
|
45
|
-
|
|
49
|
+
if (!items) return false;
|
|
50
|
+
return Object.keys(effectiveProperties(items, {}).properties).length > 0;
|
|
46
51
|
}
|
|
47
52
|
function normalizeColumns(value) {
|
|
48
53
|
if (value === "auto") return "auto";
|
|
@@ -148,6 +153,7 @@ export {
|
|
|
148
153
|
orderByPriority,
|
|
149
154
|
orderByXOrder,
|
|
150
155
|
orderRequiredFirst,
|
|
156
|
+
rendersAsSection,
|
|
151
157
|
seedFromSchema,
|
|
152
158
|
softError,
|
|
153
159
|
toStringArray,
|