@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-form-layout.js","sources":["../../src/components/json-schema-form-layout.tsx"],"sourcesContent":["import { useContext, type ReactNode } from \"react\";\nimport { PropertiesContext } from \"../data/properties-context\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, LabelIcon, type LabelIconSpec } from \"../data/Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport type {\n FieldControl,\n FormLayout,\n GridColumns,\n HelpDisplay,\n} from \"./json-schema-form-types\";\nimport { DEFAULT_COLUMN_MIN_WIDTH } from \"./json-schema-form-utils\";\nimport {\n controlMinHeightClass,\n fieldInnerGapClass,\n inlineRowGapClass,\n labelSizeClass,\n stackedRowGapClass,\n type FormSize,\n} from \"./json-schema-form-size\";\n\n// FieldsGrid is the container every group of field rows renders into — the\n// top-level form and each nested object/map. In inline mode it owns the single\n// 2-column track definition: `fit-content(labelMaxWidth)` for the label column,\n// `minmax(0, valueMaxWidth)` for the value column. Every field row is a\n// `subgrid` that inherits these tracks, so all labels share one column width and\n// every value lines up — a real form grid, not per-row independent grids.\n// (`fit-content()` is the only valid CSS for \"size to content, clamped to a max\"\n// — `min(w, max-content)` is rejected by the browser, which silently drops the\n// whole declaration and collapses every row to a stacked-looking column. The\n// template is an inline style because Tailwind can't interpolate runtime widths.)\n// Stacked mode is a plain single-column grid.\nexport function FieldsGrid({\n layout,\n size,\n columns,\n columnMinWidth,\n columnsMaxWidth,\n className,\n children,\n}: {\n layout: FormLayout;\n size: FormSize;\n // Object-level `x-columns`: split a stacked object into N equal columns, or\n // \"auto\" to fit as many `columnMinWidth`-wide columns as the container allows.\n // Fields span one column unless they set `x-col-span`. Ignored in inline mode\n // (which owns its own 2-track label/value layout).\n columns?: GridColumns;\n // `x-columns: \"auto\"` only: the minmax() floor for one column, and an optional\n // cap on the whole grid so controls don't stretch edge to edge on a wide\n // screen. CSS lengths, applied inline — a runtime width can't be a Tailwind\n // arbitrary class, because the scanner never sees it.\n columnMinWidth?: string;\n columnsMaxWidth?: string;\n // Object-level `x-classes`: extra classes merged onto the grid container\n // (e.g. `gap-2`, padding). Applied last so a standard utility wins over the\n // defaults via tailwind-merge.\n className?: string;\n children: ReactNode;\n}) {\n const propertiesParent = useContext(PropertiesContext);\n if (layout.mode === \"properties\") {\n return (\n <div\n className={cn(\n \"min-w-0 overflow-hidden rounded-md border border-border\",\n propertiesParent &&\n \"col-span-full grid grid-cols-subgrid rounded-none border-0\",\n className,\n )}\n >\n {children}\n </div>\n );\n }\n if (layout.mode === \"inline\") {\n const labelMaxWidth = layout.labelMaxWidth ?? \"40ch\";\n const valueMaxWidth = layout.valueMaxWidth ?? \"600px\";\n return (\n <div\n className={cn(\"grid\", inlineRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `fit-content(${labelMaxWidth}) minmax(0, ${valueMaxWidth})`,\n }}\n >\n {children}\n </div>\n );\n }\n if (columns === \"auto\") {\n return (\n <div\n className={cn(\"grid gap-x-4\", stackedRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `repeat(auto-fill, minmax(${columnMinWidth ?? DEFAULT_COLUMN_MIN_WIDTH}, 1fr))`,\n ...(columnsMaxWidth ? { maxWidth: columnsMaxWidth } : {}),\n }}\n >\n {children}\n </div>\n );\n }\n if (columns && columns > 1) {\n return (\n <div\n className={cn(\"grid gap-x-3\", stackedRowGapClass[size], className)}\n style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n );\n }\n return (\n <div className={cn(\"grid\", stackedRowGapClass[size], className)}>\n {children}\n </div>\n );\n}\n\n// FieldWrapper lays out a single label + value (+ helper/error). In inline mode\n// it is a `subgrid` row spanning the parent FieldsGrid's two columns, so its\n// label and value snap to the shared label/value tracks (helper/error sit under\n// the value column). In stacked mode the label sits tight above its control as\n// one unit, capped at valueMaxWidth so controls don't stretch edge to edge.\nexport function FieldWrapper({\n label,\n value,\n helper,\n error,\n layout,\n size,\n maxWidth,\n}: {\n label: ReactNode;\n value: ReactNode;\n helper?: ReactNode;\n error?: ReactNode;\n layout: FormLayout;\n size: FormSize;\n // Overrides the stacked value-width cap. A field spanning the full row of a\n // multi-column grid passes \"none\", so it actually fills the row it was given\n // instead of stopping at the shared 600px cap.\n maxWidth?: string;\n}) {\n if (layout.mode === \"inline\") {\n return (\n <div className=\"col-span-2 grid grid-cols-subgrid items-start gap-x-3 gap-y-0.5\">\n <div\n className={cn(\n \"flex min-w-0 items-center\",\n controlMinHeightClass[size],\n )}\n >\n {label}\n </div>\n <div className=\"min-w-0\">{value}</div>\n {helper && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{helper}</p>\n )}\n {error && (\n <p className=\"col-start-2 text-xs text-destructive\">{error}</p>\n )}\n </div>\n );\n }\n return (\n <div\n className=\"flex w-full flex-col gap-1\"\n style={{ maxWidth: maxWidth ?? layout.valueMaxWidth ?? \"600px\" }}\n >\n {label}\n {value}\n {helper && <p className=\"text-xs text-muted-foreground\">{helper}</p>}\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </div>\n );\n}\n\nexport function FieldLabel({\n field,\n fieldId,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n fieldId: string;\n size: FormSize;\n // When \"hover\", the description rides on the label as a `?` instead of being\n // rendered as a paragraph under the control by FieldWrapper.\n helpDisplay?: HelpDisplay;\n}) {\n return (\n <label\n htmlFor={fieldId}\n className={cn(\n \"flex min-w-0 items-center gap-2 font-medium\",\n labelSizeClass[size],\n field.labelClassName,\n )}\n >\n <LabelIcon\n icon={field.labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span\n className=\"truncate\"\n title={field.label !== field.key ? field.key : undefined}\n >\n {field.label}\n </span>\n {field.required && <span className=\"shrink-0 text-destructive\">*</span>}\n {field.badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {field.badge}\n </span>\n )}\n {helpDisplay === \"hover\" && field.helper && (\n <HelpHint label={field.label} helper={field.helper} />\n )}\n </label>\n );\n}\n\n// HelpHint is the `?` affordance that replaces a permanent description\n// paragraph. HoverCard opens on focus as well as hover, so the text stays\n// reachable from the keyboard rather than being mouse-only.\nexport function HelpHint({ label, helper }: { label: string; helper: string }) {\n return (\n <HoverCard\n placement=\"top\"\n trigger={\n <button\n type=\"button\"\n aria-label={`About ${label}`}\n className=\"shrink-0 cursor-help text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon icon={UiQuestion} className=\"text-sm\" />\n </button>\n }\n cardClassName=\"max-w-xs whitespace-normal text-left text-xs font-normal text-foreground\"\n >\n {helper}\n </HoverCard>\n );\n}\n\n// ObjectSection renders a nested object as a labelled section: a header row\n// (the field label + required/badge) above its fields, which fill the full\n// width below. It replaces the inline label + bordered box so nested objects\n// read as flat, headed groups rather than indented sub-forms. `col-span-full`\n// makes it span both tracks of an inline FieldsGrid (full width, not crammed\n// into the value column); in a stacked single-column grid it is a no-op.\n//\n// A field whose schema gives it an EMPTY title renders with no header at all:\n// the host already titled it (a collapsible section of its own, a dialog), and\n// a headed section inside that one would say the same word twice. A missing\n// title is not this — it falls back to the humanised key, as every other\n// control does — so only an explicit `\"title\": \"\"` opts out.\nexport function ObjectSection({\n label,\n required,\n size,\n badge,\n helper,\n labelIcon,\n helpDisplay,\n children,\n}: {\n label: string;\n required: boolean;\n size: FormSize;\n badge?: string;\n helper?: string;\n labelIcon?: LabelIconSpec;\n helpDisplay?: HelpDisplay;\n children: ReactNode;\n}) {\n const hoverHelp = helpDisplay === \"hover\" && !!helper;\n const headed = label !== \"\";\n return (\n <div\n className={cn(\n \"col-span-full flex min-w-0 max-w-full flex-col\",\n fieldInnerGapClass[size],\n )}\n >\n {headed && (\n <div\n className={cn(\n \"flex min-w-0 items-center gap-2 border-b border-border pb-1 font-semibold\",\n labelSizeClass[size],\n )}\n >\n <LabelIcon\n icon={labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{label}</span>\n {required && <span className=\"shrink-0 text-destructive\">*</span>}\n {badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n )}\n {hoverHelp && helper && <HelpHint label={label} helper={helper} />}\n </div>\n )}\n {helper && !hoverHelp && (\n <p className=\"min-w-0 break-words text-xs text-muted-foreground\">\n {helper}\n </p>\n )}\n {children}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"json-schema-form-layout.js","sources":["../../src/components/json-schema-form-layout.tsx"],"sourcesContent":["import { useContext, type ReactNode } from \"react\";\nimport { PropertiesContext } from \"../data/properties-context\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, LabelIcon } from \"../data/Icon\";\nimport { UiQuestion } from \"../icons\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport type {\n FieldControl,\n FormLayout,\n GridColumns,\n HelpDisplay,\n} from \"./json-schema-form-types\";\nimport { DEFAULT_COLUMN_MIN_WIDTH } from \"./json-schema-form-utils\";\nimport {\n controlMinHeightClass,\n fieldInnerGapClass,\n inlineRowGapClass,\n labelSizeClass,\n stackedRowGapClass,\n type FormSize,\n} from \"./json-schema-form-size\";\n\n// FieldsGrid is the container every group of field rows renders into — the\n// top-level form and each nested object/map. In inline mode it owns the single\n// 2-column track definition: `fit-content(labelMaxWidth)` for the label column,\n// `minmax(0, valueMaxWidth)` for the value column. Every field row is a\n// `subgrid` that inherits these tracks, so all labels share one column width and\n// every value lines up — a real form grid, not per-row independent grids.\n// (`fit-content()` is the only valid CSS for \"size to content, clamped to a max\"\n// — `min(w, max-content)` is rejected by the browser, which silently drops the\n// whole declaration and collapses every row to a stacked-looking column. The\n// template is an inline style because Tailwind can't interpolate runtime widths.)\n// Stacked mode is a plain single-column grid.\nexport function FieldsGrid({\n layout,\n size,\n columns,\n columnMinWidth,\n columnsMaxWidth,\n className,\n children,\n}: {\n layout: FormLayout;\n size: FormSize;\n // Object-level `x-columns`: split a stacked object into N equal columns, or\n // \"auto\" to fit as many `columnMinWidth`-wide columns as the container allows.\n // Fields span one column unless they set `x-col-span`. Ignored in inline mode\n // (which owns its own 2-track label/value layout).\n columns?: GridColumns;\n // `x-columns: \"auto\"` only: the minmax() floor for one column, and an optional\n // cap on the whole grid so controls don't stretch edge to edge on a wide\n // screen. CSS lengths, applied inline — a runtime width can't be a Tailwind\n // arbitrary class, because the scanner never sees it.\n columnMinWidth?: string;\n columnsMaxWidth?: string;\n // Object-level `x-classes`: extra classes merged onto the grid container\n // (e.g. `gap-2`, padding). Applied last so a standard utility wins over the\n // defaults via tailwind-merge.\n className?: string;\n children: ReactNode;\n}) {\n const propertiesParent = useContext(PropertiesContext);\n if (layout.mode === \"properties\") {\n return (\n <div\n className={cn(\n \"min-w-0 overflow-hidden rounded-md border border-border\",\n propertiesParent &&\n \"col-span-full grid grid-cols-subgrid rounded-none border-0\",\n className,\n )}\n >\n {children}\n </div>\n );\n }\n if (layout.mode === \"inline\") {\n const labelMaxWidth = layout.labelMaxWidth ?? \"40ch\";\n const valueMaxWidth = layout.valueMaxWidth ?? \"600px\";\n return (\n <div\n className={cn(\"grid\", inlineRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `fit-content(${labelMaxWidth}) minmax(0, ${valueMaxWidth})`,\n }}\n >\n {children}\n </div>\n );\n }\n if (columns === \"auto\") {\n return (\n <div\n className={cn(\"grid gap-x-4\", stackedRowGapClass[size], className)}\n style={{\n gridTemplateColumns: `repeat(auto-fill, minmax(${columnMinWidth ?? DEFAULT_COLUMN_MIN_WIDTH}, 1fr))`,\n ...(columnsMaxWidth ? { maxWidth: columnsMaxWidth } : {}),\n }}\n >\n {children}\n </div>\n );\n }\n if (columns && columns > 1) {\n return (\n <div\n className={cn(\"grid gap-x-3\", stackedRowGapClass[size], className)}\n style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }}\n >\n {children}\n </div>\n );\n }\n return (\n <div className={cn(\"grid\", stackedRowGapClass[size], className)}>\n {children}\n </div>\n );\n}\n\n// FieldWrapper lays out a single label + value (+ helper/error). In inline mode\n// it is a `subgrid` row spanning the parent FieldsGrid's two columns, so its\n// label and value snap to the shared label/value tracks (helper/error sit under\n// the value column). In stacked mode the label sits tight above its control as\n// one unit, capped at valueMaxWidth so controls don't stretch edge to edge.\nexport function FieldWrapper({\n label,\n value,\n helper,\n error,\n layout,\n size,\n maxWidth,\n}: {\n label: ReactNode;\n value: ReactNode;\n helper?: ReactNode;\n error?: ReactNode;\n layout: FormLayout;\n size: FormSize;\n // Overrides the stacked value-width cap. A field spanning the full row of a\n // multi-column grid passes \"none\", so it actually fills the row it was given\n // instead of stopping at the shared 600px cap.\n maxWidth?: string;\n}) {\n if (layout.mode === \"inline\") {\n return (\n <div className=\"col-span-2 grid grid-cols-subgrid items-start gap-x-3 gap-y-0.5\">\n <div\n className={cn(\n \"flex min-w-0 items-center\",\n controlMinHeightClass[size],\n )}\n >\n {label}\n </div>\n <div className=\"min-w-0\">{value}</div>\n {helper && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{helper}</p>\n )}\n {error && (\n <p className=\"col-start-2 text-xs text-destructive\">{error}</p>\n )}\n </div>\n );\n }\n return (\n <div\n className=\"flex w-full flex-col gap-1\"\n style={{ maxWidth: maxWidth ?? layout.valueMaxWidth ?? \"600px\" }}\n >\n {label}\n {value}\n {helper && <p className=\"text-xs text-muted-foreground\">{helper}</p>}\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </div>\n );\n}\n\nexport function FieldLabel({\n field,\n fieldId,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n fieldId: string;\n size: FormSize;\n // When \"hover\", the description rides on the label as a `?` instead of being\n // rendered as a paragraph under the control by FieldWrapper.\n helpDisplay?: HelpDisplay;\n}) {\n return (\n <label\n htmlFor={fieldId}\n className={cn(\n \"flex min-w-0 items-center gap-2 font-medium\",\n labelSizeClass[size],\n field.labelClassName,\n )}\n >\n <LabelIcon\n icon={field.labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span\n className=\"truncate\"\n title={field.label !== field.key ? field.key : undefined}\n >\n {field.label}\n </span>\n {field.required && <span className=\"shrink-0 text-destructive\">*</span>}\n {field.badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {field.badge}\n </span>\n )}\n {helpDisplay === \"hover\" && field.helper && (\n <HelpHint label={field.label} helper={field.helper} />\n )}\n </label>\n );\n}\n\n// HelpHint is the `?` affordance that replaces a permanent description\n// paragraph. HoverCard opens on focus as well as hover, so the text stays\n// reachable from the keyboard rather than being mouse-only.\nexport function HelpHint({ label, helper }: { label: string; helper: string }) {\n return (\n <HoverCard\n placement=\"top\"\n trigger={\n <button\n type=\"button\"\n aria-label={`About ${label}`}\n className=\"shrink-0 cursor-help text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon icon={UiQuestion} className=\"text-sm\" />\n </button>\n }\n cardClassName=\"max-w-xs whitespace-normal text-left text-xs font-normal text-foreground\"\n >\n {helper}\n </HoverCard>\n );\n}\n\n// SectionHeading is the content of a section's header row: the label with its\n// icon, required marker, badge and hover help. It is the label node buildField\n// hands to post extensions for a field that renders as a section; a section\n// with an empty title has no heading at all (see ObjectSection).\nexport function SectionHeading({\n field,\n label = field.label,\n size,\n helpDisplay,\n}: {\n field: FieldControl;\n label?: string;\n size: FormSize;\n helpDisplay?: HelpDisplay;\n}) {\n const { required, badge, helper, labelIcon } = field;\n return (\n <span className={cn(\"flex min-w-0 items-center gap-2\", labelSizeClass[size])}>\n <LabelIcon\n icon={labelIcon}\n className=\"shrink-0 text-[15px] text-muted-foreground\"\n />\n <span className=\"min-w-0 truncate\">{label}</span>\n {required && <span className=\"shrink-0 text-destructive\">*</span>}\n {badge && (\n <span className=\"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n )}\n {helpDisplay === \"hover\" && helper && <HelpHint label={label} helper={helper} />}\n </span>\n );\n}\n\n// ObjectSection renders a nested object as a labelled section: a header row\n// (the field label + required/badge) above its fields, which fill the full\n// width below. It replaces the inline label + bordered box so nested objects\n// read as flat, headed groups rather than indented sub-forms. `col-span-full`\n// makes it span both tracks of an inline FieldsGrid (full width, not crammed\n// into the value column); in a stacked single-column grid it is a no-op.\n//\n// A field whose schema gives it an EMPTY title renders with no header at all:\n// the host already titled it (a collapsible section of its own, a dialog), and\n// a headed section inside that one would say the same word twice. A missing\n// title is not this — it falls back to the humanised key, as every other\n// control does — so only an explicit `\"title\": \"\"` opts out.\n//\n// The header row is a separate SectionHeading node (null for no header), so\n// the post extensions that decorate every other field's label decorate a\n// section's header too.\nexport function ObjectSection({\n heading,\n size,\n helper,\n helpDisplay,\n children,\n}: {\n heading: ReactNode;\n size: FormSize;\n helper?: string;\n helpDisplay?: HelpDisplay;\n children: ReactNode;\n}) {\n const hoverHelp = helpDisplay === \"hover\" && !!helper;\n return (\n <div\n className={cn(\n \"col-span-full flex min-w-0 max-w-full flex-col\",\n fieldInnerGapClass[size],\n )}\n >\n {heading != null && (\n // The header row owns the rule and weight, so whatever a post\n // extension puts beside the heading sits inline in the same row.\n <div\n data-jsf-section-heading\n className={cn(\n \"flex min-w-0 items-center gap-2 border-b border-border pb-1 font-semibold\",\n labelSizeClass[size],\n )}\n >\n {heading}\n </div>\n )}\n {helper && !hoverHelp && (\n <p className=\"min-w-0 break-words text-xs text-muted-foreground\">\n {helper}\n </p>\n )}\n {children}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const collections = require("../lib/collections.cjs");
|
|
4
|
+
const jsonSchemaFormConditionals = require("./json-schema-form-conditionals.cjs");
|
|
5
|
+
const SEPARATOR = "/";
|
|
6
|
+
function isPathTarget(target) {
|
|
7
|
+
return target.includes(SEPARATOR);
|
|
8
|
+
}
|
|
9
|
+
function targetSegments(label, target) {
|
|
10
|
+
const segments = target.split(SEPARATOR);
|
|
11
|
+
if (segments.some((segment) => segment === "")) {
|
|
12
|
+
throw new Error(`${label}: target "${target}" has an empty path segment`);
|
|
13
|
+
}
|
|
14
|
+
return segments;
|
|
15
|
+
}
|
|
16
|
+
function patchTarget({
|
|
17
|
+
properties,
|
|
18
|
+
value,
|
|
19
|
+
target,
|
|
20
|
+
apply
|
|
21
|
+
}) {
|
|
22
|
+
const [first = "", ...rest] = target.split(SEPARATOR);
|
|
23
|
+
const prop = properties[first];
|
|
24
|
+
if (!prop) return;
|
|
25
|
+
const patched = patchNode(prop, value[first], rest, apply);
|
|
26
|
+
if (patched) properties[first] = patched;
|
|
27
|
+
}
|
|
28
|
+
function patchNode(node, nodeValue, segments, apply) {
|
|
29
|
+
const [segment, ...rest] = segments;
|
|
30
|
+
if (segment === void 0) return apply(node);
|
|
31
|
+
if (isArraySchema(node)) {
|
|
32
|
+
if (!node.items) return void 0;
|
|
33
|
+
const items = patchNode(node.items, {}, segments, apply);
|
|
34
|
+
return items && { ...node, items };
|
|
35
|
+
}
|
|
36
|
+
const objectValue = collections.isPlainObject(nodeValue) ? nodeValue : {};
|
|
37
|
+
const child = jsonSchemaFormConditionals.effectiveProperties(node, objectValue).properties[segment];
|
|
38
|
+
if (!child) return void 0;
|
|
39
|
+
const patchedChild = patchNode(child, objectValue[segment], rest, apply);
|
|
40
|
+
return patchedChild && {
|
|
41
|
+
...node,
|
|
42
|
+
allOf: [...node.allOf ?? [], { properties: { [segment]: patchedChild } }]
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function isArraySchema(node) {
|
|
46
|
+
if (node.items !== void 0) return true;
|
|
47
|
+
return Array.isArray(node.type) ? node.type.includes("array") : node.type === "array";
|
|
48
|
+
}
|
|
49
|
+
exports.isPathTarget = isPathTarget;
|
|
50
|
+
exports.patchTarget = patchTarget;
|
|
51
|
+
exports.targetSegments = targetSegments;
|
|
52
|
+
//# sourceMappingURL=json-schema-form-listener-paths.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-listener-paths.cjs","sources":["../../src/components/json-schema-form-listener-paths.ts"],"sourcesContent":["import { isPlainObject } from \"../lib/collections\";\nimport { effectiveProperties } from \"./json-schema-form-conditionals\";\nimport type { JsonSchemaObject, JsonSchemaProperty } from \"./json-schema-form-types\";\n\n// Listener path targets: `mf/Group/Cell` names a property inside a sibling's\n// subtree. The first segment is a sibling key; each later segment names a\n// property of the object reached so far, and an array is crossed into its\n// `items` without spending a segment.\n\nconst SEPARATOR = \"/\";\n\nexport function isPathTarget(target: string): boolean {\n return target.includes(SEPARATOR);\n}\n\n// targetSegments splits a target into its segments, throwing on an empty one\n// (`a//b`, a leading or a trailing `/`), which can only be a typo.\nexport function targetSegments(label: string, target: string): string[] {\n const segments = target.split(SEPARATOR);\n if (segments.some((segment) => segment === \"\")) {\n throw new Error(`${label}: target \"${target}\" has an empty path segment`);\n }\n return segments;\n}\n\n// patchTarget rewrites the property a target names, in place on `properties`\n// (the effective properties of the object being rendered, whose `value` is\n// given). A plain key is replaced by `apply(prop)`. A path clones the sibling\n// along the way: at each object node the patched child goes into a trailing\n// unconditional `allOf` member, which wins the effectiveProperties merge\n// without touching the node's own properties or conditional branches, so two\n// paths under one sibling both survive. A segment the current shape does not\n// declare leaves the sibling untouched.\nexport function patchTarget({\n properties,\n value,\n target,\n apply,\n}: {\n properties: Record<string, JsonSchemaProperty>;\n value: Record<string, unknown>;\n target: string;\n apply: (leaf: JsonSchemaProperty) => JsonSchemaProperty;\n}): void {\n const [first = \"\", ...rest] = target.split(SEPARATOR);\n const prop = properties[first];\n if (!prop) return;\n const patched = patchNode(prop, value[first], rest, apply);\n if (patched) properties[first] = patched;\n}\n\nfunction patchNode(\n node: JsonSchemaProperty,\n nodeValue: unknown,\n segments: string[],\n apply: (leaf: JsonSchemaProperty) => JsonSchemaProperty,\n): JsonSchemaProperty | undefined {\n const [segment, ...rest] = segments;\n if (segment === undefined) return apply(node);\n if (isArraySchema(node)) {\n // Column-level by design: one `items` schema serves every row, so a path\n // into an array patches the column. Row-scoped state comes from the item\n // schema's own x-on-load/x-on-change, evaluated per row by the renderers.\n if (!node.items) return undefined;\n const items = patchNode(node.items, {}, segments, apply);\n return items && { ...node, items };\n }\n const objectValue = isPlainObject(nodeValue) ? nodeValue : {};\n const child = effectiveProperties(node as JsonSchemaObject, objectValue).properties[segment];\n if (!child) return undefined;\n const patchedChild = patchNode(child, objectValue[segment], rest, apply);\n return (\n patchedChild && {\n ...node,\n allOf: [...(node.allOf ?? []), { properties: { [segment]: patchedChild } }],\n }\n );\n}\n\nfunction isArraySchema(node: JsonSchemaProperty): boolean {\n if (node.items !== undefined) return true;\n return Array.isArray(node.type) ? node.type.includes(\"array\") : node.type === \"array\";\n}\n"],"names":["isPlainObject","effectiveProperties"],"mappings":";;;;AASA,MAAM,YAAY;AAEX,SAAS,aAAa,QAAyB;AACpD,SAAO,OAAO,SAAS,SAAS;AAClC;AAIO,SAAS,eAAe,OAAe,QAA0B;AACtE,QAAM,WAAW,OAAO,MAAM,SAAS;AACvC,MAAI,SAAS,KAAK,CAAC,YAAY,YAAY,EAAE,GAAG;AAC9C,UAAM,IAAI,MAAM,GAAG,KAAK,aAAa,MAAM,6BAA6B;AAAA,EAC1E;AACA,SAAO;AACT;AAUO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKS;AACP,QAAM,CAAC,QAAQ,IAAI,GAAG,IAAI,IAAI,OAAO,MAAM,SAAS;AACpD,QAAM,OAAO,WAAW,KAAK;AAC7B,MAAI,CAAC,KAAM;AACX,QAAM,UAAU,UAAU,MAAM,MAAM,KAAK,GAAG,MAAM,KAAK;AACzD,MAAI,QAAS,YAAW,KAAK,IAAI;AACnC;AAEA,SAAS,UACP,MACA,WACA,UACA,OACgC;AAChC,QAAM,CAAC,SAAS,GAAG,IAAI,IAAI;AAC3B,MAAI,YAAY,OAAW,QAAO,MAAM,IAAI;AAC5C,MAAI,cAAc,IAAI,GAAG;AAIvB,QAAI,CAAC,KAAK,MAAO,QAAO;AACxB,UAAM,QAAQ,UAAU,KAAK,OAAO,CAAA,GAAI,UAAU,KAAK;AACvD,WAAO,SAAS,EAAE,GAAG,MAAM,MAAA;AAAA,EAC7B;AACA,QAAM,cAAcA,YAAAA,cAAc,SAAS,IAAI,YAAY,CAAA;AAC3D,QAAM,QAAQC,2BAAAA,oBAAoB,MAA0B,WAAW,EAAE,WAAW,OAAO;AAC3F,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,eAAe,UAAU,OAAO,YAAY,OAAO,GAAG,MAAM,KAAK;AACvE,SACE,gBAAgB;AAAA,IACd,GAAG;AAAA,IACH,OAAO,CAAC,GAAI,KAAK,SAAS,CAAA,GAAK,EAAE,YAAY,EAAE,CAAC,OAAO,GAAG,gBAAgB;AAAA,EAAA;AAGhF;AAEA,SAAS,cAAc,MAAmC;AACxD,MAAI,KAAK,UAAU,OAAW,QAAO;AACrC,SAAO,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,OAAO,IAAI,KAAK,SAAS;AAChF;;;;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { JsonSchemaProperty } from './json-schema-form-types.js';
|
|
2
|
+
export declare function isPathTarget(target: string): boolean;
|
|
3
|
+
export declare function targetSegments(label: string, target: string): string[];
|
|
4
|
+
export declare function patchTarget({ properties, value, target, apply, }: {
|
|
5
|
+
properties: Record<string, JsonSchemaProperty>;
|
|
6
|
+
value: Record<string, unknown>;
|
|
7
|
+
target: string;
|
|
8
|
+
apply: (leaf: JsonSchemaProperty) => JsonSchemaProperty;
|
|
9
|
+
}): void;
|
|
10
|
+
//# sourceMappingURL=json-schema-form-listener-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-listener-paths.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-listener-paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASrF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpD;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAMtE;AAUD,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EACV,KAAK,EACL,MAAM,EACN,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,kBAAkB,CAAC;CACzD,GAAG,IAAI,CAMP"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { isPlainObject } from "../lib/collections.js";
|
|
2
|
+
import { effectiveProperties } from "./json-schema-form-conditionals.js";
|
|
3
|
+
const SEPARATOR = "/";
|
|
4
|
+
function isPathTarget(target) {
|
|
5
|
+
return target.includes(SEPARATOR);
|
|
6
|
+
}
|
|
7
|
+
function targetSegments(label, target) {
|
|
8
|
+
const segments = target.split(SEPARATOR);
|
|
9
|
+
if (segments.some((segment) => segment === "")) {
|
|
10
|
+
throw new Error(`${label}: target "${target}" has an empty path segment`);
|
|
11
|
+
}
|
|
12
|
+
return segments;
|
|
13
|
+
}
|
|
14
|
+
function patchTarget({
|
|
15
|
+
properties,
|
|
16
|
+
value,
|
|
17
|
+
target,
|
|
18
|
+
apply
|
|
19
|
+
}) {
|
|
20
|
+
const [first = "", ...rest] = target.split(SEPARATOR);
|
|
21
|
+
const prop = properties[first];
|
|
22
|
+
if (!prop) return;
|
|
23
|
+
const patched = patchNode(prop, value[first], rest, apply);
|
|
24
|
+
if (patched) properties[first] = patched;
|
|
25
|
+
}
|
|
26
|
+
function patchNode(node, nodeValue, segments, apply) {
|
|
27
|
+
const [segment, ...rest] = segments;
|
|
28
|
+
if (segment === void 0) return apply(node);
|
|
29
|
+
if (isArraySchema(node)) {
|
|
30
|
+
if (!node.items) return void 0;
|
|
31
|
+
const items = patchNode(node.items, {}, segments, apply);
|
|
32
|
+
return items && { ...node, items };
|
|
33
|
+
}
|
|
34
|
+
const objectValue = isPlainObject(nodeValue) ? nodeValue : {};
|
|
35
|
+
const child = effectiveProperties(node, objectValue).properties[segment];
|
|
36
|
+
if (!child) return void 0;
|
|
37
|
+
const patchedChild = patchNode(child, objectValue[segment], rest, apply);
|
|
38
|
+
return patchedChild && {
|
|
39
|
+
...node,
|
|
40
|
+
allOf: [...node.allOf ?? [], { properties: { [segment]: patchedChild } }]
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function isArraySchema(node) {
|
|
44
|
+
if (node.items !== void 0) return true;
|
|
45
|
+
return Array.isArray(node.type) ? node.type.includes("array") : node.type === "array";
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
isPathTarget,
|
|
49
|
+
patchTarget,
|
|
50
|
+
targetSegments
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=json-schema-form-listener-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-listener-paths.js","sources":["../../src/components/json-schema-form-listener-paths.ts"],"sourcesContent":["import { isPlainObject } from \"../lib/collections\";\nimport { effectiveProperties } from \"./json-schema-form-conditionals\";\nimport type { JsonSchemaObject, JsonSchemaProperty } from \"./json-schema-form-types\";\n\n// Listener path targets: `mf/Group/Cell` names a property inside a sibling's\n// subtree. The first segment is a sibling key; each later segment names a\n// property of the object reached so far, and an array is crossed into its\n// `items` without spending a segment.\n\nconst SEPARATOR = \"/\";\n\nexport function isPathTarget(target: string): boolean {\n return target.includes(SEPARATOR);\n}\n\n// targetSegments splits a target into its segments, throwing on an empty one\n// (`a//b`, a leading or a trailing `/`), which can only be a typo.\nexport function targetSegments(label: string, target: string): string[] {\n const segments = target.split(SEPARATOR);\n if (segments.some((segment) => segment === \"\")) {\n throw new Error(`${label}: target \"${target}\" has an empty path segment`);\n }\n return segments;\n}\n\n// patchTarget rewrites the property a target names, in place on `properties`\n// (the effective properties of the object being rendered, whose `value` is\n// given). A plain key is replaced by `apply(prop)`. A path clones the sibling\n// along the way: at each object node the patched child goes into a trailing\n// unconditional `allOf` member, which wins the effectiveProperties merge\n// without touching the node's own properties or conditional branches, so two\n// paths under one sibling both survive. A segment the current shape does not\n// declare leaves the sibling untouched.\nexport function patchTarget({\n properties,\n value,\n target,\n apply,\n}: {\n properties: Record<string, JsonSchemaProperty>;\n value: Record<string, unknown>;\n target: string;\n apply: (leaf: JsonSchemaProperty) => JsonSchemaProperty;\n}): void {\n const [first = \"\", ...rest] = target.split(SEPARATOR);\n const prop = properties[first];\n if (!prop) return;\n const patched = patchNode(prop, value[first], rest, apply);\n if (patched) properties[first] = patched;\n}\n\nfunction patchNode(\n node: JsonSchemaProperty,\n nodeValue: unknown,\n segments: string[],\n apply: (leaf: JsonSchemaProperty) => JsonSchemaProperty,\n): JsonSchemaProperty | undefined {\n const [segment, ...rest] = segments;\n if (segment === undefined) return apply(node);\n if (isArraySchema(node)) {\n // Column-level by design: one `items` schema serves every row, so a path\n // into an array patches the column. Row-scoped state comes from the item\n // schema's own x-on-load/x-on-change, evaluated per row by the renderers.\n if (!node.items) return undefined;\n const items = patchNode(node.items, {}, segments, apply);\n return items && { ...node, items };\n }\n const objectValue = isPlainObject(nodeValue) ? nodeValue : {};\n const child = effectiveProperties(node as JsonSchemaObject, objectValue).properties[segment];\n if (!child) return undefined;\n const patchedChild = patchNode(child, objectValue[segment], rest, apply);\n return (\n patchedChild && {\n ...node,\n allOf: [...(node.allOf ?? []), { properties: { [segment]: patchedChild } }],\n }\n );\n}\n\nfunction isArraySchema(node: JsonSchemaProperty): boolean {\n if (node.items !== undefined) return true;\n return Array.isArray(node.type) ? node.type.includes(\"array\") : node.type === \"array\";\n}\n"],"names":[],"mappings":";;AASA,MAAM,YAAY;AAEX,SAAS,aAAa,QAAyB;AACpD,SAAO,OAAO,SAAS,SAAS;AAClC;AAIO,SAAS,eAAe,OAAe,QAA0B;AACtE,QAAM,WAAW,OAAO,MAAM,SAAS;AACvC,MAAI,SAAS,KAAK,CAAC,YAAY,YAAY,EAAE,GAAG;AAC9C,UAAM,IAAI,MAAM,GAAG,KAAK,aAAa,MAAM,6BAA6B;AAAA,EAC1E;AACA,SAAO;AACT;AAUO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKS;AACP,QAAM,CAAC,QAAQ,IAAI,GAAG,IAAI,IAAI,OAAO,MAAM,SAAS;AACpD,QAAM,OAAO,WAAW,KAAK;AAC7B,MAAI,CAAC,KAAM;AACX,QAAM,UAAU,UAAU,MAAM,MAAM,KAAK,GAAG,MAAM,KAAK;AACzD,MAAI,QAAS,YAAW,KAAK,IAAI;AACnC;AAEA,SAAS,UACP,MACA,WACA,UACA,OACgC;AAChC,QAAM,CAAC,SAAS,GAAG,IAAI,IAAI;AAC3B,MAAI,YAAY,OAAW,QAAO,MAAM,IAAI;AAC5C,MAAI,cAAc,IAAI,GAAG;AAIvB,QAAI,CAAC,KAAK,MAAO,QAAO;AACxB,UAAM,QAAQ,UAAU,KAAK,OAAO,CAAA,GAAI,UAAU,KAAK;AACvD,WAAO,SAAS,EAAE,GAAG,MAAM,MAAA;AAAA,EAC7B;AACA,QAAM,cAAc,cAAc,SAAS,IAAI,YAAY,CAAA;AAC3D,QAAM,QAAQ,oBAAoB,MAA0B,WAAW,EAAE,WAAW,OAAO;AAC3F,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,eAAe,UAAU,OAAO,YAAY,OAAO,GAAG,MAAM,KAAK;AACvE,SACE,gBAAgB;AAAA,IACd,GAAG;AAAA,IACH,OAAO,CAAC,GAAI,KAAK,SAAS,CAAA,GAAK,EAAE,YAAY,EAAE,CAAC,OAAO,GAAG,gBAAgB;AAAA,EAAA;AAGhF;AAEA,SAAS,cAAc,MAAmC;AACxD,MAAI,KAAK,UAAU,OAAW,QAAO;AACrC,SAAO,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,OAAO,IAAI,KAAK,SAAS;AAChF;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { JsonSchemaProperty } from './json-schema-form-types.js';
|
|
2
|
+
export interface ChangeActions {
|
|
3
|
+
hide?: string[];
|
|
4
|
+
show?: string[];
|
|
5
|
+
enable?: string[];
|
|
6
|
+
disable?: string[];
|
|
7
|
+
require?: string[];
|
|
8
|
+
optional?: string[];
|
|
9
|
+
reset?: string[];
|
|
10
|
+
set?: Record<string, unknown>;
|
|
11
|
+
patch?: Record<string, ChangePatch>;
|
|
12
|
+
}
|
|
13
|
+
export type ChangePatchDeniedKeyword = "type" | "properties" | "items" | "additionalProperties" | "patternProperties" | "allOf" | "anyOf" | "oneOf" | "if" | "then" | "else" | "not" | "required" | "default" | "const" | "x-on-change" | "x-on-load";
|
|
14
|
+
export type ChangePatch = Omit<Partial<JsonSchemaProperty>, ChangePatchDeniedKeyword>;
|
|
15
|
+
export interface ChangeCondition extends JsonSchemaProperty {
|
|
16
|
+
expr?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ChangeListener extends ChangeActions {
|
|
19
|
+
when?: ChangeCondition;
|
|
20
|
+
else?: ChangeActions;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=json-schema-form-listener-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-listener-types.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-listener-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAmBnE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAEjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACrC;AAGD,MAAM,MAAM,wBAAwB,GAChC,MAAM,GACN,YAAY,GACZ,OAAO,GACP,sBAAsB,GACtB,mBAAmB,GACnB,OAAO,GACP,OAAO,GACP,OAAO,GACP,IAAI,GACJ,MAAM,GACN,MAAM,GACN,KAAK,GACL,UAAU,GACV,SAAS,GACT,OAAO,GACP,aAAa,GACb,WAAW,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC,CAAC;AAMtF,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAKD,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const collections = require("../lib/collections.cjs");
|
|
4
|
+
const jsonSchemaFormConditionals = require("./json-schema-form-conditionals.cjs");
|
|
5
|
+
const jsonSchemaFormDefaults = require("./json-schema-form-defaults.cjs");
|
|
6
|
+
const jsonSchemaFormListenerPaths = require("./json-schema-form-listener-paths.cjs");
|
|
7
|
+
const LOCAL_ACTIONS = ["require", "optional", "reset", "set"];
|
|
8
|
+
const STATE_FLAGS = [
|
|
9
|
+
["hide", "x-hidden", true],
|
|
10
|
+
["show", "x-hidden", false],
|
|
11
|
+
["disable", "x-disabled", true],
|
|
12
|
+
["enable", "x-disabled", false]
|
|
13
|
+
];
|
|
14
|
+
const CONTRADICTIONS = [
|
|
15
|
+
["hide", "show"],
|
|
16
|
+
["enable", "disable"],
|
|
17
|
+
["require", "optional"]
|
|
18
|
+
];
|
|
19
|
+
const LIST_NAMES = ["hide", "show", "enable", "disable", "require", "optional", "reset"];
|
|
20
|
+
const PATCH_DENIED = {
|
|
21
|
+
...Object.fromEntries(
|
|
22
|
+
["type", "properties", "items", "additionalProperties", "patternProperties", "allOf", "anyOf", "oneOf", "if", "then", "else", "not", "$ref", "$defs"].map(
|
|
23
|
+
(keyword) => [keyword, "it changes the field's shape; use an allOf branch"]
|
|
24
|
+
)
|
|
25
|
+
),
|
|
26
|
+
required: "use require/optional",
|
|
27
|
+
default: "a patch changes presentation, not values; use set/reset",
|
|
28
|
+
const: "a patch changes presentation, not values; use set/reset",
|
|
29
|
+
"x-on-change": "listeners cannot be patched in",
|
|
30
|
+
"x-on-load": "listeners cannot be patched in"
|
|
31
|
+
};
|
|
32
|
+
function applyListenerState(schema, value, options) {
|
|
33
|
+
const { properties, required } = jsonSchemaFormConditionals.effectiveProperties(schema, value);
|
|
34
|
+
const requiredSet = new Set(required);
|
|
35
|
+
const known = declaredKeys(schema);
|
|
36
|
+
const bound = [
|
|
37
|
+
...loadListenersOf(schema, value),
|
|
38
|
+
...Object.entries(properties).flatMap(
|
|
39
|
+
([key, prop]) => listenersOf(key, prop).map((listener) => ({ listener, source: changeSource(key) }))
|
|
40
|
+
)
|
|
41
|
+
];
|
|
42
|
+
for (const { listener, source } of bound) {
|
|
43
|
+
const actions = selectActions({ listener, source, self: value, known, options });
|
|
44
|
+
for (const [name, keyword, flag] of STATE_FLAGS) {
|
|
45
|
+
for (const target of list(actions, name)) {
|
|
46
|
+
jsonSchemaFormListenerPaths.patchTarget({ properties, value, target, apply: (leaf) => hiddenBy({ ...leaf, [keyword]: flag }, keyword, flag, source.label) });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (const target of list(actions, "require")) {
|
|
50
|
+
if (properties[target]) requiredSet.add(target);
|
|
51
|
+
}
|
|
52
|
+
for (const target of list(actions, "optional")) requiredSet.delete(target);
|
|
53
|
+
for (const [target, keywords] of Object.entries(actions.patch ?? {})) {
|
|
54
|
+
jsonSchemaFormListenerPaths.patchTarget({ properties, value, target, apply: (leaf) => ({ ...leaf, ...keywords }) });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return { properties, required: [...requiredSet] };
|
|
58
|
+
}
|
|
59
|
+
function hiddenBy(leaf, keyword, flag, label) {
|
|
60
|
+
if (keyword !== "x-hidden") return leaf;
|
|
61
|
+
if (flag) return { ...leaf, "x-hidden-by": label };
|
|
62
|
+
const { "x-hidden-by": _by, ...shown } = leaf;
|
|
63
|
+
return shown;
|
|
64
|
+
}
|
|
65
|
+
function loadListenersOf(schema, value) {
|
|
66
|
+
var _a;
|
|
67
|
+
const bound = loadListenersAt(schema["x-on-load"], "#/x-on-load");
|
|
68
|
+
for (const [index, clause] of (schema.allOf ?? []).entries()) {
|
|
69
|
+
if (clause.if === void 0 && clause.then === void 0) {
|
|
70
|
+
bound.push(...loadListenersAt(clause["x-on-load"], `#/allOf/${index}/x-on-load`));
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const branch = jsonSchemaFormConditionals.matchesIf(clause.if, value) ? "then" : "else";
|
|
74
|
+
bound.push(...loadListenersAt((_a = clause[branch]) == null ? void 0 : _a["x-on-load"], `#/allOf/${index}/${branch}/x-on-load`));
|
|
75
|
+
}
|
|
76
|
+
return bound;
|
|
77
|
+
}
|
|
78
|
+
function loadListenersAt(listeners, pointer) {
|
|
79
|
+
if (listeners === void 0) return [];
|
|
80
|
+
if (!Array.isArray(listeners)) {
|
|
81
|
+
throw new Error(`x-on-load at ${pointer} must be an array of listeners, got ${typeof listeners}`);
|
|
82
|
+
}
|
|
83
|
+
return listeners.map((listener, index) => ({
|
|
84
|
+
listener,
|
|
85
|
+
source: { label: `x-on-load at ${pointer}/${index}`, key: "", load: true }
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
function changeSource(key) {
|
|
89
|
+
return { label: `x-on-change on "${key}"`, key, load: false };
|
|
90
|
+
}
|
|
91
|
+
function applyChangeEffects(schema, edit) {
|
|
92
|
+
let current = { ...edit.value, [edit.key]: edit.next };
|
|
93
|
+
const known = declaredKeys(schema);
|
|
94
|
+
const fired = /* @__PURE__ */ new Set();
|
|
95
|
+
const queue = [edit.key];
|
|
96
|
+
for (let source = queue.shift(); source !== void 0; source = queue.shift()) {
|
|
97
|
+
if (fired.has(source)) continue;
|
|
98
|
+
fired.add(source);
|
|
99
|
+
const { properties } = jsonSchemaFormConditionals.effectiveProperties(schema, current);
|
|
100
|
+
const options = {
|
|
101
|
+
root: edit.root === edit.value ? current : edit.root,
|
|
102
|
+
...edit.evaluate ? { evaluate: edit.evaluate } : {}
|
|
103
|
+
};
|
|
104
|
+
for (const listener of listenersOf(source, properties[source])) {
|
|
105
|
+
const actions = selectActions({ listener, source: changeSource(source), self: current, known, options });
|
|
106
|
+
for (const [target, nextValue] of valueChanges(actions, properties)) {
|
|
107
|
+
if (Object.is(current[target], nextValue)) continue;
|
|
108
|
+
current = { ...current };
|
|
109
|
+
if (nextValue === void 0) delete current[target];
|
|
110
|
+
else current[target] = nextValue;
|
|
111
|
+
queue.push(target);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return current;
|
|
116
|
+
}
|
|
117
|
+
function valueChanges(actions, properties) {
|
|
118
|
+
return [
|
|
119
|
+
...list(actions, "reset").map((target) => {
|
|
120
|
+
var _a;
|
|
121
|
+
const fallback = (_a = properties[target]) == null ? void 0 : _a.default;
|
|
122
|
+
return [target, fallback === void 0 ? void 0 : jsonSchemaFormDefaults.cloneSchemaDefault(fallback)];
|
|
123
|
+
}),
|
|
124
|
+
...Object.entries(actions.set ?? {}).map(([target, v]) => [target, jsonSchemaFormDefaults.cloneSchemaDefault(v)])
|
|
125
|
+
];
|
|
126
|
+
}
|
|
127
|
+
function listenersOf(key, prop) {
|
|
128
|
+
const listeners = prop == null ? void 0 : prop["x-on-change"];
|
|
129
|
+
if (listeners === void 0) return [];
|
|
130
|
+
if (!Array.isArray(listeners)) {
|
|
131
|
+
throw new Error(`"${key}": x-on-change must be an array of listeners, got ${typeof listeners}`);
|
|
132
|
+
}
|
|
133
|
+
return listeners;
|
|
134
|
+
}
|
|
135
|
+
function selectActions({
|
|
136
|
+
listener,
|
|
137
|
+
source,
|
|
138
|
+
self,
|
|
139
|
+
known,
|
|
140
|
+
options
|
|
141
|
+
}) {
|
|
142
|
+
validateActions(source, listener, known);
|
|
143
|
+
if (listener.else) validateActions(source, listener.else, known);
|
|
144
|
+
return listenerHolds(listener, source, self, options) ? listener : listener.else ?? {};
|
|
145
|
+
}
|
|
146
|
+
function listenerHolds(listener, { label, key, load }, self, options) {
|
|
147
|
+
if (listener.when === void 0) return true;
|
|
148
|
+
const { expr, ...predicate } = listener.when;
|
|
149
|
+
const hasPredicate = Object.keys(predicate).length > 0;
|
|
150
|
+
const subject = load ? self : self[key];
|
|
151
|
+
if (!hasPredicate && expr === void 0) {
|
|
152
|
+
throw new Error(`${label}: when states nothing it can evaluate`);
|
|
153
|
+
}
|
|
154
|
+
if (expr !== void 0 && typeof expr !== "string") {
|
|
155
|
+
throw new Error(`${label}: when.expr must be a string, got ${typeof expr}`);
|
|
156
|
+
}
|
|
157
|
+
if (expr !== void 0 && !options.evaluate) {
|
|
158
|
+
throw new Error(`${label}: when.expr "${expr}" needs the form's expressionEvaluator`);
|
|
159
|
+
}
|
|
160
|
+
if (hasPredicate) {
|
|
161
|
+
const holds = jsonSchemaFormConditionals.evaluatePredicate(predicate, subject);
|
|
162
|
+
if (holds === void 0) {
|
|
163
|
+
throw new Error(`${label}: when states nothing it can evaluate (${JSON.stringify(predicate)})`);
|
|
164
|
+
}
|
|
165
|
+
if (!holds) return false;
|
|
166
|
+
}
|
|
167
|
+
if (expr === void 0 || !options.evaluate) return true;
|
|
168
|
+
const result = options.evaluate({ expr, key, value: subject, self, root: options.root });
|
|
169
|
+
if (typeof result !== "boolean") {
|
|
170
|
+
throw new Error(`${label}: expressionEvaluator returned ${typeof result} for "${expr}", expected boolean`);
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
function validateActions(source, actions, known) {
|
|
175
|
+
const { label } = source;
|
|
176
|
+
if (actions.set !== void 0 && !collections.isPlainObject(actions.set)) {
|
|
177
|
+
throw new Error(`${label}: set must be an object of target → value`);
|
|
178
|
+
}
|
|
179
|
+
if (source.load) {
|
|
180
|
+
const local = LOCAL_ACTIONS.find((name) => actions[name] !== void 0);
|
|
181
|
+
if (local) {
|
|
182
|
+
throw new Error(`${label}: ${local} is not allowed in x-on-load, which only derives state (hide/show/enable/disable/patch)`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const setKeys = Object.keys(actions.set ?? {});
|
|
186
|
+
for (const name of LOCAL_ACTIONS) {
|
|
187
|
+
const targets = name === "set" ? setKeys : list(actions, name);
|
|
188
|
+
const path = targets.find(jsonSchemaFormListenerPaths.isPathTarget);
|
|
189
|
+
if (path !== void 0) {
|
|
190
|
+
throw new Error(`${label}: ${name} "${path}" cannot take a path; value and required actions act on sibling keys only`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
for (const target of [...LIST_NAMES.flatMap((name) => list(actions, name)), ...setKeys]) {
|
|
194
|
+
validateTarget(label, target, known);
|
|
195
|
+
}
|
|
196
|
+
const pairs = [
|
|
197
|
+
...CONTRADICTIONS.map(([a, b]) => [a, list(actions, a), b, list(actions, b)]),
|
|
198
|
+
["reset", list(actions, "reset"), "set", setKeys]
|
|
199
|
+
];
|
|
200
|
+
for (const [a, left, b, right] of pairs) {
|
|
201
|
+
const clash = left.find((target) => right.includes(target));
|
|
202
|
+
if (clash !== void 0) {
|
|
203
|
+
throw new Error(`${label}: both ${a} and ${b} "${clash}"`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
validatePatch(label, actions, known);
|
|
207
|
+
}
|
|
208
|
+
function validateTarget(label, target, known) {
|
|
209
|
+
if (jsonSchemaFormListenerPaths.isPathTarget(target) && known.has(target)) {
|
|
210
|
+
throw new Error(`${label}: target "${target}" is both a declared key and a path`);
|
|
211
|
+
}
|
|
212
|
+
const [first = ""] = jsonSchemaFormListenerPaths.targetSegments(label, target);
|
|
213
|
+
if (!known.has(first)) throw new Error(`${label}: unknown target "${target}"`);
|
|
214
|
+
}
|
|
215
|
+
function validatePatch(label, actions, known) {
|
|
216
|
+
const patch = actions.patch;
|
|
217
|
+
if (patch === void 0) return;
|
|
218
|
+
if (!collections.isPlainObject(patch)) {
|
|
219
|
+
throw new Error(`${label}: patch must be an object of target → keywords`);
|
|
220
|
+
}
|
|
221
|
+
for (const [target, keywords] of Object.entries(patch)) {
|
|
222
|
+
validateTarget(label, target, known);
|
|
223
|
+
if (!collections.isPlainObject(keywords)) {
|
|
224
|
+
throw new Error(`${label}: patch "${target}" must be an object of keywords`);
|
|
225
|
+
}
|
|
226
|
+
for (const keyword of Object.keys(keywords)) {
|
|
227
|
+
const denied = PATCH_DENIED[keyword];
|
|
228
|
+
if (denied) throw new Error(`${label}: patch "${target}" may not set ${keyword} (${denied})`);
|
|
229
|
+
}
|
|
230
|
+
for (const [verb, keyword] of STATE_FLAGS) {
|
|
231
|
+
if (keyword in keywords && list(actions, verb).includes(target)) {
|
|
232
|
+
throw new Error(`${label}: both ${verb} and patch ${keyword} on "${target}"`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function list(actions, name) {
|
|
238
|
+
const targets = actions[name];
|
|
239
|
+
if (targets === void 0) return [];
|
|
240
|
+
if (!Array.isArray(targets)) {
|
|
241
|
+
throw new Error(`x-on-change: ${name} must be an array of property keys, got ${typeof targets}`);
|
|
242
|
+
}
|
|
243
|
+
return targets;
|
|
244
|
+
}
|
|
245
|
+
function declaredKeys(schema) {
|
|
246
|
+
const keys = new Set(Object.keys(schema.properties ?? {}));
|
|
247
|
+
for (const clause of schema.allOf ?? []) {
|
|
248
|
+
for (const branch of [clause, clause.then, clause.else]) {
|
|
249
|
+
for (const key of Object.keys((branch == null ? void 0 : branch.properties) ?? {})) keys.add(key);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return keys;
|
|
253
|
+
}
|
|
254
|
+
exports.applyChangeEffects = applyChangeEffects;
|
|
255
|
+
exports.applyListenerState = applyListenerState;
|
|
256
|
+
//# sourceMappingURL=json-schema-form-listeners.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-listeners.cjs","sources":["../../src/components/json-schema-form-listeners.ts"],"sourcesContent":["import { isPlainObject } from \"../lib/collections\";\nimport {\n effectiveProperties,\n evaluatePredicate,\n matchesIf,\n type EffectiveProperties,\n} from \"./json-schema-form-conditionals\";\nimport { cloneSchemaDefault } from \"./json-schema-form-defaults\";\nimport { isPathTarget, patchTarget, targetSegments } from \"./json-schema-form-listener-paths\";\nimport type {\n ChangeActions,\n ChangeListener,\n ExpressionEvaluator,\n JsonSchemaObject,\n JsonSchemaProperty,\n} from \"./json-schema-form-types\";\n\n// `x-on-change` listeners: a property names what happens to its siblings when\n// its value is, or becomes, something. `x-on-load` listeners: an object names\n// the state its properties start in. See ChangeActions for the split between\n// derived state actions and transitional value actions.\n\nexport interface ListenerOptions {\n root: Record<string, unknown>;\n evaluate?: ExpressionEvaluator;\n}\n\n// ListenerSource says where a listener came from. `label` prefixes every error\n// it raises; `key` is the property whose value `when` reads (and the\n// evaluator's `key`) — for x-on-load, \"\" and the object itself.\ninterface ListenerSource {\n label: string;\n key: string;\n load: boolean;\n}\n\ninterface BoundListener {\n listener: ChangeListener;\n source: ListenerSource;\n}\n\ntype ListName = \"hide\" | \"show\" | \"enable\" | \"disable\" | \"require\" | \"optional\" | \"reset\";\n\n// Actions that write values or required-ness: they act on sibling keys only\n// (never a path), and have no place in x-on-load, which only derives state.\nconst LOCAL_ACTIONS: (\"require\" | \"optional\" | \"reset\" | \"set\")[] = [\"require\", \"optional\", \"reset\", \"set\"];\n\nconst STATE_FLAGS: [ListName, \"x-hidden\" | \"x-disabled\", boolean][] = [\n [\"hide\", \"x-hidden\", true],\n [\"show\", \"x-hidden\", false],\n [\"disable\", \"x-disabled\", true],\n [\"enable\", \"x-disabled\", false],\n];\n\nconst CONTRADICTIONS: [ListName, ListName][] = [\n [\"hide\", \"show\"],\n [\"enable\", \"disable\"],\n [\"require\", \"optional\"],\n];\n\nconst LIST_NAMES: ListName[] = [\"hide\", \"show\", \"enable\", \"disable\", \"require\", \"optional\", \"reset\"];\n\n// Keywords a `patch` may not set, with the tool that does the job instead.\nconst PATCH_DENIED: Record<string, string> = {\n ...Object.fromEntries(\n [\"type\", \"properties\", \"items\", \"additionalProperties\", \"patternProperties\", \"allOf\", \"anyOf\", \"oneOf\", \"if\", \"then\", \"else\", \"not\", \"$ref\", \"$defs\"].map(\n (keyword) => [keyword, \"it changes the field's shape; use an allOf branch\"],\n ),\n ),\n required: \"use require/optional\",\n default: \"a patch changes presentation, not values; use set/reset\",\n const: \"a patch changes presentation, not values; use set/reset\",\n \"x-on-change\": \"listeners cannot be patched in\",\n \"x-on-load\": \"listeners cannot be patched in\",\n};\n\n// applyListenerState is effectiveProperties plus the state actions of every\n// listener, evaluated against the current value: first the object's\n// `x-on-load` listeners, then each property's `x-on-change` listeners — load,\n// then change, the order the events happen in. A listener is applied after\n// `allOf`, so it wins over a branch; later listeners win over earlier ones. A\n// target the current shape does not declare stays absent. Property schemas are\n// cloned, never mutated.\nexport function applyListenerState(\n schema: JsonSchemaObject,\n value: Record<string, unknown>,\n options: ListenerOptions,\n): EffectiveProperties {\n const { properties, required } = effectiveProperties(schema, value);\n const requiredSet = new Set(required);\n const known = declaredKeys(schema);\n const bound: BoundListener[] = [\n ...loadListenersOf(schema, value),\n ...Object.entries(properties).flatMap(([key, prop]) =>\n listenersOf(key, prop).map((listener) => ({ listener, source: changeSource(key) })),\n ),\n ];\n for (const { listener, source } of bound) {\n const actions = selectActions({ listener, source, self: value, known, options });\n for (const [name, keyword, flag] of STATE_FLAGS) {\n for (const target of list(actions, name)) {\n patchTarget({ properties, value, target, apply: (leaf) => hiddenBy({ ...leaf, [keyword]: flag }, keyword, flag, source.label) });\n }\n }\n for (const target of list(actions, \"require\")) {\n if (properties[target]) requiredSet.add(target);\n }\n for (const target of list(actions, \"optional\")) requiredSet.delete(target);\n for (const [target, keywords] of Object.entries(actions.patch ?? {})) {\n patchTarget({ properties, value, target, apply: (leaf) => ({ ...leaf, ...keywords }) });\n }\n }\n return { properties, required: [...requiredSet] };\n}\n\n// hiddenBy records which listener hid a field (`x-hidden-by`), so the form's\n// debug mode can say why it is missing; a show clears it.\nfunction hiddenBy(leaf: JsonSchemaProperty, keyword: string, flag: boolean, label: string): JsonSchemaProperty {\n if (keyword !== \"x-hidden\") return leaf;\n if (flag) return { ...leaf, \"x-hidden-by\": label };\n const { \"x-hidden-by\": _by, ...shown } = leaf;\n return shown;\n}\n\n// loadListenersOf collects an object's `x-on-load` listeners in order: the\n// schema's own, then each `allOf` member's — an unconditional member's own, or\n// those of the `then`/`else` branch that applies, selected exactly as\n// effectiveProperties selects the branch it merges.\nfunction loadListenersOf(schema: JsonSchemaObject, value: Record<string, unknown>): BoundListener[] {\n const bound = loadListenersAt(schema[\"x-on-load\"], \"#/x-on-load\");\n for (const [index, clause] of (schema.allOf ?? []).entries()) {\n if (clause.if === undefined && clause.then === undefined) {\n bound.push(...loadListenersAt(clause[\"x-on-load\"], `#/allOf/${index}/x-on-load`));\n continue;\n }\n const branch = matchesIf(clause.if, value) ? \"then\" : \"else\";\n bound.push(...loadListenersAt(clause[branch]?.[\"x-on-load\"], `#/allOf/${index}/${branch}/x-on-load`));\n }\n return bound;\n}\n\nfunction loadListenersAt(listeners: unknown, pointer: string): BoundListener[] {\n if (listeners === undefined) return [];\n if (!Array.isArray(listeners)) {\n throw new Error(`x-on-load at ${pointer} must be an array of listeners, got ${typeof listeners}`);\n }\n return listeners.map((listener: ChangeListener, index) => ({\n listener,\n source: { label: `x-on-load at ${pointer}/${index}`, key: \"\", load: true },\n }));\n}\n\nfunction changeSource(key: string): ListenerSource {\n return { label: `x-on-change on \"${key}\"`, key, load: false };\n}\n\n// applyChangeEffects commits `next` at `key` and runs the value actions\n// (reset/set) of that key's listeners against the post-edit object. A target\n// whose value actually changes fires its own listeners in turn; each key fires\n// at most once per commit, so a cycle ends. When `root` is the edited object\n// itself (the top level), expressions see the post-edit value as root too.\nexport function applyChangeEffects(\n schema: JsonSchemaObject,\n edit: ListenerOptions & { value: Record<string, unknown>; key: string; next: unknown },\n): Record<string, unknown> {\n let current: Record<string, unknown> = { ...edit.value, [edit.key]: edit.next };\n const known = declaredKeys(schema);\n const fired = new Set<string>();\n const queue = [edit.key];\n for (let source = queue.shift(); source !== undefined; source = queue.shift()) {\n if (fired.has(source)) continue;\n fired.add(source);\n const { properties } = effectiveProperties(schema, current);\n const options: ListenerOptions = {\n root: edit.root === edit.value ? current : edit.root,\n ...(edit.evaluate ? { evaluate: edit.evaluate } : {}),\n };\n for (const listener of listenersOf(source, properties[source])) {\n const actions = selectActions({ listener, source: changeSource(source), self: current, known, options });\n for (const [target, nextValue] of valueChanges(actions, properties)) {\n if (Object.is(current[target], nextValue)) continue;\n current = { ...current };\n if (nextValue === undefined) delete current[target];\n else current[target] = nextValue;\n queue.push(target);\n }\n }\n }\n return current;\n}\n\nfunction valueChanges(\n actions: ChangeActions,\n properties: Record<string, JsonSchemaProperty>,\n): [string, unknown][] {\n return [\n ...list(actions, \"reset\").map((target): [string, unknown] => {\n const fallback = properties[target]?.default;\n return [target, fallback === undefined ? undefined : cloneSchemaDefault(fallback)];\n }),\n ...Object.entries(actions.set ?? {}).map(([target, v]): [string, unknown] => [target, cloneSchemaDefault(v)]),\n ];\n}\n\nfunction listenersOf(key: string, prop: JsonSchemaProperty | undefined): ChangeListener[] {\n const listeners = prop?.[\"x-on-change\"];\n if (listeners === undefined) return [];\n if (!Array.isArray(listeners)) {\n throw new Error(`\"${key}\": x-on-change must be an array of listeners, got ${typeof listeners}`);\n }\n return listeners;\n}\n\n// selectActions validates both branches of a listener (so a schema error\n// surfaces whichever branch is live) and returns the one that applies now.\nfunction selectActions({\n listener,\n source,\n self,\n known,\n options,\n}: {\n listener: ChangeListener;\n source: ListenerSource;\n self: Record<string, unknown>;\n known: Set<string>;\n options: ListenerOptions;\n}): ChangeActions {\n validateActions(source, listener, known);\n if (listener.else) validateActions(source, listener.else, known);\n return listenerHolds(listener, source, self, options) ? listener : (listener.else ?? {});\n}\n\n// listenerHolds evaluates `when` against the source's subject: the property's\n// value for x-on-change, the object itself for x-on-load.\nfunction listenerHolds(\n listener: ChangeListener,\n { label, key, load }: ListenerSource,\n self: Record<string, unknown>,\n options: ListenerOptions,\n): boolean {\n if (listener.when === undefined) return true;\n const { expr, ...predicate } = listener.when;\n const hasPredicate = Object.keys(predicate).length > 0;\n const subject = load ? self : self[key];\n if (!hasPredicate && expr === undefined) {\n throw new Error(`${label}: when states nothing it can evaluate`);\n }\n if (expr !== undefined && typeof expr !== \"string\") {\n throw new Error(`${label}: when.expr must be a string, got ${typeof expr}`);\n }\n if (expr !== undefined && !options.evaluate) {\n throw new Error(`${label}: when.expr \"${expr}\" needs the form's expressionEvaluator`);\n }\n if (hasPredicate) {\n const holds = evaluatePredicate(predicate, subject);\n if (holds === undefined) {\n throw new Error(`${label}: when states nothing it can evaluate (${JSON.stringify(predicate)})`);\n }\n if (!holds) return false;\n }\n if (expr === undefined || !options.evaluate) return true;\n const result: unknown = options.evaluate({ expr, key, value: subject, self, root: options.root });\n if (typeof result !== \"boolean\") {\n throw new Error(`${label}: expressionEvaluator returned ${typeof result} for \"${expr}\", expected boolean`);\n }\n return result;\n}\n\nfunction validateActions(source: ListenerSource, actions: ChangeActions, known: Set<string>): void {\n const { label } = source;\n if (actions.set !== undefined && !isPlainObject(actions.set)) {\n throw new Error(`${label}: set must be an object of target → value`);\n }\n if (source.load) {\n const local = LOCAL_ACTIONS.find((name) => actions[name] !== undefined);\n if (local) {\n throw new Error(`${label}: ${local} is not allowed in x-on-load, which only derives state (hide/show/enable/disable/patch)`);\n }\n }\n const setKeys = Object.keys(actions.set ?? {});\n for (const name of LOCAL_ACTIONS) {\n const targets = name === \"set\" ? setKeys : list(actions, name);\n const path = targets.find(isPathTarget);\n if (path !== undefined) {\n throw new Error(`${label}: ${name} \"${path}\" cannot take a path; value and required actions act on sibling keys only`);\n }\n }\n for (const target of [...LIST_NAMES.flatMap((name) => list(actions, name)), ...setKeys]) {\n validateTarget(label, target, known);\n }\n const pairs: [string, string[], string, string[]][] = [\n ...CONTRADICTIONS.map(([a, b]): [string, string[], string, string[]] => [a, list(actions, a), b, list(actions, b)]),\n [\"reset\", list(actions, \"reset\"), \"set\", setKeys],\n ];\n for (const [a, left, b, right] of pairs) {\n const clash = left.find((target) => right.includes(target));\n if (clash !== undefined) {\n throw new Error(`${label}: both ${a} and ${b} \"${clash}\"`);\n }\n }\n validatePatch(label, actions, known);\n}\n\n// validateTarget checks a target's grammar and that its first segment is a key\n// the schema declares in some branch.\nfunction validateTarget(label: string, target: string, known: Set<string>): void {\n if (isPathTarget(target) && known.has(target)) {\n throw new Error(`${label}: target \"${target}\" is both a declared key and a path`);\n }\n const [first = \"\"] = targetSegments(label, target);\n if (!known.has(first)) throw new Error(`${label}: unknown target \"${target}\"`);\n}\n\n// validatePatch checks a `patch`: an object of keyword objects on known\n// targets, no denied keyword, and no keyword a verb in the same actions sets.\nfunction validatePatch(label: string, actions: ChangeActions, known: Set<string>): void {\n const patch: unknown = actions.patch;\n if (patch === undefined) return;\n if (!isPlainObject(patch)) {\n throw new Error(`${label}: patch must be an object of target → keywords`);\n }\n for (const [target, keywords] of Object.entries(patch)) {\n validateTarget(label, target, known);\n if (!isPlainObject(keywords)) {\n throw new Error(`${label}: patch \"${target}\" must be an object of keywords`);\n }\n for (const keyword of Object.keys(keywords)) {\n const denied = PATCH_DENIED[keyword];\n if (denied) throw new Error(`${label}: patch \"${target}\" may not set ${keyword} (${denied})`);\n }\n for (const [verb, keyword] of STATE_FLAGS) {\n if (keyword in keywords && list(actions, verb).includes(target)) {\n throw new Error(`${label}: both ${verb} and patch ${keyword} on \"${target}\"`);\n }\n }\n }\n}\n\nfunction list(actions: ChangeActions, name: ListName): string[] {\n const targets = actions[name];\n if (targets === undefined) return [];\n if (!Array.isArray(targets)) {\n throw new Error(`x-on-change: ${name} must be an array of property keys, got ${typeof targets}`);\n }\n return targets;\n}\n\n// Every key the schema can declare in any branch — a listener may target a\n// field that only exists while some `allOf` branch is live.\nfunction declaredKeys(schema: JsonSchemaObject): Set<string> {\n const keys = new Set(Object.keys(schema.properties ?? {}));\n for (const clause of schema.allOf ?? []) {\n for (const branch of [clause, clause.then, clause.else]) {\n for (const key of Object.keys(branch?.properties ?? {})) keys.add(key);\n }\n }\n return keys;\n}\n"],"names":["effectiveProperties","patchTarget","matchesIf","cloneSchemaDefault","evaluatePredicate","isPlainObject","isPathTarget","targetSegments"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { EffectiveProperties } from './json-schema-form-conditionals.js';
|
|
2
|
+
import { ExpressionEvaluator, JsonSchemaObject } from './json-schema-form-types.js';
|
|
3
|
+
export interface ListenerOptions {
|
|
4
|
+
root: Record<string, unknown>;
|
|
5
|
+
evaluate?: ExpressionEvaluator;
|
|
6
|
+
}
|
|
7
|
+
export declare function applyListenerState(schema: JsonSchemaObject, value: Record<string, unknown>, options: ListenerOptions): EffectiveProperties;
|
|
8
|
+
export declare function applyChangeEffects(schema: JsonSchemaObject, edit: ListenerOptions & {
|
|
9
|
+
value: Record<string, unknown>;
|
|
10
|
+
key: string;
|
|
11
|
+
next: unknown;
|
|
12
|
+
}): Record<string, unknown>;
|
|
13
|
+
//# sourceMappingURL=json-schema-form-listeners.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-listeners.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-listeners.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,KAAK,EAGV,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,0BAA0B,CAAC;AAOlC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AA0DD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,eAAe,GACvB,mBAAmB,CA0BrB;AAgDD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACrF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBzB"}
|