@flanksource/clicky-ui 0.3.41 → 0.3.43
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/dist/ai.cjs +4 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +4 -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/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 +30 -7
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +30 -7
- 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-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-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-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-listeners.cjs +7 -1
- package/dist/components/json-schema-form-listeners.cjs.map +1 -1
- package/dist/components/json-schema-form-listeners.d.ts.map +1 -1
- package/dist/components/json-schema-form-listeners.js +7 -1
- package/dist/components/json-schema-form-listeners.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 +21 -5
- 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 +21 -5
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-runtime-types.d.ts +1 -0
- package/dist/components/json-schema-form-runtime-types.d.ts.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 +1 -0
- package/dist/components/json-schema-form-types.d.ts.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/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.summary.cjs +9 -3
- package/dist/data/ai/SessionInspector.summary.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.summary.js +9 -3
- package/dist/data/ai/SessionInspector.summary.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/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.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +4 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -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 +4 -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 +3 -0
- 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/index.cjs +5 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +1 -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 +1 -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/profiles/fields/profileFieldFilterEditor.cjs +5 -2
- package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldFilterEditor.js +5 -2
- package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.cjs +2 -0
- package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.d.ts.map +1 -1
- package/dist/profiles/fields/profileFieldIcons.js +2 -0
- package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.cjs +1 -0
- package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.d.ts +3 -0
- package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
- package/dist/profiles/wizard/profileWizardModel.js +1 -0
- package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +3 -1
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +3 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +3 -1
- package/dist/rpc/OperationCatalog.js.map +1 -1
- 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/styles.css +1 -1
- package/package.json +1 -1
- package/schemas/json-schema-form.schema.json +5 -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
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { LabelIcon } from "../data/Icon.js";
|
|
3
|
+
import { TONE_DOT_CLASS, isFieldTone } from "./json-schema-form-tone.js";
|
|
4
|
+
import { cn } from "../lib/utils.js";
|
|
5
|
+
import { groupKeywords } from "./json-schema-form-debug-groups.js";
|
|
6
|
+
import { DebugGlyph } from "./json-schema-form-debug-glyph.js";
|
|
7
|
+
import { GROUP_GLYPH, keywordGlyph, KIND_GLYPH } from "./json-schema-form-debug-glyph-map.js";
|
|
8
|
+
import { ListenerList } from "./json-schema-form-debug-listeners.js";
|
|
9
|
+
const GROUP_TITLE = {
|
|
10
|
+
behaviour: "Behaviour",
|
|
11
|
+
presentation: "Presentation",
|
|
12
|
+
"opt-in": "Opt-in extensions",
|
|
13
|
+
consumer: "Consumer extensions",
|
|
14
|
+
schema: "Schema"
|
|
15
|
+
};
|
|
16
|
+
const GROUP_NOTE = {
|
|
17
|
+
"opt-in": "read only when the host passes the matching create*FormExtensions()",
|
|
18
|
+
consumer: "not read by the form"
|
|
19
|
+
};
|
|
20
|
+
const STRUCTURE = /* @__PURE__ */ new Set(["properties", "items", "allOf", "anyOf", "oneOf", "$defs", "patternProperties", "additionalProperties"]);
|
|
21
|
+
const ICON_KEYWORDS = /* @__PURE__ */ new Set(["x-icon", "x-input-prefix-icon", "x-input-suffix-icon"]);
|
|
22
|
+
const ENUM_MAPS = ["x-enum-labels", "x-enum-icons", "x-enum-descriptions", "x-enum-tones"];
|
|
23
|
+
function DebugKeywords({ prop, value }) {
|
|
24
|
+
return /* @__PURE__ */ jsx(Fragment, { children: groupKeywords(prop).map(({ group, entries }) => {
|
|
25
|
+
const enumMaps = entries.filter(([keyword]) => ENUM_MAPS.includes(keyword));
|
|
26
|
+
const rest = entries.filter(([keyword]) => !ENUM_MAPS.includes(keyword));
|
|
27
|
+
return /* @__PURE__ */ jsxs("section", { role: "group", "aria-label": GROUP_TITLE[group], className: "space-y-0.5 border-t border-border pt-1.5", children: [
|
|
28
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground", children: [
|
|
29
|
+
/* @__PURE__ */ jsx(DebugGlyph, { glyph: GROUP_GLYPH[group] }),
|
|
30
|
+
GROUP_TITLE[group],
|
|
31
|
+
GROUP_NOTE[group] && /* @__PURE__ */ jsxs("span", { className: "font-normal normal-case tracking-normal", children: [
|
|
32
|
+
"· ",
|
|
33
|
+
GROUP_NOTE[group]
|
|
34
|
+
] })
|
|
35
|
+
] }),
|
|
36
|
+
enumMaps.length > 0 && /* @__PURE__ */ jsx(EnumOptionTable, { prop }),
|
|
37
|
+
/* @__PURE__ */ jsx("ul", { className: "space-y-0.5 font-mono text-[11px]", children: rest.map(([keyword, raw]) => /* @__PURE__ */ jsxs("li", { className: "flex gap-1", children: [
|
|
38
|
+
/* @__PURE__ */ jsx(DebugGlyph, { glyph: keywordGlyph(keyword, raw), className: "mt-px" }),
|
|
39
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 break-words", children: [
|
|
40
|
+
/* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: keyword }),
|
|
41
|
+
" ",
|
|
42
|
+
describeKeyword(keyword, raw, value)
|
|
43
|
+
] })
|
|
44
|
+
] }, keyword)) })
|
|
45
|
+
] }, group);
|
|
46
|
+
}) });
|
|
47
|
+
}
|
|
48
|
+
function describeKeyword(keyword, raw, value) {
|
|
49
|
+
if (keyword === "x-on-change" || keyword === "x-on-load") {
|
|
50
|
+
return Array.isArray(raw) ? /* @__PURE__ */ jsx(ListenerList, { listeners: raw, subject: value }) : /* @__PURE__ */ jsx(Json, { value: raw });
|
|
51
|
+
}
|
|
52
|
+
if (keyword === "x-clicky-lookup") return /* @__PURE__ */ jsx(LookupSummary, { descriptor: raw });
|
|
53
|
+
if (keyword === "x-item") return /* @__PURE__ */ jsx(ItemSpecSummary, { spec: raw });
|
|
54
|
+
if (keyword === "x-help") return /* @__PURE__ */ jsx(HelpSummary, { help: raw });
|
|
55
|
+
if (ICON_KEYWORDS.has(keyword) && typeof raw === "string") {
|
|
56
|
+
return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
|
|
57
|
+
/* @__PURE__ */ jsx(LabelIcon, { icon: raw, className: "size-3.5" }),
|
|
58
|
+
raw
|
|
59
|
+
] });
|
|
60
|
+
}
|
|
61
|
+
if (STRUCTURE.has(keyword)) {
|
|
62
|
+
if (Array.isArray(raw)) return `[${raw.length}]`;
|
|
63
|
+
if (typeof raw === "object" && raw !== null) return `{${Object.keys(raw).join(", ")}}`;
|
|
64
|
+
}
|
|
65
|
+
if (typeof raw === "string") return raw;
|
|
66
|
+
if (Array.isArray(raw) && raw.every((item) => typeof item === "string")) return raw.join(", ");
|
|
67
|
+
return /* @__PURE__ */ jsx(Json, { value: raw });
|
|
68
|
+
}
|
|
69
|
+
function Json({ value }) {
|
|
70
|
+
if (typeof value !== "object" || value === null) return /* @__PURE__ */ jsx("span", { children: JSON.stringify(value) });
|
|
71
|
+
return /* @__PURE__ */ jsx("pre", { className: "mt-0.5 max-h-40 overflow-auto whitespace-pre-wrap rounded bg-muted/60 p-1", children: JSON.stringify(value, null, 2) });
|
|
72
|
+
}
|
|
73
|
+
function LookupSummary({ descriptor }) {
|
|
74
|
+
const { scope, hierarchy } = descriptor;
|
|
75
|
+
const parts = [
|
|
76
|
+
`filter ${descriptor.filter}`,
|
|
77
|
+
descriptor.searchParam && `search ${descriptor.searchParam}`,
|
|
78
|
+
descriptor.multi && "multi-select",
|
|
79
|
+
scope && `scope ${scope.param} ← ${scope.from}${scope.map ? ` via ${JSON.stringify(scope.map)}` : ""}`,
|
|
80
|
+
hierarchy && `tree split on ${JSON.stringify(hierarchy.delimiters)}`
|
|
81
|
+
].filter(Boolean);
|
|
82
|
+
return /* @__PURE__ */ jsxs("span", { children: [
|
|
83
|
+
"GET ",
|
|
84
|
+
descriptor.url,
|
|
85
|
+
" ",
|
|
86
|
+
parts.join(" · ")
|
|
87
|
+
] });
|
|
88
|
+
}
|
|
89
|
+
function ItemSpecSummary({ spec }) {
|
|
90
|
+
var _a;
|
|
91
|
+
const summary = (_a = spec.summary) == null ? void 0 : _a.map((part) => typeof part === "string" ? part : (part.pattern ?? "{}").replace("{}", part.property));
|
|
92
|
+
const parts = [
|
|
93
|
+
spec.title && `title ${spec.title.join(" | ")}${spec.fallback ? ` (else ${spec.fallback})` : ""}`,
|
|
94
|
+
summary && `summary ${summary.join(" · ")}`,
|
|
95
|
+
spec.glyph && `glyph ${spec.glyph}`,
|
|
96
|
+
spec.badge && `badge ${spec.badge}`,
|
|
97
|
+
spec.flag && `flag ${spec.flag}`,
|
|
98
|
+
spec.actions && `actions ${spec.actions.length > 0 ? spec.actions.join(", ") : "none"}`,
|
|
99
|
+
spec.noun && `noun ${spec.noun}${spec.nounPlural ? `/${spec.nounPlural}` : ""}`,
|
|
100
|
+
spec.empty && `empty "${spec.empty}"`
|
|
101
|
+
].filter(Boolean);
|
|
102
|
+
return /* @__PURE__ */ jsx("span", { children: parts.join(" · ") });
|
|
103
|
+
}
|
|
104
|
+
function HelpSummary({ help }) {
|
|
105
|
+
const origin = [help.source, help.section].filter(Boolean).join(" › ");
|
|
106
|
+
return /* @__PURE__ */ jsxs("span", { children: [
|
|
107
|
+
origin && /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
|
|
108
|
+
"[",
|
|
109
|
+
origin,
|
|
110
|
+
"] "
|
|
111
|
+
] }),
|
|
112
|
+
/* @__PURE__ */ jsx("span", { className: "font-sans", children: help.body })
|
|
113
|
+
] });
|
|
114
|
+
}
|
|
115
|
+
function EnumOptionTable({ prop }) {
|
|
116
|
+
const labels = prop["x-enum-labels"] ?? {};
|
|
117
|
+
const icons = prop["x-enum-icons"] ?? {};
|
|
118
|
+
const descriptions = prop["x-enum-descriptions"] ?? {};
|
|
119
|
+
const tones = prop["x-enum-tones"] ?? {};
|
|
120
|
+
const enumValues = (prop.enum ?? []).map(String);
|
|
121
|
+
const mapped = [...new Set([labels, icons, descriptions, tones].flatMap((map) => Object.keys(map)))];
|
|
122
|
+
const values = [...enumValues, ...mapped.filter((value) => !enumValues.includes(value))];
|
|
123
|
+
const checkEnum = prop.enum !== void 0;
|
|
124
|
+
const hasIcons = Object.keys(icons).length > 0;
|
|
125
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex gap-1 font-mono text-[11px]", children: [
|
|
126
|
+
/* @__PURE__ */ jsx(DebugGlyph, { glyph: KIND_GLYPH.enum, className: "mt-px" }),
|
|
127
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
128
|
+
/* @__PURE__ */ jsx("div", { className: "text-muted-foreground", children: "x-enum-*" }),
|
|
129
|
+
/* @__PURE__ */ jsxs("table", { className: "w-full", children: [
|
|
130
|
+
/* @__PURE__ */ jsx("thead", { className: "text-left text-[10px] text-muted-foreground", children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
131
|
+
/* @__PURE__ */ jsx("th", { className: "pr-2 font-normal", children: "value" }),
|
|
132
|
+
/* @__PURE__ */ jsx("th", { className: "pr-2 font-normal", children: "label" }),
|
|
133
|
+
/* @__PURE__ */ jsx("th", { className: "pr-2 font-normal", children: "description" }),
|
|
134
|
+
/* @__PURE__ */ jsx("th", { className: "font-normal", children: "tone" })
|
|
135
|
+
] }) }),
|
|
136
|
+
/* @__PURE__ */ jsx("tbody", { children: values.map((value) => {
|
|
137
|
+
const tone = tones[value];
|
|
138
|
+
return /* @__PURE__ */ jsxs("tr", { className: "align-top", children: [
|
|
139
|
+
/* @__PURE__ */ jsx("td", { className: "pr-2", children: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
|
|
140
|
+
hasIcons && /* @__PURE__ */ jsx(LabelIcon, { icon: icons[value], className: "size-3.5" }),
|
|
141
|
+
value,
|
|
142
|
+
checkEnum && !enumValues.includes(value) && /* @__PURE__ */ jsx("span", { className: "text-amber-700 dark:text-amber-300", children: " ⚠ not in enum" })
|
|
143
|
+
] }) }),
|
|
144
|
+
/* @__PURE__ */ jsx("td", { className: "pr-2", children: labels[value] ?? "" }),
|
|
145
|
+
/* @__PURE__ */ jsx("td", { className: "pr-2 font-sans", children: descriptions[value] ?? "" }),
|
|
146
|
+
/* @__PURE__ */ jsx("td", { children: tone && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
|
|
147
|
+
/* @__PURE__ */ jsx("span", { className: cn("size-2 rounded-full", isFieldTone(tone) ? TONE_DOT_CLASS[tone] : "outline outline-1 outline-rose-500") }),
|
|
148
|
+
tone
|
|
149
|
+
] }) })
|
|
150
|
+
] }, value);
|
|
151
|
+
}) })
|
|
152
|
+
] })
|
|
153
|
+
] })
|
|
154
|
+
] });
|
|
155
|
+
}
|
|
156
|
+
export {
|
|
157
|
+
DebugKeywords
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=json-schema-form-debug-keywords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-debug-keywords.js","sources":["../../src/components/json-schema-form-debug-keywords.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { LabelIcon } from \"../data/Icon\";\nimport { TONE_DOT_CLASS, isFieldTone } from \"./json-schema-form-tone\";\nimport { cn } from \"../lib/utils\";\nimport { groupKeywords, type KeywordGroup } from \"./json-schema-form-debug-groups\";\nimport { DebugGlyph } from \"./json-schema-form-debug-glyph\";\nimport { GROUP_GLYPH, KIND_GLYPH, keywordGlyph } from \"./json-schema-form-debug-glyph-map\";\nimport { ListenerList } from \"./json-schema-form-debug-listeners\";\nimport type { ArrayItemSpec, ChangeListener, JsonSchemaHelpBlock, JsonSchemaProperty, LookupDescriptor } from \"./json-schema-form-types\";\n\n// The debug card's keyword list, one labelled group at a time (see\n// groupKeywords), each keyword beside its palette glyph and rendered in its own\n// vocabulary — listeners as condition/action cards, the x-enum-* maps as one\n// option table, a lookup as the request it makes — instead of as raw JSON.\n\nconst GROUP_TITLE: Record<KeywordGroup, string> = {\n behaviour: \"Behaviour\",\n presentation: \"Presentation\",\n \"opt-in\": \"Opt-in extensions\",\n consumer: \"Consumer extensions\",\n schema: \"Schema\",\n};\nconst GROUP_NOTE: Partial<Record<KeywordGroup, string>> = {\n \"opt-in\": \"read only when the host passes the matching create*FormExtensions()\",\n consumer: \"not read by the form\",\n};\n\n// Keywords that shape the tree rather than source the field; listed by name.\nconst STRUCTURE = new Set([\"properties\", \"items\", \"allOf\", \"anyOf\", \"oneOf\", \"$defs\", \"patternProperties\", \"additionalProperties\"]);\nconst ICON_KEYWORDS = new Set([\"x-icon\", \"x-input-prefix-icon\", \"x-input-suffix-icon\"]);\nconst ENUM_MAPS = [\"x-enum-labels\", \"x-enum-icons\", \"x-enum-descriptions\", \"x-enum-tones\"] as const;\n\n// DebugKeywords renders a property's keywords, one labelled group at a time.\n// `value` is the field's current value: listeners are evaluated against it.\nexport function DebugKeywords({ prop, value }: { prop: JsonSchemaProperty; value?: unknown }) {\n return (\n <>\n {groupKeywords(prop).map(({ group, entries }) => {\n const enumMaps = entries.filter(([keyword]) => (ENUM_MAPS as readonly string[]).includes(keyword));\n const rest = entries.filter(([keyword]) => !(ENUM_MAPS as readonly string[]).includes(keyword));\n return (\n <section key={group} role=\"group\" aria-label={GROUP_TITLE[group]} className=\"space-y-0.5 border-t border-border pt-1.5\">\n <div className=\"flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n <DebugGlyph glyph={GROUP_GLYPH[group]} />\n {GROUP_TITLE[group]}\n {GROUP_NOTE[group] && <span className=\"font-normal normal-case tracking-normal\">· {GROUP_NOTE[group]}</span>}\n </div>\n {enumMaps.length > 0 && <EnumOptionTable prop={prop} />}\n <ul className=\"space-y-0.5 font-mono text-[11px]\">\n {rest.map(([keyword, raw]) => (\n <li key={keyword} className=\"flex gap-1\">\n <DebugGlyph glyph={keywordGlyph(keyword, raw)} className=\"mt-px\" />\n <div className=\"min-w-0 flex-1 break-words\">\n <span className=\"text-muted-foreground\">{keyword}</span> {describeKeyword(keyword, raw, value)}\n </div>\n </li>\n ))}\n </ul>\n </section>\n );\n })}\n </>\n );\n}\n\nfunction describeKeyword(keyword: string, raw: unknown, value: unknown): ReactNode {\n if (keyword === \"x-on-change\" || keyword === \"x-on-load\") {\n return Array.isArray(raw) ? <ListenerList listeners={raw as ChangeListener[]} subject={value} /> : <Json value={raw} />;\n }\n if (keyword === \"x-clicky-lookup\") return <LookupSummary descriptor={raw as LookupDescriptor} />;\n if (keyword === \"x-item\") return <ItemSpecSummary spec={raw as ArrayItemSpec} />;\n if (keyword === \"x-help\") return <HelpSummary help={raw as JsonSchemaHelpBlock} />;\n if (ICON_KEYWORDS.has(keyword) && typeof raw === \"string\") {\n return (\n <span className=\"inline-flex items-center gap-1\">\n <LabelIcon icon={raw} className=\"size-3.5\" />\n {raw}\n </span>\n );\n }\n if (STRUCTURE.has(keyword)) {\n if (Array.isArray(raw)) return `[${raw.length}]`;\n if (typeof raw === \"object\" && raw !== null) return `{${Object.keys(raw).join(\", \")}}`;\n }\n if (typeof raw === \"string\") return raw;\n if (Array.isArray(raw) && raw.every((item) => typeof item === \"string\")) return raw.join(\", \");\n return <Json value={raw} />;\n}\n\nfunction Json({ value }: { value: unknown }) {\n if (typeof value !== \"object\" || value === null) return <span>{JSON.stringify(value)}</span>;\n return <pre className=\"mt-0.5 max-h-40 overflow-auto whitespace-pre-wrap rounded bg-muted/60 p-1\">{JSON.stringify(value, null, 2)}</pre>;\n}\n\nfunction LookupSummary({ descriptor }: { descriptor: LookupDescriptor }) {\n const { scope, hierarchy } = descriptor;\n const parts = [\n `filter ${descriptor.filter}`,\n descriptor.searchParam && `search ${descriptor.searchParam}`,\n descriptor.multi && \"multi-select\",\n scope && `scope ${scope.param} ← ${scope.from}${scope.map ? ` via ${JSON.stringify(scope.map)}` : \"\"}`,\n hierarchy && `tree split on ${JSON.stringify(hierarchy.delimiters)}`,\n ].filter(Boolean);\n return (\n <span>\n GET {descriptor.url} {parts.join(\" · \")}\n </span>\n );\n}\n\nfunction ItemSpecSummary({ spec }: { spec: ArrayItemSpec }) {\n const summary = spec.summary?.map((part) => (typeof part === \"string\" ? part : (part.pattern ?? \"{}\").replace(\"{}\", part.property)));\n const parts = [\n spec.title && `title ${spec.title.join(\" | \")}${spec.fallback ? ` (else ${spec.fallback})` : \"\"}`,\n summary && `summary ${summary.join(\" · \")}`,\n spec.glyph && `glyph ${spec.glyph}`,\n spec.badge && `badge ${spec.badge}`,\n spec.flag && `flag ${spec.flag}`,\n spec.actions && `actions ${spec.actions.length > 0 ? spec.actions.join(\", \") : \"none\"}`,\n spec.noun && `noun ${spec.noun}${spec.nounPlural ? `/${spec.nounPlural}` : \"\"}`,\n spec.empty && `empty \"${spec.empty}\"`,\n ].filter(Boolean);\n return <span>{parts.join(\" · \")}</span>;\n}\n\nfunction HelpSummary({ help }: { help: JsonSchemaHelpBlock }) {\n const origin = [help.source, help.section].filter(Boolean).join(\" › \");\n return (\n <span>\n {origin && <span className=\"text-muted-foreground\">[{origin}] </span>}\n <span className=\"font-sans\">{help.body}</span>\n </span>\n );\n}\n\n// EnumOptionTable joins the x-enum-* maps by value: one row per enum value,\n// then any map key the enum does not list (a typo, or a stale value).\nfunction EnumOptionTable({ prop }: { prop: JsonSchemaProperty }) {\n const labels = prop[\"x-enum-labels\"] ?? {};\n const icons = prop[\"x-enum-icons\"] ?? {};\n const descriptions = prop[\"x-enum-descriptions\"] ?? {};\n const tones = prop[\"x-enum-tones\"] ?? {};\n const enumValues = (prop.enum ?? []).map(String);\n const mapped = [...new Set([labels, icons, descriptions, tones].flatMap((map) => Object.keys(map)))];\n const values = [...enumValues, ...mapped.filter((value) => !enumValues.includes(value))];\n const checkEnum = prop.enum !== undefined;\n const hasIcons = Object.keys(icons).length > 0;\n return (\n <div className=\"flex gap-1 font-mono text-[11px]\">\n <DebugGlyph glyph={KIND_GLYPH.enum} className=\"mt-px\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-muted-foreground\">x-enum-*</div>\n <table className=\"w-full\">\n <thead className=\"text-left text-[10px] text-muted-foreground\">\n <tr>\n <th className=\"pr-2 font-normal\">value</th>\n <th className=\"pr-2 font-normal\">label</th>\n <th className=\"pr-2 font-normal\">description</th>\n <th className=\"font-normal\">tone</th>\n </tr>\n </thead>\n <tbody>\n {values.map((value) => {\n const tone = tones[value];\n return (\n <tr key={value} className=\"align-top\">\n <td className=\"pr-2\">\n <span className=\"inline-flex items-center gap-1\">\n {hasIcons && <LabelIcon icon={icons[value]} className=\"size-3.5\" />}\n {value}\n {checkEnum && !enumValues.includes(value) && <span className=\"text-amber-700 dark:text-amber-300\"> ⚠ not in enum</span>}\n </span>\n </td>\n <td className=\"pr-2\">{labels[value] ?? \"\"}</td>\n <td className=\"pr-2 font-sans\">{descriptions[value] ?? \"\"}</td>\n <td>\n {tone && (\n <span className=\"inline-flex items-center gap-1\">\n <span className={cn(\"size-2 rounded-full\", isFieldTone(tone) ? TONE_DOT_CLASS[tone] : \"outline outline-1 outline-rose-500\")} />\n {tone}\n </span>\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const utils = require("../lib/utils.cjs");
|
|
5
|
+
const jsonSchemaFormConditionals = require("./json-schema-form-conditionals.cjs");
|
|
6
|
+
const jsonSchemaFormDebugGlyph = require("./json-schema-form-debug-glyph.cjs");
|
|
7
|
+
const jsonSchemaFormDebugGlyphMap = require("./json-schema-form-debug-glyph-map.cjs");
|
|
8
|
+
const VERBS = ["hide", "show", "enable", "disable", "require", "optional", "reset", "set", "patch"];
|
|
9
|
+
const STATE_BADGE = {
|
|
10
|
+
true: { label: "holds", className: "text-emerald-700 dark:text-emerald-300" },
|
|
11
|
+
false: { label: "does not hold", className: "text-muted-foreground" },
|
|
12
|
+
unknown: { label: "needs evaluator", className: "text-amber-700 dark:text-amber-300" }
|
|
13
|
+
};
|
|
14
|
+
function ListenerList({ listeners, subject }) {
|
|
15
|
+
return /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "mt-0.5 space-y-1", children: listeners.map((listener, index) => {
|
|
16
|
+
const state = listenerState(listener.when, subject);
|
|
17
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18
|
+
"li",
|
|
19
|
+
{
|
|
20
|
+
"data-debug-listener": "",
|
|
21
|
+
"data-active": state,
|
|
22
|
+
className: utils.cn(
|
|
23
|
+
"space-y-0.5 rounded border px-1.5 py-1",
|
|
24
|
+
state === "true" ? "border-emerald-500/50 bg-emerald-500/5" : "border-border"
|
|
25
|
+
),
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1", children: [
|
|
28
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-10 shrink-0 text-sky-700 dark:text-sky-300", children: "when" }),
|
|
29
|
+
conditions(listener.when).map((condition, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { "data-condition": "", className: "inline-flex items-center gap-1 rounded bg-muted px-1", children: [
|
|
30
|
+
/* @__PURE__ */ jsxRuntime.jsx(jsonSchemaFormDebugGlyph.DebugGlyph, { glyph: condition.glyph }),
|
|
31
|
+
condition.text
|
|
32
|
+
] }, i)),
|
|
33
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: utils.cn("ml-auto font-sans text-[10px]", STATE_BADGE[state].className), children: STATE_BADGE[state].label })
|
|
34
|
+
] }),
|
|
35
|
+
/* @__PURE__ */ jsxRuntime.jsx(ActionRows, { actions: listener, branch: "then", dimmed: state === "false" }),
|
|
36
|
+
listener.else && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
37
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-10 text-sky-700 dark:text-sky-300", children: "else" }),
|
|
38
|
+
/* @__PURE__ */ jsxRuntime.jsx(ActionRows, { actions: listener.else, branch: "else", dimmed: state === "true" })
|
|
39
|
+
] })
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
index
|
|
43
|
+
);
|
|
44
|
+
}) });
|
|
45
|
+
}
|
|
46
|
+
function ActionRows({ actions, branch, dimmed }) {
|
|
47
|
+
const rows = VERBS.flatMap((verb) => actionRows(verb, actions).map((row) => ({ verb, ...row })));
|
|
48
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("ul", { ...{ [`data-${branch}`]: "" }, className: utils.cn("space-y-0.5 pl-2", dimmed && "opacity-50"), children: [
|
|
49
|
+
rows.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("li", { className: "text-muted-foreground", children: "nothing" }),
|
|
50
|
+
rows.map(({ verb, detail, targets }) => /* @__PURE__ */ jsxRuntime.jsxs("li", { "data-action": verb, className: "flex items-start gap-1", children: [
|
|
51
|
+
/* @__PURE__ */ jsxRuntime.jsx(jsonSchemaFormDebugGlyph.DebugGlyph, { glyph: jsonSchemaFormDebugGlyphMap.ACTION_GLYPH[verb], className: "mt-px" }),
|
|
52
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-12 shrink-0", children: verb }),
|
|
53
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-1", children: [
|
|
54
|
+
detail !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { "data-detail": "", className: "text-muted-foreground", children: detail }),
|
|
55
|
+
targets.map((target) => /* @__PURE__ */ jsxRuntime.jsx("span", { "data-target": "", className: "rounded bg-muted px-1", children: target }, target))
|
|
56
|
+
] })
|
|
57
|
+
] }, `${verb}${detail ?? ""}`))
|
|
58
|
+
] });
|
|
59
|
+
}
|
|
60
|
+
function actionRows(verb, actions) {
|
|
61
|
+
if (verb === "set") return groupByDetail(Object.entries(actions.set ?? {}).map(([key, value]) => [key, `= ${JSON.stringify(value)}`]));
|
|
62
|
+
if (verb === "patch") {
|
|
63
|
+
return groupByDetail(
|
|
64
|
+
Object.entries(actions.patch ?? {}).map(([key, patch]) => [
|
|
65
|
+
key,
|
|
66
|
+
Object.entries(patch).map(([keyword, value]) => `${keyword}: ${JSON.stringify(value)}`).join(", ")
|
|
67
|
+
])
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
const targets = actions[verb] ?? [];
|
|
71
|
+
return targets.length > 0 ? [{ targets }] : [];
|
|
72
|
+
}
|
|
73
|
+
function groupByDetail(entries) {
|
|
74
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
75
|
+
for (const [key, detail] of entries) grouped.set(detail, [...grouped.get(detail) ?? [], key]);
|
|
76
|
+
return [...grouped].map(([detail, targets]) => ({ detail, targets }));
|
|
77
|
+
}
|
|
78
|
+
function conditions(when) {
|
|
79
|
+
if (!when) return [{ glyph: jsonSchemaFormDebugGlyphMap.CONDITION_GLYPH.always, text: "always" }];
|
|
80
|
+
const { const: constValue, enum: enumValues, not, expr, ...rest } = when;
|
|
81
|
+
const out = [];
|
|
82
|
+
if (constValue !== void 0) out.push({ glyph: jsonSchemaFormDebugGlyphMap.CONDITION_GLYPH.const, text: `= ${JSON.stringify(constValue)}` });
|
|
83
|
+
if (enumValues !== void 0) out.push({ glyph: jsonSchemaFormDebugGlyphMap.CONDITION_GLYPH.enum, text: `∈ ${JSON.stringify(enumValues)}` });
|
|
84
|
+
if ((not == null ? void 0 : not.const) !== void 0) out.push({ glyph: jsonSchemaFormDebugGlyphMap.CONDITION_GLYPH.not, text: `≠ ${JSON.stringify(not.const)}` });
|
|
85
|
+
if ((not == null ? void 0 : not.enum) !== void 0) out.push({ glyph: jsonSchemaFormDebugGlyphMap.CONDITION_GLYPH.not, text: `∉ ${JSON.stringify(not.enum)}` });
|
|
86
|
+
if (not && not.const === void 0 && not.enum === void 0) out.push({ glyph: jsonSchemaFormDebugGlyphMap.CONDITION_GLYPH.not, text: `not ${JSON.stringify(not)}` });
|
|
87
|
+
if (expr !== void 0) out.push({ glyph: jsonSchemaFormDebugGlyphMap.CONDITION_GLYPH.expr, text: `expr ${expr}` });
|
|
88
|
+
if (Object.keys(rest).length > 0) out.push({ glyph: jsonSchemaFormDebugGlyphMap.CONDITION_GLYPH.schema, text: JSON.stringify(rest) });
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
function listenerState(when, subject) {
|
|
92
|
+
if (!when) return "true";
|
|
93
|
+
const { expr, ...predicate } = when;
|
|
94
|
+
if (Object.keys(predicate).length > 0) {
|
|
95
|
+
const holds = jsonSchemaFormConditionals.evaluatePredicate(predicate, subject);
|
|
96
|
+
if (holds === false) return "false";
|
|
97
|
+
if (holds === void 0) return "unknown";
|
|
98
|
+
}
|
|
99
|
+
return expr === void 0 ? "true" : "unknown";
|
|
100
|
+
}
|
|
101
|
+
exports.ListenerList = ListenerList;
|
|
102
|
+
//# sourceMappingURL=json-schema-form-debug-listeners.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-debug-listeners.cjs","sources":["../../src/components/json-schema-form-debug-listeners.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { evaluatePredicate } from \"./json-schema-form-conditionals\";\nimport { DebugGlyph } from \"./json-schema-form-debug-glyph\";\nimport { ACTION_GLYPH, CONDITION_GLYPH, type DebugGlyphPair } from \"./json-schema-form-debug-glyph-map\";\nimport type { ChangeActions, ChangeCondition, ChangeListener } from \"./json-schema-form-types\";\n\n// ListenerList renders an `x-on-change` / `x-on-load` array as one card per\n// listener: its conditions as chips, one row per action with the fields it\n// touches, and its else branch. `subject` is what `when` is evaluated against\n// (the field's value, or the object for x-on-load); the branch that applies to\n// it is marked and the other dimmed. A `when.expr` needs the host's\n// ExpressionEvaluator, which the card does not have, so it stays \"unknown\".\n\ntype ListenerState = \"true\" | \"false\" | \"unknown\";\n\nconst VERBS: (keyof ChangeActions)[] = [\"hide\", \"show\", \"enable\", \"disable\", \"require\", \"optional\", \"reset\", \"set\", \"patch\"];\n\nconst STATE_BADGE: Record<ListenerState, { label: string; className: string }> = {\n true: { label: \"holds\", className: \"text-emerald-700 dark:text-emerald-300\" },\n false: { label: \"does not hold\", className: \"text-muted-foreground\" },\n unknown: { label: \"needs evaluator\", className: \"text-amber-700 dark:text-amber-300\" },\n};\n\nexport function ListenerList({ listeners, subject }: { listeners: ChangeListener[]; subject: unknown }) {\n return (\n <ol className=\"mt-0.5 space-y-1\">\n {listeners.map((listener, index) => {\n const state = listenerState(listener.when, subject);\n return (\n <li\n key={index}\n data-debug-listener=\"\"\n data-active={state}\n className={cn(\n \"space-y-0.5 rounded border px-1.5 py-1\",\n state === \"true\" ? \"border-emerald-500/50 bg-emerald-500/5\" : \"border-border\",\n )}\n >\n <div className=\"flex flex-wrap items-center gap-1\">\n <span className=\"w-10 shrink-0 text-sky-700 dark:text-sky-300\">when</span>\n {conditions(listener.when).map((condition, i) => (\n <span key={i} data-condition=\"\" className=\"inline-flex items-center gap-1 rounded bg-muted px-1\">\n <DebugGlyph glyph={condition.glyph} />\n {condition.text}\n </span>\n ))}\n <span className={cn(\"ml-auto font-sans text-[10px]\", STATE_BADGE[state].className)}>{STATE_BADGE[state].label}</span>\n </div>\n <ActionRows actions={listener} branch=\"then\" dimmed={state === \"false\"} />\n {listener.else && (\n <>\n <div className=\"w-10 text-sky-700 dark:text-sky-300\">else</div>\n <ActionRows actions={listener.else} branch=\"else\" dimmed={state === \"true\"} />\n </>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nfunction ActionRows({ actions, branch, dimmed }: { actions: ChangeActions; branch: \"then\" | \"else\"; dimmed: boolean }) {\n const rows = VERBS.flatMap((verb) => actionRows(verb, actions).map((row) => ({ verb, ...row })));\n return (\n <ul {...{ [`data-${branch}`]: \"\" }} className={cn(\"space-y-0.5 pl-2\", dimmed && \"opacity-50\")}>\n {rows.length === 0 && <li className=\"text-muted-foreground\">nothing</li>}\n {rows.map(({ verb, detail, targets }) => (\n <li key={`${verb}${detail ?? \"\"}`} data-action={verb} className=\"flex items-start gap-1\">\n <DebugGlyph glyph={ACTION_GLYPH[verb]} className=\"mt-px\" />\n <span className=\"w-12 shrink-0\">{verb}</span>\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-1\">\n {detail !== undefined && (\n <span data-detail=\"\" className=\"text-muted-foreground\">\n {detail}\n </span>\n )}\n {targets.map((target) => (\n <span key={target} data-target=\"\" className=\"rounded bg-muted px-1\">\n {target}\n </span>\n ))}\n </div>\n </li>\n ))}\n </ul>\n );\n}\n\n// actionRows lists one verb's targets. The keyed verbs gather their targets by\n// what they do to them — every field set to \"\", every field patched readOnly —\n// so a listener that touches a dozen siblings reads as a few rows.\nfunction actionRows(verb: keyof ChangeActions, actions: ChangeActions): { detail?: string; targets: string[] }[] {\n if (verb === \"set\") return groupByDetail(Object.entries(actions.set ?? {}).map(([key, value]) => [key, `= ${JSON.stringify(value)}`]));\n if (verb === \"patch\") {\n return groupByDetail(\n Object.entries(actions.patch ?? {}).map(([key, patch]) => [\n key,\n Object.entries(patch)\n .map(([keyword, value]) => `${keyword}: ${JSON.stringify(value)}`)\n .join(\", \"),\n ]),\n );\n }\n const targets = actions[verb] ?? [];\n return targets.length > 0 ? [{ targets }] : [];\n}\n\nfunction groupByDetail(entries: [string, string][]): { detail: string; targets: string[] }[] {\n const grouped = new Map<string, string[]>();\n for (const [key, detail] of entries) grouped.set(detail, [...(grouped.get(detail) ?? []), key]);\n return [...grouped].map(([detail, targets]) => ({ detail, targets }));\n}\n\nfunction conditions(when: ChangeCondition | undefined): { glyph: DebugGlyphPair; text: string }[] {\n if (!when) return [{ glyph: CONDITION_GLYPH.always, text: \"always\" }];\n const { const: constValue, enum: enumValues, not, expr, ...rest } = when;\n const out: { glyph: DebugGlyphPair; text: string }[] = [];\n if (constValue !== undefined) out.push({ glyph: CONDITION_GLYPH.const, text: `= ${JSON.stringify(constValue)}` });\n if (enumValues !== undefined) out.push({ glyph: CONDITION_GLYPH.enum, text: `∈ ${JSON.stringify(enumValues)}` });\n if (not?.const !== undefined) out.push({ glyph: CONDITION_GLYPH.not, text: `≠ ${JSON.stringify(not.const)}` });\n if (not?.enum !== undefined) out.push({ glyph: CONDITION_GLYPH.not, text: `∉ ${JSON.stringify(not.enum)}` });\n if (not && not.const === undefined && not.enum === undefined) out.push({ glyph: CONDITION_GLYPH.not, text: `not ${JSON.stringify(not)}` });\n if (expr !== undefined) out.push({ glyph: CONDITION_GLYPH.expr, text: `expr ${expr}` });\n if (Object.keys(rest).length > 0) out.push({ glyph: CONDITION_GLYPH.schema, text: JSON.stringify(rest) });\n return out;\n}\n\nfunction listenerState(when: ChangeCondition | undefined, subject: unknown): ListenerState {\n if (!when) return \"true\";\n const { expr, ...predicate } = when;\n if (Object.keys(predicate).length > 0) {\n const holds = evaluatePredicate(predicate, subject);\n if (holds === false) return \"false\";\n if (holds === undefined) return \"unknown\";\n }\n return expr === undefined ? \"true\" : \"unknown\";\n}\n"],"names":["jsx","jsxs","cn","DebugGlyph","Fragment","ACTION_GLYPH","CONDITION_GLYPH","evaluatePredicate"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ChangeListener } from './json-schema-form-types.js';
|
|
2
|
+
export declare function ListenerList({ listeners, subject }: {
|
|
3
|
+
listeners: ChangeListener[];
|
|
4
|
+
subject: unknown;
|
|
5
|
+
}): import("react").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=json-schema-form-debug-listeners.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-debug-listeners.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-debug-listeners.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkC,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAmB/F,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;IAAE,SAAS,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,+BAqCrG"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { evaluatePredicate } from "./json-schema-form-conditionals.js";
|
|
4
|
+
import { DebugGlyph } from "./json-schema-form-debug-glyph.js";
|
|
5
|
+
import { CONDITION_GLYPH, ACTION_GLYPH } from "./json-schema-form-debug-glyph-map.js";
|
|
6
|
+
const VERBS = ["hide", "show", "enable", "disable", "require", "optional", "reset", "set", "patch"];
|
|
7
|
+
const STATE_BADGE = {
|
|
8
|
+
true: { label: "holds", className: "text-emerald-700 dark:text-emerald-300" },
|
|
9
|
+
false: { label: "does not hold", className: "text-muted-foreground" },
|
|
10
|
+
unknown: { label: "needs evaluator", className: "text-amber-700 dark:text-amber-300" }
|
|
11
|
+
};
|
|
12
|
+
function ListenerList({ listeners, subject }) {
|
|
13
|
+
return /* @__PURE__ */ jsx("ol", { className: "mt-0.5 space-y-1", children: listeners.map((listener, index) => {
|
|
14
|
+
const state = listenerState(listener.when, subject);
|
|
15
|
+
return /* @__PURE__ */ jsxs(
|
|
16
|
+
"li",
|
|
17
|
+
{
|
|
18
|
+
"data-debug-listener": "",
|
|
19
|
+
"data-active": state,
|
|
20
|
+
className: cn(
|
|
21
|
+
"space-y-0.5 rounded border px-1.5 py-1",
|
|
22
|
+
state === "true" ? "border-emerald-500/50 bg-emerald-500/5" : "border-border"
|
|
23
|
+
),
|
|
24
|
+
children: [
|
|
25
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-1", children: [
|
|
26
|
+
/* @__PURE__ */ jsx("span", { className: "w-10 shrink-0 text-sky-700 dark:text-sky-300", children: "when" }),
|
|
27
|
+
conditions(listener.when).map((condition, i) => /* @__PURE__ */ jsxs("span", { "data-condition": "", className: "inline-flex items-center gap-1 rounded bg-muted px-1", children: [
|
|
28
|
+
/* @__PURE__ */ jsx(DebugGlyph, { glyph: condition.glyph }),
|
|
29
|
+
condition.text
|
|
30
|
+
] }, i)),
|
|
31
|
+
/* @__PURE__ */ jsx("span", { className: cn("ml-auto font-sans text-[10px]", STATE_BADGE[state].className), children: STATE_BADGE[state].label })
|
|
32
|
+
] }),
|
|
33
|
+
/* @__PURE__ */ jsx(ActionRows, { actions: listener, branch: "then", dimmed: state === "false" }),
|
|
34
|
+
listener.else && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
35
|
+
/* @__PURE__ */ jsx("div", { className: "w-10 text-sky-700 dark:text-sky-300", children: "else" }),
|
|
36
|
+
/* @__PURE__ */ jsx(ActionRows, { actions: listener.else, branch: "else", dimmed: state === "true" })
|
|
37
|
+
] })
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
index
|
|
41
|
+
);
|
|
42
|
+
}) });
|
|
43
|
+
}
|
|
44
|
+
function ActionRows({ actions, branch, dimmed }) {
|
|
45
|
+
const rows = VERBS.flatMap((verb) => actionRows(verb, actions).map((row) => ({ verb, ...row })));
|
|
46
|
+
return /* @__PURE__ */ jsxs("ul", { ...{ [`data-${branch}`]: "" }, className: cn("space-y-0.5 pl-2", dimmed && "opacity-50"), children: [
|
|
47
|
+
rows.length === 0 && /* @__PURE__ */ jsx("li", { className: "text-muted-foreground", children: "nothing" }),
|
|
48
|
+
rows.map(({ verb, detail, targets }) => /* @__PURE__ */ jsxs("li", { "data-action": verb, className: "flex items-start gap-1", children: [
|
|
49
|
+
/* @__PURE__ */ jsx(DebugGlyph, { glyph: ACTION_GLYPH[verb], className: "mt-px" }),
|
|
50
|
+
/* @__PURE__ */ jsx("span", { className: "w-12 shrink-0", children: verb }),
|
|
51
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-1", children: [
|
|
52
|
+
detail !== void 0 && /* @__PURE__ */ jsx("span", { "data-detail": "", className: "text-muted-foreground", children: detail }),
|
|
53
|
+
targets.map((target) => /* @__PURE__ */ jsx("span", { "data-target": "", className: "rounded bg-muted px-1", children: target }, target))
|
|
54
|
+
] })
|
|
55
|
+
] }, `${verb}${detail ?? ""}`))
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
58
|
+
function actionRows(verb, actions) {
|
|
59
|
+
if (verb === "set") return groupByDetail(Object.entries(actions.set ?? {}).map(([key, value]) => [key, `= ${JSON.stringify(value)}`]));
|
|
60
|
+
if (verb === "patch") {
|
|
61
|
+
return groupByDetail(
|
|
62
|
+
Object.entries(actions.patch ?? {}).map(([key, patch]) => [
|
|
63
|
+
key,
|
|
64
|
+
Object.entries(patch).map(([keyword, value]) => `${keyword}: ${JSON.stringify(value)}`).join(", ")
|
|
65
|
+
])
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
const targets = actions[verb] ?? [];
|
|
69
|
+
return targets.length > 0 ? [{ targets }] : [];
|
|
70
|
+
}
|
|
71
|
+
function groupByDetail(entries) {
|
|
72
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
73
|
+
for (const [key, detail] of entries) grouped.set(detail, [...grouped.get(detail) ?? [], key]);
|
|
74
|
+
return [...grouped].map(([detail, targets]) => ({ detail, targets }));
|
|
75
|
+
}
|
|
76
|
+
function conditions(when) {
|
|
77
|
+
if (!when) return [{ glyph: CONDITION_GLYPH.always, text: "always" }];
|
|
78
|
+
const { const: constValue, enum: enumValues, not, expr, ...rest } = when;
|
|
79
|
+
const out = [];
|
|
80
|
+
if (constValue !== void 0) out.push({ glyph: CONDITION_GLYPH.const, text: `= ${JSON.stringify(constValue)}` });
|
|
81
|
+
if (enumValues !== void 0) out.push({ glyph: CONDITION_GLYPH.enum, text: `∈ ${JSON.stringify(enumValues)}` });
|
|
82
|
+
if ((not == null ? void 0 : not.const) !== void 0) out.push({ glyph: CONDITION_GLYPH.not, text: `≠ ${JSON.stringify(not.const)}` });
|
|
83
|
+
if ((not == null ? void 0 : not.enum) !== void 0) out.push({ glyph: CONDITION_GLYPH.not, text: `∉ ${JSON.stringify(not.enum)}` });
|
|
84
|
+
if (not && not.const === void 0 && not.enum === void 0) out.push({ glyph: CONDITION_GLYPH.not, text: `not ${JSON.stringify(not)}` });
|
|
85
|
+
if (expr !== void 0) out.push({ glyph: CONDITION_GLYPH.expr, text: `expr ${expr}` });
|
|
86
|
+
if (Object.keys(rest).length > 0) out.push({ glyph: CONDITION_GLYPH.schema, text: JSON.stringify(rest) });
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
function listenerState(when, subject) {
|
|
90
|
+
if (!when) return "true";
|
|
91
|
+
const { expr, ...predicate } = when;
|
|
92
|
+
if (Object.keys(predicate).length > 0) {
|
|
93
|
+
const holds = evaluatePredicate(predicate, subject);
|
|
94
|
+
if (holds === false) return "false";
|
|
95
|
+
if (holds === void 0) return "unknown";
|
|
96
|
+
}
|
|
97
|
+
return expr === void 0 ? "true" : "unknown";
|
|
98
|
+
}
|
|
99
|
+
export {
|
|
100
|
+
ListenerList
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=json-schema-form-debug-listeners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-debug-listeners.js","sources":["../../src/components/json-schema-form-debug-listeners.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { evaluatePredicate } from \"./json-schema-form-conditionals\";\nimport { DebugGlyph } from \"./json-schema-form-debug-glyph\";\nimport { ACTION_GLYPH, CONDITION_GLYPH, type DebugGlyphPair } from \"./json-schema-form-debug-glyph-map\";\nimport type { ChangeActions, ChangeCondition, ChangeListener } from \"./json-schema-form-types\";\n\n// ListenerList renders an `x-on-change` / `x-on-load` array as one card per\n// listener: its conditions as chips, one row per action with the fields it\n// touches, and its else branch. `subject` is what `when` is evaluated against\n// (the field's value, or the object for x-on-load); the branch that applies to\n// it is marked and the other dimmed. A `when.expr` needs the host's\n// ExpressionEvaluator, which the card does not have, so it stays \"unknown\".\n\ntype ListenerState = \"true\" | \"false\" | \"unknown\";\n\nconst VERBS: (keyof ChangeActions)[] = [\"hide\", \"show\", \"enable\", \"disable\", \"require\", \"optional\", \"reset\", \"set\", \"patch\"];\n\nconst STATE_BADGE: Record<ListenerState, { label: string; className: string }> = {\n true: { label: \"holds\", className: \"text-emerald-700 dark:text-emerald-300\" },\n false: { label: \"does not hold\", className: \"text-muted-foreground\" },\n unknown: { label: \"needs evaluator\", className: \"text-amber-700 dark:text-amber-300\" },\n};\n\nexport function ListenerList({ listeners, subject }: { listeners: ChangeListener[]; subject: unknown }) {\n return (\n <ol className=\"mt-0.5 space-y-1\">\n {listeners.map((listener, index) => {\n const state = listenerState(listener.when, subject);\n return (\n <li\n key={index}\n data-debug-listener=\"\"\n data-active={state}\n className={cn(\n \"space-y-0.5 rounded border px-1.5 py-1\",\n state === \"true\" ? \"border-emerald-500/50 bg-emerald-500/5\" : \"border-border\",\n )}\n >\n <div className=\"flex flex-wrap items-center gap-1\">\n <span className=\"w-10 shrink-0 text-sky-700 dark:text-sky-300\">when</span>\n {conditions(listener.when).map((condition, i) => (\n <span key={i} data-condition=\"\" className=\"inline-flex items-center gap-1 rounded bg-muted px-1\">\n <DebugGlyph glyph={condition.glyph} />\n {condition.text}\n </span>\n ))}\n <span className={cn(\"ml-auto font-sans text-[10px]\", STATE_BADGE[state].className)}>{STATE_BADGE[state].label}</span>\n </div>\n <ActionRows actions={listener} branch=\"then\" dimmed={state === \"false\"} />\n {listener.else && (\n <>\n <div className=\"w-10 text-sky-700 dark:text-sky-300\">else</div>\n <ActionRows actions={listener.else} branch=\"else\" dimmed={state === \"true\"} />\n </>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nfunction ActionRows({ actions, branch, dimmed }: { actions: ChangeActions; branch: \"then\" | \"else\"; dimmed: boolean }) {\n const rows = VERBS.flatMap((verb) => actionRows(verb, actions).map((row) => ({ verb, ...row })));\n return (\n <ul {...{ [`data-${branch}`]: \"\" }} className={cn(\"space-y-0.5 pl-2\", dimmed && \"opacity-50\")}>\n {rows.length === 0 && <li className=\"text-muted-foreground\">nothing</li>}\n {rows.map(({ verb, detail, targets }) => (\n <li key={`${verb}${detail ?? \"\"}`} data-action={verb} className=\"flex items-start gap-1\">\n <DebugGlyph glyph={ACTION_GLYPH[verb]} className=\"mt-px\" />\n <span className=\"w-12 shrink-0\">{verb}</span>\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-1\">\n {detail !== undefined && (\n <span data-detail=\"\" className=\"text-muted-foreground\">\n {detail}\n </span>\n )}\n {targets.map((target) => (\n <span key={target} data-target=\"\" className=\"rounded bg-muted px-1\">\n {target}\n </span>\n ))}\n </div>\n </li>\n ))}\n </ul>\n );\n}\n\n// actionRows lists one verb's targets. The keyed verbs gather their targets by\n// what they do to them — every field set to \"\", every field patched readOnly —\n// so a listener that touches a dozen siblings reads as a few rows.\nfunction actionRows(verb: keyof ChangeActions, actions: ChangeActions): { detail?: string; targets: string[] }[] {\n if (verb === \"set\") return groupByDetail(Object.entries(actions.set ?? {}).map(([key, value]) => [key, `= ${JSON.stringify(value)}`]));\n if (verb === \"patch\") {\n return groupByDetail(\n Object.entries(actions.patch ?? {}).map(([key, patch]) => [\n key,\n Object.entries(patch)\n .map(([keyword, value]) => `${keyword}: ${JSON.stringify(value)}`)\n .join(\", \"),\n ]),\n );\n }\n const targets = actions[verb] ?? [];\n return targets.length > 0 ? [{ targets }] : [];\n}\n\nfunction groupByDetail(entries: [string, string][]): { detail: string; targets: string[] }[] {\n const grouped = new Map<string, string[]>();\n for (const [key, detail] of entries) grouped.set(detail, [...(grouped.get(detail) ?? []), key]);\n return [...grouped].map(([detail, targets]) => ({ detail, targets }));\n}\n\nfunction conditions(when: ChangeCondition | undefined): { glyph: DebugGlyphPair; text: string }[] {\n if (!when) return [{ glyph: CONDITION_GLYPH.always, text: \"always\" }];\n const { const: constValue, enum: enumValues, not, expr, ...rest } = when;\n const out: { glyph: DebugGlyphPair; text: string }[] = [];\n if (constValue !== undefined) out.push({ glyph: CONDITION_GLYPH.const, text: `= ${JSON.stringify(constValue)}` });\n if (enumValues !== undefined) out.push({ glyph: CONDITION_GLYPH.enum, text: `∈ ${JSON.stringify(enumValues)}` });\n if (not?.const !== undefined) out.push({ glyph: CONDITION_GLYPH.not, text: `≠ ${JSON.stringify(not.const)}` });\n if (not?.enum !== undefined) out.push({ glyph: CONDITION_GLYPH.not, text: `∉ ${JSON.stringify(not.enum)}` });\n if (not && not.const === undefined && not.enum === undefined) out.push({ glyph: CONDITION_GLYPH.not, text: `not ${JSON.stringify(not)}` });\n if (expr !== undefined) out.push({ glyph: CONDITION_GLYPH.expr, text: `expr ${expr}` });\n if (Object.keys(rest).length > 0) out.push({ glyph: CONDITION_GLYPH.schema, text: JSON.stringify(rest) });\n return out;\n}\n\nfunction listenerState(when: ChangeCondition | undefined, subject: unknown): ListenerState {\n if (!when) return \"true\";\n const { expr, ...predicate } = when;\n if (Object.keys(predicate).length > 0) {\n const holds = evaluatePredicate(predicate, subject);\n if (holds === false) return \"false\";\n if (holds === undefined) return \"unknown\";\n }\n return expr === undefined ? \"true\" : \"unknown\";\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const utils = require("../lib/utils.cjs");
|
|
5
|
+
const jsonSchemaFormDebugBadge = require("./json-schema-form-debug-badge.cjs");
|
|
6
|
+
function withFieldDebug(nodes, info) {
|
|
7
|
+
const hidden = info.hiddenReason !== void 0;
|
|
8
|
+
const badge = /* @__PURE__ */ jsxRuntime.jsx(jsonSchemaFormDebugBadge.FieldDebugBadge, { ...info });
|
|
9
|
+
const value = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10
|
+
"div",
|
|
11
|
+
{
|
|
12
|
+
"data-debug-field": info.fieldKey,
|
|
13
|
+
...hidden ? { "data-debug-hidden": info.hiddenReason } : {},
|
|
14
|
+
className: utils.cn("min-w-0", hidden && "rounded-md opacity-60 outline-dashed outline-1 outline-offset-2 outline-muted-foreground/60"),
|
|
15
|
+
children: [
|
|
16
|
+
nodes.label === null ? badge : null,
|
|
17
|
+
nodes.value
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
if (nodes.label === null) return { label: null, value };
|
|
22
|
+
return {
|
|
23
|
+
label: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: utils.cn("inline-flex min-w-0 items-center gap-1", hidden && "opacity-60"), children: [
|
|
24
|
+
nodes.label,
|
|
25
|
+
badge
|
|
26
|
+
] }),
|
|
27
|
+
value
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
exports.withFieldDebug = withFieldDebug;
|
|
31
|
+
//# sourceMappingURL=json-schema-form-debug.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-debug.cjs","sources":["../../src/components/json-schema-form-debug.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { FieldDebugBadge, type FieldDebugInfo } from \"./json-schema-form-debug-badge\";\n\n// Debug mode (the display-options menu's Debug) renders the fields the form\n// would hide, dimmed and outlined, and gives every field a badge whose hover\n// card says where it comes from: its key and instance path, the control it\n// resolved to, why it is hidden, and the schema keywords that source its\n// value, options and state.\n\nexport type { FieldDebugInfo };\n\n// withFieldDebug decorates a field's label/value nodes: the badge beside the\n// label (or atop the value when the field has no label), and the value marked\n// `data-debug-field` / `data-debug-hidden` and dimmed when the form would hide it.\nexport function withFieldDebug(nodes: { label: ReactNode; value: ReactNode }, info: FieldDebugInfo): { label: ReactNode; value: ReactNode } {\n const hidden = info.hiddenReason !== undefined;\n const badge = <FieldDebugBadge {...info} />;\n const value = (\n <div\n data-debug-field={info.fieldKey}\n {...(hidden ? { \"data-debug-hidden\": info.hiddenReason } : {})}\n className={cn(\"min-w-0\", hidden && \"rounded-md opacity-60 outline-dashed outline-1 outline-offset-2 outline-muted-foreground/60\")}\n >\n {nodes.label === null ? badge : null}\n {nodes.value}\n </div>\n );\n if (nodes.label === null) return { label: null, value };\n return {\n label: (\n <span className={cn(\"inline-flex min-w-0 items-center gap-1\", hidden && \"opacity-60\")}>\n {nodes.label}\n {badge}\n </span>\n ),\n value,\n };\n}\n"],"names":["jsx","FieldDebugBadge","jsxs","cn"],"mappings":";;;;;AAeO,SAAS,eAAe,OAA+C,MAA8D;AAC1I,QAAM,SAAS,KAAK,iBAAiB;AACrC,QAAM,QAAQA,2BAAAA,IAACC,yBAAAA,iBAAA,EAAiB,GAAG,KAAA,CAAM;AACzC,QAAM,QACJC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,oBAAkB,KAAK;AAAA,MACtB,GAAI,SAAS,EAAE,qBAAqB,KAAK,aAAA,IAAiB,CAAA;AAAA,MAC3D,WAAWC,MAAAA,GAAG,WAAW,UAAU,6FAA6F;AAAA,MAE/H,UAAA;AAAA,QAAA,MAAM,UAAU,OAAO,QAAQ;AAAA,QAC/B,MAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGX,MAAI,MAAM,UAAU,aAAa,EAAE,OAAO,MAAM,MAAA;AAChD,SAAO;AAAA,IACL,uCACG,QAAA,EAAK,WAAWA,SAAG,0CAA0C,UAAU,YAAY,GACjF,UAAA;AAAA,MAAA,MAAM;AAAA,MACN;AAAA,IAAA,GACH;AAAA,IAEF;AAAA,EAAA;AAEJ;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FieldDebugInfo } from './json-schema-form-debug-badge.js';
|
|
3
|
+
export type { FieldDebugInfo };
|
|
4
|
+
export declare function withFieldDebug(nodes: {
|
|
5
|
+
label: ReactNode;
|
|
6
|
+
value: ReactNode;
|
|
7
|
+
}, info: FieldDebugInfo): {
|
|
8
|
+
label: ReactNode;
|
|
9
|
+
value: ReactNode;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=json-schema-form-debug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-debug.d.ts","sourceRoot":"","sources":["../../src/components/json-schema-form-debug.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAQtF,YAAY,EAAE,cAAc,EAAE,CAAC;AAK/B,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,EAAE,IAAI,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAuB1I"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { FieldDebugBadge } from "./json-schema-form-debug-badge.js";
|
|
4
|
+
function withFieldDebug(nodes, info) {
|
|
5
|
+
const hidden = info.hiddenReason !== void 0;
|
|
6
|
+
const badge = /* @__PURE__ */ jsx(FieldDebugBadge, { ...info });
|
|
7
|
+
const value = /* @__PURE__ */ jsxs(
|
|
8
|
+
"div",
|
|
9
|
+
{
|
|
10
|
+
"data-debug-field": info.fieldKey,
|
|
11
|
+
...hidden ? { "data-debug-hidden": info.hiddenReason } : {},
|
|
12
|
+
className: cn("min-w-0", hidden && "rounded-md opacity-60 outline-dashed outline-1 outline-offset-2 outline-muted-foreground/60"),
|
|
13
|
+
children: [
|
|
14
|
+
nodes.label === null ? badge : null,
|
|
15
|
+
nodes.value
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
if (nodes.label === null) return { label: null, value };
|
|
20
|
+
return {
|
|
21
|
+
label: /* @__PURE__ */ jsxs("span", { className: cn("inline-flex min-w-0 items-center gap-1", hidden && "opacity-60"), children: [
|
|
22
|
+
nodes.label,
|
|
23
|
+
badge
|
|
24
|
+
] }),
|
|
25
|
+
value
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
withFieldDebug
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=json-schema-form-debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema-form-debug.js","sources":["../../src/components/json-schema-form-debug.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { FieldDebugBadge, type FieldDebugInfo } from \"./json-schema-form-debug-badge\";\n\n// Debug mode (the display-options menu's Debug) renders the fields the form\n// would hide, dimmed and outlined, and gives every field a badge whose hover\n// card says where it comes from: its key and instance path, the control it\n// resolved to, why it is hidden, and the schema keywords that source its\n// value, options and state.\n\nexport type { FieldDebugInfo };\n\n// withFieldDebug decorates a field's label/value nodes: the badge beside the\n// label (or atop the value when the field has no label), and the value marked\n// `data-debug-field` / `data-debug-hidden` and dimmed when the form would hide it.\nexport function withFieldDebug(nodes: { label: ReactNode; value: ReactNode }, info: FieldDebugInfo): { label: ReactNode; value: ReactNode } {\n const hidden = info.hiddenReason !== undefined;\n const badge = <FieldDebugBadge {...info} />;\n const value = (\n <div\n data-debug-field={info.fieldKey}\n {...(hidden ? { \"data-debug-hidden\": info.hiddenReason } : {})}\n className={cn(\"min-w-0\", hidden && \"rounded-md opacity-60 outline-dashed outline-1 outline-offset-2 outline-muted-foreground/60\")}\n >\n {nodes.label === null ? badge : null}\n {nodes.value}\n </div>\n );\n if (nodes.label === null) return { label: null, value };\n return {\n label: (\n <span className={cn(\"inline-flex min-w-0 items-center gap-1\", hidden && \"opacity-60\")}>\n {nodes.label}\n {badge}\n </span>\n ),\n value,\n };\n}\n"],"names":[],"mappings":";;;AAeO,SAAS,eAAe,OAA+C,MAA8D;AAC1I,QAAM,SAAS,KAAK,iBAAiB;AACrC,QAAM,QAAQ,oBAAC,iBAAA,EAAiB,GAAG,KAAA,CAAM;AACzC,QAAM,QACJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,oBAAkB,KAAK;AAAA,MACtB,GAAI,SAAS,EAAE,qBAAqB,KAAK,aAAA,IAAiB,CAAA;AAAA,MAC3D,WAAW,GAAG,WAAW,UAAU,6FAA6F;AAAA,MAE/H,UAAA;AAAA,QAAA,MAAM,UAAU,OAAO,QAAQ;AAAA,QAC/B,MAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGX,MAAI,MAAM,UAAU,aAAa,EAAE,OAAO,MAAM,MAAA;AAChD,SAAO;AAAA,IACL,4BACG,QAAA,EAAK,WAAW,GAAG,0CAA0C,UAAU,YAAY,GACjF,UAAA;AAAA,MAAA,MAAM;AAAA,MACN;AAAA,IAAA,GACH;AAAA,IAEF;AAAA,EAAA;AAEJ;"}
|