@flanksource/clicky-ui 0.3.9 → 0.3.11
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/NOTICE.md +89 -0
- package/README.md +33 -2
- package/dist/ai.cjs +71 -5
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +71 -5
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +17 -13
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +8 -4
- package/dist/clicky.d.ts +1 -1
- package/dist/clicky.d.ts.map +1 -1
- package/dist/comments/CommentCard.cjs +84 -38
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts +1 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +85 -39
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentComposer.cjs +21 -11
- package/dist/comments/CommentComposer.cjs.map +1 -1
- package/dist/comments/CommentComposer.d.ts.map +1 -1
- package/dist/comments/CommentComposer.js +21 -11
- package/dist/comments/CommentComposer.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +84 -12
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +4 -2
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +86 -14
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +116 -38
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.d.ts +2 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -1
- package/dist/comments/CommentSidePanel.js +117 -39
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/CommentThread.cjs +4 -0
- package/dist/comments/CommentThread.cjs.map +1 -1
- package/dist/comments/CommentThread.d.ts +5 -1
- package/dist/comments/CommentThread.d.ts.map +1 -1
- package/dist/comments/CommentThread.js +4 -0
- package/dist/comments/CommentThread.js.map +1 -1
- package/dist/comments/CommentThreadList.cjs +17 -5
- package/dist/comments/CommentThreadList.cjs.map +1 -1
- package/dist/comments/CommentThreadList.d.ts +3 -1
- package/dist/comments/CommentThreadList.d.ts.map +1 -1
- package/dist/comments/CommentThreadList.js +18 -6
- package/dist/comments/CommentThreadList.js.map +1 -1
- package/dist/comments/comment-context.cjs +88 -0
- package/dist/comments/comment-context.cjs.map +1 -1
- package/dist/comments/comment-context.d.ts +26 -0
- package/dist/comments/comment-context.d.ts.map +1 -1
- package/dist/comments/comment-context.js +89 -1
- package/dist/comments/comment-context.js.map +1 -1
- package/dist/comments.cjs +3 -0
- package/dist/comments.cjs.map +1 -1
- package/dist/comments.d.ts +1 -1
- package/dist/comments.d.ts.map +1 -1
- package/dist/comments.js +4 -1
- package/dist/components/Combobox.cjs +145 -34
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts +24 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +147 -36
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/DatePicker.cjs +1 -1
- package/dist/components/DatePicker.cjs.map +1 -1
- package/dist/components/DatePicker.js +1 -1
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/DateTimePicker.cjs +1 -1
- package/dist/components/DateTimePicker.cjs.map +1 -1
- package/dist/components/DateTimePicker.js +1 -1
- package/dist/components/DateTimePicker.js.map +1 -1
- package/dist/components/FilterBar.cjs +41 -459
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +4 -62
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +13 -430
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/InputField.cjs +97 -0
- package/dist/components/InputField.cjs.map +1 -0
- package/dist/components/InputField.d.ts +42 -0
- package/dist/components/InputField.d.ts.map +1 -0
- package/dist/components/InputField.js +97 -0
- package/dist/components/InputField.js.map +1 -0
- package/dist/components/JsonSchemaForm.cjs +90 -15
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +92 -17
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/MdxEditorField.cjs.map +1 -1
- package/dist/components/MdxEditorField.d.ts +1 -1
- package/dist/components/MdxEditorField.d.ts.map +1 -1
- package/dist/components/MdxEditorField.js.map +1 -1
- package/dist/components/MdxEditorToolbar.cjs +6 -1
- package/dist/components/MdxEditorToolbar.cjs.map +1 -1
- package/dist/components/MdxEditorToolbar.d.ts.map +1 -1
- package/dist/components/MdxEditorToolbar.js +6 -1
- package/dist/components/MdxEditorToolbar.js.map +1 -1
- package/dist/components/MultiSelect.cjs +0 -1
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js +0 -1
- package/dist/components/MultiSelect.js.map +1 -1
- package/dist/components/SearchInput.cjs +14 -43
- package/dist/components/SearchInput.cjs.map +1 -1
- package/dist/components/SearchInput.d.ts +6 -5
- package/dist/components/SearchInput.d.ts.map +1 -1
- package/dist/components/SearchInput.js +15 -44
- package/dist/components/SearchInput.js.map +1 -1
- package/dist/components/SecretKeySelector.cjs +155 -67
- package/dist/components/SecretKeySelector.cjs.map +1 -1
- package/dist/components/SecretKeySelector.d.ts +34 -16
- package/dist/components/SecretKeySelector.d.ts.map +1 -1
- package/dist/components/SecretKeySelector.js +158 -70
- package/dist/components/SecretKeySelector.js.map +1 -1
- package/dist/components/SecretKeySelector.model.cjs +32 -0
- package/dist/components/SecretKeySelector.model.cjs.map +1 -0
- package/dist/components/SecretKeySelector.model.d.ts +4 -0
- package/dist/components/SecretKeySelector.model.d.ts.map +1 -0
- package/dist/components/SecretKeySelector.model.js +32 -0
- package/dist/components/SecretKeySelector.model.js.map +1 -0
- package/dist/components/SegmentedControl.cjs +41 -6
- package/dist/components/SegmentedControl.cjs.map +1 -1
- package/dist/components/SegmentedControl.d.ts +7 -3
- package/dist/components/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl.js +41 -6
- package/dist/components/SegmentedControl.js.map +1 -1
- package/dist/components/filter-bar-context.cjs +10 -0
- package/dist/components/filter-bar-context.cjs.map +1 -0
- package/dist/components/filter-bar-context.d.ts +5 -0
- package/dist/components/filter-bar-context.d.ts.map +1 -0
- package/dist/components/filter-bar-context.js +10 -0
- package/dist/components/filter-bar-context.js.map +1 -0
- package/dist/components/filter-bar-field-utils.cjs +119 -0
- package/dist/components/filter-bar-field-utils.cjs.map +1 -0
- package/dist/components/filter-bar-field-utils.d.ts +21 -0
- package/dist/components/filter-bar-field-utils.d.ts.map +1 -0
- package/dist/components/filter-bar-field-utils.js +119 -0
- package/dist/components/filter-bar-field-utils.js.map +1 -0
- package/dist/components/filter-bar-multi.cjs +193 -0
- package/dist/components/filter-bar-multi.cjs.map +1 -0
- package/dist/components/filter-bar-multi.d.ts +74 -0
- package/dist/components/filter-bar-multi.d.ts.map +1 -0
- package/dist/components/filter-bar-multi.js +193 -0
- package/dist/components/filter-bar-multi.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +81 -10
- 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 +82 -11
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-fields.cjs +156 -24
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +9 -1
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +156 -24
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-object.cjs +35 -12
- 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 +37 -14
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +21 -3
- 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 +22 -4
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +123 -13
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts +1 -0
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +123 -13
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +30 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +19 -0
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +3 -0
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +19 -0
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/loading.cjs +17 -0
- package/dist/components/loading.cjs.map +1 -1
- package/dist/components/loading.d.ts +9 -0
- package/dist/components/loading.d.ts.map +1 -1
- package/dist/components/loading.js +17 -0
- package/dist/components/loading.js.map +1 -1
- package/dist/components/mdx-editor-field-plugins.cjs +28 -4
- package/dist/components/mdx-editor-field-plugins.cjs.map +1 -1
- package/dist/components/mdx-editor-field-plugins.d.ts.map +1 -1
- package/dist/components/mdx-editor-field-plugins.js +28 -4
- package/dist/components/mdx-editor-field-plugins.js.map +1 -1
- package/dist/components/mdx-editor-options.d.ts +23 -1
- package/dist/components/mdx-editor-options.d.ts.map +1 -1
- package/dist/components.cjs +13 -1
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +20 -16
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +14 -2
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +301 -51
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +21 -3
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +301 -51
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/CodeBlock.cjs +100 -20
- package/dist/data/CodeBlock.cjs.map +1 -1
- package/dist/data/CodeBlock.d.ts +18 -1
- package/dist/data/CodeBlock.d.ts.map +1 -1
- package/dist/data/CodeBlock.js +101 -21
- package/dist/data/CodeBlock.js.map +1 -1
- package/dist/data/CodeDiff.cjs +221 -0
- package/dist/data/CodeDiff.cjs.map +1 -0
- package/dist/data/CodeDiff.d.ts +24 -0
- package/dist/data/CodeDiff.d.ts.map +1 -0
- package/dist/data/CodeDiff.js +221 -0
- package/dist/data/CodeDiff.js.map +1 -0
- package/dist/data/DataTable.cjs +359 -219
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +12 -0
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +353 -213
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/FilterPill.cjs +43 -35
- package/dist/data/FilterPill.cjs.map +1 -1
- package/dist/data/FilterPill.d.ts +9 -1
- package/dist/data/FilterPill.d.ts.map +1 -1
- package/dist/data/FilterPill.js +43 -35
- package/dist/data/FilterPill.js.map +1 -1
- package/dist/data/FixtureEditor/FenceForm.cjs +123 -0
- package/dist/data/FixtureEditor/FenceForm.cjs.map +1 -0
- package/dist/data/FixtureEditor/FenceForm.d.ts +14 -0
- package/dist/data/FixtureEditor/FenceForm.d.ts.map +1 -0
- package/dist/data/FixtureEditor/FenceForm.js +123 -0
- package/dist/data/FixtureEditor/FenceForm.js.map +1 -0
- package/dist/data/FixtureEditor/FixtureEditor.cjs +236 -0
- package/dist/data/FixtureEditor/FixtureEditor.cjs.map +1 -0
- package/dist/data/FixtureEditor/FixtureEditor.d.ts +3 -0
- package/dist/data/FixtureEditor/FixtureEditor.d.ts.map +1 -0
- package/dist/data/FixtureEditor/FixtureEditor.js +236 -0
- package/dist/data/FixtureEditor/FixtureEditor.js.map +1 -0
- package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.cjs +128 -0
- package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.cjs.map +1 -0
- package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts +8 -0
- package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.d.ts.map +1 -0
- package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.js +128 -0
- package/dist/data/FixtureEditor/FixtureFenceCodeBlockEditor.js.map +1 -0
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs +148 -0
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.cjs.map +1 -0
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts +11 -0
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.d.ts.map +1 -0
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js +148 -0
- package/dist/data/FixtureEditor/FixtureFrontmatterDialog.js.map +1 -0
- package/dist/data/FixtureEditor/RawFenceEditor.cjs +35 -0
- package/dist/data/FixtureEditor/RawFenceEditor.cjs.map +1 -0
- package/dist/data/FixtureEditor/RawFenceEditor.d.ts +11 -0
- package/dist/data/FixtureEditor/RawFenceEditor.d.ts.map +1 -0
- package/dist/data/FixtureEditor/RawFenceEditor.js +35 -0
- package/dist/data/FixtureEditor/RawFenceEditor.js.map +1 -0
- package/dist/data/FixtureEditor/fixture-blocks.cjs +130 -0
- package/dist/data/FixtureEditor/fixture-blocks.cjs.map +1 -0
- package/dist/data/FixtureEditor/fixture-blocks.d.ts +26 -0
- package/dist/data/FixtureEditor/fixture-blocks.d.ts.map +1 -0
- package/dist/data/FixtureEditor/fixture-blocks.js +130 -0
- package/dist/data/FixtureEditor/fixture-blocks.js.map +1 -0
- package/dist/data/FixtureEditor/fixture-code-block-model.cjs +17 -0
- package/dist/data/FixtureEditor/fixture-code-block-model.cjs.map +1 -0
- package/dist/data/FixtureEditor/fixture-code-block-model.d.ts +3 -0
- package/dist/data/FixtureEditor/fixture-code-block-model.d.ts.map +1 -0
- package/dist/data/FixtureEditor/fixture-code-block-model.js +17 -0
- package/dist/data/FixtureEditor/fixture-code-block-model.js.map +1 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs +300 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.cjs.map +1 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.d.ts +32 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.d.ts.map +1 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.js +300 -0
- package/dist/data/FixtureEditor/fixture-frontmatter.js.map +1 -0
- package/dist/data/FixtureEditor/index.d.ts +5 -0
- package/dist/data/FixtureEditor/index.d.ts.map +1 -0
- package/dist/data/FixtureEditor/types.d.ts +44 -0
- package/dist/data/FixtureEditor/types.d.ts.map +1 -0
- package/dist/data/LogDetails.cjs +4 -4
- package/dist/data/LogDetails.cjs.map +1 -1
- package/dist/data/LogDetails.js +4 -4
- package/dist/data/LogDetails.js.map +1 -1
- package/dist/data/Markdown.cjs +29 -1
- package/dist/data/Markdown.cjs.map +1 -1
- package/dist/data/Markdown.d.ts +3 -2
- package/dist/data/Markdown.d.ts.map +1 -1
- package/dist/data/Markdown.js +30 -2
- package/dist/data/Markdown.js.map +1 -1
- package/dist/data/Properties.cjs +160 -40
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.d.ts +8 -2
- package/dist/data/Properties.d.ts.map +1 -1
- package/dist/data/Properties.js +160 -40
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/SchemaViewer.cjs +1 -1
- package/dist/data/SchemaViewer.cjs.map +1 -1
- package/dist/data/SchemaViewer.js +2 -2
- package/dist/data/SchemaViewer.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +336 -18
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +13 -4
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +336 -18
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.test-utils.d.ts +12 -0
- package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -0
- package/dist/data/ai/PolicyTree.cjs +265 -0
- package/dist/data/ai/PolicyTree.cjs.map +1 -0
- package/dist/data/ai/PolicyTree.d.ts +33 -0
- package/dist/data/ai/PolicyTree.d.ts.map +1 -0
- package/dist/data/ai/PolicyTree.js +265 -0
- package/dist/data/ai/PolicyTree.js.map +1 -0
- package/dist/data/ai/PromptPicker/PromptPicker.cjs +251 -0
- package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -0
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts +31 -0
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -0
- package/dist/data/ai/PromptPicker/PromptPicker.js +251 -0
- package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -0
- package/dist/data/ai/PromptPicker/index.d.ts +4 -0
- package/dist/data/ai/PromptPicker/index.d.ts.map +1 -0
- package/dist/data/ai/PromptPicker/prompt-runtime.cjs +39 -0
- package/dist/data/ai/PromptPicker/prompt-runtime.cjs.map +1 -0
- package/dist/data/ai/PromptPicker/prompt-runtime.d.ts +9 -0
- package/dist/data/ai/PromptPicker/prompt-runtime.d.ts.map +1 -0
- package/dist/data/ai/PromptPicker/prompt-runtime.js +39 -0
- package/dist/data/ai/PromptPicker/prompt-runtime.js.map +1 -0
- package/dist/data/ai/PromptPicker/types.d.ts +25 -0
- package/dist/data/ai/PromptPicker/types.d.ts.map +1 -0
- package/dist/data/ai/PromptRunEditor/index.cjs +242 -0
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -0
- package/dist/data/ai/PromptRunEditor/index.d.ts +42 -0
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -0
- package/dist/data/ai/PromptRunEditor/index.js +242 -0
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -0
- package/dist/data/ai/RuntimeModePicker.cjs +61 -0
- package/dist/data/ai/RuntimeModePicker.cjs.map +1 -0
- package/dist/data/ai/RuntimeModePicker.d.ts +12 -0
- package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -0
- package/dist/data/ai/RuntimeModePicker.js +61 -0
- package/dist/data/ai/RuntimeModePicker.js.map +1 -0
- package/dist/data/ai/SessionInspector.cjs +432 -0
- package/dist/data/ai/SessionInspector.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.d.ts +11 -0
- package/dist/data/ai/SessionInspector.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.js +432 -0
- package/dist/data/ai/SessionInspector.js.map +1 -0
- package/dist/data/ai/SessionViewer.cjs +208 -196
- package/dist/data/ai/SessionViewer.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +39 -3
- package/dist/data/ai/SessionViewer.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.grouping.cjs +44 -0
- package/dist/data/ai/SessionViewer.grouping.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.grouping.d.ts +17 -0
- package/dist/data/ai/SessionViewer.grouping.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.grouping.js +44 -0
- package/dist/data/ai/SessionViewer.grouping.js.map +1 -0
- package/dist/data/ai/SessionViewer.input.cjs +219 -0
- package/dist/data/ai/SessionViewer.input.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.input.d.ts +44 -0
- package/dist/data/ai/SessionViewer.input.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.input.js +219 -0
- package/dist/data/ai/SessionViewer.input.js.map +1 -0
- package/dist/data/ai/SessionViewer.js +209 -197
- package/dist/data/ai/SessionViewer.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +203 -105
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +45 -7
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +203 -105
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.rows.cjs +751 -0
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.rows.d.ts +20 -0
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.rows.js +751 -0
- package/dist/data/ai/SessionViewer.rows.js.map +1 -0
- package/dist/data/ai/SessionViewer.unified.d.ts +193 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -0
- package/dist/data/ai/SessionViewerMenu.cjs +57 -68
- package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
- package/dist/data/ai/SessionViewerMenu.d.ts +3 -3
- package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
- package/dist/data/ai/SessionViewerMenu.js +58 -69
- package/dist/data/ai/SessionViewerMenu.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.cjs +25 -0
- package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts +12 -0
- package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.js +25 -0
- package/dist/data/ai/SpecRuntimeEditor/CLIArgsSection.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -0
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts +6 -0
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +44 -0
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs +137 -0
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts +12 -0
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js +137 -0
- package/dist/data/ai/SpecRuntimeEditor/EnvironmentSection.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/Footer.cjs +29 -0
- package/dist/data/ai/SpecRuntimeEditor/Footer.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +8 -0
- package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/Footer.js +29 -0
- package/dist/data/ai/SpecRuntimeEditor/Footer.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +481 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +16 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +481 -0
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs +421 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts +17 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js +421 -0
- package/dist/data/ai/SpecRuntimeEditor/PermissionsSection.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts +8 -0
- package/dist/data/ai/SpecRuntimeEditor/PresetCards.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +98 -0
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts +10 -0
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +98 -0
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/Rail.cjs +23 -0
- package/dist/data/ai/SpecRuntimeEditor/Rail.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +7 -0
- package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/Rail.js +23 -0
- package/dist/data/ai/SpecRuntimeEditor/Rail.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs +77 -0
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +14 -0
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.js +77 -0
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +65 -0
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +12 -0
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +65 -0
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +227 -0
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts +8 -0
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +227 -0
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/env-model.cjs +45 -0
- package/dist/data/ai/SpecRuntimeEditor/env-model.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts +7 -0
- package/dist/data/ai/SpecRuntimeEditor/env-model.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/env-model.js +45 -0
- package/dist/data/ai/SpecRuntimeEditor/env-model.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/fields.cjs +287 -0
- package/dist/data/ai/SpecRuntimeEditor/fields.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +79 -0
- package/dist/data/ai/SpecRuntimeEditor/fields.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/fields.js +287 -0
- package/dist/data/ai/SpecRuntimeEditor/fields.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/index.cjs +213 -0
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +41 -0
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/index.js +213 -0
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permissions-model.cjs +252 -0
- package/dist/data/ai/SpecRuntimeEditor/permissions-model.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permissions-model.d.ts +36 -0
- package/dist/data/ai/SpecRuntimeEditor/permissions-model.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/permissions-model.js +252 -0
- package/dist/data/ai/SpecRuntimeEditor/permissions-model.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/presets.cjs +214 -0
- package/dist/data/ai/SpecRuntimeEditor/presets.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/presets.d.ts +35 -0
- package/dist/data/ai/SpecRuntimeEditor/presets.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/presets.js +214 -0
- package/dist/data/ai/SpecRuntimeEditor/presets.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/summaries.cjs +15 -0
- package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts +13 -0
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/summaries.js +15 -0
- package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/types.cjs +74 -0
- package/dist/data/ai/SpecRuntimeEditor/types.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/types.d.ts +19 -0
- package/dist/data/ai/SpecRuntimeEditor/types.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/types.js +74 -0
- package/dist/data/ai/SpecRuntimeEditor/types.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/update.cjs +144 -0
- package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts +28 -0
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/update.js +144 -0
- package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.cjs +55 -0
- package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.d.ts +9 -0
- package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.js +55 -0
- package/dist/data/ai/SpecRuntimeEditor/use-scrollspy.js.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +398 -0
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +169 -0
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -0
- package/dist/data/ai/SpecRuntimeEditor.model.js +398 -0
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -0
- package/dist/data/ai/ToolPreferences.cjs +705 -165
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +29 -5
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +707 -167
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolSchemaBrowser.cjs +549 -0
- package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.d.ts +7 -0
- package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -0
- package/dist/data/ai/ToolSchemaBrowser.js +549 -0
- package/dist/data/ai/ToolSchemaBrowser.js.map +1 -0
- package/dist/data/ai/agent-action-icons.cjs +78 -0
- package/dist/data/ai/agent-action-icons.cjs.map +1 -0
- package/dist/data/ai/agent-action-icons.d.ts +22 -0
- package/dist/data/ai/agent-action-icons.d.ts.map +1 -0
- package/dist/data/ai/agent-action-icons.js +78 -0
- package/dist/data/ai/agent-action-icons.js.map +1 -0
- package/dist/data/ai/index.d.ts +21 -6
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/model-capabilities.cjs +23 -0
- package/dist/data/ai/model-capabilities.cjs.map +1 -0
- package/dist/data/ai/model-capabilities.d.ts +9 -0
- package/dist/data/ai/model-capabilities.d.ts.map +1 -0
- package/dist/data/ai/model-capabilities.js +23 -0
- package/dist/data/ai/model-capabilities.js.map +1 -0
- package/dist/data/ai/runtime-mode.cjs +133 -0
- package/dist/data/ai/runtime-mode.cjs.map +1 -0
- package/dist/data/ai/runtime-mode.d.ts +31 -0
- package/dist/data/ai/runtime-mode.d.ts.map +1 -0
- package/dist/data/ai/runtime-mode.js +133 -0
- package/dist/data/ai/runtime-mode.js.map +1 -0
- package/dist/data/ai/session-categories.cjs +34 -0
- package/dist/data/ai/session-categories.cjs.map +1 -1
- package/dist/data/ai/session-categories.d.ts +2 -0
- package/dist/data/ai/session-categories.d.ts.map +1 -1
- package/dist/data/ai/session-categories.js +34 -0
- package/dist/data/ai/session-categories.js.map +1 -1
- package/dist/data/ai/session-cost.cjs +13 -0
- package/dist/data/ai/session-cost.cjs.map +1 -0
- package/dist/data/ai/session-cost.d.ts +8 -0
- package/dist/data/ai/session-cost.d.ts.map +1 -0
- package/dist/data/ai/session-cost.js +13 -0
- package/dist/data/ai/session-cost.js.map +1 -0
- package/dist/data/ai/tool-name.d.ts +10 -0
- package/dist/data/ai/tool-name.d.ts.map +1 -0
- package/dist/data/ai/use-session-scroll.cjs +96 -0
- package/dist/data/ai/use-session-scroll.cjs.map +1 -0
- package/dist/data/ai/use-session-scroll.d.ts +43 -0
- package/dist/data/ai/use-session-scroll.d.ts.map +1 -0
- package/dist/data/ai/use-session-scroll.js +96 -0
- package/dist/data/ai/use-session-scroll.js.map +1 -0
- package/dist/data/cells/TagList.cjs +4 -2
- package/dist/data/cells/TagList.cjs.map +1 -1
- package/dist/data/cells/TagList.d.ts +2 -1
- package/dist/data/cells/TagList.d.ts.map +1 -1
- package/dist/data/cells/TagList.js +4 -2
- package/dist/data/cells/TagList.js.map +1 -1
- package/dist/data/chat/Chat.cjs +49 -15
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +16 -2
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +49 -15
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +164 -0
- package/dist/data/chat/ContextMeter.cjs.map +1 -0
- package/dist/data/chat/ContextMeter.d.ts +50 -0
- package/dist/data/chat/ContextMeter.d.ts.map +1 -0
- package/dist/data/chat/ContextMeter.js +164 -0
- package/dist/data/chat/ContextMeter.js.map +1 -0
- package/dist/data/chat/ModelSelector.cjs +139 -10
- package/dist/data/chat/ModelSelector.cjs.map +1 -1
- package/dist/data/chat/ModelSelector.d.ts +44 -3
- package/dist/data/chat/ModelSelector.d.ts.map +1 -1
- package/dist/data/chat/ModelSelector.js +141 -12
- package/dist/data/chat/ModelSelector.js.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.cjs +83 -69
- package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.d.ts +3 -3
- package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
- package/dist/data/chat/clickyOperationsToTools.js +83 -69
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
- package/dist/data/chat/effort-icons.cjs +43 -0
- package/dist/data/chat/effort-icons.cjs.map +1 -0
- package/dist/data/chat/effort-icons.d.ts +10 -0
- package/dist/data/chat/effort-icons.d.ts.map +1 -0
- package/dist/data/chat/effort-icons.js +43 -0
- package/dist/data/chat/effort-icons.js.map +1 -0
- package/dist/data/chat/index.d.ts +3 -3
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/provider-icons.cjs +25 -6
- package/dist/data/chat/provider-icons.cjs.map +1 -1
- package/dist/data/chat/provider-icons.d.ts +3 -5
- package/dist/data/chat/provider-icons.d.ts.map +1 -1
- package/dist/data/chat/provider-icons.js +25 -6
- package/dist/data/chat/provider-icons.js.map +1 -1
- package/dist/data/chat/types.cjs +42 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +83 -19
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js +42 -0
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/code-block-actions.cjs +101 -0
- package/dist/data/code-block-actions.cjs.map +1 -0
- package/dist/data/code-block-actions.d.ts +20 -0
- package/dist/data/code-block-actions.d.ts.map +1 -0
- package/dist/data/code-block-actions.js +101 -0
- package/dist/data/code-block-actions.js.map +1 -0
- package/dist/data/code-diff.cjs +106 -0
- package/dist/data/code-diff.cjs.map +1 -0
- package/dist/data/code-diff.d.ts +20 -0
- package/dist/data/code-diff.d.ts.map +1 -0
- package/dist/data/code-diff.js +106 -0
- package/dist/data/code-diff.js.map +1 -0
- package/dist/data/code-highlight.cjs +30 -0
- package/dist/data/code-highlight.cjs.map +1 -1
- package/dist/data/code-highlight.d.ts +8 -0
- package/dist/data/code-highlight.d.ts.map +1 -1
- package/dist/data/code-highlight.js +30 -0
- package/dist/data/code-highlight.js.map +1 -1
- package/dist/data/git/GitChangeList.cjs +410 -0
- package/dist/data/git/GitChangeList.cjs.map +1 -0
- package/dist/data/git/GitChangeList.d.ts +69 -0
- package/dist/data/git/GitChangeList.d.ts.map +1 -0
- package/dist/data/git/GitChangeList.js +410 -0
- package/dist/data/git/GitChangeList.js.map +1 -0
- package/dist/data/git/git-dates.cjs +37 -0
- package/dist/data/git/git-dates.cjs.map +1 -0
- package/dist/data/git/git-dates.d.ts +4 -0
- package/dist/data/git/git-dates.d.ts.map +1 -0
- package/dist/data/git/git-dates.js +37 -0
- package/dist/data/git/git-dates.js.map +1 -0
- package/dist/data/git/index.d.ts +3 -0
- package/dist/data/git/index.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowser.cjs +323 -0
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowser.completion.cjs +99 -0
- package/dist/data/query-browser/QueryBrowser.completion.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowser.completion.d.ts +34 -0
- package/dist/data/query-browser/QueryBrowser.completion.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowser.completion.js +99 -0
- package/dist/data/query-browser/QueryBrowser.completion.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.d.ts +42 -0
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowser.js +323 -0
- package/dist/data/query-browser/QueryBrowser.js.map +1 -0
- package/dist/data/query-browser/index.d.ts +3 -0
- package/dist/data/query-browser/index.d.ts.map +1 -0
- package/dist/data/test-runner/TestFilterBar.cjs +14 -9
- package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
- package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
- package/dist/data/test-runner/TestFilterBar.js +15 -10
- package/dist/data/test-runner/TestFilterBar.js.map +1 -1
- package/dist/data/test-runner/TestRunSummary.cjs +1 -11
- package/dist/data/test-runner/TestRunSummary.cjs.map +1 -1
- package/dist/data/test-runner/TestRunSummary.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunSummary.js +2 -12
- package/dist/data/test-runner/TestRunSummary.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +3 -12
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +8 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +4 -13
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/filterState.cjs +8 -0
- package/dist/data/test-runner/filterState.cjs.map +1 -1
- package/dist/data/test-runner/filterState.d.ts +2 -0
- package/dist/data/test-runner/filterState.d.ts.map +1 -1
- package/dist/data/test-runner/filterState.js +9 -1
- package/dist/data/test-runner/filterState.js.map +1 -1
- package/dist/data/test-runner/index.d.ts +2 -2
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/status.cjs +16 -0
- package/dist/data/test-runner/status.cjs.map +1 -1
- package/dist/data/test-runner/status.d.ts +9 -0
- package/dist/data/test-runner/status.d.ts.map +1 -1
- package/dist/data/test-runner/status.js +16 -0
- package/dist/data/test-runner/status.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.cjs.map +1 -1
- package/dist/data/version-info.js +3 -3
- package/dist/data/version-info.js.map +1 -1
- package/dist/data.cjs +191 -15
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +7 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +180 -4
- package/dist/data.js.map +1 -1
- package/dist/icons/components/UiArrowFatUp.cjs +15 -0
- package/dist/icons/components/UiArrowFatUp.cjs.map +1 -0
- package/dist/icons/components/UiArrowFatUp.d.ts +15 -0
- package/dist/icons/components/UiArrowFatUp.d.ts.map +1 -0
- package/dist/icons/components/UiArrowFatUp.js +15 -0
- package/dist/icons/components/UiArrowFatUp.js.map +1 -0
- package/dist/icons/components/UiAsterisk.cjs +15 -0
- package/dist/icons/components/UiAsterisk.cjs.map +1 -0
- package/dist/icons/components/UiAsterisk.d.ts +15 -0
- package/dist/icons/components/UiAsterisk.d.ts.map +1 -0
- package/dist/icons/components/UiAsterisk.js +15 -0
- package/dist/icons/components/UiAsterisk.js.map +1 -0
- package/dist/icons/components/UiAtom.cjs +15 -0
- package/dist/icons/components/UiAtom.cjs.map +1 -0
- package/dist/icons/components/UiAtom.d.ts +15 -0
- package/dist/icons/components/UiAtom.d.ts.map +1 -0
- package/dist/icons/components/UiAtom.js +15 -0
- package/dist/icons/components/UiAtom.js.map +1 -0
- package/dist/icons/components/UiBatteryChargingVertical.cjs +15 -0
- package/dist/icons/components/UiBatteryChargingVertical.cjs.map +1 -0
- package/dist/icons/components/UiBatteryChargingVertical.d.ts +15 -0
- package/dist/icons/components/UiBatteryChargingVertical.d.ts.map +1 -0
- package/dist/icons/components/UiBatteryChargingVertical.js +15 -0
- package/dist/icons/components/UiBatteryChargingVertical.js.map +1 -0
- package/dist/icons/components/UiBatteryVerticalEmpty.cjs +15 -0
- package/dist/icons/components/UiBatteryVerticalEmpty.cjs.map +1 -0
- package/dist/icons/components/UiBatteryVerticalEmpty.d.ts +15 -0
- package/dist/icons/components/UiBatteryVerticalEmpty.d.ts.map +1 -0
- package/dist/icons/components/UiBatteryVerticalEmpty.js +15 -0
- package/dist/icons/components/UiBatteryVerticalEmpty.js.map +1 -0
- package/dist/icons/components/UiBatteryVerticalFull.cjs +15 -0
- package/dist/icons/components/UiBatteryVerticalFull.cjs.map +1 -0
- package/dist/icons/components/UiBatteryVerticalFull.d.ts +15 -0
- package/dist/icons/components/UiBatteryVerticalFull.d.ts.map +1 -0
- package/dist/icons/components/UiBatteryVerticalFull.js +15 -0
- package/dist/icons/components/UiBatteryVerticalFull.js.map +1 -0
- package/dist/icons/components/UiBatteryVerticalHigh.cjs +15 -0
- package/dist/icons/components/UiBatteryVerticalHigh.cjs.map +1 -0
- package/dist/icons/components/UiBatteryVerticalHigh.d.ts +15 -0
- package/dist/icons/components/UiBatteryVerticalHigh.d.ts.map +1 -0
- package/dist/icons/components/UiBatteryVerticalHigh.js +15 -0
- package/dist/icons/components/UiBatteryVerticalHigh.js.map +1 -0
- package/dist/icons/components/UiBatteryVerticalLow.cjs +15 -0
- package/dist/icons/components/UiBatteryVerticalLow.cjs.map +1 -0
- package/dist/icons/components/UiBatteryVerticalLow.d.ts +15 -0
- package/dist/icons/components/UiBatteryVerticalLow.d.ts.map +1 -0
- package/dist/icons/components/UiBatteryVerticalLow.js +15 -0
- package/dist/icons/components/UiBatteryVerticalLow.js.map +1 -0
- package/dist/icons/components/UiBatteryVerticalMedium.cjs +15 -0
- package/dist/icons/components/UiBatteryVerticalMedium.cjs.map +1 -0
- package/dist/icons/components/UiBatteryVerticalMedium.d.ts +15 -0
- package/dist/icons/components/UiBatteryVerticalMedium.d.ts.map +1 -0
- package/dist/icons/components/UiBatteryVerticalMedium.js +15 -0
- package/dist/icons/components/UiBatteryVerticalMedium.js.map +1 -0
- package/dist/icons/components/UiChatDots.cjs +15 -0
- package/dist/icons/components/UiChatDots.cjs.map +1 -0
- package/dist/icons/components/UiChatDots.d.ts +15 -0
- package/dist/icons/components/UiChatDots.d.ts.map +1 -0
- package/dist/icons/components/UiChatDots.js +15 -0
- package/dist/icons/components/UiChatDots.js.map +1 -0
- package/dist/icons/components/UiCoins.cjs +15 -0
- package/dist/icons/components/UiCoins.cjs.map +1 -0
- package/dist/icons/components/UiCoins.d.ts +15 -0
- package/dist/icons/components/UiCoins.d.ts.map +1 -0
- package/dist/icons/components/UiCoins.js +15 -0
- package/dist/icons/components/UiCoins.js.map +1 -0
- package/dist/icons/components/UiCompass.cjs +15 -0
- package/dist/icons/components/UiCompass.cjs.map +1 -0
- package/dist/icons/components/UiCompass.d.ts +15 -0
- package/dist/icons/components/UiCompass.d.ts.map +1 -0
- package/dist/icons/components/UiCompass.js +15 -0
- package/dist/icons/components/UiCompass.js.map +1 -0
- package/dist/icons/components/UiCurrencyDollar.cjs +15 -0
- package/dist/icons/components/UiCurrencyDollar.cjs.map +1 -0
- package/dist/icons/components/UiCurrencyDollar.d.ts +15 -0
- package/dist/icons/components/UiCurrencyDollar.d.ts.map +1 -0
- package/dist/icons/components/UiCurrencyDollar.js +15 -0
- package/dist/icons/components/UiCurrencyDollar.js.map +1 -0
- package/dist/icons/components/UiCursorClick.cjs +15 -0
- package/dist/icons/components/UiCursorClick.cjs.map +1 -0
- package/dist/icons/components/UiCursorClick.d.ts +15 -0
- package/dist/icons/components/UiCursorClick.d.ts.map +1 -0
- package/dist/icons/components/UiCursorClick.js +15 -0
- package/dist/icons/components/UiCursorClick.js.map +1 -0
- package/dist/icons/components/UiCursorText.cjs +15 -0
- package/dist/icons/components/UiCursorText.cjs.map +1 -0
- package/dist/icons/components/UiCursorText.d.ts +15 -0
- package/dist/icons/components/UiCursorText.d.ts.map +1 -0
- package/dist/icons/components/UiCursorText.js +15 -0
- package/dist/icons/components/UiCursorText.js.map +1 -0
- package/dist/icons/components/UiDebugContinue.cjs +10 -0
- package/dist/icons/components/UiDebugContinue.cjs.map +1 -0
- package/dist/icons/components/UiDebugContinue.d.ts +9 -0
- package/dist/icons/components/UiDebugContinue.d.ts.map +1 -0
- package/dist/icons/components/UiDebugContinue.js +10 -0
- package/dist/icons/components/UiDebugContinue.js.map +1 -0
- package/dist/icons/components/UiDebugStepInto.cjs +10 -0
- package/dist/icons/components/UiDebugStepInto.cjs.map +1 -0
- package/dist/icons/components/UiDebugStepInto.d.ts +9 -0
- package/dist/icons/components/UiDebugStepInto.d.ts.map +1 -0
- package/dist/icons/components/UiDebugStepInto.js +10 -0
- package/dist/icons/components/UiDebugStepInto.js.map +1 -0
- package/dist/icons/components/UiDebugStepOut.cjs +10 -0
- package/dist/icons/components/UiDebugStepOut.cjs.map +1 -0
- package/dist/icons/components/UiDebugStepOut.d.ts +9 -0
- package/dist/icons/components/UiDebugStepOut.d.ts.map +1 -0
- package/dist/icons/components/UiDebugStepOut.js +10 -0
- package/dist/icons/components/UiDebugStepOut.js.map +1 -0
- package/dist/icons/components/UiDebugStop.cjs +10 -0
- package/dist/icons/components/UiDebugStop.cjs.map +1 -0
- package/dist/icons/components/UiDebugStop.d.ts +9 -0
- package/dist/icons/components/UiDebugStop.d.ts.map +1 -0
- package/dist/icons/components/UiDebugStop.js +10 -0
- package/dist/icons/components/UiDebugStop.js.map +1 -0
- package/dist/icons/components/UiEllipsisBold.cjs +10 -0
- package/dist/icons/components/UiEllipsisBold.cjs.map +1 -0
- package/dist/icons/components/UiEllipsisBold.d.ts +9 -0
- package/dist/icons/components/UiEllipsisBold.d.ts.map +1 -0
- package/dist/icons/components/UiEllipsisBold.js +10 -0
- package/dist/icons/components/UiEllipsisBold.js.map +1 -0
- package/dist/icons/components/UiFastForwardCircle.cjs +15 -0
- package/dist/icons/components/UiFastForwardCircle.cjs.map +1 -0
- package/dist/icons/components/UiFastForwardCircle.d.ts +15 -0
- package/dist/icons/components/UiFastForwardCircle.d.ts.map +1 -0
- package/dist/icons/components/UiFastForwardCircle.js +15 -0
- package/dist/icons/components/UiFastForwardCircle.js.map +1 -0
- package/dist/icons/components/UiFilePlus.cjs +15 -0
- package/dist/icons/components/UiFilePlus.cjs.map +1 -0
- package/dist/icons/components/UiFilePlus.d.ts +15 -0
- package/dist/icons/components/UiFilePlus.d.ts.map +1 -0
- package/dist/icons/components/UiFilePlus.js +15 -0
- package/dist/icons/components/UiFilePlus.js.map +1 -0
- package/dist/icons/components/UiGavel.cjs +15 -0
- package/dist/icons/components/UiGavel.cjs.map +1 -0
- package/dist/icons/components/UiGavel.d.ts +15 -0
- package/dist/icons/components/UiGavel.d.ts.map +1 -0
- package/dist/icons/components/UiGavel.js +15 -0
- package/dist/icons/components/UiGavel.js.map +1 -0
- package/dist/icons/components/UiGearSix.cjs +15 -0
- package/dist/icons/components/UiGearSix.cjs.map +1 -0
- package/dist/icons/components/UiGearSix.d.ts +15 -0
- package/dist/icons/components/UiGearSix.d.ts.map +1 -0
- package/dist/icons/components/UiGearSix.js +15 -0
- package/dist/icons/components/UiGearSix.js.map +1 -0
- package/dist/icons/components/UiGitCommit.cjs +15 -0
- package/dist/icons/components/UiGitCommit.cjs.map +1 -0
- package/dist/icons/components/UiGitCommit.d.ts +15 -0
- package/dist/icons/components/UiGitCommit.d.ts.map +1 -0
- package/dist/icons/components/UiGitCommit.js +15 -0
- package/dist/icons/components/UiGitCommit.js.map +1 -0
- package/dist/icons/components/UiHandPalm.cjs +15 -0
- package/dist/icons/components/UiHandPalm.cjs.map +1 -0
- package/dist/icons/components/UiHandPalm.d.ts +15 -0
- package/dist/icons/components/UiHandPalm.d.ts.map +1 -0
- package/dist/icons/components/UiHandPalm.js +15 -0
- package/dist/icons/components/UiHandPalm.js.map +1 -0
- package/dist/icons/components/UiKeyboard.cjs +15 -0
- package/dist/icons/components/UiKeyboard.cjs.map +1 -0
- package/dist/icons/components/UiKeyboard.d.ts +15 -0
- package/dist/icons/components/UiKeyboard.d.ts.map +1 -0
- package/dist/icons/components/UiKeyboard.js +15 -0
- package/dist/icons/components/UiKeyboard.js.map +1 -0
- package/dist/icons/components/UiListChecks.cjs +15 -0
- package/dist/icons/components/UiListChecks.cjs.map +1 -0
- package/dist/icons/components/UiListChecks.d.ts +15 -0
- package/dist/icons/components/UiListChecks.d.ts.map +1 -0
- package/dist/icons/components/UiListChecks.js +15 -0
- package/dist/icons/components/UiListChecks.js.map +1 -0
- package/dist/icons/components/UiLogoAnthropic.cjs +10 -0
- package/dist/icons/components/UiLogoAnthropic.cjs.map +1 -0
- package/dist/icons/components/UiLogoAnthropic.d.ts +9 -0
- package/dist/icons/components/UiLogoAnthropic.d.ts.map +1 -0
- package/dist/icons/components/UiLogoAnthropic.js +10 -0
- package/dist/icons/components/UiLogoAnthropic.js.map +1 -0
- package/dist/icons/components/UiLogoClaude.cjs +10 -0
- package/dist/icons/components/UiLogoClaude.cjs.map +1 -0
- package/dist/icons/components/UiLogoClaude.d.ts +9 -0
- package/dist/icons/components/UiLogoClaude.d.ts.map +1 -0
- package/dist/icons/components/UiLogoClaude.js +10 -0
- package/dist/icons/components/UiLogoClaude.js.map +1 -0
- package/dist/icons/components/UiLogoDeepseek.cjs +10 -0
- package/dist/icons/components/UiLogoDeepseek.cjs.map +1 -0
- package/dist/icons/components/UiLogoDeepseek.d.ts +9 -0
- package/dist/icons/components/UiLogoDeepseek.d.ts.map +1 -0
- package/dist/icons/components/UiLogoDeepseek.js +10 -0
- package/dist/icons/components/UiLogoDeepseek.js.map +1 -0
- package/dist/icons/components/UiLogoGemini.cjs +10 -0
- package/dist/icons/components/UiLogoGemini.cjs.map +1 -0
- package/dist/icons/components/UiLogoGemini.d.ts +9 -0
- package/dist/icons/components/UiLogoGemini.d.ts.map +1 -0
- package/dist/icons/components/UiLogoGemini.js +10 -0
- package/dist/icons/components/UiLogoGemini.js.map +1 -0
- package/dist/icons/components/UiLogoGoogle.cjs +10 -0
- package/dist/icons/components/UiLogoGoogle.cjs.map +1 -0
- package/dist/icons/components/UiLogoGoogle.d.ts +9 -0
- package/dist/icons/components/UiLogoGoogle.d.ts.map +1 -0
- package/dist/icons/components/UiLogoGoogle.js +10 -0
- package/dist/icons/components/UiLogoGoogle.js.map +1 -0
- package/dist/icons/components/UiLogoHuggingface.cjs +10 -0
- package/dist/icons/components/UiLogoHuggingface.cjs.map +1 -0
- package/dist/icons/components/UiLogoHuggingface.d.ts +9 -0
- package/dist/icons/components/UiLogoHuggingface.d.ts.map +1 -0
- package/dist/icons/components/UiLogoHuggingface.js +10 -0
- package/dist/icons/components/UiLogoHuggingface.js.map +1 -0
- package/dist/icons/components/UiLogoMeta.cjs +10 -0
- package/dist/icons/components/UiLogoMeta.cjs.map +1 -0
- package/dist/icons/components/UiLogoMeta.d.ts +9 -0
- package/dist/icons/components/UiLogoMeta.d.ts.map +1 -0
- package/dist/icons/components/UiLogoMeta.js +10 -0
- package/dist/icons/components/UiLogoMeta.js.map +1 -0
- package/dist/icons/components/UiLogoMistral.cjs +10 -0
- package/dist/icons/components/UiLogoMistral.cjs.map +1 -0
- package/dist/icons/components/UiLogoMistral.d.ts +9 -0
- package/dist/icons/components/UiLogoMistral.d.ts.map +1 -0
- package/dist/icons/components/UiLogoMistral.js +10 -0
- package/dist/icons/components/UiLogoMistral.js.map +1 -0
- package/dist/icons/components/UiLogoOllama.cjs +10 -0
- package/dist/icons/components/UiLogoOllama.cjs.map +1 -0
- package/dist/icons/components/UiLogoOllama.d.ts +9 -0
- package/dist/icons/components/UiLogoOllama.d.ts.map +1 -0
- package/dist/icons/components/UiLogoOllama.js +10 -0
- package/dist/icons/components/UiLogoOllama.js.map +1 -0
- package/dist/icons/components/UiLogoOpenai.cjs +10 -0
- package/dist/icons/components/UiLogoOpenai.cjs.map +1 -0
- package/dist/icons/components/UiLogoOpenai.d.ts +9 -0
- package/dist/icons/components/UiLogoOpenai.d.ts.map +1 -0
- package/dist/icons/components/UiLogoOpenai.js +10 -0
- package/dist/icons/components/UiLogoOpenai.js.map +1 -0
- package/dist/icons/components/UiLogoPerplexity.cjs +10 -0
- package/dist/icons/components/UiLogoPerplexity.cjs.map +1 -0
- package/dist/icons/components/UiLogoPerplexity.d.ts +9 -0
- package/dist/icons/components/UiLogoPerplexity.d.ts.map +1 -0
- package/dist/icons/components/UiLogoPerplexity.js +10 -0
- package/dist/icons/components/UiLogoPerplexity.js.map +1 -0
- package/dist/icons/components/UiPalette.cjs +15 -0
- package/dist/icons/components/UiPalette.cjs.map +1 -0
- package/dist/icons/components/UiPalette.d.ts +15 -0
- package/dist/icons/components/UiPalette.d.ts.map +1 -0
- package/dist/icons/components/UiPalette.js +15 -0
- package/dist/icons/components/UiPalette.js.map +1 -0
- package/dist/icons/components/UiPauseCircle.cjs +15 -0
- package/dist/icons/components/UiPauseCircle.cjs.map +1 -0
- package/dist/icons/components/UiPauseCircle.d.ts +15 -0
- package/dist/icons/components/UiPauseCircle.d.ts.map +1 -0
- package/dist/icons/components/UiPauseCircle.js +15 -0
- package/dist/icons/components/UiPauseCircle.js.map +1 -0
- package/dist/icons/components/UiPencilSimpleLine.cjs +15 -0
- package/dist/icons/components/UiPencilSimpleLine.cjs.map +1 -0
- package/dist/icons/components/UiPencilSimpleLine.d.ts +15 -0
- package/dist/icons/components/UiPencilSimpleLine.d.ts.map +1 -0
- package/dist/icons/components/UiPencilSimpleLine.js +15 -0
- package/dist/icons/components/UiPencilSimpleLine.js.map +1 -0
- package/dist/icons/components/UiPlugsConnected.cjs +15 -0
- package/dist/icons/components/UiPlugsConnected.cjs.map +1 -0
- package/dist/icons/components/UiPlugsConnected.d.ts +15 -0
- package/dist/icons/components/UiPlugsConnected.d.ts.map +1 -0
- package/dist/icons/components/UiPlugsConnected.js +15 -0
- package/dist/icons/components/UiPlugsConnected.js.map +1 -0
- package/dist/icons/components/UiProhibit.cjs +15 -0
- package/dist/icons/components/UiProhibit.cjs.map +1 -0
- package/dist/icons/components/UiProhibit.d.ts +15 -0
- package/dist/icons/components/UiProhibit.d.ts.map +1 -0
- package/dist/icons/components/UiProhibit.js +15 -0
- package/dist/icons/components/UiProhibit.js.map +1 -0
- package/dist/icons/components/UiRepeat.cjs +15 -0
- package/dist/icons/components/UiRepeat.cjs.map +1 -0
- package/dist/icons/components/UiRepeat.d.ts +15 -0
- package/dist/icons/components/UiRepeat.d.ts.map +1 -0
- package/dist/icons/components/UiRepeat.js +15 -0
- package/dist/icons/components/UiRepeat.js.map +1 -0
- package/dist/icons/components/UiScan.cjs +15 -0
- package/dist/icons/components/UiScan.cjs.map +1 -0
- package/dist/icons/components/UiScan.d.ts +15 -0
- package/dist/icons/components/UiScan.d.ts.map +1 -0
- package/dist/icons/components/UiScan.js +15 -0
- package/dist/icons/components/UiScan.js.map +1 -0
- package/dist/icons/components/UiScroll.cjs +15 -0
- package/dist/icons/components/UiScroll.cjs.map +1 -0
- package/dist/icons/components/UiScroll.d.ts +15 -0
- package/dist/icons/components/UiScroll.d.ts.map +1 -0
- package/dist/icons/components/UiScroll.js +15 -0
- package/dist/icons/components/UiScroll.js.map +1 -0
- package/dist/icons/components/UiShieldSlash.cjs +15 -0
- package/dist/icons/components/UiShieldSlash.cjs.map +1 -0
- package/dist/icons/components/UiShieldSlash.d.ts +15 -0
- package/dist/icons/components/UiShieldSlash.d.ts.map +1 -0
- package/dist/icons/components/UiShieldSlash.js +15 -0
- package/dist/icons/components/UiShieldSlash.js.map +1 -0
- package/dist/icons/components/UiStack.cjs +19 -0
- package/dist/icons/components/UiStack.cjs.map +1 -0
- package/dist/icons/components/UiStack.d.ts +15 -0
- package/dist/icons/components/UiStack.d.ts.map +1 -0
- package/dist/icons/components/UiStack.js +19 -0
- package/dist/icons/components/UiStack.js.map +1 -0
- package/dist/icons/components/UiStrategy.cjs +15 -0
- package/dist/icons/components/UiStrategy.cjs.map +1 -0
- package/dist/icons/components/UiStrategy.d.ts +15 -0
- package/dist/icons/components/UiStrategy.d.ts.map +1 -0
- package/dist/icons/components/UiStrategy.js +15 -0
- package/dist/icons/components/UiStrategy.js.map +1 -0
- package/dist/icons/components/UiThermometer.cjs +15 -0
- package/dist/icons/components/UiThermometer.cjs.map +1 -0
- package/dist/icons/components/UiThermometer.d.ts +15 -0
- package/dist/icons/components/UiThermometer.d.ts.map +1 -0
- package/dist/icons/components/UiThermometer.js +15 -0
- package/dist/icons/components/UiThermometer.js.map +1 -0
- package/dist/icons/components/UiTimer.cjs +15 -0
- package/dist/icons/components/UiTimer.cjs.map +1 -0
- package/dist/icons/components/UiTimer.d.ts +15 -0
- package/dist/icons/components/UiTimer.d.ts.map +1 -0
- package/dist/icons/components/UiTimer.js +15 -0
- package/dist/icons/components/UiTimer.js.map +1 -0
- package/dist/icons/index.d.ts +88 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons.cjs +140 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +140 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +213 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +204 -7
- package/dist/index.js.map +1 -1
- package/dist/layout/Workspace.cjs +191 -0
- package/dist/layout/Workspace.cjs.map +1 -0
- package/dist/layout/Workspace.d.ts +17 -0
- package/dist/layout/Workspace.d.ts.map +1 -0
- package/dist/layout/Workspace.js +191 -0
- package/dist/layout/Workspace.js.map +1 -0
- package/dist/layout/Workspace.model.cjs +142 -0
- package/dist/layout/Workspace.model.cjs.map +1 -0
- package/dist/layout/Workspace.model.d.ts +43 -0
- package/dist/layout/Workspace.model.d.ts.map +1 -0
- package/dist/layout/Workspace.model.js +142 -0
- package/dist/layout/Workspace.model.js.map +1 -0
- package/dist/layout/Workspace.regions.cjs +305 -0
- package/dist/layout/Workspace.regions.cjs.map +1 -0
- package/dist/layout/Workspace.regions.d.ts +17 -0
- package/dist/layout/Workspace.regions.d.ts.map +1 -0
- package/dist/layout/Workspace.regions.js +305 -0
- package/dist/layout/Workspace.regions.js.map +1 -0
- package/dist/lib/tokens.cjs +14 -0
- package/dist/lib/tokens.cjs.map +1 -0
- package/dist/lib/tokens.d.ts +5 -0
- package/dist/lib/tokens.d.ts.map +1 -0
- package/dist/lib/tokens.js +14 -0
- package/dist/lib/tokens.js.map +1 -0
- package/dist/monaco/MonacoEditor.cjs +69 -0
- package/dist/monaco/MonacoEditor.cjs.map +1 -0
- package/dist/monaco/MonacoEditor.d.ts +5 -0
- package/dist/monaco/MonacoEditor.d.ts.map +1 -0
- package/dist/monaco/MonacoEditor.js +52 -0
- package/dist/monaco/MonacoEditor.js.map +1 -0
- package/dist/monaco/MonacoProvider.cjs +22 -0
- package/dist/monaco/MonacoProvider.cjs.map +1 -0
- package/dist/monaco/MonacoProvider.d.ts +3 -0
- package/dist/monaco/MonacoProvider.d.ts.map +1 -0
- package/dist/monaco/MonacoProvider.js +22 -0
- package/dist/monaco/MonacoProvider.js.map +1 -0
- package/dist/monaco/MonacoSchemaEditor.cjs +108 -0
- package/dist/monaco/MonacoSchemaEditor.cjs.map +1 -0
- package/dist/monaco/MonacoSchemaEditor.d.ts +4 -0
- package/dist/monaco/MonacoSchemaEditor.d.ts.map +1 -0
- package/dist/monaco/MonacoSchemaEditor.js +108 -0
- package/dist/monaco/MonacoSchemaEditor.js.map +1 -0
- package/dist/monaco/schema-normalizer.cjs +38 -0
- package/dist/monaco/schema-normalizer.cjs.map +1 -0
- package/dist/monaco/schema-normalizer.d.ts +7 -0
- package/dist/monaco/schema-normalizer.d.ts.map +1 -0
- package/dist/monaco/schema-normalizer.js +38 -0
- package/dist/monaco/schema-normalizer.js.map +1 -0
- package/dist/monaco/schema-registry.cjs +67 -0
- package/dist/monaco/schema-registry.cjs.map +1 -0
- package/dist/monaco/schema-registry.d.ts +3 -0
- package/dist/monaco/schema-registry.d.ts.map +1 -0
- package/dist/monaco/schema-registry.js +67 -0
- package/dist/monaco/schema-registry.js.map +1 -0
- package/dist/monaco/types.d.ts +31 -0
- package/dist/monaco/types.d.ts.map +1 -0
- package/dist/monaco/use-monaco-worker.cjs +10 -0
- package/dist/monaco/use-monaco-worker.cjs.map +1 -0
- package/dist/monaco/use-monaco-worker.d.ts +4 -0
- package/dist/monaco/use-monaco-worker.d.ts.map +1 -0
- package/dist/monaco/use-monaco-worker.js +10 -0
- package/dist/monaco/use-monaco-worker.js.map +1 -0
- package/dist/monaco-schema.cjs +5 -0
- package/dist/monaco-schema.cjs.map +1 -0
- package/dist/monaco-schema.d.ts +3 -0
- package/dist/monaco-schema.d.ts.map +1 -0
- package/dist/monaco-schema.js +5 -0
- package/dist/monaco-schema.js.map +1 -0
- package/dist/monaco.cjs +11 -0
- package/dist/monaco.cjs.map +1 -0
- package/dist/monaco.d.ts +6 -0
- package/dist/monaco.d.ts.map +1 -0
- package/dist/monaco.js +11 -0
- package/dist/monaco.js.map +1 -0
- package/dist/overlay/CellActions.cjs +183 -0
- package/dist/overlay/CellActions.cjs.map +1 -0
- package/dist/overlay/CellActions.d.ts +18 -0
- package/dist/overlay/CellActions.d.ts.map +1 -0
- package/dist/overlay/CellActions.js +183 -0
- package/dist/overlay/CellActions.js.map +1 -0
- package/dist/overlay/DropdownMenu.cjs +50 -59
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +21 -2
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +38 -47
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.cjs +210 -0
- package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -0
- package/dist/overlay/DropdownMenuSubmenu.d.ts +12 -0
- package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -0
- package/dist/overlay/DropdownMenuSubmenu.js +210 -0
- package/dist/overlay/DropdownMenuSubmenu.js.map +1 -0
- package/dist/overlay/Modal.cjs +14 -2
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts +9 -2
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +14 -2
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/dropdownMenuContext.cjs +16 -0
- package/dist/overlay/dropdownMenuContext.cjs.map +1 -0
- package/dist/overlay/dropdownMenuContext.d.ts +16 -0
- package/dist/overlay/dropdownMenuContext.d.ts.map +1 -0
- package/dist/overlay/dropdownMenuContext.js +16 -0
- package/dist/overlay/dropdownMenuContext.js.map +1 -0
- package/dist/rpc/CommandOutput.cjs +28 -9
- package/dist/rpc/CommandOutput.cjs.map +1 -1
- package/dist/rpc/CommandOutput.d.ts +4 -2
- package/dist/rpc/CommandOutput.d.ts.map +1 -1
- package/dist/rpc/CommandOutput.js +28 -9
- package/dist/rpc/CommandOutput.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +8 -1
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +9 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +8 -1
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +63 -41
- package/dist/rpc/OperationActionBar.cjs.map +1 -1
- package/dist/rpc/OperationActionBar.d.ts +2 -1
- package/dist/rpc/OperationActionBar.d.ts.map +1 -1
- package/dist/rpc/OperationActionBar.js +63 -41
- package/dist/rpc/OperationActionBar.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +111 -80
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +2 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +112 -81
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationCommandPage.cjs +2 -0
- package/dist/rpc/OperationCommandPage.cjs.map +1 -1
- package/dist/rpc/OperationCommandPage.d.ts +3 -2
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
- package/dist/rpc/OperationCommandPage.js +2 -0
- package/dist/rpc/OperationCommandPage.js.map +1 -1
- package/dist/rpc/OperationEntityContextPicker.cjs +448 -0
- package/dist/rpc/OperationEntityContextPicker.cjs.map +1 -0
- package/dist/rpc/OperationEntityContextPicker.d.ts +28 -0
- package/dist/rpc/OperationEntityContextPicker.d.ts.map +1 -0
- package/dist/rpc/OperationEntityContextPicker.js +448 -0
- package/dist/rpc/OperationEntityContextPicker.js.map +1 -0
- package/dist/rpc/OperationEntityContextPicker.model.cjs +60 -0
- package/dist/rpc/OperationEntityContextPicker.model.cjs.map +1 -0
- package/dist/rpc/OperationEntityContextPicker.model.d.ts +7 -0
- package/dist/rpc/OperationEntityContextPicker.model.d.ts.map +1 -0
- package/dist/rpc/OperationEntityContextPicker.model.js +60 -0
- package/dist/rpc/OperationEntityContextPicker.model.js.map +1 -0
- package/dist/rpc/OperationEntityPage.cjs +47 -22
- package/dist/rpc/OperationEntityPage.cjs.map +1 -1
- package/dist/rpc/OperationEntityPage.d.ts +32 -2
- package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
- package/dist/rpc/OperationEntityPage.js +47 -22
- package/dist/rpc/OperationEntityPage.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +4 -2
- package/dist/rpc/OperationResultView.cjs.map +1 -1
- package/dist/rpc/OperationResultView.d.ts +3 -2
- package/dist/rpc/OperationResultView.d.ts.map +1 -1
- package/dist/rpc/OperationResultView.js +4 -2
- package/dist/rpc/OperationResultView.js.map +1 -1
- package/dist/rpc/SchemaActionForm.cjs +151 -17
- package/dist/rpc/SchemaActionForm.cjs.map +1 -1
- package/dist/rpc/SchemaActionForm.d.ts +7 -1
- package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
- package/dist/rpc/SchemaActionForm.js +152 -18
- package/dist/rpc/SchemaActionForm.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +24 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc.cjs +6 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +5 -3
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +6 -0
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +8 -0
- package/dist/tailwind-preset.cjs.map +1 -1
- package/dist/tailwind-preset.d.ts.map +1 -1
- package/dist/tailwind-preset.js +8 -0
- package/dist/tailwind-preset.js.map +1 -1
- package/oxlint-plugins/README.md +82 -19
- package/oxlint-plugins/clicky-ui-no-adhoc-overlay.js +5 -50
- package/oxlint-plugins/clicky-ui-no-direct-z-index.js +134 -0
- package/oxlint-plugins/clicky-ui.js +3 -0
- package/package.json +26 -3
- package/dist/data/chat/ContextUsage.cjs +0 -99
- package/dist/data/chat/ContextUsage.cjs.map +0 -1
- package/dist/data/chat/ContextUsage.d.ts +0 -19
- package/dist/data/chat/ContextUsage.d.ts.map +0 -1
- package/dist/data/chat/ContextUsage.js +0 -99
- package/dist/data/chat/ContextUsage.js.map +0 -1
package/dist/data/Clicky.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Clicky.js","sources":["../../src/data/Clicky.tsx"],"sourcesContent":["import {\n QueryClient,\n QueryClientProvider,\n useQuery,\n} from \"@tanstack/react-query\";\nimport {\n createContext,\n Fragment,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentProps,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { FilterForm } from \"../rpc/FilterForm\";\nimport { parseJsonBody } from \"../rpc/classify\";\nimport {\n packParameterValues,\n pruneParameterValues,\n type ParameterValues,\n} from \"../rpc/formMetadata\";\nimport {\n type ExecutionResponse,\n isPositionalParam,\n type OpenAPIParameter,\n type ResolvedOperation,\n} from \"../rpc/types\";\nimport { type OperationsApiClient, useOperations } from \"../rpc/useOperations\";\nimport { cn } from \"../lib/utils\";\nimport {\n DataTable,\n type DataTableColumn,\n type DataTableMenuAction,\n type DataTablePagination,\n} from \"./DataTable\";\nimport type {\n FilterBarFilter,\n FilterBarRangeProps,\n FilterBarSearchProps,\n} from \"../components/FilterBar\";\nimport { Tree } from \"./Tree\";\nimport { ObjectGraph, type ObjectGraphNode } from \"./ObjectGraph\";\nimport { ExecutionTree, type ExecutionNode } from \"./ExecutionTree\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport {\n UiCheck,\n UiChevronDown,\n UiChevronUp,\n UiCloudDownload,\n UiComment,\n UiEllipsis,\n UiEye,\n UiFileCode,\n UiFileSpreadsheet,\n UiFileText,\n UiJson,\n UiMarkdown,\n UiTable,\n} from \"../icons\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { isBlockHtml, sanitizeHtml } from \"./html-utils\";\nimport { StackTrace } from \"./diagnostics/RenderedStackTrace\";\nimport type { ParsedStackFrame } from \"./diagnostics/stacktrace-parse\";\nimport { Badge, type BadgeShape } from \"./Badge\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport { Modal } from \"../overlay/Modal\";\nimport { useEscapeLayer } from \"../overlay/modalStack\";\nimport { TagList } from \"./cells/TagList\";\nimport {\n normalizeTags,\n type NormalizedTag,\n type TagsValue,\n} from \"./cells/tag-utils\";\nimport { parseClickyData, type ParsedClicky } from \"./clicky-parse\";\n\nexport type ClickyStyle = {\n className?: string;\n color?: string;\n backgroundColor?: string;\n bold?: boolean;\n faint?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n textTransform?: string;\n maxWidth?: number;\n maxLines?: number;\n truncateMode?: \"suffix\" | \"prefix\" | \"headtail\";\n monospace?: boolean;\n};\n\nexport type ClickyField = {\n name: string;\n label?: string;\n value: ClickyNode;\n};\n\nexport type ClickyColumn = {\n name: string;\n label?: string;\n header?: ClickyNode;\n align?: \"left\" | \"right\" | \"center\";\n sortable?: boolean;\n filterable?: boolean;\n grow?: boolean;\n shrink?: boolean;\n kind?: \"timestamp\" | \"tags\" | \"status\";\n};\n\nexport type ClickyRow = {\n cells: Record<string, ClickyNode>;\n detail?: ClickyNode;\n};\n\nexport type ClickyTreeItem = {\n id: string;\n label: ClickyNode;\n children?: ClickyTreeItem[];\n};\n\nexport type ClickyNode = {\n kind:\n | \"text\"\n | \"link\"\n | \"link-command\"\n | \"icon\"\n | \"list\"\n | \"map\"\n | \"table\"\n | \"tree\"\n | \"code\"\n | \"heading\"\n | \"blockquote\"\n | \"admonition\"\n | \"footnote-ref\"\n | \"footnote\"\n | \"footnotes\"\n | \"collapsed\"\n | \"stacktrace\"\n | \"button\"\n | \"button-group\"\n | \"html\"\n | \"comment\"\n | \"badge\"\n | \"object-graph\"\n | \"execution-tree\";\n plain?: string;\n style?: ClickyStyle;\n text?: string;\n children?: ClickyNode[];\n tooltip?: ClickyNode;\n html?: string;\n inline?: boolean;\n ordered?: boolean;\n unstyled?: boolean;\n bullet?: ClickyNode;\n items?: ClickyNode[];\n fields?: ClickyField[];\n columns?: ClickyColumn[];\n rows?: ClickyRow[];\n autoFilter?: boolean;\n roots?: ClickyTreeItem[];\n label?: ClickyNode;\n content?: ClickyNode;\n level?: number;\n severity?: string;\n href?: string;\n target?: ClickyLinkTarget;\n command?: string;\n args?: string[];\n flags?: Record<string, string>;\n autoRun?: boolean;\n id?: string;\n payload?: string;\n variant?: string;\n iconify?: string;\n unicode?: string;\n language?: string;\n source?: string;\n highlightedHtml?: string;\n exceptionClass?: string;\n message?: string;\n causedBy?: string[];\n frames?: ParsedStackFrame[];\n // LabelBadge fields, set when kind === \"badge\".\n badgeLabel?: string;\n badgeValue?: string;\n badgeColor?: string;\n badgeText?: string;\n badgeShape?: string;\n badgeIcon?: string;\n // Set when kind === \"object-graph\" / \"execution-tree\": the roots handed to the\n // dedicated <ObjectGraph> / <ExecutionTree> inspectors.\n objects?: ObjectGraphNode[];\n executionRoots?: ExecutionNode[];\n};\n\nexport type ClickyDocument = {\n version: 1;\n node: ClickyNode;\n};\n\nexport type ClickyLinkTarget =\n | \"Dialog\"\n | \"Hover\"\n | \"Expand\"\n | \"_clicky\"\n | \"_self\"\n | \"_window\"\n | \"_tab\";\n\nexport type ClickyCommandRequest = {\n command: string;\n args?: string[];\n flags?: Record<string, string>;\n target?: ClickyLinkTarget;\n autoRun?: boolean;\n};\n\nexport type ClickyResolvedCommand = {\n request: ClickyCommandRequest;\n operation: ResolvedOperation | undefined;\n};\n\nexport type ClickyCommandRuntime = {\n client: OperationsApiClient;\n resolveCommand?: (\n request: ClickyCommandRequest,\n operations: ResolvedOperation[],\n ) => ResolvedOperation | undefined;\n hrefForCommand?: (resolved: ClickyResolvedCommand) => string | undefined;\n onNavigate?: (resolved: ClickyResolvedCommand) => void;\n};\n\nexport type ClickyTableRowClick = (row: ClickyRow) => void;\nexport type ClickyTableRowHref = (row: ClickyRow) => string | undefined;\nexport type ClickyTableRowPredicate = (row: ClickyRow) => boolean;\n\nconst CLICKY_PRIMARY_VIEW_FORMATS = [\"clicky\", \"json\"] as const;\nconst CLICKY_OVERFLOW_VIEW_FORMATS = [\n \"pdf\",\n \"html\",\n \"markdown\",\n \"yaml\",\n \"csv\",\n \"pretty\",\n \"excel\",\n \"slack\",\n] as const;\nconst CLICKY_DOWNLOAD_FORMATS = [\n \"yaml\",\n \"json\",\n \"csv\",\n \"pdf\",\n \"markdown\",\n] as const;\n\nexport type ClickyPrimaryViewFormat =\n (typeof CLICKY_PRIMARY_VIEW_FORMATS)[number];\nexport type ClickyOverflowViewFormat =\n (typeof CLICKY_OVERFLOW_VIEW_FORMATS)[number];\nexport type ClickyRemoteFormat =\n | ClickyPrimaryViewFormat\n | ClickyOverflowViewFormat;\n\nexport type ClickyViewOptions = Partial<Record<ClickyRemoteFormat, boolean>>;\n\nexport type ClickyViewConfig = ClickyViewOptions | ClickyRemoteFormat[];\n\nexport type ClickyDownloadOptions = {\n /** Show all advertised download formats in the overflow menu. */\n all?: boolean;\n /** Override the download menu label. */\n label?: string;\n};\n\nexport type ClickyProps = {\n /** Clicky document, node, or JSON string to render. */\n data?: ClickyDocument | ClickyNode | string;\n /** Remote URL to fetch when `data` is not provided. */\n url?: string;\n /** Enabled remote view/download formats. */\n view?: ClickyViewConfig;\n /** Download menu configuration. */\n download?: ClickyDownloadOptions;\n /** Runtime used by link-command nodes. */\n commandRuntime?: ClickyCommandRuntime;\n /** Called when an embedded table row is clicked. */\n onTableRowClick?: ClickyTableRowClick;\n /** Optional href factory for embedded table rows. */\n getTableRowHref?: ClickyTableRowHref;\n /** Predicate controlling whether embedded table rows are clickable. */\n isTableRowClickable?: ClickyTableRowPredicate;\n /** Classes applied to the renderer root. */\n className?: string;\n // search, externalFilters and pagination flow through to the embedded\n // DataTable so operation pages can publish their query parameters as the\n // table's search box, native filter pills, and pagination footer without\n // re-implementing them per page.\n search?: FilterBarSearchProps;\n externalFilters?: FilterBarFilter[];\n /** Time-range control published into the first embedded table's FilterBar. */\n timeRange?: FilterBarRangeProps;\n /** Pagination footer configuration for the first embedded table. */\n pagination?: DataTablePagination;\n};\n\nexport type ClickyNodeViewProps = {\n /** Node to render; null and undefined render nothing. */\n node: ClickyNode | null | undefined;\n};\n\nexport type ClickyTableProps = {\n /** Clicky table column definitions. */\n columns: ClickyColumn[];\n /** Clicky table rows. */\n rows: ClickyRow[];\n /** Enable generated filters for filterable columns. */\n autoFilter?: boolean | undefined;\n /** Called when a row is clicked. */\n onTableRowClick?: ClickyTableRowClick | undefined;\n /** Optional href factory for row links. */\n getTableRowHref?: ClickyTableRowHref | undefined;\n /** Predicate controlling whether a row is clickable. */\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n /** Dedicated search input rendered in the table's FilterBar. */\n search?: FilterBarSearchProps | undefined;\n /** Time-range control rendered in the table's FilterBar. */\n timeRange?: FilterBarRangeProps | undefined;\n /** Extra FilterBar controls rendered before generated filters. */\n externalFilters?: FilterBarFilter[] | undefined;\n /** Pagination footer configuration. */\n pagination?: DataTablePagination | undefined;\n /** Extra actions rendered in the table menu. */\n menuActions?: DataTableMenuAction[] | undefined;\n};\n\ntype ClickyRemoteResponse =\n | { kind: \"text\"; text: string; contentType: string }\n | { kind: \"blob\"; blob: Blob; contentType: string };\n\ntype JsonTreeNode = {\n id: string;\n key: string;\n value: unknown;\n preview: string;\n children?: JsonTreeNode[];\n};\n\ntype ClickyRuntimeContextValue = {\n commandRuntime?: ClickyCommandRuntime | undefined;\n onTableRowClick?: ClickyTableRowClick | undefined;\n getTableRowHref?: ClickyTableRowHref | undefined;\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n // tableSearch + tableExternalFilters + tablePagination flow caller-owned\n // widgets into the FIRST ClickyTable rendered inside this runtime. The wiring\n // sits on the context rather than being threaded through every node so\n // OperationCommand page-style callers don't need to know how deep the table\n // is rendered.\n tableSearch?: FilterBarSearchProps | undefined;\n tableTimeRange?: FilterBarRangeProps | undefined;\n tableExternalFilters?: FilterBarFilter[] | undefined;\n tablePagination?: DataTablePagination | undefined;\n tableMenuActions?: DataTableMenuAction[] | undefined;\n operations: ResolvedOperation[];\n operationsLoading: boolean;\n};\n\nconst clickyRuntimeContextDefault: ClickyRuntimeContextValue = {\n operations: [],\n operationsLoading: false,\n};\n\nconst ClickyRuntimeContext = createContext<ClickyRuntimeContextValue>(\n clickyRuntimeContextDefault,\n);\n\nexport function Clicky(props: ClickyProps) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30_000,\n retry: 1,\n },\n },\n }),\n );\n const tableMenuActions = useMemo(\n () => getDownloadMenuActions({ url: props.url, download: props.download }),\n [props.download, props.url],\n );\n\n const content = (\n <ClickyRuntimeProvider\n {...(props.commandRuntime\n ? { commandRuntime: props.commandRuntime }\n : {})}\n {...(props.onTableRowClick\n ? { onTableRowClick: props.onTableRowClick }\n : {})}\n {...(props.getTableRowHref\n ? { getTableRowHref: props.getTableRowHref }\n : {})}\n {...(props.isTableRowClickable\n ? { isTableRowClickable: props.isTableRowClickable }\n : {})}\n {...(props.search ? { tableSearch: props.search } : {})}\n {...(props.timeRange ? { tableTimeRange: props.timeRange } : {})}\n {...(props.externalFilters\n ? { tableExternalFilters: props.externalFilters }\n : {})}\n {...(props.pagination ? { tablePagination: props.pagination } : {})}\n {...(tableMenuActions.length > 0 ? { tableMenuActions } : {})}\n >\n {props.url ? (\n <ClickyRemoteRenderer {...props} url={props.url} />\n ) : (\n <ClickyContent\n data={props.data}\n {...(props.className ? { className: props.className } : {})}\n />\n )}\n </ClickyRuntimeProvider>\n );\n\n if (props.url || props.commandRuntime) {\n return (\n <QueryClientProvider client={queryClient}>{content}</QueryClientProvider>\n );\n }\n\n return content;\n}\n\nfunction ClickyRuntimeProvider({\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableMenuActions,\n children,\n}: {\n commandRuntime?: ClickyCommandRuntime | undefined;\n onTableRowClick?: ClickyTableRowClick | undefined;\n getTableRowHref?: ClickyTableRowHref | undefined;\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n tableSearch?: FilterBarSearchProps | undefined;\n tableTimeRange?: FilterBarRangeProps | undefined;\n tableExternalFilters?: FilterBarFilter[] | undefined;\n tablePagination?: DataTablePagination | undefined;\n tableMenuActions?: DataTableMenuAction[] | undefined;\n children: ReactNode;\n}) {\n if (!commandRuntime) {\n const hasOverrides =\n onTableRowClick ||\n getTableRowHref ||\n isTableRowClickable ||\n tableSearch ||\n tableTimeRange ||\n tableExternalFilters ||\n tablePagination ||\n tableMenuActions;\n return (\n <ClickyRuntimeContext.Provider\n value={\n hasOverrides\n ? {\n ...clickyRuntimeContextDefault,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableMenuActions,\n }\n : clickyRuntimeContextDefault\n }\n >\n {children}\n </ClickyRuntimeContext.Provider>\n );\n }\n\n return (\n <ClickyCommandRuntimeProvider\n commandRuntime={commandRuntime}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(tableSearch ? { tableSearch } : {})}\n {...(tableTimeRange ? { tableTimeRange } : {})}\n {...(tableExternalFilters ? { tableExternalFilters } : {})}\n {...(tablePagination ? { tablePagination } : {})}\n {...(tableMenuActions ? { tableMenuActions } : {})}\n >\n {children}\n </ClickyCommandRuntimeProvider>\n );\n}\n\nfunction ClickyCommandRuntimeProvider({\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableMenuActions,\n children,\n}: {\n commandRuntime: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick | undefined;\n getTableRowHref?: ClickyTableRowHref | undefined;\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n tableSearch?: FilterBarSearchProps | undefined;\n tableTimeRange?: FilterBarRangeProps | undefined;\n tableExternalFilters?: FilterBarFilter[] | undefined;\n tablePagination?: DataTablePagination | undefined;\n tableMenuActions?: DataTableMenuAction[] | undefined;\n children: ReactNode;\n}) {\n const { operations, isLoading } = useOperations(commandRuntime.client);\n const value = useMemo(\n () => ({\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableMenuActions,\n operations,\n operationsLoading: isLoading,\n }),\n [\n commandRuntime,\n getTableRowHref,\n isLoading,\n isTableRowClickable,\n onTableRowClick,\n operations,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableMenuActions,\n ],\n );\n\n return (\n <ClickyRuntimeContext.Provider value={value}>\n {children}\n </ClickyRuntimeContext.Provider>\n );\n}\n\nfunction ClickyContent({\n data,\n className,\n}: {\n data: ClickyProps[\"data\"];\n className?: string | undefined;\n}) {\n if (data === undefined) {\n return (\n <ClickyNotice\n className={className}\n title=\"No Clicky data\"\n message=\"Provide either a local data payload or a URL.\"\n />\n );\n }\n\n const parsed = parseClickyData(data);\n\n if (!parsed.ok) {\n return <ClickyInvalidPayload parsed={parsed} className={className} />;\n }\n\n return (\n <div className={className}>\n <ClickyNodeRenderer node={parsed.document.node} />\n </div>\n );\n}\n\nfunction ClickyRemoteRenderer({\n data,\n url,\n view,\n download,\n className,\n}: ClickyProps & { url: string }) {\n const availableViews = useMemo(\n () => getAvailableViews({ data, url, view }),\n [data, url, view],\n );\n const primaryViews = useMemo(\n () => availableViews.filter(isPrimaryViewFormat),\n [availableViews],\n );\n const overflowViews = useMemo(\n () => availableViews.filter(isOverflowViewFormat),\n [availableViews],\n );\n const downloadFormats = useMemo(\n () => getDownloadFormats({ url, download }),\n [download, url],\n );\n const [activeView, setActiveView] = useState<ClickyRemoteFormat>(\n () => availableViews[0] ?? \"clicky\",\n );\n\n useEffect(() => {\n if (!availableViews.includes(activeView)) {\n setActiveView(availableViews[0] ?? \"clicky\");\n }\n }, [activeView, availableViews]);\n\n const formattedUrl = buildFormatUrl(url, activeView);\n const activeQuery = useQuery({\n queryKey: [\"clicky\", activeView, formattedUrl],\n enabled: shouldFetchRemoteView(activeView),\n queryFn: async () => fetchRemoteFormat(formattedUrl, activeView),\n });\n const effectiveClickyData =\n activeView === \"clicky\" && activeQuery.data?.kind === \"text\"\n ? activeQuery.data.text\n : data;\n const fallbackJsonData = useMemo(() => parseJsonValue(data), [data]);\n const effectiveJsonData =\n activeView === \"json\" && activeQuery.data?.kind === \"text\"\n ? parseJsonValue(activeQuery.data.text)\n : fallbackJsonData;\n const activeOverflowView = isOverflowViewFormat(activeView)\n ? activeView\n : null;\n const downloadHandledByTable = clickyPayloadHasTable(effectiveClickyData);\n const canDownload = downloadFormats.length > 0 && !downloadHandledByTable;\n const loadingMessage = `Fetching ${formattedUrl}`;\n\n const runtime = useContext(ClickyRuntimeContext);\n // When the payload renders as a table, fold the inline view switcher into the\n // table's overflow (\"3-dot\") menu alongside its download formats and hide the\n // standalone view bar — that bar is what looks out of place on a plain list\n // surface. Non-table payloads, and the JSON/PDF/HTML previews, keep the bar so\n // the user can always switch back to the table.\n const tableHostsControls = downloadHandledByTable && activeView === \"clicky\";\n const viewMenuActions = useMemo<DataTableMenuAction[]>(() => {\n if (!tableHostsControls || availableViews.length <= 1) return [];\n return availableViews.map((format) => {\n const meta = getRemoteFormatMeta(format);\n return {\n id: `view-${format}`,\n label: formatViewLabel(format),\n icon: meta.icon,\n ...(meta.iconClassName ? { iconClassName: meta.iconClassName } : {}),\n section: \"View\",\n disabled: format === activeView,\n onSelect: () => setActiveView(format),\n };\n });\n }, [tableHostsControls, availableViews, activeView]);\n const combinedTableActions = useMemo<DataTableMenuAction[]>(\n () => [...viewMenuActions, ...(runtime.tableMenuActions ?? [])],\n [viewMenuActions, runtime.tableMenuActions],\n );\n\n return (\n <div className={cn(\"space-y-density-3\", className)}>\n {!tableHostsControls && (\n <div className=\"flex flex-wrap items-center gap-2 rounded-md border border-border bg-muted/20 px-density-3 py-density-2\">\n {primaryViews.length > 1 && (\n <div\n role=\"radiogroup\"\n aria-label=\"Clicky view mode\"\n className=\"flex flex-wrap gap-1\"\n >\n {primaryViews.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n role=\"radio\"\n aria-checked={activeView === mode}\n onClick={() => setActiveView(mode)}\n className={cn(\n \"rounded-md border px-2.5 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n activeView === mode\n ? \"border-foreground/20 bg-accent text-foreground\"\n : \"border-transparent text-muted-foreground hover:border-foreground/20 hover:text-foreground\",\n )}\n >\n {formatViewLabel(mode)}\n </button>\n ))}\n </div>\n )}\n\n {overflowViews.length > 0 && (\n <ClickyViewMenu\n activeFormat={activeOverflowView}\n formats={overflowViews}\n onSelect={setActiveView}\n />\n )}\n\n <div className=\"ml-auto flex items-center gap-2\">\n {shouldFetchRemoteView(activeView) && activeQuery.isFetching && (\n <span className=\"text-xs text-muted-foreground\">Refreshing…</span>\n )}\n\n {canDownload && (\n <ClickyDownloadMenu\n url={url}\n formats={downloadFormats}\n label={download?.label}\n />\n )}\n </div>\n </div>\n )}\n\n {activeView === \"pdf\" ? (\n <ClickyPdfPreview src={formattedUrl} />\n ) : activeView === \"html\" ? (\n <ClickyHtmlPreview src={formattedUrl} />\n ) : activeView === \"excel\" ? (\n <ClickyUnsupportedPreview\n title=\"Excel preview\"\n message=\"Excel output is available for download, but not inline preview.\"\n href={formattedUrl}\n />\n ) : activeView === \"clicky\" ? (\n activeQuery.isPending && effectiveClickyData === undefined ? (\n <ClickyNotice title=\"Loading Clicky\" message={loadingMessage} />\n ) : activeQuery.isError && effectiveClickyData === undefined ? (\n <ClickyNotice\n title=\"Clicky request failed\"\n message={\n activeQuery.error instanceof Error\n ? activeQuery.error.message\n : \"Request failed\"\n }\n tone=\"destructive\"\n />\n ) : (\n <>\n {activeQuery.isError && data !== undefined && (\n <ClickyNotice\n title=\"Remote refresh failed\"\n message=\"Showing the local fallback payload instead.\"\n tone=\"warning\"\n />\n )}\n <ClickyRuntimeContext.Provider\n value={{ ...runtime, tableMenuActions: combinedTableActions }}\n >\n <ClickyContent data={effectiveClickyData} />\n </ClickyRuntimeContext.Provider>\n </>\n )\n ) : activeView === \"json\" ? (\n activeQuery.isPending && effectiveJsonData === undefined ? (\n <ClickyNotice title=\"Loading JSON\" message={loadingMessage} />\n ) : activeQuery.isError && effectiveJsonData === undefined ? (\n <ClickyNotice\n title=\"JSON request failed\"\n message={\n activeQuery.error instanceof Error\n ? activeQuery.error.message\n : \"Request failed\"\n }\n tone=\"destructive\"\n />\n ) : (\n <>\n {activeQuery.isError && fallbackJsonData !== undefined && (\n <ClickyNotice\n title=\"Remote refresh failed\"\n message=\"Showing the local fallback payload instead.\"\n tone=\"warning\"\n />\n )}\n <ClickyJsonTree value={effectiveJsonData} />\n </>\n )\n ) : activeQuery.isPending ? (\n <ClickyNotice\n title={`Loading ${formatViewLabel(activeView)}`}\n message={loadingMessage}\n />\n ) : activeQuery.isError ? (\n <ClickyNotice\n title={`${formatViewLabel(activeView)} request failed`}\n message={\n activeQuery.error instanceof Error\n ? activeQuery.error.message\n : \"Request failed\"\n }\n tone=\"destructive\"\n />\n ) : (\n <ClickyRemotePreview format={activeView} response={activeQuery.data} />\n )}\n </div>\n );\n}\n\nfunction ClickyViewMenu({\n activeFormat,\n formats,\n onSelect,\n}: {\n activeFormat: ClickyOverflowViewFormat | null;\n formats: ClickyOverflowViewFormat[];\n onSelect: (format: ClickyRemoteFormat) => void;\n}) {\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState(false);\n\n useDismissablePopup(open, rootRef, triggerRef, () => setOpen(false));\n\n return (\n <div ref={rootRef} className=\"relative\">\n <button\n ref={triggerRef}\n type=\"button\"\n aria-label=\"Open additional view menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-pressed={activeFormat != null}\n className={cn(\n \"inline-flex h-[34px] w-[34px] items-center justify-center rounded-md border border-input bg-background text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n activeFormat && \"border-foreground/20 bg-accent text-foreground\",\n )}\n onClick={() => setOpen((current) => !current)}\n >\n <Icon icon={UiEllipsis} className=\"text-sm\" />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className=\"absolute left-0 top-[calc(100%+0.375rem)] z-50 min-w-[18rem] rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {formats.map((format) => {\n const active = format === activeFormat;\n const meta = getRemoteFormatMeta(format);\n return (\n <button\n key={format}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={cn(\n \"flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\",\n active && \"bg-accent/70\",\n )}\n onClick={() => {\n onSelect(format);\n setOpen(false);\n }}\n >\n <Icon\n icon={meta.icon}\n className={cn(\n \"mt-0.5 shrink-0 text-base\",\n meta.iconClassName ?? \"text-muted-foreground\",\n active && !meta.iconClassName && \"text-foreground\",\n )}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex items-center justify-between gap-3\">\n <span className=\"font-medium\">{meta.label}</span>\n {active && (\n <Icon\n icon={UiCheck}\n className=\"text-xs text-muted-foreground\"\n />\n )}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {meta.description}\n </span>\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\nfunction ClickyDownloadMenu({\n url,\n formats,\n label,\n}: {\n url: string;\n formats: ClickyRemoteFormat[];\n label?: string | undefined;\n}) {\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState(false);\n const primaryFormat: ClickyRemoteFormat = \"json\";\n const primaryMeta = getRemoteFormatMeta(primaryFormat);\n\n useDismissablePopup(open, rootRef, triggerRef, () => setOpen(false));\n\n return (\n <div ref={rootRef} className=\"relative\">\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n aria-label={\n label\n ? `Download ${primaryMeta.label} ${label}`\n : `Download ${primaryMeta.label}`\n }\n className=\"inline-flex items-center gap-2 rounded-md border border-input bg-background px-3 py-1.5 text-xs font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n onClick={() =>\n triggerDownload(buildDownloadUrl(url, primaryFormat, label))\n }\n >\n <Icon icon={UiCloudDownload} className=\"text-sm\" />\n <span>{`Download ${primaryMeta.label}`}</span>\n </button>\n <button\n ref={triggerRef}\n type=\"button\"\n aria-label=\"Open download menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className=\"inline-flex h-[34px] w-[34px] items-center justify-center rounded-md border border-input bg-background text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n onClick={() => setOpen((current) => !current)}\n >\n <Icon icon={open ? UiChevronUp : UiChevronDown} className=\"text-sm\" />\n </button>\n </div>\n\n {open && (\n <div\n role=\"menu\"\n className=\"absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[18rem] rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {formats.map((format) => {\n const meta = getRemoteFormatMeta(format);\n return (\n <button\n key={format}\n type=\"button\"\n role=\"menuitem\"\n className={cn(\n \"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\",\n )}\n onClick={() => {\n triggerDownload(buildDownloadUrl(url, format, label));\n setOpen(false);\n }}\n >\n <Icon\n icon={meta.icon}\n className={cn(\n \"shrink-0 text-sm\",\n meta.iconClassName ?? \"text-muted-foreground\",\n )}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"font-medium\">{meta.label}</span>\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\nfunction useDismissablePopup(\n open: boolean,\n rootRef: RefObject<HTMLElement | null>,\n triggerRef: RefObject<HTMLElement | null>,\n onClose: () => void,\n) {\n useEscapeLayer(open, () => {\n onClose();\n triggerRef.current?.focus();\n });\n\n useEffect(() => {\n if (!open) return;\n\n const onPointerDown = (event: MouseEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", onPointerDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n };\n }, [onClose, open, rootRef, triggerRef]);\n}\n\nfunction fetchRemoteFormat(\n url: string,\n format: ClickyRemoteFormat,\n): Promise<ClickyRemoteResponse> {\n return fetch(url, {\n headers: {\n Accept: getRemoteFormatMeta(format).accept,\n },\n }).then(async (response) => {\n if (!response.ok) {\n throw new Error(\n `Request failed with ${response.status} ${response.statusText}`.trim(),\n );\n }\n\n const contentType = response.headers.get(\"Content-Type\") ?? \"\";\n\n if (format === \"excel\") {\n return {\n kind: \"blob\",\n blob: await response.blob(),\n contentType,\n };\n }\n\n return {\n kind: \"text\",\n text: await response.text(),\n contentType,\n };\n });\n}\n\nfunction ClickyInvalidPayload({\n parsed,\n className,\n}: {\n parsed: Extract<ParsedClicky, { ok: false }>;\n className?: string | undefined;\n}) {\n return (\n <div\n className={cn(\n \"rounded-md border border-destructive/30 bg-destructive/5 p-density-3\",\n className,\n )}\n >\n <div className=\"text-sm font-medium text-destructive\">\n Invalid Clicky payload\n </div>\n <pre className=\"mt-2 whitespace-pre-wrap break-all text-xs text-muted-foreground\">\n {parsed.message}\n {parsed.raw ? `\\n\\n${parsed.raw}` : \"\"}\n </pre>\n </div>\n );\n}\n\nfunction ClickyNotice({\n title,\n message,\n tone = \"default\",\n className,\n}: {\n title: string;\n message: ReactNode;\n tone?: \"default\" | \"warning\" | \"destructive\";\n className?: string | undefined;\n}) {\n return (\n <div\n className={cn(\n \"rounded-md border p-density-3\",\n tone === \"destructive\" && \"border-destructive/30 bg-destructive/5\",\n tone === \"warning\" && \"border-yellow-500/30 bg-yellow-500/5\",\n tone === \"default\" && \"border-border bg-muted/30\",\n className,\n )}\n >\n <div\n className={cn(\n \"text-sm font-medium\",\n tone === \"destructive\" && \"text-destructive\",\n tone === \"warning\" && \"text-yellow-700 dark:text-yellow-400\",\n )}\n >\n {title}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">{message}</div>\n </div>\n );\n}\n\nfunction ClickyPdfPreview({ src }: { src: string }) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-background\">\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2 text-xs text-muted-foreground\">\n <span>PDF preview</span>\n <a\n href={src}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-primary hover:underline\"\n >\n Open in new tab\n </a>\n </div>\n <iframe\n title=\"Clicky PDF preview\"\n src={src}\n className=\"h-[720px] w-full bg-background\"\n />\n </div>\n );\n}\n\nfunction ClickyHtmlPreview({ src }: { src: string }) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-background\">\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2 text-xs text-muted-foreground\">\n <span>HTML preview</span>\n <a\n href={src}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-primary hover:underline\"\n >\n Open in new tab\n </a>\n </div>\n <iframe\n title=\"Clicky HTML preview\"\n src={src}\n className=\"h-[720px] w-full bg-background\"\n sandbox=\"allow-same-origin\"\n />\n </div>\n );\n}\n\nfunction ClickyUnsupportedPreview({\n title,\n message,\n href,\n}: {\n title: string;\n message: string;\n href: string;\n}) {\n return (\n <ClickyNotice\n title={title}\n message={\n <>\n <span>{message} </span>\n <a\n href={href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-primary hover:underline\"\n >\n Open format\n </a>\n </>\n }\n />\n );\n}\n\nfunction ClickyRemotePreview({\n format,\n response,\n}: {\n format: ClickyOverflowViewFormat;\n response: ClickyRemoteResponse | undefined;\n}) {\n const meta = getRemoteFormatMeta(format);\n\n if (format === \"slack\") {\n const parsed =\n response?.kind === \"text\" ? parseJsonValue(response.text) : undefined;\n return <ClickyJsonTree value={parsed} emptyLabel={meta.label} />;\n }\n\n return (\n <ClickyTextPreview\n title={`${meta.label} output`}\n content={response?.kind === \"text\" ? response.text : \"\"}\n />\n );\n}\n\nfunction ClickyTextPreview({\n title,\n content,\n}: {\n title: string;\n content: string;\n}) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-background\">\n <div className=\"border-b border-border px-3 py-2 text-xs text-muted-foreground\">\n {title}\n </div>\n <pre\n aria-label=\"Clicky text preview\"\n className=\"overflow-auto whitespace-pre-wrap break-words px-3 py-3 font-mono text-xs text-foreground\"\n >\n {content || \"No content\"}\n </pre>\n </div>\n );\n}\n\nfunction ClickyJsonTree({\n value,\n emptyLabel = \"JSON\",\n}: {\n value: unknown;\n emptyLabel?: string;\n}) {\n const roots = useMemo(() => buildJsonTree(value), [value]);\n\n if (value === undefined) {\n return (\n <ClickyNotice\n title={`No ${emptyLabel} payload`}\n message=\"The response did not include a JSON body to inspect.\"\n />\n );\n }\n\n return (\n <div\n aria-label=\"JSON tree\"\n className=\"overflow-hidden rounded-md border border-border bg-background\"\n >\n <Tree<JsonTreeNode>\n roots={roots}\n className=\"min-h-[12rem]\"\n showControls={roots.some((node) => (node.children?.length ?? 0) > 0)}\n getKey={(node) => node.id}\n getChildren={(node) => node.children}\n renderRow={({ node }) => <ClickyJsonTreeRow node={node} />}\n rowClass={() => \"hover:bg-accent\"}\n empty={\n <div className=\"px-3 py-4 text-sm text-muted-foreground\">\n No JSON fields.\n </div>\n }\n toolbarClassName=\"pl-3\"\n />\n </div>\n );\n}\n\nfunction ClickyJsonTreeRow({ node }: { node: JsonTreeNode }) {\n const primitiveClass =\n typeof node.value === \"string\"\n ? \"text-emerald-700 dark:text-emerald-400\"\n : typeof node.value === \"number\"\n ? \"text-sky-700 dark:text-sky-400\"\n : typeof node.value === \"boolean\" || node.value === null\n ? \"text-violet-700 dark:text-violet-400\"\n : \"text-muted-foreground\";\n\n return (\n <div className=\"flex min-w-0 items-start gap-2 font-mono text-xs\">\n <span className=\"shrink-0 text-foreground\">{node.key}</span>\n <span className=\"shrink-0 text-muted-foreground\">:</span>\n <span className={cn(\"min-w-0 break-words\", primitiveClass)}>\n {node.preview}\n </span>\n </div>\n );\n}\n\nfunction getAvailableViews({\n data,\n url,\n view,\n}: {\n data: ClickyProps[\"data\"] | undefined;\n url?: string | undefined;\n view?: ClickyViewConfig | undefined;\n}): ClickyRemoteFormat[] {\n const allowClicky = resolveViewConfigFlag(view, \"clicky\", data, url);\n const allowJson = resolveViewConfigFlag(view, \"json\", data, url);\n const next: ClickyRemoteFormat[] = [];\n\n if (allowClicky && (url || data !== undefined)) {\n next.push(\"clicky\");\n }\n\n if (allowJson && (url || data !== undefined)) {\n next.push(\"json\");\n }\n\n for (const format of CLICKY_OVERFLOW_VIEW_FORMATS) {\n if (resolveViewConfigFlag(view, format, data, url) && url) {\n next.push(format);\n }\n }\n\n if (next.length === 0 && (url || data !== undefined)) {\n next.push(\"clicky\");\n }\n\n return next;\n}\n\nfunction getDownloadFormats({\n url,\n download,\n}: {\n url?: string | undefined;\n download?: ClickyDownloadOptions | undefined;\n}): ClickyRemoteFormat[] {\n const enabled = download ? (download.all ?? true) : !!url;\n\n if (!enabled || !url) {\n return [];\n }\n\n return [...CLICKY_DOWNLOAD_FORMATS];\n}\n\nfunction getDownloadMenuActions({\n url,\n download,\n}: {\n url?: string | undefined;\n download?: ClickyDownloadOptions | undefined;\n}): DataTableMenuAction[] {\n const formats = getDownloadFormats({ url, download });\n if (!url || formats.length === 0) return [];\n\n return formats.map((format) => {\n const meta = getRemoteFormatMeta(format);\n return {\n id: `download-${format}`,\n label: meta.label,\n icon: meta.icon,\n ...(meta.iconClassName ? { iconClassName: meta.iconClassName } : {}),\n onSelect: () =>\n triggerDownload(buildDownloadUrl(url, format, download?.label)),\n };\n });\n}\n\nfunction getRemoteFormatMeta(format: ClickyRemoteFormat): {\n label: string;\n description: string;\n icon: StaticIconComponent;\n iconClassName?: string;\n accept: string;\n} {\n switch (format) {\n case \"clicky\":\n return {\n label: \"Clicky\",\n description: \"Rendered Clicky JSON with the rich Clicky viewer\",\n icon: UiEye,\n accept:\n \"application/json+clicky, application/clicky+json;q=0.9, application/json;q=0.8,*/*;q=0.7\",\n };\n case \"json\":\n return {\n label: \"JSON\",\n description: \"Plain JSON for inspecting the raw response body\",\n icon: UiJson,\n accept: \"application/json, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"pdf\":\n return {\n label: \"PDF\",\n description: \"Portable document for sharing and printing\",\n icon: UiFileText,\n iconClassName: \"text-rose-600 dark:text-rose-400\",\n accept: \"application/pdf, */*;q=0.7\",\n };\n case \"html\":\n return {\n label: \"HTML\",\n description: \"Browser-ready HTML preview of the formatted output\",\n icon: UiFileCode,\n accept: \"text/html, */*;q=0.7\",\n };\n case \"markdown\":\n return {\n label: \"Markdown\",\n description: \"Markdown formatted for docs, comments, and chat\",\n icon: UiMarkdown,\n accept: \"text/markdown, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"yaml\":\n return {\n label: \"YAML\",\n description: \"YAML for config-friendly inspection and export\",\n icon: UiFileCode,\n iconClassName: \"text-violet-600 dark:text-violet-400\",\n accept: \"application/yaml, text/yaml;q=0.9, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"csv\":\n return {\n label: \"CSV\",\n description: \"Comma-separated values for spreadsheets and imports\",\n icon: UiFileSpreadsheet,\n iconClassName: \"text-emerald-600 dark:text-emerald-400\",\n accept: \"text/csv, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"pretty\":\n return {\n label: \"Pretty\",\n description: \"Human-readable plain text output from the formatter\",\n icon: UiFileCode,\n accept: \"text/plain, */*;q=0.7\",\n };\n case \"excel\":\n return {\n label: \"Excel\",\n description: \"Spreadsheet workbook for offline analysis\",\n icon: UiTable,\n accept:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, */*;q=0.7\",\n };\n case \"slack\":\n return {\n label: \"Slack\",\n description: \"Slack Block Kit JSON for chat-native output\",\n icon: UiComment,\n accept:\n \"application/vnd.slack.block-kit+json, application/json;q=0.8,*/*;q=0.7\",\n };\n }\n}\n\nfunction formatViewLabel(mode: ClickyRemoteFormat) {\n return getRemoteFormatMeta(mode).label;\n}\n\nfunction buildFormatUrl(url: string, format: ClickyRemoteFormat) {\n const base =\n typeof window === \"undefined\" ? \"http://localhost\" : window.location.origin;\n const resolved = new URL(url, base);\n resolved.searchParams.set(\n \"format\",\n format === \"clicky\" ? \"clicky-json\" : format,\n );\n\n if (isAbsoluteUrl(url)) {\n return resolved.toString();\n }\n\n return `${resolved.pathname}${resolved.search}${resolved.hash}`;\n}\n\nfunction buildDownloadUrl(\n url: string,\n format: ClickyRemoteFormat,\n label?: string | undefined,\n) {\n const formatted = buildFormatUrl(url, format);\n const base =\n typeof window === \"undefined\" ? \"http://localhost\" : window.location.origin;\n const resolved = new URL(formatted, base);\n resolved.searchParams.set(\"filename\", downloadFilename(url, format, label));\n resolved.searchParams.set(\"_download\", Date.now().toString());\n\n if (isAbsoluteUrl(formatted)) {\n return resolved.toString();\n }\n\n return `${resolved.pathname}${resolved.search}${resolved.hash}`;\n}\n\nfunction downloadFilename(\n url: string,\n format: ClickyRemoteFormat,\n label?: string | undefined,\n) {\n const stem = sanitizeFilenameStem(\n label || filenameStemFromUrl(url) || \"clicky-output\",\n );\n return `${stem}${downloadExtension(format)}`;\n}\n\nfunction filenameStemFromUrl(url: string) {\n const base =\n typeof window === \"undefined\" ? \"http://localhost\" : window.location.origin;\n const resolved = new URL(url, base);\n const segment = resolved.pathname.split(\"/\").filter(Boolean).at(-1);\n return segment ?? \"\";\n}\n\nfunction sanitizeFilenameStem(value: string) {\n const cleaned = value\n .trim()\n .replace(/\\.[a-z0-9]+$/i, \"\")\n .replace(/[^a-z0-9._-]+/gi, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^[._-]+|[._-]+$/g, \"\");\n\n return cleaned || \"clicky-output\";\n}\n\nfunction downloadExtension(format: ClickyRemoteFormat) {\n switch (format) {\n case \"clicky\":\n return \".clicky.json\";\n case \"json\":\n return \".json\";\n case \"pdf\":\n return \".pdf\";\n case \"html\":\n return \".html\";\n case \"markdown\":\n return \".md\";\n case \"yaml\":\n return \".yaml\";\n case \"csv\":\n return \".csv\";\n case \"pretty\":\n return \".txt\";\n case \"excel\":\n return \".xlsx\";\n case \"slack\":\n return \".slack.json\";\n }\n}\n\nfunction shouldFetchRemoteView(format: ClickyRemoteFormat) {\n return format !== \"pdf\" && format !== \"html\" && format !== \"excel\";\n}\n\nfunction isPrimaryViewFormat(\n format: ClickyRemoteFormat,\n): format is ClickyPrimaryViewFormat {\n return (CLICKY_PRIMARY_VIEW_FORMATS as readonly string[]).includes(format);\n}\n\nfunction isOverflowViewFormat(\n format: ClickyRemoteFormat,\n): format is ClickyOverflowViewFormat {\n return (CLICKY_OVERFLOW_VIEW_FORMATS as readonly string[]).includes(format);\n}\n\nfunction resolveViewConfigFlag(\n view: ClickyViewConfig | undefined,\n format: ClickyRemoteFormat,\n data: ClickyProps[\"data\"],\n url?: string,\n) {\n const defaultEnabled =\n format === \"clicky\" || format === \"json\"\n ? url != null || data !== undefined\n : !!url;\n\n if (view === undefined) {\n return defaultEnabled;\n }\n\n if (Array.isArray(view)) {\n if (view.length === 0) {\n return false;\n }\n\n if (format === \"clicky\") {\n return view.includes(\"clicky\") || view.includes(\"json\");\n }\n\n return view.includes(format);\n }\n\n if (format in view) {\n return Boolean(view[format]);\n }\n\n if (format === \"clicky\" && view.json === true) {\n return true;\n }\n\n return defaultEnabled;\n}\n\nfunction parseJsonValue(data: ClickyProps[\"data\"]): unknown {\n if (data === undefined) {\n return undefined;\n }\n\n if (typeof data !== \"string\") {\n return data;\n }\n\n const trimmed = data.trim();\n if (!trimmed) {\n return \"\";\n }\n\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return data;\n }\n}\n\nfunction clickyPayloadHasTable(data: ClickyProps[\"data\"] | undefined) {\n if (data === undefined) return false;\n const parsed = parseClickyData(data);\n return parsed.ok ? clickyNodeHasTable(parsed.document.node) : false;\n}\n\nfunction clickyNodeHasTable(node: ClickyNode | undefined): boolean {\n if (!node) return false;\n if (node.kind === \"table\") return true;\n if (node.children?.some(clickyNodeHasTable)) return true;\n if (node.items?.some(clickyNodeHasTable)) return true;\n if (node.fields?.some((field) => clickyNodeHasTable(field.value)))\n return true;\n if (node.label && clickyNodeHasTable(node.label)) return true;\n if (node.content && clickyNodeHasTable(node.content)) return true;\n if (node.tooltip && clickyNodeHasTable(node.tooltip)) return true;\n if (\n node.columns?.some(\n (column) => column.header && clickyNodeHasTable(column.header),\n )\n )\n return true;\n if (\n node.rows?.some((row) =>\n Object.values(row.cells).some((cell) => clickyNodeHasTable(cell)),\n )\n )\n return true;\n if (node.rows?.some((row) => row.detail && clickyNodeHasTable(row.detail)))\n return true;\n return false;\n}\n\nfunction buildJsonTree(value: unknown): JsonTreeNode[] {\n if (Array.isArray(value)) {\n return value.map((entry, index) =>\n buildJsonTreeNode(String(index), entry, `$[${index}]`),\n );\n }\n\n if (isPlainObject(value)) {\n return Object.entries(value).map(([key, entry]) =>\n buildJsonTreeNode(key, entry, `$.${key}`),\n );\n }\n\n if (value === undefined) {\n return [];\n }\n\n return [buildJsonTreeNode(\"$\", value, \"$\")];\n}\n\nfunction buildJsonTreeNode(\n key: string,\n value: unknown,\n id: string,\n): JsonTreeNode {\n const children = getJsonChildren(value, id);\n return {\n id,\n key,\n value,\n preview: summarizeJsonValue(value),\n ...(children ? { children } : {}),\n };\n}\n\nfunction getJsonChildren(value: unknown, path: string) {\n if (Array.isArray(value)) {\n return value.map((entry, index) =>\n buildJsonTreeNode(String(index), entry, `${path}[${index}]`),\n );\n }\n\n if (isPlainObject(value)) {\n return Object.entries(value).map(([key, entry]) =>\n buildJsonTreeNode(key, entry, `${path}.${key}`),\n );\n }\n\n return undefined;\n}\n\nfunction summarizeJsonValue(value: unknown) {\n if (Array.isArray(value)) {\n return `[${value.length} item${value.length === 1 ? \"\" : \"s\"}]`;\n }\n\n if (isPlainObject(value)) {\n const count = Object.keys(value).length;\n return `{${count} key${count === 1 ? \"\" : \"s\"}}`;\n }\n\n if (typeof value === \"string\") {\n return JSON.stringify(value);\n }\n\n if (value === undefined) {\n return \"undefined\";\n }\n\n return String(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nconst CLICKY_DOWNLOAD_FRAME_ID = \"clicky-download-frame\";\n\nfunction triggerDownload(url: string) {\n if (typeof document === \"undefined\") return;\n\n let frame = document.getElementById(\n CLICKY_DOWNLOAD_FRAME_ID,\n ) as HTMLIFrameElement | null;\n if (!frame) {\n frame = document.createElement(\"iframe\");\n frame.id = CLICKY_DOWNLOAD_FRAME_ID;\n frame.name = CLICKY_DOWNLOAD_FRAME_ID;\n frame.title = \"Clicky download target\";\n frame.setAttribute(\"aria-hidden\", \"true\");\n frame.tabIndex = -1;\n frame.style.display = \"none\";\n document.body.appendChild(frame);\n }\n\n frame.src = url;\n}\n\nfunction isAbsoluteUrl(url: string) {\n return /^[a-z][a-z\\d+\\-.]*:/i.test(url) || url.startsWith(\"//\");\n}\n\nfunction ClickyNodeRenderer({ node }: ClickyNodeViewProps) {\n if (!node) return null;\n\n switch (node.kind) {\n case \"text\":\n return <ClickyText node={node} />;\n case \"link\":\n return <ClickyLinkNode node={node} />;\n case \"link-command\":\n return <ClickyLinkCommandNode node={node} />;\n case \"icon\":\n return <ClickyIconNode node={node} />;\n case \"list\":\n return <ClickyList node={node} />;\n case \"map\":\n return <ClickyMap node={node} />;\n case \"table\":\n return <ClickyTableNode node={node} />;\n case \"tree\":\n return <ClickyTreeNode node={node} />;\n case \"object-graph\":\n return <ObjectGraph roots={node.objects ?? []} />;\n case \"execution-tree\":\n return <ExecutionTree roots={node.executionRoots ?? []} />;\n case \"code\":\n return (\n <CodeBlock\n language={node.language}\n source={node.source ?? node.plain ?? \"\"}\n highlightedHtml={node.highlightedHtml}\n />\n );\n case \"heading\":\n return <ClickyHeading node={node} />;\n case \"blockquote\":\n return <ClickyBlockquote node={node} />;\n case \"admonition\":\n return <ClickyAdmonition node={node} />;\n case \"footnote-ref\":\n return <ClickyFootnoteRef node={node} />;\n case \"footnote\":\n return <ClickyFootnote node={node} />;\n case \"footnotes\":\n return <ClickyFootnotes node={node} />;\n case \"collapsed\":\n return <ClickyCollapsed node={node} />;\n case \"stacktrace\":\n return <ClickyStackTraceNode node={node} />;\n case \"button\":\n return <ClickyButtonNode node={node} />;\n case \"button-group\":\n return <ClickyButtonGroup node={node} />;\n case \"html\":\n return <ClickyHtmlNode node={node} />;\n case \"comment\":\n return <ClickyComment node={node} />;\n case \"badge\":\n return <ClickyBadgeNode node={node} />;\n default:\n return (\n <pre className=\"rounded-md border border-border bg-muted p-density-3 text-xs\">\n {JSON.stringify(node, null, 2)}\n </pre>\n );\n }\n}\n\nexport { ClickyNodeRenderer as ClickyNodeView };\n\nfunction ClickyComment({ node }: { node: ClickyNode }) {\n const text = node.text ?? node.plain;\n const content = <ClickyInlineContent node={node} />;\n const maxWidth =\n node.style?.maxWidth && node.style.maxWidth > 0\n ? Math.min(node.style.maxWidth, 50)\n : 50;\n const maxLines =\n node.style?.maxLines && node.style.maxLines > 0\n ? Math.min(node.style.maxLines, 3)\n : 3;\n const inlineStyle = toInlineStyle(\n {\n ...node.style,\n maxWidth,\n maxLines,\n },\n text,\n );\n\n if (!text && !node.children?.length) return null;\n\n return (\n <div\n className={cn(\n \"mt-1 text-xs leading-snug text-muted-foreground\",\n node.style?.className,\n )}\n style={inlineStyle}\n title={node.tooltip?.plain ?? text}\n >\n {content}\n </div>\n );\n}\n\nfunction ClickyText({ node }: { node: ClickyNode }) {\n const inlineStyle = toInlineStyle(node.style, node.text ?? node.plain);\n const content = <ClickyInlineContent node={node} />;\n\n if (!node.style && !node.tooltip) {\n return <>{content}</>;\n }\n\n return (\n <span\n style={inlineStyle}\n title={node.tooltip?.plain}\n className={cn(\n node.style?.className,\n (node.text ?? \"\").includes(\"\\n\") && \"whitespace-pre-wrap\",\n )}\n >\n {content}\n </span>\n );\n}\n\nfunction ClickyInlineContent({ node }: { node: ClickyNode }) {\n return (\n <>\n {node.text}\n {node.children?.map((child, index) => (\n <Fragment key={index}>\n <ClickyNodeRenderer node={child} />\n </Fragment>\n ))}\n </>\n );\n}\n\nfunction ClickyLinkNode({ node }: { node: ClickyNode }) {\n const content = <ClickyInlineContent node={node} />;\n const inlineStyle = toInlineStyle(node.style, node.text ?? node.plain);\n const target = browserAnchorTarget(node.target);\n const rel = target === \"_blank\" ? \"noopener noreferrer\" : undefined;\n\n if (!node.href) {\n return <span style={inlineStyle}>{content}</span>;\n }\n\n return (\n <a\n href={node.href}\n target={target}\n rel={rel}\n title={node.tooltip?.plain}\n style={inlineStyle}\n className={cn(node.style?.className, \"inline cursor-pointer\")}\n >\n {content}\n </a>\n );\n}\n\nfunction ClickyLinkCommandNode({ node }: { node: ClickyNode }) {\n const runtime = useContext(ClickyRuntimeContext);\n const request = useMemo(() => clickyNodeToCommandRequest(node), [node]);\n const resolved = useMemo(\n () =>\n resolveClickyCommand(request, runtime.commandRuntime, runtime.operations),\n [request, runtime.commandRuntime, runtime.operations],\n );\n const target = request.target ?? \"Dialog\";\n const hasRuntime = runtime.commandRuntime != null;\n const [dialogOpen, setDialogOpen] = useState(false);\n const [expanded, setExpanded] = useState(false);\n\n if (!hasRuntime) {\n return (\n <span title={node.tooltip?.plain} className={cn(node.style?.className)}>\n <ClickyInlineContent node={node} />\n </span>\n );\n }\n\n if (target === \"_self\" || target === \"_window\" || target === \"_tab\") {\n const href =\n runtime.commandRuntime?.hrefForCommand?.(resolved) ??\n buildCommandExecutionHref(resolved);\n\n if (!href) {\n return (\n <span title={node.tooltip?.plain} className={cn(node.style?.className)}>\n <ClickyInlineContent node={node} />\n </span>\n );\n }\n\n return (\n <a\n href={href}\n target={browserAnchorTarget(target)}\n rel={target === \"_self\" ? undefined : \"noopener noreferrer\"}\n title={node.tooltip?.plain}\n style={toInlineStyle(node.style, node.text ?? node.plain)}\n className={cn(node.style?.className, \"inline cursor-pointer\")}\n >\n <ClickyInlineContent node={node} />\n </a>\n );\n }\n\n if (target === \"_clicky\") {\n return (\n <ClickyLinkCommandTrigger\n node={node}\n onClick={() => runtime.commandRuntime?.onNavigate?.(resolved)}\n />\n );\n }\n\n if (target === \"Hover\") {\n return (\n <HoverCard\n delay={75}\n cardClassName=\"w-[28rem] max-w-[calc(100vw-2rem)] whitespace-normal p-0\"\n trigger={<ClickyLinkCommandTrigger node={node} />}\n >\n <div className=\"max-h-[26rem] overflow-auto p-density-3\">\n <ClickyAsyncCommandResult resolved={resolved} />\n </div>\n </HoverCard>\n );\n }\n\n if (target === \"Expand\") {\n return (\n <span className=\"inline\">\n <ClickyLinkCommandTrigger\n node={node}\n ariaExpanded={expanded}\n onClick={() => setExpanded((current) => !current)}\n />\n {expanded && (\n <div className=\"mt-2 rounded-md border border-border bg-background p-density-3\">\n <ClickyAsyncCommandResult resolved={resolved} />\n </div>\n )}\n </span>\n );\n }\n\n return (\n <>\n <ClickyLinkCommandTrigger\n node={node}\n ariaExpanded={dialogOpen}\n onClick={() => setDialogOpen(true)}\n />\n <ClickyCommandDialog\n open={dialogOpen}\n onClose={() => setDialogOpen(false)}\n resolved={resolved}\n />\n </>\n );\n}\n\nfunction ClickyLinkCommandTrigger({\n node,\n onClick,\n ariaExpanded,\n}: {\n node: ClickyNode;\n onClick?: () => void;\n ariaExpanded?: boolean;\n}) {\n const inlineStyle = toInlineStyle(node.style, node.text ?? node.plain);\n\n const handleClick = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n onClick?.();\n };\n\n return (\n <button\n type=\"button\"\n title={node.tooltip?.plain}\n aria-expanded={ariaExpanded}\n onClick={handleClick}\n style={inlineStyle}\n className={cn(\n \"inline cursor-pointer appearance-none border-0 bg-transparent p-0 text-left align-baseline text-inherit\",\n node.style?.className,\n )}\n >\n <ClickyInlineContent node={node} />\n </button>\n );\n}\n\nfunction ClickyCommandDialog({\n open,\n onClose,\n resolved,\n}: {\n open: boolean;\n onClose: () => void;\n resolved: ClickyResolvedCommand;\n}) {\n const runtime = useContext(ClickyRuntimeContext);\n const operation = resolved.operation;\n const parameters = operation?.operation.parameters ?? [];\n const initialValues = useMemo(\n () => buildCommandParameterValues(parameters, resolved.request),\n [parameters, resolved.request],\n );\n const [result, setResult] = useState<unknown>(null);\n const [error, setError] = useState(\"\");\n const [isExecuting, setIsExecuting] = useState(false);\n const [hasAutoStarted, setHasAutoStarted] = useState(false);\n const shouldAutoRun =\n open &&\n resolved.request.autoRun === true &&\n operation != null &&\n missingRequiredParameters(parameters, initialValues).length === 0;\n\n useEffect(() => {\n if (!open) {\n setHasAutoStarted(false);\n setResult(null);\n setError(\"\");\n }\n }, [open, resolved.request.command]);\n\n async function runCommand(values: ParameterValues) {\n if (!runtime.commandRuntime || !operation) {\n return;\n }\n\n setIsExecuting(true);\n setError(\"\");\n\n try {\n const response = await executeClickyCommand(\n runtime.commandRuntime.client,\n operation,\n values,\n );\n setResult(response);\n } catch (err) {\n setResult(null);\n setError(\n err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n );\n } finally {\n setIsExecuting(false);\n }\n }\n\n useEffect(() => {\n if (!shouldAutoRun || hasAutoStarted) {\n return;\n }\n\n setHasAutoStarted(true);\n void runCommand(initialValues);\n }, [hasAutoStarted, initialValues, shouldAutoRun]);\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={operation?.operation.summary || resolved.request.command}\n size=\"xl\"\n >\n <div className=\"space-y-4\">\n {operation ? (\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-muted-foreground\">\n <span className=\"rounded-md border border-border bg-muted px-2 py-1 font-medium uppercase\">\n {operation.method}\n </span>\n <code>{operation.path}</code>\n </div>\n ) : runtime.operationsLoading ? (\n <ClickyNotice\n title=\"Loading commands\"\n message=\"Resolving the command definition.\"\n />\n ) : (\n <ClickyNotice\n title=\"Unknown command\"\n message={`No operation matched \"${resolved.request.command}\".`}\n tone=\"destructive\"\n />\n )}\n\n {operation && (\n <div className=\"rounded-md border border-border bg-muted/20 p-density-3\">\n <FilterForm\n client={runtime.commandRuntime!.client}\n path={operation.path}\n method={operation.method}\n parameters={parameters}\n initialValues={initialValues}\n isSubmitting={isExecuting}\n submitLabel=\"Run command\"\n submittingLabel=\"Running…\"\n onSubmit={runCommand}\n />\n </div>\n )}\n\n {error ? (\n <ClickyNotice\n title=\"Command failed\"\n message={error}\n tone=\"destructive\"\n />\n ) : (\n <ClickyCommandResponse\n response={result}\n pending={isExecuting}\n emptyMessage=\"Run the command to load a Clicky response.\"\n />\n )}\n </div>\n </Modal>\n );\n}\n\nfunction ClickyAsyncCommandResult({\n resolved,\n}: {\n resolved: ClickyResolvedCommand;\n}) {\n const runtime = useContext(ClickyRuntimeContext);\n const operation = resolved.operation;\n const parameters = operation?.operation.parameters ?? [];\n const initialValues = useMemo(\n () => buildCommandParameterValues(parameters, resolved.request),\n [parameters, resolved.request],\n );\n const missing = useMemo(\n () => missingRequiredParameters(parameters, initialValues),\n [initialValues, parameters],\n );\n\n const query = useQuery({\n queryKey: [\n \"clicky-command\",\n resolved.request.command,\n operation?.method,\n operation?.path,\n initialValues,\n ],\n enabled:\n runtime.commandRuntime != null &&\n operation != null &&\n missing.length === 0,\n retry: 0,\n queryFn: async () =>\n executeClickyCommand(\n runtime.commandRuntime!.client,\n operation!,\n initialValues,\n ),\n });\n\n if (!runtime.commandRuntime) {\n return (\n <ClickyNotice\n title=\"Command runtime unavailable\"\n message=\"This Clicky view was rendered without a command runtime.\"\n tone=\"warning\"\n />\n );\n }\n\n if (!operation) {\n if (runtime.operationsLoading) {\n return (\n <ClickyNotice\n title=\"Loading commands\"\n message=\"Resolving the command definition.\"\n />\n );\n }\n return (\n <ClickyNotice\n title=\"Unknown command\"\n message={`No operation matched \"${resolved.request.command}\".`}\n tone=\"destructive\"\n />\n );\n }\n\n if (missing.length > 0) {\n return (\n <ClickyNotice\n title=\"Missing required parameters\"\n message={`This link is missing: ${missing.map((param) => prettifyName(param.name)).join(\", \")}.`}\n tone=\"warning\"\n />\n );\n }\n\n if (query.isPending) {\n return (\n <ClickyNotice\n title=\"Running command\"\n message=\"Loading Clicky response…\"\n />\n );\n }\n\n if (query.isError) {\n return (\n <ClickyNotice\n title=\"Command failed\"\n message={\n query.error instanceof Error ? query.error.message : \"Request failed\"\n }\n tone=\"destructive\"\n />\n );\n }\n\n return (\n <ClickyCommandResponse\n response={query.data}\n emptyMessage=\"No response body returned.\"\n />\n );\n}\n\nfunction ClickyCommandResponse({\n response,\n pending = false,\n emptyMessage,\n}: {\n response: unknown;\n pending?: boolean;\n emptyMessage: string;\n}) {\n if (pending) {\n return (\n <ClickyNotice\n title=\"Running command\"\n message=\"Loading Clicky response…\"\n />\n );\n }\n\n if (!response) {\n return <ClickyNotice title=\"No response\" message={emptyMessage} />;\n }\n\n const parsedPayload = isExecutionResponse(response)\n ? (response.parsed ?? parseJsonBody(response))\n : response;\n const rawText = isExecutionResponse(response)\n ? response.stdout || response.output || response.message || \"\"\n : typeof response === \"string\"\n ? response\n : JSON.stringify(response, null, 2);\n const clickyPayload =\n typeof parsedPayload === \"string\" ||\n (parsedPayload != null && typeof parsedPayload === \"object\")\n ? parsedPayload\n : rawText;\n const parsedClicky =\n clickyPayload === \"\"\n ? null\n : parseClickyData(clickyPayload as ClickyProps[\"data\"]);\n\n if (parsedClicky?.ok) {\n return (\n <div className=\"rounded-md border border-border bg-background p-density-3\">\n <ClickyNodeRenderer node={parsedClicky.document.node} />\n </div>\n );\n }\n\n if (parsedPayload != null && typeof parsedPayload === \"object\") {\n return <ClickyJsonTree value={parsedPayload} />;\n }\n\n return <ClickyTextPreview title=\"Response body\" content={rawText} />;\n}\n\nfunction ClickyIconNode({ node }: { node: ClickyNode }) {\n const inlineStyle = toInlineStyle(node.style, node.plain ?? node.unicode);\n\n return (\n <span\n style={inlineStyle}\n title={node.tooltip?.plain}\n className=\"inline-flex items-center\"\n >\n {node.iconify ? (\n <Icon name={node.iconify} />\n ) : (\n <span>{node.unicode ?? node.plain}</span>\n )}\n </span>\n );\n}\n\nfunction ClickyHeading({ node }: { node: ClickyNode }) {\n const level = clampHeadingLevel(node.level);\n const content = node.content ?? clickyNodeFallbackText(node);\n const inlineStyle = toInlineStyle(node.style, clickyNodeText(content));\n const className = cn(\n headingClassName(level),\n \"text-foreground\",\n node.style?.className,\n );\n\n switch (level) {\n case 1:\n return (\n <h1 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h1>\n );\n case 2:\n return (\n <h2 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h2>\n );\n case 3:\n return (\n <h3 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h3>\n );\n case 4:\n return (\n <h4 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h4>\n );\n case 5:\n return (\n <h5 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h5>\n );\n default:\n return (\n <h6 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h6>\n );\n }\n}\n\nfunction clampHeadingLevel(level: number | undefined) {\n if (!Number.isFinite(level)) return 1;\n return Math.min(6, Math.max(1, Math.trunc(level ?? 1)));\n}\n\nfunction headingClassName(level: number) {\n switch (level) {\n case 1:\n return \"text-2xl font-semibold leading-tight\";\n case 2:\n return \"text-xl font-semibold leading-tight\";\n case 3:\n return \"text-lg font-semibold leading-snug\";\n case 4:\n return \"text-base font-semibold leading-snug\";\n case 5:\n return \"text-sm font-semibold leading-snug\";\n default:\n return \"text-xs font-semibold uppercase leading-snug text-muted-foreground\";\n }\n}\n\nfunction ClickyBlockquote({ node }: { node: ClickyNode }) {\n const content = node.content ?? clickyNodeFallbackText(node);\n if (!content) return null;\n\n return (\n <blockquote className=\"border-l-4 border-border pl-density-3 text-sm leading-relaxed text-muted-foreground\">\n <ClickyNodeRenderer node={content} />\n </blockquote>\n );\n}\n\nfunction ClickyAdmonition({ node }: { node: ClickyNode }) {\n const severity = normalizeAdmonitionSeverity(node.severity);\n const title = node.label ?? {\n kind: \"text\" as const,\n text: prettifyName(severity),\n plain: prettifyName(severity),\n };\n const tone = admonitionToneClassName(severity);\n\n return (\n <div\n role={severity === \"danger\" || severity === \"warning\" ? \"alert\" : \"note\"}\n data-severity={severity}\n className={cn(\n \"rounded-md border px-density-3 py-density-2\",\n tone.container,\n )}\n >\n <div className={cn(\"text-sm font-semibold\", tone.title)}>\n <ClickyNodeRenderer node={title} />\n </div>\n {node.content && (\n <div className={cn(\"mt-1 text-sm leading-relaxed\", tone.body)}>\n <ClickyNodeRenderer node={node.content} />\n </div>\n )}\n </div>\n );\n}\n\nfunction normalizeAdmonitionSeverity(severity: string | undefined) {\n const normalized = (severity ?? \"note\").trim().toLowerCase();\n if (\n normalized === \"info\" ||\n normalized === \"tip\" ||\n normalized === \"warning\" ||\n normalized === \"danger\" ||\n normalized === \"note\"\n ) {\n return normalized;\n }\n return \"note\";\n}\n\nfunction admonitionToneClassName(severity: string) {\n switch (severity) {\n case \"info\":\n return {\n container: \"border-sky-500/30 bg-sky-500/5\",\n title: \"text-sky-800 dark:text-sky-300\",\n body: \"text-sky-950/80 dark:text-sky-100/80\",\n };\n case \"tip\":\n return {\n container: \"border-emerald-500/30 bg-emerald-500/5\",\n title: \"text-emerald-800 dark:text-emerald-300\",\n body: \"text-emerald-950/80 dark:text-emerald-100/80\",\n };\n case \"warning\":\n return {\n container: \"border-yellow-500/40 bg-yellow-500/10\",\n title: \"text-yellow-800 dark:text-yellow-300\",\n body: \"text-yellow-950/80 dark:text-yellow-100/80\",\n };\n case \"danger\":\n return {\n container: \"border-destructive/40 bg-destructive/10\",\n title: \"text-destructive\",\n body: \"text-destructive/90\",\n };\n default:\n return {\n container: \"border-border bg-muted/30\",\n title: \"text-foreground\",\n body: \"text-muted-foreground\",\n };\n }\n}\n\nfunction ClickyFootnoteRef({ node }: { node: ClickyNode }) {\n const id = normalizeFootnoteId(node.id);\n if (!id) return null;\n\n return (\n <sup id={footnoteDomId(\"fnref\", id)} className=\"align-super text-[0.75em]\">\n <a\n href={`#${footnoteDomId(\"fn\", id)}`}\n aria-label={`Footnote ${id}`}\n className=\"text-primary hover:underline\"\n >\n {`[^${id}]`}\n </a>\n </sup>\n );\n}\n\nfunction ClickyFootnote({ node }: { node: ClickyNode }) {\n const id = normalizeFootnoteId(node.id);\n if (!id) return null;\n\n return (\n <div id={footnoteDomId(\"fn\", id)} className=\"text-sm text-muted-foreground\">\n <span className=\"mr-2 font-mono text-xs text-foreground\">{`[^${id}]`}</span>\n {node.content && <ClickyNodeRenderer node={node.content} />}\n <FootnoteBackLink id={id} />\n </div>\n );\n}\n\nfunction ClickyFootnotes({ node }: { node: ClickyNode }) {\n const items = (node.items ?? []).filter((item) =>\n normalizeFootnoteId(item.id),\n );\n if (items.length === 0) return null;\n\n return (\n <section\n aria-label=\"Footnotes\"\n className=\"border-t border-border pt-density-2 text-xs text-muted-foreground\"\n >\n <ol className=\"ml-5 list-decimal space-y-1\">\n {items.map((item, index) => (\n <li\n key={`${item.id}-${index}`}\n id={footnoteDomId(\"fn\", item.id ?? \"\")}\n >\n {item.content && <ClickyNodeRenderer node={item.content} />}\n <FootnoteBackLink id={item.id ?? \"\"} />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n\nfunction FootnoteBackLink({ id }: { id: string }) {\n return (\n <a\n href={`#${footnoteDomId(\"fnref\", id)}`}\n aria-label={`Back to footnote reference ${id}`}\n className=\"ml-2 text-primary hover:underline\"\n >\n back\n </a>\n );\n}\n\nfunction normalizeFootnoteId(id: string | undefined) {\n return (id ?? \"\").trim();\n}\n\nfunction footnoteDomId(prefix: \"fn\" | \"fnref\", id: string) {\n return `${prefix}-${encodeURIComponent(id)}`;\n}\n\nfunction clickyNodeFallbackText(node: ClickyNode): ClickyNode | undefined {\n const text = node.text ?? node.plain;\n return text ? { kind: \"text\", text, plain: text } : undefined;\n}\n\nfunction ClickyList({ node }: { node: ClickyNode }) {\n const items = node.items ?? [];\n if (items.length === 0) return null;\n\n if (node.inline) {\n return (\n <span className=\"inline-flex flex-wrap items-start gap-1\">\n {items.map((item, index) => (\n <Fragment key={index}>\n {index > 0 && <span className=\"text-muted-foreground\">,</span>}\n <span className=\"inline-flex items-center gap-1\">\n {!node.ordered && node.bullet && (\n <ClickyNodeRenderer node={node.bullet} />\n )}\n {node.ordered && (\n <span className=\"text-muted-foreground\">{index + 1}.</span>\n )}\n <ClickyNodeRenderer node={item} />\n </span>\n </Fragment>\n ))}\n </span>\n );\n }\n\n if (node.unstyled) {\n return (\n <div className=\"space-y-1\">\n {items.map((item, index) => (\n <div key={index} className=\"flex items-start gap-2\">\n {!node.ordered && node.bullet && (\n <ClickyNodeRenderer node={node.bullet} />\n )}\n {node.ordered && (\n <span className=\"text-muted-foreground\">{index + 1}.</span>\n )}\n <div className=\"min-w-0 flex-1\">\n <ClickyNodeRenderer node={item} />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n const Tag = node.ordered ? \"ol\" : \"ul\";\n const listClass = node.ordered ? \"list-decimal\" : \"list-disc\";\n\n return (\n <Tag className={cn(\"ml-5 space-y-1 text-sm\", listClass)}>\n {items.map((item, index) => (\n <li key={index}>\n <ClickyNodeRenderer node={item} />\n </li>\n ))}\n </Tag>\n );\n}\n\nfunction ClickyMap({ node }: { node: ClickyNode }) {\n const runtime = useContext(ClickyRuntimeContext);\n const fields = (node.fields ?? []).filter(\n (field) => !(runtime.tablePagination && isPaginationMetadataField(field)),\n );\n if (fields.length === 0) return null;\n\n const inlineFields = fields.filter((field) => isInlineNode(field.value));\n const blockFields = fields.filter((field) => !isInlineNode(field.value));\n\n return (\n <div className=\"space-y-density-4\">\n {inlineFields.length > 0 && (\n <dl className=\"grid gap-density-3 md:grid-cols-2\">\n {inlineFields.map((field) => (\n <div key={field.name}>\n <dt className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {field.label || prettifyName(field.name)}\n </dt>\n <dd className=\"mt-1 text-sm text-foreground\">\n <ClickyNodeRenderer node={field.value} />\n </dd>\n </div>\n ))}\n </dl>\n )}\n\n {blockFields.map((field) => (\n <section key={field.name} className=\"space-y-2\">\n <div className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {field.label || prettifyName(field.name)}\n </div>\n <div className=\"rounded-md border border-border bg-background p-density-3\">\n <ClickyNodeRenderer node={field.value} />\n </div>\n </section>\n ))}\n </div>\n );\n}\n\nfunction isPaginationMetadataField(field: ClickyField) {\n const name = (field.label || field.name || \"\").toLowerCase();\n if (name !== \"page\" || field.value.kind !== \"map\") return false;\n const keys = new Set(\n (field.value.fields ?? []).map((item) => item.name.toLowerCase()),\n );\n return keys.has(\"limit\") && keys.has(\"offset\") && keys.has(\"total\");\n}\n\nfunction ClickyTableNode({ node }: { node: ClickyNode }) {\n return (\n <ClickyTable\n columns={node.columns ?? []}\n rows={node.rows ?? []}\n {...(node.autoFilter !== undefined\n ? { autoFilter: node.autoFilter }\n : {})}\n />\n );\n}\n\nexport function ClickyTable({\n columns,\n rows,\n autoFilter,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n pagination,\n menuActions,\n}: ClickyTableProps) {\n const runtime = useContext(ClickyRuntimeContext);\n const rowClick = onTableRowClick ?? runtime.onTableRowClick;\n const rowHref = getTableRowHref ?? runtime.getTableRowHref;\n const rowClickable = isTableRowClickable ?? runtime.isTableRowClickable;\n const effectiveSearch = search ?? runtime.tableSearch;\n const effectiveTimeRange = timeRange ?? runtime.tableTimeRange;\n const effectiveExternalFilters =\n externalFilters ?? runtime.tableExternalFilters;\n const effectivePagination = pagination ?? runtime.tablePagination;\n const effectiveMenuActions = menuActions ?? runtime.tableMenuActions;\n\n if (columns.length === 0) {\n return <div className=\"text-sm text-muted-foreground\">No data</div>;\n }\n\n if (shouldRenderRowsAsCollapsedStructs(columns, rows)) {\n return <ClickyCollapsedStructRows columns={columns} rows={rows} />;\n }\n\n const tableColumns: DataTableColumn<ClickyRow>[] = columns.map((column) => {\n const tagColumn = isClickyTagColumn(column);\n const base: DataTableColumn<ClickyRow> = {\n key: `cells.${column.name}`,\n label: column.header ? (\n <ClickyNodeRenderer node={column.header} />\n ) : (\n column.label || prettifyName(column.name)\n ),\n ...(column.align ? { align: column.align } : {}),\n ...(column.sortable !== undefined ? { sortable: column.sortable } : {}),\n ...(column.filterable !== undefined\n ? { filterable: column.filterable }\n : {}),\n ...(column.grow !== undefined ? { grow: column.grow } : {}),\n ...(column.shrink !== undefined ? { shrink: column.shrink } : {}),\n };\n\n if (tagColumn) {\n return {\n ...base,\n kind: \"tags\",\n render: (value) => {\n const tags = clickyNodeTags(value as ClickyNode, column);\n return <TagList tags={tags} maxVisible={3} />;\n },\n sortValue: (value) =>\n clickyNodeTags(value as ClickyNode, column).length,\n filterValue: (value) =>\n clickyNodeTags(value as ClickyNode, column).map((tag) => tag.token),\n };\n }\n\n return {\n ...base,\n ...(column.kind ? { kind: column.kind } : {}),\n render: (value) => <ClickyNodeRenderer node={value as ClickyNode} />,\n sortValue: (value) => clickyNodeText(value as ClickyNode),\n filterValue: (value) => clickyNodeText(value as ClickyNode),\n };\n });\n\n const defaultSortColumn =\n columns.find((column) => column.sortable !== false) ?? columns[0];\n\n return (\n <DataTable<ClickyRow>\n data={rows}\n columns={tableColumns}\n {...(autoFilter !== undefined ? { autoFilter } : {})}\n {...(defaultSortColumn\n ? {\n defaultSort: {\n key: `cells.${defaultSortColumn.name}`,\n dir: \"asc\" as const,\n },\n }\n : {})}\n getRowId={(row, index) =>\n `${index}-${columns\n .map((column) => clickyNodeText(row.cells[column.name]))\n .filter(Boolean)\n .join(\"|\")}`\n }\n {...(rowClick ? { onRowClick: rowClick } : {})}\n {...(rowHref ? { getRowHref: rowHref } : {})}\n {...(rowClick && (rowClickable || rowHref)\n ? {\n isRowClickable: rowClickable ?? ((row) => Boolean(rowHref?.(row))),\n }\n : {})}\n {...(effectiveSearch ? { externalSearch: effectiveSearch } : {})}\n {...(effectiveTimeRange ? { externalTimeRange: effectiveTimeRange } : {})}\n {...(effectiveExternalFilters\n ? { externalFilters: effectiveExternalFilters }\n : {})}\n {...(effectivePagination ? { pagination: effectivePagination } : {})}\n {...(effectiveMenuActions ? { menuActions: effectiveMenuActions } : {})}\n />\n );\n}\n\nfunction ClickyCollapsedStructRows({\n columns,\n rows,\n}: {\n columns: ClickyColumn[];\n rows: ClickyRow[];\n}) {\n return (\n <div className=\"space-y-2\">\n {rows.map((row, index) => {\n const label = rowStructLabel(row, columns, index);\n const content = rowAsMap(row, columns);\n\n return (\n <details\n key={rowStructKey(row, columns, index)}\n className=\"rounded-md border border-border bg-background\"\n >\n <summary className=\"cursor-pointer px-3 py-2 text-sm font-medium text-foreground\">\n {label}\n </summary>\n <div className=\"border-t border-border p-3\">\n <ClickyMap node={content} />\n </div>\n </details>\n );\n })}\n </div>\n );\n}\n\nfunction shouldRenderRowsAsCollapsedStructs(\n columns: ClickyColumn[],\n rows: ClickyRow[],\n) {\n if (rows.length === 0) return false;\n\n return rows.every((row) => {\n const cells = columns\n .map((column) => row.cells[column.name])\n .filter(Boolean);\n if (cells.length === 0) return false;\n\n const complexCells = cells.filter(isStructCellNode);\n return complexCells.length > 0 && complexCells.length === cells.length;\n });\n}\n\nfunction isClickyTagColumn(column: ClickyColumn) {\n if (column.kind === \"tags\") return true;\n\n const normalized = column.name.toLowerCase();\n return /(^|[._-])(tags?|labels?|annotations?)$/.test(normalized);\n}\n\nfunction clickyNodeTags(\n node: ClickyNode | undefined,\n column: ClickyColumn,\n): NormalizedTag[] {\n if (!isClickyTagColumn(column)) return [];\n\n const value = clickyNodeTagsValue(node);\n return normalizeTags(value);\n}\n\nfunction clickyNodeTagsValue(node: ClickyNode | undefined): TagsValue {\n if (!node) return [];\n\n if (node.kind === \"map\" && node.fields?.length) {\n return Object.fromEntries(\n node.fields\n .map((field) => [field.name, clickyNodeText(field.value)] as const)\n .filter(([, value]) => value.trim() !== \"\"),\n );\n }\n\n if (node.kind === \"list\" && node.items?.length) {\n return node.items.map((item) => clickyNodeText(item)).filter(Boolean);\n }\n\n const text = clickyNodeText(node).trim();\n if (!text) return [];\n\n return text\n .split(/[,\\s]+/)\n .map((value) => value.trim())\n .filter(Boolean);\n}\n\nfunction isStructCellNode(node: ClickyNode | undefined) {\n if (!node) return false;\n if (node.kind === \"map\") return (node.fields ?? []).length > 0;\n if (node.kind === \"table\") return (node.rows ?? []).length > 0;\n if (node.kind !== \"list\") return false;\n\n const items = node.items ?? [];\n return items.length > 0 && items.every(isStructCellNode);\n}\n\nfunction rowAsMap(row: ClickyRow, columns: ClickyColumn[]): ClickyNode {\n return {\n kind: \"map\",\n fields: columns.flatMap((column) => {\n const value = row.cells[column.name];\n if (!value) return [];\n return [\n {\n name: column.name,\n label:\n clickyNodeText(column.header) ||\n column.label ||\n prettifyName(column.name),\n value,\n },\n ];\n }),\n };\n}\n\nfunction rowStructLabel(\n row: ClickyRow,\n columns: ClickyColumn[],\n index: number,\n) {\n const entityLabel = singularizeLabel(\n columns.find((column) => hasMeaningfulText(row.cells[column.name]))\n ?.label ??\n columns[0]?.label ??\n columns[0]?.name ??\n \"Item\",\n );\n const title = rowTitle(row, columns);\n return title\n ? `${entityLabel} ${index + 1}: ${title}`\n : `${entityLabel} ${index + 1}`;\n}\n\nfunction rowStructKey(row: ClickyRow, columns: ClickyColumn[], index: number) {\n const title = rowTitle(row, columns);\n return `${index}-${title || columns.map((column) => clickyNodeText(row.cells[column.name])).join(\"|\")}`;\n}\n\nfunction rowTitle(row: ClickyRow, columns: ClickyColumn[]) {\n const preferredFieldNames = [\n \"name\",\n \"title\",\n \"agreementname\",\n \"companyname\",\n \"customernumber\",\n \"id\",\n \"guid\",\n ];\n\n for (const preferred of preferredFieldNames) {\n for (const column of columns) {\n const candidate = findFieldText(row.cells[column.name], preferred);\n if (candidate) return candidate;\n }\n }\n\n for (const column of columns) {\n const candidate = clickyNodeText(row.cells[column.name]).trim();\n if (candidate) return candidate;\n }\n\n return \"\";\n}\n\nfunction findFieldText(\n node: ClickyNode | undefined,\n preferredName: string,\n): string {\n if (!node) return \"\";\n\n if (node.kind === \"map\") {\n for (const field of node.fields ?? []) {\n if (normalizeFieldName(field.name) === preferredName) {\n const text = clickyNodeText(field.value).trim();\n if (text) return text;\n }\n }\n }\n\n for (const field of node.fields ?? []) {\n const text = findFieldText(field.value, preferredName);\n if (text) return text;\n }\n\n for (const item of node.items ?? []) {\n const text = findFieldText(item, preferredName);\n if (text) return text;\n }\n\n return \"\";\n}\n\nfunction hasMeaningfulText(node: ClickyNode | undefined) {\n return Boolean(\n clickyNodeText(node).trim() || (node?.fields ?? []).length > 0,\n );\n}\n\nfunction normalizeFieldName(name: string) {\n return name.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction singularizeLabel(label: string) {\n const normalized = prettifyName(label).trim();\n return normalized.endsWith(\"s\") ? normalized.slice(0, -1) : normalized;\n}\n\nfunction ClickyTreeNode({ node }: { node: ClickyNode }) {\n const roots = node.roots ?? [];\n if (roots.length === 0) return null;\n\n return (\n <Tree<ClickyTreeItem>\n roots={roots}\n getChildren={(item) => item.children}\n getKey={(item) => item.id}\n defaultOpen={(_, depth) => depth < 1}\n renderRow={({ node: item }) => (\n <div className=\"min-w-0 flex-1 truncate\">\n <ClickyNodeRenderer node={item.label} />\n </div>\n )}\n />\n );\n}\n\nfunction isBadgeShape(value: string | undefined): value is BadgeShape {\n return value === \"pill\" || value === \"rounded\" || value === \"square\";\n}\n\nfunction ClickyBadgeNode({ node }: { node: ClickyNode }) {\n const props: ComponentProps<typeof Badge> = { variant: \"label\" };\n if (node.badgeLabel !== undefined) props.label = node.badgeLabel;\n if (node.badgeValue !== undefined) props.value = node.badgeValue;\n if (node.badgeColor !== undefined) props.color = node.badgeColor;\n if (node.badgeText !== undefined) props.textColor = node.badgeText;\n if (node.badgeIcon !== undefined) props.icon = node.badgeIcon;\n if (isBadgeShape(node.badgeShape)) props.shape = node.badgeShape;\n return <Badge {...props} />;\n}\n\nfunction ClickyStackTraceNode({ node }: { node: ClickyNode }) {\n const input = {\n causedBy: node.causedBy ?? [],\n frames: node.frames ?? [],\n language: \"java\" as const,\n ...(node.exceptionClass !== undefined\n ? { exceptionClass: node.exceptionClass }\n : {}),\n ...(node.message !== undefined ? { message: node.message } : {}),\n };\n\n return <StackTrace input={input} className=\"space-y-1\" />;\n}\n\nfunction ClickyCollapsed({ node }: { node: ClickyNode }) {\n return (\n <details className=\"rounded-md border border-border bg-background\">\n <summary className=\"cursor-pointer px-3 py-2 text-sm font-medium text-foreground\">\n <ClickyNodeRenderer node={node.label} />\n </summary>\n {node.content && (\n <div className=\"border-t border-border px-3 py-3\">\n <ClickyNodeRenderer node={node.content} />\n </div>\n )}\n </details>\n );\n}\n\nfunction ClickyButtonNode({ node }: { node: ClickyNode }) {\n const title = [node.id, node.payload].filter(Boolean).join(\"\\n\") || undefined;\n const content = node.label ? (\n <ClickyNodeRenderer node={node.label} />\n ) : (\n node.text\n );\n\n if (node.href) {\n return (\n <a\n href={node.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={title}\n className=\"inline-flex items-center rounded-md border border-border bg-background px-3 py-1.5 text-sm font-medium text-foreground hover:bg-accent\"\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n title={title}\n className=\"inline-flex items-center rounded-md border border-border bg-muted px-3 py-1.5 text-sm font-medium text-foreground\"\n >\n {content}\n </button>\n );\n}\n\nfunction ClickyButtonGroup({ node }: { node: ClickyNode }) {\n const items = node.items ?? [];\n if (items.length === 0) return null;\n\n return (\n <div className=\"flex flex-wrap gap-2\">\n {items.map((item, index) => (\n <ClickyNodeRenderer key={index} node={item} />\n ))}\n </div>\n );\n}\n\nfunction ClickyHtmlNode({ node }: { node: ClickyNode }) {\n const sanitized = sanitizeHtml(node.html ?? \"\");\n if (!sanitized) return null;\n\n const Tag = isBlockHtml(sanitized) ? \"div\" : \"span\";\n return <Tag dangerouslySetInnerHTML={{ __html: sanitized }} />;\n}\n\nfunction toInlineStyle(\n style?: ClickyStyle,\n text?: string,\n): CSSProperties | undefined {\n if (!style)\n return text?.includes(\"\\n\") ? { whiteSpace: \"pre-wrap\" } : undefined;\n\n const inlineStyle: CSSProperties = {};\n\n if (style.color) inlineStyle.color = style.color;\n if (style.backgroundColor)\n inlineStyle.backgroundColor = style.backgroundColor;\n if (style.bold) inlineStyle.fontWeight = 700;\n if (style.faint) inlineStyle.opacity = 0.7;\n if (style.italic) inlineStyle.fontStyle = \"italic\";\n\n const decorations: string[] = [];\n if (style.underline) decorations.push(\"underline\");\n if (style.strikethrough) decorations.push(\"line-through\");\n if (decorations.length > 0)\n inlineStyle.textDecoration = decorations.join(\" \");\n\n if (\n style.textTransform === \"uppercase\" ||\n style.textTransform === \"lowercase\" ||\n style.textTransform === \"capitalize\"\n ) {\n inlineStyle.textTransform = style.textTransform;\n }\n\n if (style.maxWidth && style.maxWidth > 0) {\n inlineStyle.maxWidth = `${style.maxWidth}ch`;\n }\n\n if (style.maxLines && style.maxLines > 0) {\n inlineStyle.display = \"-webkit-box\";\n inlineStyle.overflow = \"hidden\";\n inlineStyle.WebkitLineClamp = style.maxLines;\n inlineStyle.WebkitBoxOrient = \"vertical\";\n inlineStyle.whiteSpace = \"pre-wrap\";\n }\n\n if (\n style.truncateMode === \"suffix\" &&\n style.maxWidth &&\n (!style.maxLines || style.maxLines <= 1)\n ) {\n inlineStyle.overflow = \"hidden\";\n inlineStyle.textOverflow = \"ellipsis\";\n inlineStyle.whiteSpace = \"nowrap\";\n inlineStyle.display = \"inline-block\";\n inlineStyle.verticalAlign = \"bottom\";\n }\n\n if (style.monospace) {\n inlineStyle.fontFamily =\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace';\n }\n\n if (!inlineStyle.whiteSpace && text?.includes(\"\\n\")) {\n inlineStyle.whiteSpace = \"pre-wrap\";\n }\n\n return Object.keys(inlineStyle).length > 0 ? inlineStyle : undefined;\n}\n\nfunction prettifyName(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/_/g, \" \")\n .replace(/\\b\\w/g, (value) => value.toUpperCase());\n}\n\nfunction clickyNodeToCommandRequest(node: ClickyNode): ClickyCommandRequest {\n return {\n command: node.command ?? \"\",\n args: node.args ?? [],\n flags: node.flags ?? {},\n target: node.target ?? \"Dialog\",\n autoRun: node.autoRun ?? false,\n };\n}\n\nfunction resolveClickyCommand(\n request: ClickyCommandRequest,\n runtime: ClickyCommandRuntime | undefined,\n operations: ResolvedOperation[],\n): ClickyResolvedCommand {\n const resolved =\n runtime?.resolveCommand?.(request, operations) ??\n defaultResolveClickyCommand(request, operations);\n return { request, operation: resolved };\n}\n\nfunction defaultResolveClickyCommand(\n request: ClickyCommandRequest,\n operations: ResolvedOperation[],\n): ResolvedOperation | undefined {\n const wanted = normalizeCommandPath(request.command);\n if (!wanted) return undefined;\n\n return operations.find((operation) => {\n const metaCommand = normalizeCommandPath(\n operation.operation[\"x-clicky\"]?.command,\n );\n if (metaCommand && metaCommand === wanted) {\n return true;\n }\n\n const operationId = normalizeCommandPath(\n operation.operation.operationId?.replaceAll(\"_\", \"/\"),\n );\n return operationId === wanted;\n });\n}\n\nfunction normalizeCommandPath(value: string | undefined) {\n return (value ?? \"\")\n .trim()\n .replace(/^\\//, \"\")\n .replace(/\\s+/g, \"/\")\n .replace(/\\/+/g, \"/\")\n .toLowerCase();\n}\n\nfunction buildCommandParameterValues(\n parameters: OpenAPIParameter[],\n request: ClickyCommandRequest,\n): ParameterValues {\n const values: ParameterValues = { ...request.flags };\n const args = [...(request.args ?? [])];\n const positionalParams = parameters.filter((param) =>\n isPositionalParam(param),\n );\n let argIndex = 0;\n\n for (const param of positionalParams) {\n if (param.name === \"args\") {\n const remaining = args.slice(argIndex);\n if (remaining.length > 0) {\n values.args = remaining.join(\",\");\n }\n argIndex = args.length;\n continue;\n }\n\n if (argIndex < args.length) {\n values[param.name] = args[argIndex] ?? \"\";\n argIndex += 1;\n }\n }\n\n return values;\n}\n\nfunction missingRequiredParameters(\n parameters: OpenAPIParameter[],\n values: ParameterValues,\n) {\n return parameters.filter(\n (param) => param.required && (values[param.name] ?? \"\").trim() === \"\",\n );\n}\n\nasync function executeClickyCommand(\n client: OperationsApiClient,\n operation: ResolvedOperation,\n values: ParameterValues,\n) {\n return client.executeCommand(\n operation.path,\n operation.method,\n packParameterValues(\n pruneParameterValues(values),\n operation.operation.parameters ?? [],\n ),\n { Accept: \"application/json+clicky\" },\n );\n}\n\nfunction buildCommandExecutionHref(\n resolved: ClickyResolvedCommand,\n): string | undefined {\n const operation = resolved.operation;\n if (!operation) {\n return undefined;\n }\n\n const values = buildCommandParameterValues(\n operation.operation.parameters ?? [],\n resolved.request,\n );\n const params = packParameterValues(\n pruneParameterValues(values),\n operation.operation.parameters ?? [],\n );\n const url = substituteOperationPath(operation.path, params);\n\n if (operation.method.toUpperCase() !== \"GET\") {\n return url;\n }\n\n return url;\n}\n\nfunction substituteOperationPath(path: string, params: Record<string, string>) {\n const url = new URL(path, \"http://localhost\");\n const remaining = { ...params };\n\n for (const [key, value] of Object.entries(params)) {\n if (url.pathname.includes(`{${key}}`)) {\n url.pathname = url.pathname.replace(\n `{${key}}`,\n encodeURIComponent(value),\n );\n delete remaining[key];\n }\n }\n\n for (const [key, value] of Object.entries(remaining)) {\n url.searchParams.set(key, value);\n }\n\n return `${url.pathname}${url.search}`;\n}\n\nfunction browserAnchorTarget(target: ClickyLinkTarget | undefined) {\n if (target === \"_self\") {\n return \"_self\";\n }\n\n if (target === \"_window\" || target === \"_tab\") {\n return \"_blank\";\n }\n\n return undefined;\n}\n\nfunction isExecutionResponse(value: unknown): value is ExecutionResponse {\n return (\n value != null &&\n typeof value === \"object\" &&\n (\"stdout\" in value || \"output\" in value || \"message\" in value)\n );\n}\n\nfunction clickyNodeText(node: ClickyNode | null | undefined): string {\n if (!node) return \"\";\n if (node.kind === \"heading\" || node.kind === \"blockquote\") {\n return clickyNodeText(node.content) || node.plain || \"\";\n }\n if (node.kind === \"admonition\") {\n return (\n [clickyNodeText(node.label), clickyNodeText(node.content)]\n .filter(Boolean)\n .join(\" \") ||\n node.plain ||\n \"\"\n );\n }\n if (node.kind === \"footnote-ref\") {\n return node.id ? `[^${node.id}]` : node.plain || \"\";\n }\n if (node.kind === \"footnote\")\n return clickyNodeText(node.content) || node.plain || \"\";\n if (node.kind === \"footnotes\") {\n return (\n (node.items ?? []).map((item) => clickyNodeText(item)).join(\" \") ||\n node.plain ||\n \"\"\n );\n }\n if (node.plain) return node.plain;\n if (node.text) return node.text;\n if (node.kind === \"html\")\n return sanitizeHtml(node.html ?? \"\")\n .replace(/<[^>]+>/g, \" \")\n .trim();\n if (node.kind === \"code\") return node.source ?? \"\";\n if (\n (node.kind === \"link\" || node.kind === \"link-command\") &&\n node.children?.length\n ) {\n return [\n node.text,\n ...node.children.map((child) => clickyNodeText(child)),\n ].join(\"\");\n }\n if (node.kind === \"button\" && node.label) return clickyNodeText(node.label);\n if (node.kind === \"button-group\") {\n return (node.items ?? []).map((item) => clickyNodeText(item)).join(\" \");\n }\n if (node.kind === \"text\" && node.children?.length) {\n return [\n node.text,\n ...node.children.map((child) => clickyNodeText(child)),\n ].join(\"\");\n }\n return \"\";\n}\n\nfunction isInlineNode(node: ClickyNode): boolean {\n return (\n node.kind === \"text\" ||\n node.kind === \"link\" ||\n node.kind === \"link-command\" ||\n node.kind === \"icon\" ||\n node.kind === \"html\" ||\n node.kind === \"footnote-ref\" ||\n node.kind === \"badge\" ||\n node.kind === \"button\" ||\n node.kind === \"button-group\"\n );\n}\n"],"names":["Fragment","_b","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Clicky.js","sources":["../../src/data/Clicky.tsx"],"sourcesContent":["import {\n QueryClient,\n QueryClientProvider,\n useQuery,\n} from \"@tanstack/react-query\";\nimport {\n createContext,\n Fragment,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentProps,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { FilterForm } from \"../rpc/FilterForm\";\nimport { parseJsonBody } from \"../rpc/classify\";\nimport {\n packParameterValues,\n pruneParameterValues,\n type ParameterValues,\n} from \"../rpc/formMetadata\";\nimport {\n type ExecutionResponse,\n isPositionalParam,\n type OpenAPIParameter,\n type ResolvedOperation,\n} from \"../rpc/types\";\nimport { type OperationsApiClient, useOperations } from \"../rpc/useOperations\";\nimport { cn } from \"../lib/utils\";\nimport {\n DataTable,\n type DataTableColumn,\n type DataTableMenuAction,\n type DataTablePagination,\n type DataTableRowSelection,\n} from \"./DataTable\";\nimport type {\n FilterBarFilter,\n FilterBarRangeProps,\n FilterBarSearchProps,\n} from \"../components/FilterBar\";\nimport { Tree } from \"./Tree\";\nimport { ObjectGraph, type ObjectGraphNode } from \"./ObjectGraph\";\nimport { ExecutionTree, type ExecutionNode } from \"./ExecutionTree\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport {\n UiCheck,\n UiChevronDown,\n UiChevronUp,\n UiCloudDownload,\n UiComment,\n UiEllipsis,\n UiEye,\n UiFileCode,\n UiFileSpreadsheet,\n UiFileText,\n UiJson,\n UiMarkdown,\n UiTable,\n} from \"../icons\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { JsonView } from \"./JsonView\";\nimport { isBlockHtml, sanitizeHtml } from \"./html-utils\";\nimport { StackTrace } from \"./diagnostics/RenderedStackTrace\";\nimport type { ParsedStackFrame } from \"./diagnostics/stacktrace-parse\";\nimport { Badge, type BadgeShape } from \"./Badge\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport { Modal } from \"../overlay/Modal\";\nimport { useEscapeLayer } from \"../overlay/modalStack\";\nimport { TagList } from \"./cells/TagList\";\nimport {\n normalizeTags,\n type NormalizedTag,\n type TagsValue,\n} from \"./cells/tag-utils\";\nimport { parseClickyData, type ParsedClicky } from \"./clicky-parse\";\n\nexport type ClickyStyle = {\n className?: string;\n color?: string;\n backgroundColor?: string;\n bold?: boolean;\n faint?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n textTransform?: string;\n maxWidth?: number;\n maxLines?: number;\n truncateMode?: \"suffix\" | \"prefix\" | \"headtail\";\n monospace?: boolean;\n};\n\nexport type ClickyField = {\n name: string;\n label?: string;\n value: ClickyNode;\n};\n\nexport type ClickyColumn = {\n name: string;\n label?: string;\n type?: string;\n header?: ClickyNode;\n align?: \"left\" | \"right\" | \"center\";\n sortable?: boolean;\n filterable?: boolean;\n grow?: boolean;\n shrink?: boolean;\n kind?: \"timestamp\" | \"tags\" | \"status\";\n};\n\nexport type ClickyRow = {\n cells: Record<string, ClickyNode>;\n detail?: ClickyNode;\n};\n\nexport type ClickyTreeItem = {\n id: string;\n label: ClickyNode;\n children?: ClickyTreeItem[];\n};\n\nexport type ClickyNode = {\n kind:\n | \"text\"\n | \"link\"\n | \"link-command\"\n | \"icon\"\n | \"list\"\n | \"map\"\n | \"table\"\n | \"tree\"\n | \"code\"\n | \"heading\"\n | \"blockquote\"\n | \"admonition\"\n | \"footnote-ref\"\n | \"footnote\"\n | \"footnotes\"\n | \"collapsed\"\n | \"stacktrace\"\n | \"button\"\n | \"button-group\"\n | \"html\"\n | \"comment\"\n | \"badge\"\n | \"object-graph\"\n | \"execution-tree\";\n plain?: string;\n style?: ClickyStyle;\n text?: string;\n children?: ClickyNode[];\n tooltip?: ClickyNode;\n html?: string;\n inline?: boolean;\n ordered?: boolean;\n unstyled?: boolean;\n bullet?: ClickyNode;\n items?: ClickyNode[];\n fields?: ClickyField[];\n columns?: ClickyColumn[];\n rows?: ClickyRow[];\n autoFilter?: boolean;\n roots?: ClickyTreeItem[];\n label?: ClickyNode;\n content?: ClickyNode;\n level?: number;\n severity?: string;\n href?: string;\n target?: ClickyLinkTarget;\n command?: string;\n args?: string[];\n flags?: Record<string, string>;\n autoRun?: boolean;\n id?: string;\n payload?: string;\n variant?: string;\n iconify?: string;\n unicode?: string;\n language?: string;\n source?: string;\n highlightedHtml?: string;\n exceptionClass?: string;\n message?: string;\n causedBy?: string[];\n frames?: ParsedStackFrame[];\n // LabelBadge fields, set when kind === \"badge\".\n badgeLabel?: string;\n badgeValue?: string;\n badgeColor?: string;\n badgeText?: string;\n badgeShape?: string;\n badgeIcon?: string;\n // Set when kind === \"object-graph\" / \"execution-tree\": the roots handed to the\n // dedicated <ObjectGraph> / <ExecutionTree> inspectors.\n objects?: ObjectGraphNode[];\n executionRoots?: ExecutionNode[];\n};\n\nexport type ClickyDocument = {\n version: 1;\n node: ClickyNode;\n};\n\nexport type ClickyLinkTarget =\n | \"Dialog\"\n | \"Hover\"\n | \"Expand\"\n | \"_clicky\"\n | \"_self\"\n | \"_window\"\n | \"_tab\";\n\nexport type ClickyCommandRequest = {\n command: string;\n args?: string[];\n flags?: Record<string, string>;\n target?: ClickyLinkTarget;\n autoRun?: boolean;\n};\n\nexport type ClickyResolvedCommand = {\n request: ClickyCommandRequest;\n operation: ResolvedOperation | undefined;\n};\n\nexport type ClickyCommandRuntime = {\n client: OperationsApiClient;\n resolveCommand?: (\n request: ClickyCommandRequest,\n operations: ResolvedOperation[],\n ) => ResolvedOperation | undefined;\n hrefForCommand?: (resolved: ClickyResolvedCommand) => string | undefined;\n onNavigate?: (resolved: ClickyResolvedCommand) => void;\n};\n\nexport type ClickyTableRowClick = (row: ClickyRow) => void;\nexport type ClickyTableRowHref = (row: ClickyRow) => string | undefined;\nexport type ClickyTableRowPredicate = (row: ClickyRow) => boolean;\n\nconst CLICKY_PRIMARY_VIEW_FORMATS = [\"clicky\", \"json\"] as const;\nconst CLICKY_OVERFLOW_VIEW_FORMATS = [\n \"pdf\",\n \"html\",\n \"markdown\",\n \"yaml\",\n \"csv\",\n \"pretty\",\n \"excel\",\n \"slack\",\n] as const;\nconst CLICKY_DOWNLOAD_FORMATS = [\n \"yaml\",\n \"json\",\n \"csv\",\n \"pdf\",\n \"markdown\",\n] as const;\n\nexport type ClickyPrimaryViewFormat =\n (typeof CLICKY_PRIMARY_VIEW_FORMATS)[number];\nexport type ClickyOverflowViewFormat =\n (typeof CLICKY_OVERFLOW_VIEW_FORMATS)[number];\nexport type ClickyRemoteFormat =\n | ClickyPrimaryViewFormat\n | ClickyOverflowViewFormat\n | \"ndjson\";\n\nexport type ClickyViewOptions = Partial<Record<ClickyRemoteFormat, boolean>>;\n\nexport type ClickyViewConfig = ClickyViewOptions | ClickyRemoteFormat[];\n\nexport type ClickyDownloadOptions = {\n /** Show all advertised download formats in the overflow menu. */\n all?: boolean;\n /** Override the download menu label. */\n label?: string;\n /** Formats advertised by the endpoint. Defaults to Clicky's legacy set. */\n formats?: ClickyRemoteFormat[];\n /** Result ranges advertised by the endpoint. Legacy endpoints omit this. */\n scopes?: ClickyDownloadScope[];\n /** Whether all-row export streams or uses a compatibility buffer. */\n allRowsMode?: \"streaming\" | \"buffered\";\n /** Per-format server row caps, for example `{ pdf: 1000 }`. */\n formatMaxRows?: Partial<Record<ClickyRemoteFormat, number>>;\n};\n\nexport type ClickyDownloadScope = \"page\" | \"all\";\n\nexport type ClickyProps = {\n /** Clicky document, node, or JSON string to render. */\n data?: ClickyDocument | ClickyNode | string;\n /** Remote URL to fetch when `data` is not provided. */\n url?: string;\n /** Enabled remote view/download formats. */\n view?: ClickyViewConfig;\n /** Download menu configuration. */\n download?: ClickyDownloadOptions;\n /** Runtime used by link-command nodes. */\n commandRuntime?: ClickyCommandRuntime;\n /** Called when an embedded table row is clicked. */\n onTableRowClick?: ClickyTableRowClick;\n /** Optional href factory for embedded table rows. */\n getTableRowHref?: ClickyTableRowHref;\n /** Predicate controlling whether embedded table rows are clickable. */\n isTableRowClickable?: ClickyTableRowPredicate;\n /** Classes applied to the renderer root. */\n className?: string;\n // search, externalFilters and pagination flow through to the embedded\n // DataTable so operation pages can publish their query parameters as the\n // table's search box, native filter pills, and pagination footer without\n // re-implementing them per page.\n search?: FilterBarSearchProps;\n externalFilters?: FilterBarFilter[];\n /** Time-range control published into the first embedded table's FilterBar. */\n timeRange?: FilterBarRangeProps;\n /** Pagination footer configuration for the first embedded table. */\n pagination?: DataTablePagination;\n /** Controlled multi-row selection for the first embedded table. */\n rowSelection?: ClickyTableRowSelection;\n};\n\nexport type ClickyNodeViewProps = {\n /** Node to render; null and undefined render nothing. */\n node: ClickyNode | null | undefined;\n};\n\nexport type ClickyTableProps = {\n /** Clicky table column definitions. */\n columns: ClickyColumn[];\n /** Clicky table rows. */\n rows: ClickyRow[];\n /** Enable generated filters for filterable columns. */\n autoFilter?: boolean | undefined;\n /** Called when a row is clicked. */\n onTableRowClick?: ClickyTableRowClick | undefined;\n /** Optional href factory for row links. */\n getTableRowHref?: ClickyTableRowHref | undefined;\n /** Predicate controlling whether a row is clickable. */\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n /** Dedicated search input rendered in the table's FilterBar. */\n search?: FilterBarSearchProps | undefined;\n /** Time-range control rendered in the table's FilterBar. */\n timeRange?: FilterBarRangeProps | undefined;\n /** Extra FilterBar controls rendered before generated filters. */\n externalFilters?: FilterBarFilter[] | undefined;\n /** Pagination footer configuration. */\n pagination?: DataTablePagination | undefined;\n /** Controlled multi-row selection. */\n rowSelection?: ClickyTableRowSelection | undefined;\n /** Extra actions rendered in the table menu. */\n menuActions?: DataTableMenuAction[] | undefined;\n};\n\nexport type ClickyTableRowSelection = DataTableRowSelection<ClickyRow> & {\n /** Stable Clicky row id used by the controlled selection. */\n getRowId: (row: ClickyRow, index: number) => string;\n};\n\ntype ClickyRemoteResponse =\n | { kind: \"text\"; text: string; contentType: string }\n | { kind: \"blob\"; blob: Blob; contentType: string };\n\ntype JsonTreeNode = {\n id: string;\n key: string;\n value: unknown;\n preview: string;\n children?: JsonTreeNode[];\n};\n\ntype ClickyRuntimeContextValue = {\n commandRuntime?: ClickyCommandRuntime | undefined;\n onTableRowClick?: ClickyTableRowClick | undefined;\n getTableRowHref?: ClickyTableRowHref | undefined;\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n // tableSearch + tableExternalFilters + tablePagination flow caller-owned\n // widgets into the FIRST ClickyTable rendered inside this runtime. The wiring\n // sits on the context rather than being threaded through every node so\n // OperationCommand page-style callers don't need to know how deep the table\n // is rendered.\n tableSearch?: FilterBarSearchProps | undefined;\n tableTimeRange?: FilterBarRangeProps | undefined;\n tableExternalFilters?: FilterBarFilter[] | undefined;\n tablePagination?: DataTablePagination | undefined;\n tableRowSelection?: ClickyTableRowSelection | undefined;\n tableMenuActions?: DataTableMenuAction[] | undefined;\n operations: ResolvedOperation[];\n operationsLoading: boolean;\n};\n\nconst clickyRuntimeContextDefault: ClickyRuntimeContextValue = {\n operations: [],\n operationsLoading: false,\n};\n\nconst ClickyRuntimeContext = createContext<ClickyRuntimeContextValue>(\n clickyRuntimeContextDefault,\n);\n\nexport function Clicky(props: ClickyProps) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30_000,\n retry: 1,\n },\n },\n }),\n );\n const tableMenuActions = useMemo(\n () => getDownloadMenuActions({ url: props.url, download: props.download }),\n [props.download, props.url],\n );\n\n const content = (\n <ClickyRuntimeProvider\n {...(props.commandRuntime\n ? { commandRuntime: props.commandRuntime }\n : {})}\n {...(props.onTableRowClick\n ? { onTableRowClick: props.onTableRowClick }\n : {})}\n {...(props.getTableRowHref\n ? { getTableRowHref: props.getTableRowHref }\n : {})}\n {...(props.isTableRowClickable\n ? { isTableRowClickable: props.isTableRowClickable }\n : {})}\n {...(props.search ? { tableSearch: props.search } : {})}\n {...(props.timeRange ? { tableTimeRange: props.timeRange } : {})}\n {...(props.externalFilters\n ? { tableExternalFilters: props.externalFilters }\n : {})}\n {...(props.pagination ? { tablePagination: props.pagination } : {})}\n {...(props.rowSelection ? { tableRowSelection: props.rowSelection } : {})}\n {...(tableMenuActions.length > 0 ? { tableMenuActions } : {})}\n >\n {props.url ? (\n <ClickyRemoteRenderer {...props} url={props.url} />\n ) : (\n <ClickyContent\n data={props.data}\n {...(props.className ? { className: props.className } : {})}\n />\n )}\n </ClickyRuntimeProvider>\n );\n\n if (props.url || props.commandRuntime) {\n return (\n <QueryClientProvider client={queryClient}>{content}</QueryClientProvider>\n );\n }\n\n return content;\n}\n\nfunction ClickyRuntimeProvider({\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableRowSelection,\n tableMenuActions,\n children,\n}: {\n commandRuntime?: ClickyCommandRuntime | undefined;\n onTableRowClick?: ClickyTableRowClick | undefined;\n getTableRowHref?: ClickyTableRowHref | undefined;\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n tableSearch?: FilterBarSearchProps | undefined;\n tableTimeRange?: FilterBarRangeProps | undefined;\n tableExternalFilters?: FilterBarFilter[] | undefined;\n tablePagination?: DataTablePagination | undefined;\n tableRowSelection?: ClickyTableRowSelection | undefined;\n tableMenuActions?: DataTableMenuAction[] | undefined;\n children: ReactNode;\n}) {\n if (!commandRuntime) {\n const hasOverrides =\n onTableRowClick ||\n getTableRowHref ||\n isTableRowClickable ||\n tableSearch ||\n tableTimeRange ||\n tableExternalFilters ||\n tablePagination ||\n tableRowSelection ||\n tableMenuActions;\n return (\n <ClickyRuntimeContext.Provider\n value={\n hasOverrides\n ? {\n ...clickyRuntimeContextDefault,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableRowSelection,\n tableMenuActions,\n }\n : clickyRuntimeContextDefault\n }\n >\n {children}\n </ClickyRuntimeContext.Provider>\n );\n }\n\n return (\n <ClickyCommandRuntimeProvider\n commandRuntime={commandRuntime}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n {...(tableSearch ? { tableSearch } : {})}\n {...(tableTimeRange ? { tableTimeRange } : {})}\n {...(tableExternalFilters ? { tableExternalFilters } : {})}\n {...(tablePagination ? { tablePagination } : {})}\n {...(tableRowSelection ? { tableRowSelection } : {})}\n {...(tableMenuActions ? { tableMenuActions } : {})}\n >\n {children}\n </ClickyCommandRuntimeProvider>\n );\n}\n\nfunction ClickyCommandRuntimeProvider({\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableRowSelection,\n tableMenuActions,\n children,\n}: {\n commandRuntime: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick | undefined;\n getTableRowHref?: ClickyTableRowHref | undefined;\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n tableSearch?: FilterBarSearchProps | undefined;\n tableTimeRange?: FilterBarRangeProps | undefined;\n tableExternalFilters?: FilterBarFilter[] | undefined;\n tablePagination?: DataTablePagination | undefined;\n tableRowSelection?: ClickyTableRowSelection | undefined;\n tableMenuActions?: DataTableMenuAction[] | undefined;\n children: ReactNode;\n}) {\n const { operations, isLoading } = useOperations(commandRuntime.client);\n const value = useMemo(\n () => ({\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableRowSelection,\n tableMenuActions,\n operations,\n operationsLoading: isLoading,\n }),\n [\n commandRuntime,\n getTableRowHref,\n isLoading,\n isTableRowClickable,\n onTableRowClick,\n operations,\n tableSearch,\n tableTimeRange,\n tableExternalFilters,\n tablePagination,\n tableRowSelection,\n tableMenuActions,\n ],\n );\n\n return (\n <ClickyRuntimeContext.Provider value={value}>\n {children}\n </ClickyRuntimeContext.Provider>\n );\n}\n\nfunction ClickyContent({\n data,\n className,\n}: {\n data: ClickyProps[\"data\"];\n className?: string | undefined;\n}) {\n if (data === undefined) {\n return (\n <ClickyNotice\n className={className}\n title=\"No Clicky data\"\n message=\"Provide either a local data payload or a URL.\"\n />\n );\n }\n\n const parsed = parseClickyData(data);\n\n if (!parsed.ok) {\n return <ClickyInvalidPayload parsed={parsed} className={className} />;\n }\n\n return (\n <div className={className}>\n <ClickyNodeRenderer node={parsed.document.node} />\n </div>\n );\n}\n\nfunction ClickyRemoteRenderer({\n data,\n url,\n view,\n download,\n className,\n}: ClickyProps & { url: string }) {\n const availableViews = useMemo(\n () => getAvailableViews({ data, url, view }),\n [data, url, view],\n );\n const primaryViews = useMemo(\n () => availableViews.filter(isPrimaryViewFormat),\n [availableViews],\n );\n const overflowViews = useMemo(\n () => availableViews.filter(isOverflowViewFormat),\n [availableViews],\n );\n const downloadFormats = useMemo(\n () => getDownloadFormats({ url, download }),\n [download, url],\n );\n const [activeView, setActiveView] = useState<ClickyRemoteFormat>(\n () => availableViews[0] ?? \"clicky\",\n );\n\n useEffect(() => {\n if (!availableViews.includes(activeView)) {\n setActiveView(availableViews[0] ?? \"clicky\");\n }\n }, [activeView, availableViews]);\n\n const formattedUrl = buildFormatUrl(url, activeView);\n const activeQuery = useQuery({\n queryKey: [\"clicky\", activeView, formattedUrl],\n enabled: shouldFetchRemoteView(activeView),\n queryFn: async () => fetchRemoteFormat(formattedUrl, activeView),\n });\n const effectiveClickyData =\n activeView === \"clicky\" && activeQuery.data?.kind === \"text\"\n ? activeQuery.data.text\n : data;\n const fallbackJsonData = useMemo(() => parseJsonValue(data), [data]);\n const effectiveJsonData =\n activeView === \"json\" && activeQuery.data?.kind === \"text\"\n ? parseJsonValue(activeQuery.data.text)\n : fallbackJsonData;\n const activeOverflowView = isOverflowViewFormat(activeView)\n ? activeView\n : null;\n const downloadHandledByTable = clickyPayloadHasTable(effectiveClickyData);\n const canDownload = downloadFormats.length > 0 && !downloadHandledByTable;\n const loadingMessage = `Fetching ${formattedUrl}`;\n\n const runtime = useContext(ClickyRuntimeContext);\n // When the payload renders as a table, fold the inline view switcher into the\n // table's overflow (\"3-dot\") menu alongside its download formats and hide the\n // standalone view bar — that bar is what looks out of place on a plain list\n // surface. Non-table payloads, and the JSON/PDF/HTML previews, keep the bar so\n // the user can always switch back to the table.\n const tableHostsControls = downloadHandledByTable && activeView === \"clicky\";\n const viewMenuActions = useMemo<DataTableMenuAction[]>(() => {\n if (!tableHostsControls || availableViews.length <= 1) return [];\n return availableViews.map((format) => {\n const meta = getRemoteFormatMeta(format);\n return {\n id: `view-${format}`,\n label: formatViewLabel(format),\n icon: meta.icon,\n ...(meta.iconClassName ? { iconClassName: meta.iconClassName } : {}),\n section: \"View\",\n disabled: format === activeView,\n onSelect: () => setActiveView(format),\n };\n });\n }, [tableHostsControls, availableViews, activeView]);\n const combinedTableActions = useMemo<DataTableMenuAction[]>(\n () => [...viewMenuActions, ...(runtime.tableMenuActions ?? [])],\n [viewMenuActions, runtime.tableMenuActions],\n );\n\n return (\n <div className={cn(\"space-y-density-3\", className)}>\n {!tableHostsControls && (\n <div className=\"flex flex-wrap items-center gap-2 rounded-md border border-border bg-muted/20 px-density-3 py-density-2\">\n {primaryViews.length > 1 && (\n <div\n role=\"radiogroup\"\n aria-label=\"Clicky view mode\"\n className=\"flex flex-wrap gap-1\"\n >\n {primaryViews.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n role=\"radio\"\n aria-checked={activeView === mode}\n onClick={() => setActiveView(mode)}\n className={cn(\n \"rounded-md border px-2.5 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n activeView === mode\n ? \"border-foreground/20 bg-accent text-foreground\"\n : \"border-transparent text-muted-foreground hover:border-foreground/20 hover:text-foreground\",\n )}\n >\n {formatViewLabel(mode)}\n </button>\n ))}\n </div>\n )}\n\n {overflowViews.length > 0 && (\n <ClickyViewMenu\n activeFormat={activeOverflowView}\n formats={overflowViews}\n onSelect={setActiveView}\n />\n )}\n\n <div className=\"ml-auto flex items-center gap-2\">\n {shouldFetchRemoteView(activeView) && activeQuery.isFetching && (\n <span className=\"text-xs text-muted-foreground\">Refreshing…</span>\n )}\n\n {canDownload && (\n <ClickyDownloadMenu\n url={url}\n formats={downloadFormats}\n download={download}\n />\n )}\n </div>\n </div>\n )}\n\n {activeView === \"pdf\" ? (\n <ClickyPdfPreview src={formattedUrl} />\n ) : activeView === \"html\" ? (\n <ClickyHtmlPreview src={formattedUrl} />\n ) : activeView === \"excel\" ? (\n <ClickyUnsupportedPreview\n title=\"Excel preview\"\n message=\"Excel output is available for download, but not inline preview.\"\n href={formattedUrl}\n />\n ) : activeView === \"clicky\" ? (\n activeQuery.isPending && effectiveClickyData === undefined ? (\n <ClickyNotice title=\"Loading Clicky\" message={loadingMessage} />\n ) : activeQuery.isError && effectiveClickyData === undefined ? (\n <ClickyNotice\n title=\"Clicky request failed\"\n message={\n activeQuery.error instanceof Error\n ? activeQuery.error.message\n : \"Request failed\"\n }\n tone=\"destructive\"\n />\n ) : (\n <>\n {activeQuery.isError && data !== undefined && (\n <ClickyNotice\n title=\"Remote refresh failed\"\n message=\"Showing the local fallback payload instead.\"\n tone=\"warning\"\n />\n )}\n <ClickyRuntimeContext.Provider\n value={{ ...runtime, tableMenuActions: combinedTableActions }}\n >\n <ClickyContent\n data={effectiveClickyData}\n className=\"flex min-h-0 flex-1 flex-col\"\n />\n </ClickyRuntimeContext.Provider>\n </>\n )\n ) : activeView === \"json\" ? (\n activeQuery.isPending && effectiveJsonData === undefined ? (\n <ClickyNotice title=\"Loading JSON\" message={loadingMessage} />\n ) : activeQuery.isError && effectiveJsonData === undefined ? (\n <ClickyNotice\n title=\"JSON request failed\"\n message={\n activeQuery.error instanceof Error\n ? activeQuery.error.message\n : \"Request failed\"\n }\n tone=\"destructive\"\n />\n ) : (\n <>\n {activeQuery.isError && fallbackJsonData !== undefined && (\n <ClickyNotice\n title=\"Remote refresh failed\"\n message=\"Showing the local fallback payload instead.\"\n tone=\"warning\"\n />\n )}\n <ClickyJsonTree value={effectiveJsonData} />\n </>\n )\n ) : activeQuery.isPending ? (\n <ClickyNotice\n title={`Loading ${formatViewLabel(activeView)}`}\n message={loadingMessage}\n />\n ) : activeQuery.isError ? (\n <ClickyNotice\n title={`${formatViewLabel(activeView)} request failed`}\n message={\n activeQuery.error instanceof Error\n ? activeQuery.error.message\n : \"Request failed\"\n }\n tone=\"destructive\"\n />\n ) : (\n <ClickyRemotePreview\n format={activeView as ClickyOverflowViewFormat}\n response={activeQuery.data}\n />\n )}\n </div>\n );\n}\n\nfunction ClickyViewMenu({\n activeFormat,\n formats,\n onSelect,\n}: {\n activeFormat: ClickyOverflowViewFormat | null;\n formats: ClickyOverflowViewFormat[];\n onSelect: (format: ClickyRemoteFormat) => void;\n}) {\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState(false);\n\n useDismissablePopup(open, rootRef, triggerRef, () => setOpen(false));\n\n return (\n <div ref={rootRef} className=\"relative\">\n <button\n ref={triggerRef}\n type=\"button\"\n aria-label=\"Open additional view menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-pressed={activeFormat != null}\n className={cn(\n \"inline-flex h-[34px] w-[34px] items-center justify-center rounded-md border border-input bg-background text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n activeFormat && \"border-foreground/20 bg-accent text-foreground\",\n )}\n onClick={() => setOpen((current) => !current)}\n >\n <Icon icon={UiEllipsis} className=\"text-sm\" />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className=\"absolute left-0 top-[calc(100%+0.375rem)] z-50 min-w-[18rem] rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {formats.map((format) => {\n const active = format === activeFormat;\n const meta = getRemoteFormatMeta(format);\n return (\n <button\n key={format}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={cn(\n \"flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\",\n active && \"bg-accent/70\",\n )}\n onClick={() => {\n onSelect(format);\n setOpen(false);\n }}\n >\n <Icon\n icon={meta.icon}\n className={cn(\n \"mt-0.5 shrink-0 text-base\",\n meta.iconClassName ?? \"text-muted-foreground\",\n active && !meta.iconClassName && \"text-foreground\",\n )}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex items-center justify-between gap-3\">\n <span className=\"font-medium\">{meta.label}</span>\n {active && (\n <Icon\n icon={UiCheck}\n className=\"text-xs text-muted-foreground\"\n />\n )}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {meta.description}\n </span>\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\nfunction ClickyDownloadMenu({\n url,\n formats,\n download,\n}: {\n url: string;\n formats: ClickyRemoteFormat[];\n download?: ClickyDownloadOptions | undefined;\n}) {\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState(false);\n const primaryFormat: ClickyRemoteFormat = formats.includes(\"json\")\n ? \"json\"\n : formats[0]!;\n const primaryMeta = getRemoteFormatMeta(primaryFormat);\n const scopes = getDownloadScopes(download);\n const primaryScope = scopes[0];\n\n useDismissablePopup(open, rootRef, triggerRef, () => setOpen(false));\n\n return (\n <div ref={rootRef} className=\"relative\">\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n aria-label={\n download?.label\n ? `Download ${primaryMeta.label} ${download.label}`\n : `Download ${primaryMeta.label}`\n }\n className=\"inline-flex items-center gap-2 rounded-md border border-input bg-background px-3 py-1.5 text-xs font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n onClick={() =>\n triggerDownload(\n buildDownloadUrl(\n url,\n primaryFormat,\n download?.label,\n primaryScope,\n ),\n )\n }\n >\n <Icon icon={UiCloudDownload} className=\"text-sm\" />\n <span>{`Download ${primaryMeta.label}`}</span>\n </button>\n <button\n ref={triggerRef}\n type=\"button\"\n aria-label=\"Open download menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className=\"inline-flex h-[34px] w-[34px] items-center justify-center rounded-md border border-input bg-background text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n onClick={() => setOpen((current) => !current)}\n >\n <Icon icon={open ? UiChevronUp : UiChevronDown} className=\"text-sm\" />\n </button>\n </div>\n\n {open && (\n <div\n role=\"menu\"\n className=\"absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[18rem] rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {scopes.map((scope, scopeIndex) => (\n <div\n key={scope ?? \"legacy\"}\n className={cn(\n scopeIndex > 0 && \"mt-1 border-t border-border pt-1\",\n )}\n >\n {scope && (\n <div className=\"px-2 py-1.5 text-xs font-medium text-muted-foreground\">\n {downloadSection(scope)}\n </div>\n )}\n {formats.map((format) => {\n const meta = getRemoteFormatMeta(format);\n const description = downloadDescription(\n format,\n scope,\n download,\n );\n return (\n <button\n key={`${scope ?? \"legacy\"}-${format}`}\n type=\"button\"\n role=\"menuitem\"\n className=\"flex w-full items-start gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\"\n onClick={() => {\n triggerDownload(\n buildDownloadUrl(url, format, download?.label, scope),\n );\n setOpen(false);\n }}\n >\n <Icon\n icon={meta.icon}\n className={cn(\n \"mt-0.5 shrink-0 text-sm\",\n meta.iconClassName ?? \"text-muted-foreground\",\n )}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"font-medium\">{meta.label}</span>\n {description && (\n <span className=\"block text-xs text-muted-foreground\">\n {description}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction useDismissablePopup(\n open: boolean,\n rootRef: RefObject<HTMLElement | null>,\n triggerRef: RefObject<HTMLElement | null>,\n onClose: () => void,\n) {\n useEscapeLayer(open, () => {\n onClose();\n triggerRef.current?.focus();\n });\n\n useEffect(() => {\n if (!open) return;\n\n const onPointerDown = (event: MouseEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n onClose();\n }\n };\n\n document.addEventListener(\"mousedown\", onPointerDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n };\n }, [onClose, open, rootRef, triggerRef]);\n}\n\nfunction fetchRemoteFormat(\n url: string,\n format: ClickyRemoteFormat,\n): Promise<ClickyRemoteResponse> {\n return fetch(url, {\n headers: {\n Accept: getRemoteFormatMeta(format).accept,\n },\n }).then(async (response) => {\n if (!response.ok) {\n throw new Error(\n `Request failed with ${response.status} ${response.statusText}`.trim(),\n );\n }\n\n const contentType = response.headers.get(\"Content-Type\") ?? \"\";\n\n if (format === \"excel\") {\n return {\n kind: \"blob\",\n blob: await response.blob(),\n contentType,\n };\n }\n\n return {\n kind: \"text\",\n text: await response.text(),\n contentType,\n };\n });\n}\n\nfunction ClickyInvalidPayload({\n parsed,\n className,\n}: {\n parsed: Extract<ParsedClicky, { ok: false }>;\n className?: string | undefined;\n}) {\n return (\n <div\n className={cn(\n \"rounded-md border border-destructive/30 bg-destructive/5 p-density-3\",\n className,\n )}\n >\n <div className=\"text-sm font-medium text-destructive\">\n Invalid Clicky payload\n </div>\n <pre className=\"mt-2 whitespace-pre-wrap break-all text-xs text-muted-foreground\">\n {parsed.message}\n {parsed.raw ? `\\n\\n${parsed.raw}` : \"\"}\n </pre>\n </div>\n );\n}\n\nfunction ClickyNotice({\n title,\n message,\n tone = \"default\",\n className,\n}: {\n title: string;\n message: ReactNode;\n tone?: \"default\" | \"warning\" | \"destructive\";\n className?: string | undefined;\n}) {\n return (\n <div\n className={cn(\n \"rounded-md border p-density-3\",\n tone === \"destructive\" && \"border-destructive/30 bg-destructive/5\",\n tone === \"warning\" && \"border-yellow-500/30 bg-yellow-500/5\",\n tone === \"default\" && \"border-border bg-muted/30\",\n className,\n )}\n >\n <div\n className={cn(\n \"text-sm font-medium\",\n tone === \"destructive\" && \"text-destructive\",\n tone === \"warning\" && \"text-yellow-700 dark:text-yellow-400\",\n )}\n >\n {title}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">{message}</div>\n </div>\n );\n}\n\nfunction ClickyPdfPreview({ src }: { src: string }) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-background\">\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2 text-xs text-muted-foreground\">\n <span>PDF preview</span>\n <a\n href={src}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-primary hover:underline\"\n >\n Open in new tab\n </a>\n </div>\n <iframe\n title=\"Clicky PDF preview\"\n src={src}\n className=\"h-[720px] w-full bg-background\"\n />\n </div>\n );\n}\n\nfunction ClickyHtmlPreview({ src }: { src: string }) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-background\">\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2 text-xs text-muted-foreground\">\n <span>HTML preview</span>\n <a\n href={src}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-primary hover:underline\"\n >\n Open in new tab\n </a>\n </div>\n <iframe\n title=\"Clicky HTML preview\"\n src={src}\n className=\"h-[720px] w-full bg-background\"\n sandbox=\"allow-same-origin\"\n />\n </div>\n );\n}\n\nfunction ClickyUnsupportedPreview({\n title,\n message,\n href,\n}: {\n title: string;\n message: string;\n href: string;\n}) {\n return (\n <ClickyNotice\n title={title}\n message={\n <>\n <span>{message} </span>\n <a\n href={href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-primary hover:underline\"\n >\n Open format\n </a>\n </>\n }\n />\n );\n}\n\nfunction ClickyRemotePreview({\n format,\n response,\n}: {\n format: ClickyOverflowViewFormat;\n response: ClickyRemoteResponse | undefined;\n}) {\n const meta = getRemoteFormatMeta(format);\n\n if (format === \"slack\") {\n const parsed =\n response?.kind === \"text\" ? parseJsonValue(response.text) : undefined;\n return <ClickyJsonTree value={parsed} emptyLabel={meta.label} />;\n }\n\n return (\n <ClickyTextPreview\n title={`${meta.label} output`}\n content={response?.kind === \"text\" ? response.text : \"\"}\n />\n );\n}\n\nfunction ClickyTextPreview({\n title,\n content,\n}: {\n title: string;\n content: string;\n}) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-background\">\n <div className=\"border-b border-border px-3 py-2 text-xs text-muted-foreground\">\n {title}\n </div>\n <pre\n aria-label=\"Clicky text preview\"\n className=\"overflow-auto whitespace-pre-wrap break-words px-3 py-3 font-mono text-xs text-foreground\"\n >\n {content || \"No content\"}\n </pre>\n </div>\n );\n}\n\nfunction ClickyJsonTree({\n value,\n emptyLabel = \"JSON\",\n}: {\n value: unknown;\n emptyLabel?: string;\n}) {\n const roots = useMemo(() => buildJsonTree(value), [value]);\n\n if (value === undefined) {\n return (\n <ClickyNotice\n title={`No ${emptyLabel} payload`}\n message=\"The response did not include a JSON body to inspect.\"\n />\n );\n }\n\n return (\n <div\n aria-label=\"JSON tree\"\n className=\"overflow-hidden rounded-md border border-border bg-background\"\n >\n <Tree<JsonTreeNode>\n roots={roots}\n className=\"min-h-[12rem]\"\n showControls={roots.some((node) => (node.children?.length ?? 0) > 0)}\n getKey={(node) => node.id}\n getChildren={(node) => node.children}\n renderRow={({ node }) => <ClickyJsonTreeRow node={node} />}\n rowClass={() => \"hover:bg-accent\"}\n empty={\n <div className=\"px-3 py-4 text-sm text-muted-foreground\">\n No JSON fields.\n </div>\n }\n toolbarClassName=\"pl-3\"\n />\n </div>\n );\n}\n\nfunction ClickyJsonTreeRow({ node }: { node: JsonTreeNode }) {\n const primitiveClass =\n typeof node.value === \"string\"\n ? \"text-emerald-700 dark:text-emerald-400\"\n : typeof node.value === \"number\"\n ? \"text-sky-700 dark:text-sky-400\"\n : typeof node.value === \"boolean\" || node.value === null\n ? \"text-violet-700 dark:text-violet-400\"\n : \"text-muted-foreground\";\n\n return (\n <div className=\"flex min-w-0 items-start gap-2 font-mono text-xs\">\n <span className=\"shrink-0 text-foreground\">{node.key}</span>\n <span className=\"shrink-0 text-muted-foreground\">:</span>\n <span className={cn(\"min-w-0 break-words\", primitiveClass)}>\n {node.preview}\n </span>\n </div>\n );\n}\n\nfunction getAvailableViews({\n data,\n url,\n view,\n}: {\n data: ClickyProps[\"data\"] | undefined;\n url?: string | undefined;\n view?: ClickyViewConfig | undefined;\n}): ClickyRemoteFormat[] {\n const allowClicky = resolveViewConfigFlag(view, \"clicky\", data, url);\n const allowJson = resolveViewConfigFlag(view, \"json\", data, url);\n const next: ClickyRemoteFormat[] = [];\n\n if (allowClicky && (url || data !== undefined)) {\n next.push(\"clicky\");\n }\n\n if (allowJson && (url || data !== undefined)) {\n next.push(\"json\");\n }\n\n for (const format of CLICKY_OVERFLOW_VIEW_FORMATS) {\n if (resolveViewConfigFlag(view, format, data, url) && url) {\n next.push(format);\n }\n }\n\n if (next.length === 0 && (url || data !== undefined)) {\n next.push(\"clicky\");\n }\n\n return next;\n}\n\nfunction getDownloadFormats({\n url,\n download,\n}: {\n url?: string | undefined;\n download?: ClickyDownloadOptions | undefined;\n}): ClickyRemoteFormat[] {\n const enabled = download ? (download.all ?? true) : !!url;\n\n if (!enabled || !url) {\n return [];\n }\n\n return download?.formats?.length\n ? [...download.formats]\n : [...CLICKY_DOWNLOAD_FORMATS];\n}\n\nfunction getDownloadScopes(\n download?: ClickyDownloadOptions,\n): Array<ClickyDownloadScope | undefined> {\n return download?.scopes?.length ? download.scopes : [undefined];\n}\n\nfunction downloadSection(scope: ClickyDownloadScope) {\n return scope === \"all\" ? \"Download all rows\" : \"Download current page\";\n}\n\nfunction downloadDescription(\n format: ClickyRemoteFormat,\n scope: ClickyDownloadScope | undefined,\n download?: ClickyDownloadOptions,\n) {\n const maxRows = download?.formatMaxRows?.[format];\n if (maxRows) {\n return `Limited to ${maxRows.toLocaleString()} rows`;\n }\n if (scope === \"all\" && download?.allRowsMode === \"buffered\") {\n return \"Compatibility mode buffers the complete result\";\n }\n if (scope === \"all\" && download?.allRowsMode === \"streaming\") {\n return \"Streams rows as they are read\";\n }\n return undefined;\n}\n\nfunction getDownloadMenuActions({\n url,\n download,\n}: {\n url?: string | undefined;\n download?: ClickyDownloadOptions | undefined;\n}): DataTableMenuAction[] {\n const formats = getDownloadFormats({ url, download });\n if (!url || formats.length === 0) return [];\n\n return getDownloadScopes(download).flatMap((scope) =>\n formats.map((format) => {\n const meta = getRemoteFormatMeta(format);\n return {\n id: `download-${scope ?? \"legacy\"}-${format}`,\n label: meta.label,\n description: downloadDescription(format, scope, download),\n icon: meta.icon,\n ...(meta.iconClassName ? { iconClassName: meta.iconClassName } : {}),\n ...(scope ? { section: downloadSection(scope) } : {}),\n onSelect: () =>\n triggerDownload(\n buildDownloadUrl(url, format, download?.label, scope),\n ),\n };\n }),\n );\n}\n\nfunction getRemoteFormatMeta(format: ClickyRemoteFormat): {\n label: string;\n description: string;\n icon: StaticIconComponent;\n iconClassName?: string;\n accept: string;\n} {\n switch (format) {\n case \"clicky\":\n return {\n label: \"Clicky\",\n description: \"Rendered Clicky JSON with the rich Clicky viewer\",\n icon: UiEye,\n accept:\n \"application/json+clicky, application/clicky+json;q=0.9, application/json;q=0.8,*/*;q=0.7\",\n };\n case \"json\":\n return {\n label: \"JSON\",\n description: \"Plain JSON for inspecting the raw response body\",\n icon: UiJson,\n accept: \"application/json, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"ndjson\":\n return {\n label: \"NDJSON\",\n description: \"Newline-delimited JSON for streaming data pipelines\",\n icon: UiJson,\n accept: \"application/x-ndjson, application/ndjson;q=0.9,*/*;q=0.7\",\n };\n case \"pdf\":\n return {\n label: \"PDF\",\n description: \"Portable document for sharing and printing\",\n icon: UiFileText,\n iconClassName: \"text-rose-600 dark:text-rose-400\",\n accept: \"application/pdf, */*;q=0.7\",\n };\n case \"html\":\n return {\n label: \"HTML\",\n description: \"Browser-ready HTML preview of the formatted output\",\n icon: UiFileCode,\n accept: \"text/html, */*;q=0.7\",\n };\n case \"markdown\":\n return {\n label: \"Markdown\",\n description: \"Markdown formatted for docs, comments, and chat\",\n icon: UiMarkdown,\n accept: \"text/markdown, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"yaml\":\n return {\n label: \"YAML\",\n description: \"YAML for config-friendly inspection and export\",\n icon: UiFileCode,\n iconClassName: \"text-violet-600 dark:text-violet-400\",\n accept: \"application/yaml, text/yaml;q=0.9, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"csv\":\n return {\n label: \"CSV\",\n description: \"Comma-separated values for spreadsheets and imports\",\n icon: UiFileSpreadsheet,\n iconClassName: \"text-emerald-600 dark:text-emerald-400\",\n accept: \"text/csv, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"pretty\":\n return {\n label: \"Pretty\",\n description: \"Human-readable plain text output from the formatter\",\n icon: UiFileCode,\n accept: \"text/plain, */*;q=0.7\",\n };\n case \"excel\":\n return {\n label: \"Excel\",\n description: \"Spreadsheet workbook for offline analysis\",\n icon: UiTable,\n accept:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, */*;q=0.7\",\n };\n case \"slack\":\n return {\n label: \"Slack\",\n description: \"Slack Block Kit JSON for chat-native output\",\n icon: UiComment,\n accept:\n \"application/vnd.slack.block-kit+json, application/json;q=0.8,*/*;q=0.7\",\n };\n }\n}\n\nfunction formatViewLabel(mode: ClickyRemoteFormat) {\n return getRemoteFormatMeta(mode).label;\n}\n\nfunction buildFormatUrl(url: string, format: ClickyRemoteFormat) {\n const base =\n typeof window === \"undefined\" ? \"http://localhost\" : window.location.origin;\n const resolved = new URL(url, base);\n resolved.searchParams.set(\n \"format\",\n format === \"clicky\" ? \"clicky-json\" : format,\n );\n\n if (isAbsoluteUrl(url)) {\n return resolved.toString();\n }\n\n return `${resolved.pathname}${resolved.search}${resolved.hash}`;\n}\n\nfunction buildDownloadUrl(\n url: string,\n format: ClickyRemoteFormat,\n label?: string | undefined,\n scope?: ClickyDownloadScope | undefined,\n) {\n const formatted = buildFormatUrl(url, format);\n const base =\n typeof window === \"undefined\" ? \"http://localhost\" : window.location.origin;\n const resolved = new URL(formatted, base);\n resolved.searchParams.set(\"filename\", downloadFilename(url, format, label));\n resolved.searchParams.set(\"_download\", Date.now().toString());\n if (scope) {\n resolved.searchParams.set(\"scope\", scope);\n }\n if (scope === \"all\") {\n resolved.searchParams.delete(\"limit\");\n resolved.searchParams.delete(\"offset\");\n resolved.searchParams.delete(\"page\");\n }\n\n if (isAbsoluteUrl(formatted)) {\n return resolved.toString();\n }\n\n return `${resolved.pathname}${resolved.search}${resolved.hash}`;\n}\n\nfunction downloadFilename(\n url: string,\n format: ClickyRemoteFormat,\n label?: string | undefined,\n) {\n const stem = sanitizeFilenameStem(\n label || filenameStemFromUrl(url) || \"clicky-output\",\n );\n return `${stem}${downloadExtension(format)}`;\n}\n\nfunction filenameStemFromUrl(url: string) {\n const base =\n typeof window === \"undefined\" ? \"http://localhost\" : window.location.origin;\n const resolved = new URL(url, base);\n const segment = resolved.pathname.split(\"/\").filter(Boolean).at(-1);\n return segment ?? \"\";\n}\n\nfunction sanitizeFilenameStem(value: string) {\n const cleaned = value\n .trim()\n .replace(/\\.[a-z0-9]+$/i, \"\")\n .replace(/[^a-z0-9._-]+/gi, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^[._-]+|[._-]+$/g, \"\");\n\n return cleaned || \"clicky-output\";\n}\n\nfunction downloadExtension(format: ClickyRemoteFormat) {\n switch (format) {\n case \"clicky\":\n return \".clicky.json\";\n case \"json\":\n return \".json\";\n case \"ndjson\":\n return \".ndjson\";\n case \"pdf\":\n return \".pdf\";\n case \"html\":\n return \".html\";\n case \"markdown\":\n return \".md\";\n case \"yaml\":\n return \".yaml\";\n case \"csv\":\n return \".csv\";\n case \"pretty\":\n return \".txt\";\n case \"excel\":\n return \".xlsx\";\n case \"slack\":\n return \".slack.json\";\n }\n}\n\nfunction shouldFetchRemoteView(format: ClickyRemoteFormat) {\n return format !== \"pdf\" && format !== \"html\" && format !== \"excel\";\n}\n\nfunction isPrimaryViewFormat(\n format: ClickyRemoteFormat,\n): format is ClickyPrimaryViewFormat {\n return (CLICKY_PRIMARY_VIEW_FORMATS as readonly string[]).includes(format);\n}\n\nfunction isOverflowViewFormat(\n format: ClickyRemoteFormat,\n): format is ClickyOverflowViewFormat {\n return (CLICKY_OVERFLOW_VIEW_FORMATS as readonly string[]).includes(format);\n}\n\nfunction resolveViewConfigFlag(\n view: ClickyViewConfig | undefined,\n format: ClickyRemoteFormat,\n data: ClickyProps[\"data\"],\n url?: string,\n) {\n const defaultEnabled =\n format === \"clicky\" || format === \"json\"\n ? url != null || data !== undefined\n : !!url;\n\n if (view === undefined) {\n return defaultEnabled;\n }\n\n if (Array.isArray(view)) {\n if (view.length === 0) {\n return false;\n }\n\n if (format === \"clicky\") {\n return view.includes(\"clicky\") || view.includes(\"json\");\n }\n\n return view.includes(format);\n }\n\n if (format in view) {\n return Boolean(view[format]);\n }\n\n if (format === \"clicky\" && view.json === true) {\n return true;\n }\n\n return defaultEnabled;\n}\n\nfunction parseJsonValue(data: ClickyProps[\"data\"]): unknown {\n if (data === undefined) {\n return undefined;\n }\n\n if (typeof data !== \"string\") {\n return data;\n }\n\n const trimmed = data.trim();\n if (!trimmed) {\n return \"\";\n }\n\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return data;\n }\n}\n\nfunction clickyPayloadHasTable(data: ClickyProps[\"data\"] | undefined) {\n if (data === undefined) return false;\n const parsed = parseClickyData(data);\n return parsed.ok ? clickyNodeHasTable(parsed.document.node) : false;\n}\n\nfunction clickyNodeHasTable(node: ClickyNode | undefined): boolean {\n if (!node) return false;\n if (node.kind === \"table\") return true;\n if (node.children?.some(clickyNodeHasTable)) return true;\n if (node.items?.some(clickyNodeHasTable)) return true;\n if (node.fields?.some((field) => clickyNodeHasTable(field.value)))\n return true;\n if (node.label && clickyNodeHasTable(node.label)) return true;\n if (node.content && clickyNodeHasTable(node.content)) return true;\n if (node.tooltip && clickyNodeHasTable(node.tooltip)) return true;\n if (\n node.columns?.some(\n (column) => column.header && clickyNodeHasTable(column.header),\n )\n )\n return true;\n if (\n node.rows?.some((row) =>\n Object.values(row.cells).some((cell) => clickyNodeHasTable(cell)),\n )\n )\n return true;\n if (node.rows?.some((row) => row.detail && clickyNodeHasTable(row.detail)))\n return true;\n return false;\n}\n\nfunction buildJsonTree(value: unknown): JsonTreeNode[] {\n if (Array.isArray(value)) {\n return value.map((entry, index) =>\n buildJsonTreeNode(String(index), entry, `$[${index}]`),\n );\n }\n\n if (isPlainObject(value)) {\n return Object.entries(value).map(([key, entry]) =>\n buildJsonTreeNode(key, entry, `$.${key}`),\n );\n }\n\n if (value === undefined) {\n return [];\n }\n\n return [buildJsonTreeNode(\"$\", value, \"$\")];\n}\n\nfunction buildJsonTreeNode(\n key: string,\n value: unknown,\n id: string,\n): JsonTreeNode {\n const children = getJsonChildren(value, id);\n return {\n id,\n key,\n value,\n preview: summarizeJsonValue(value),\n ...(children ? { children } : {}),\n };\n}\n\nfunction getJsonChildren(value: unknown, path: string) {\n if (Array.isArray(value)) {\n return value.map((entry, index) =>\n buildJsonTreeNode(String(index), entry, `${path}[${index}]`),\n );\n }\n\n if (isPlainObject(value)) {\n return Object.entries(value).map(([key, entry]) =>\n buildJsonTreeNode(key, entry, `${path}.${key}`),\n );\n }\n\n return undefined;\n}\n\nfunction summarizeJsonValue(value: unknown) {\n if (Array.isArray(value)) {\n return `[${value.length} item${value.length === 1 ? \"\" : \"s\"}]`;\n }\n\n if (isPlainObject(value)) {\n const count = Object.keys(value).length;\n return `{${count} key${count === 1 ? \"\" : \"s\"}}`;\n }\n\n if (typeof value === \"string\") {\n return JSON.stringify(value);\n }\n\n if (value === undefined) {\n return \"undefined\";\n }\n\n return String(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nconst CLICKY_DOWNLOAD_FRAME_ID = \"clicky-download-frame\";\n\nfunction triggerDownload(url: string) {\n if (typeof document === \"undefined\") return;\n\n let frame = document.getElementById(\n CLICKY_DOWNLOAD_FRAME_ID,\n ) as HTMLIFrameElement | null;\n if (!frame) {\n frame = document.createElement(\"iframe\");\n frame.id = CLICKY_DOWNLOAD_FRAME_ID;\n frame.name = CLICKY_DOWNLOAD_FRAME_ID;\n frame.title = \"Clicky download target\";\n frame.setAttribute(\"aria-hidden\", \"true\");\n frame.tabIndex = -1;\n frame.style.display = \"none\";\n document.body.appendChild(frame);\n }\n\n frame.src = url;\n}\n\nfunction isAbsoluteUrl(url: string) {\n return /^[a-z][a-z\\d+\\-.]*:/i.test(url) || url.startsWith(\"//\");\n}\n\nfunction ClickyNodeRenderer({ node }: ClickyNodeViewProps) {\n if (!node) return null;\n\n switch (node.kind) {\n case \"text\":\n return <ClickyText node={node} />;\n case \"link\":\n return <ClickyLinkNode node={node} />;\n case \"link-command\":\n return <ClickyLinkCommandNode node={node} />;\n case \"icon\":\n return <ClickyIconNode node={node} />;\n case \"list\":\n return <ClickyList node={node} />;\n case \"map\":\n return <ClickyMap node={node} />;\n case \"table\":\n return <ClickyTableNode node={node} />;\n case \"tree\":\n return <ClickyTreeNode node={node} />;\n case \"object-graph\":\n return <ObjectGraph roots={node.objects ?? []} />;\n case \"execution-tree\":\n return <ExecutionTree roots={node.executionRoots ?? []} />;\n case \"code\":\n return (\n <CodeBlock\n language={node.language}\n source={node.source ?? node.plain ?? \"\"}\n highlightedHtml={node.highlightedHtml}\n />\n );\n case \"heading\":\n return <ClickyHeading node={node} />;\n case \"blockquote\":\n return <ClickyBlockquote node={node} />;\n case \"admonition\":\n return <ClickyAdmonition node={node} />;\n case \"footnote-ref\":\n return <ClickyFootnoteRef node={node} />;\n case \"footnote\":\n return <ClickyFootnote node={node} />;\n case \"footnotes\":\n return <ClickyFootnotes node={node} />;\n case \"collapsed\":\n return <ClickyCollapsed node={node} />;\n case \"stacktrace\":\n return <ClickyStackTraceNode node={node} />;\n case \"button\":\n return <ClickyButtonNode node={node} />;\n case \"button-group\":\n return <ClickyButtonGroup node={node} />;\n case \"html\":\n return <ClickyHtmlNode node={node} />;\n case \"comment\":\n return <ClickyComment node={node} />;\n case \"badge\":\n return <ClickyBadgeNode node={node} />;\n default:\n return (\n <pre className=\"rounded-md border border-border bg-muted p-density-3 text-xs\">\n {JSON.stringify(node, null, 2)}\n </pre>\n );\n }\n}\n\nexport { ClickyNodeRenderer as ClickyNodeView };\n\nfunction ClickyComment({ node }: { node: ClickyNode }) {\n const text = node.text ?? node.plain;\n const content = <ClickyInlineContent node={node} />;\n const maxWidth =\n node.style?.maxWidth && node.style.maxWidth > 0\n ? Math.min(node.style.maxWidth, 50)\n : 50;\n const maxLines =\n node.style?.maxLines && node.style.maxLines > 0\n ? Math.min(node.style.maxLines, 3)\n : 3;\n const inlineStyle = toInlineStyle(\n {\n ...node.style,\n maxWidth,\n maxLines,\n },\n text,\n );\n\n if (!text && !node.children?.length) return null;\n\n return (\n <div\n className={cn(\n \"mt-1 text-xs leading-snug text-muted-foreground\",\n node.style?.className,\n )}\n style={inlineStyle}\n title={node.tooltip?.plain ?? text}\n >\n {content}\n </div>\n );\n}\n\nfunction ClickyText({ node }: { node: ClickyNode }) {\n const inlineStyle = toInlineStyle(node.style, node.text ?? node.plain);\n const content = <ClickyInlineContent node={node} />;\n\n if (!node.style && !node.tooltip) {\n return <>{content}</>;\n }\n\n return (\n <span\n style={inlineStyle}\n title={node.tooltip?.plain}\n className={cn(\n node.style?.className,\n (node.text ?? \"\").includes(\"\\n\") && \"whitespace-pre-wrap\",\n )}\n >\n {content}\n </span>\n );\n}\n\nfunction ClickyInlineContent({ node }: { node: ClickyNode }) {\n return (\n <>\n {node.text}\n {node.children?.map((child, index) => (\n <Fragment key={index}>\n <ClickyNodeRenderer node={child} />\n </Fragment>\n ))}\n </>\n );\n}\n\nfunction ClickyLinkNode({ node }: { node: ClickyNode }) {\n const content = <ClickyInlineContent node={node} />;\n const inlineStyle = toInlineStyle(node.style, node.text ?? node.plain);\n const target = browserAnchorTarget(node.target);\n const rel = target === \"_blank\" ? \"noopener noreferrer\" : undefined;\n\n if (!node.href) {\n return <span style={inlineStyle}>{content}</span>;\n }\n\n return (\n <a\n href={node.href}\n target={target}\n rel={rel}\n title={node.tooltip?.plain}\n style={inlineStyle}\n className={cn(node.style?.className, \"inline cursor-pointer\")}\n >\n {content}\n </a>\n );\n}\n\nfunction ClickyLinkCommandNode({ node }: { node: ClickyNode }) {\n const runtime = useContext(ClickyRuntimeContext);\n const request = useMemo(() => clickyNodeToCommandRequest(node), [node]);\n const resolved = useMemo(\n () =>\n resolveClickyCommand(request, runtime.commandRuntime, runtime.operations),\n [request, runtime.commandRuntime, runtime.operations],\n );\n const target = request.target ?? \"Dialog\";\n const hasRuntime = runtime.commandRuntime != null;\n const [dialogOpen, setDialogOpen] = useState(false);\n const [expanded, setExpanded] = useState(false);\n\n if (!hasRuntime) {\n return (\n <span title={node.tooltip?.plain} className={cn(node.style?.className)}>\n <ClickyInlineContent node={node} />\n </span>\n );\n }\n\n if (target === \"_self\" || target === \"_window\" || target === \"_tab\") {\n const href =\n runtime.commandRuntime?.hrefForCommand?.(resolved) ??\n buildCommandExecutionHref(resolved);\n\n if (!href) {\n return (\n <span title={node.tooltip?.plain} className={cn(node.style?.className)}>\n <ClickyInlineContent node={node} />\n </span>\n );\n }\n\n return (\n <a\n href={href}\n target={browserAnchorTarget(target)}\n rel={target === \"_self\" ? undefined : \"noopener noreferrer\"}\n title={node.tooltip?.plain}\n style={toInlineStyle(node.style, node.text ?? node.plain)}\n className={cn(node.style?.className, \"inline cursor-pointer\")}\n >\n <ClickyInlineContent node={node} />\n </a>\n );\n }\n\n if (target === \"_clicky\") {\n return (\n <ClickyLinkCommandTrigger\n node={node}\n onClick={() => runtime.commandRuntime?.onNavigate?.(resolved)}\n />\n );\n }\n\n if (target === \"Hover\") {\n return (\n <HoverCard\n delay={75}\n cardClassName=\"w-[28rem] max-w-[calc(100vw-2rem)] whitespace-normal p-0\"\n trigger={<ClickyLinkCommandTrigger node={node} />}\n >\n <div className=\"max-h-[26rem] overflow-auto p-density-3\">\n <ClickyAsyncCommandResult resolved={resolved} />\n </div>\n </HoverCard>\n );\n }\n\n if (target === \"Expand\") {\n return (\n <span className=\"inline\">\n <ClickyLinkCommandTrigger\n node={node}\n ariaExpanded={expanded}\n onClick={() => setExpanded((current) => !current)}\n />\n {expanded && (\n <div className=\"mt-2 rounded-md border border-border bg-background p-density-3\">\n <ClickyAsyncCommandResult resolved={resolved} />\n </div>\n )}\n </span>\n );\n }\n\n return (\n <>\n <ClickyLinkCommandTrigger\n node={node}\n ariaExpanded={dialogOpen}\n onClick={() => setDialogOpen(true)}\n />\n <ClickyCommandDialog\n open={dialogOpen}\n onClose={() => setDialogOpen(false)}\n resolved={resolved}\n />\n </>\n );\n}\n\nfunction ClickyLinkCommandTrigger({\n node,\n onClick,\n ariaExpanded,\n}: {\n node: ClickyNode;\n onClick?: () => void;\n ariaExpanded?: boolean;\n}) {\n const inlineStyle = toInlineStyle(node.style, node.text ?? node.plain);\n\n const handleClick = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n onClick?.();\n };\n\n return (\n <button\n type=\"button\"\n title={node.tooltip?.plain}\n aria-expanded={ariaExpanded}\n onClick={handleClick}\n style={inlineStyle}\n className={cn(\n \"inline cursor-pointer appearance-none border-0 bg-transparent p-0 text-left align-baseline text-inherit\",\n node.style?.className,\n )}\n >\n <ClickyInlineContent node={node} />\n </button>\n );\n}\n\nfunction ClickyCommandDialog({\n open,\n onClose,\n resolved,\n}: {\n open: boolean;\n onClose: () => void;\n resolved: ClickyResolvedCommand;\n}) {\n const runtime = useContext(ClickyRuntimeContext);\n const operation = resolved.operation;\n const parameters = operation?.operation.parameters ?? [];\n const initialValues = useMemo(\n () => buildCommandParameterValues(parameters, resolved.request),\n [parameters, resolved.request],\n );\n const [result, setResult] = useState<unknown>(null);\n const [error, setError] = useState(\"\");\n const [isExecuting, setIsExecuting] = useState(false);\n const [hasAutoStarted, setHasAutoStarted] = useState(false);\n const shouldAutoRun =\n open &&\n resolved.request.autoRun === true &&\n operation != null &&\n missingRequiredParameters(parameters, initialValues).length === 0;\n\n useEffect(() => {\n if (!open) {\n setHasAutoStarted(false);\n setResult(null);\n setError(\"\");\n }\n }, [open, resolved.request.command]);\n\n async function runCommand(values: ParameterValues) {\n if (!runtime.commandRuntime || !operation) {\n return;\n }\n\n setIsExecuting(true);\n setError(\"\");\n\n try {\n const response = await executeClickyCommand(\n runtime.commandRuntime.client,\n operation,\n values,\n );\n setResult(response);\n } catch (err) {\n setResult(null);\n setError(\n err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n );\n } finally {\n setIsExecuting(false);\n }\n }\n\n useEffect(() => {\n if (!shouldAutoRun || hasAutoStarted) {\n return;\n }\n\n setHasAutoStarted(true);\n void runCommand(initialValues);\n }, [hasAutoStarted, initialValues, shouldAutoRun]);\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={operation?.operation.summary || resolved.request.command}\n size=\"xl\"\n >\n <div className=\"space-y-4\">\n {operation ? (\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-muted-foreground\">\n <span className=\"rounded-md border border-border bg-muted px-2 py-1 font-medium uppercase\">\n {operation.method}\n </span>\n <code>{operation.path}</code>\n </div>\n ) : runtime.operationsLoading ? (\n <ClickyNotice\n title=\"Loading commands\"\n message=\"Resolving the command definition.\"\n />\n ) : (\n <ClickyNotice\n title=\"Unknown command\"\n message={`No operation matched \"${resolved.request.command}\".`}\n tone=\"destructive\"\n />\n )}\n\n {operation && (\n <div className=\"rounded-md border border-border bg-muted/20 p-density-3\">\n <FilterForm\n client={runtime.commandRuntime!.client}\n path={operation.path}\n method={operation.method}\n parameters={parameters}\n initialValues={initialValues}\n isSubmitting={isExecuting}\n submitLabel=\"Run command\"\n submittingLabel=\"Running…\"\n onSubmit={runCommand}\n />\n </div>\n )}\n\n {error ? (\n <ClickyNotice\n title=\"Command failed\"\n message={error}\n tone=\"destructive\"\n />\n ) : (\n <ClickyCommandResponse\n response={result}\n pending={isExecuting}\n emptyMessage=\"Run the command to load a Clicky response.\"\n />\n )}\n </div>\n </Modal>\n );\n}\n\nfunction ClickyAsyncCommandResult({\n resolved,\n}: {\n resolved: ClickyResolvedCommand;\n}) {\n const runtime = useContext(ClickyRuntimeContext);\n const operation = resolved.operation;\n const parameters = operation?.operation.parameters ?? [];\n const initialValues = useMemo(\n () => buildCommandParameterValues(parameters, resolved.request),\n [parameters, resolved.request],\n );\n const missing = useMemo(\n () => missingRequiredParameters(parameters, initialValues),\n [initialValues, parameters],\n );\n\n const query = useQuery({\n queryKey: [\n \"clicky-command\",\n resolved.request.command,\n operation?.method,\n operation?.path,\n initialValues,\n ],\n enabled:\n runtime.commandRuntime != null &&\n operation != null &&\n missing.length === 0,\n retry: 0,\n queryFn: async () =>\n executeClickyCommand(\n runtime.commandRuntime!.client,\n operation!,\n initialValues,\n ),\n });\n\n if (!runtime.commandRuntime) {\n return (\n <ClickyNotice\n title=\"Command runtime unavailable\"\n message=\"This Clicky view was rendered without a command runtime.\"\n tone=\"warning\"\n />\n );\n }\n\n if (!operation) {\n if (runtime.operationsLoading) {\n return (\n <ClickyNotice\n title=\"Loading commands\"\n message=\"Resolving the command definition.\"\n />\n );\n }\n return (\n <ClickyNotice\n title=\"Unknown command\"\n message={`No operation matched \"${resolved.request.command}\".`}\n tone=\"destructive\"\n />\n );\n }\n\n if (missing.length > 0) {\n return (\n <ClickyNotice\n title=\"Missing required parameters\"\n message={`This link is missing: ${missing.map((param) => prettifyName(param.name)).join(\", \")}.`}\n tone=\"warning\"\n />\n );\n }\n\n if (query.isPending) {\n return (\n <ClickyNotice\n title=\"Running command\"\n message=\"Loading Clicky response…\"\n />\n );\n }\n\n if (query.isError) {\n return (\n <ClickyNotice\n title=\"Command failed\"\n message={\n query.error instanceof Error ? query.error.message : \"Request failed\"\n }\n tone=\"destructive\"\n />\n );\n }\n\n return (\n <ClickyCommandResponse\n response={query.data}\n emptyMessage=\"No response body returned.\"\n />\n );\n}\n\nfunction ClickyCommandResponse({\n response,\n pending = false,\n emptyMessage,\n}: {\n response: unknown;\n pending?: boolean;\n emptyMessage: string;\n}) {\n if (pending) {\n return (\n <ClickyNotice\n title=\"Running command\"\n message=\"Loading Clicky response…\"\n />\n );\n }\n\n if (!response) {\n return <ClickyNotice title=\"No response\" message={emptyMessage} />;\n }\n\n const parsedPayload = isExecutionResponse(response)\n ? (response.parsed ?? parseJsonBody(response))\n : response;\n const rawText = isExecutionResponse(response)\n ? response.stdout || response.output || response.message || \"\"\n : typeof response === \"string\"\n ? response\n : JSON.stringify(response, null, 2);\n const clickyPayload =\n typeof parsedPayload === \"string\" ||\n (parsedPayload != null && typeof parsedPayload === \"object\")\n ? parsedPayload\n : rawText;\n const parsedClicky =\n clickyPayload === \"\"\n ? null\n : parseClickyData(clickyPayload as ClickyProps[\"data\"]);\n\n if (parsedClicky?.ok) {\n return (\n <div className=\"rounded-md border border-border bg-background p-density-3\">\n <ClickyNodeRenderer node={parsedClicky.document.node} />\n </div>\n );\n }\n\n if (parsedPayload != null && typeof parsedPayload === \"object\") {\n return <ClickyJsonTree value={parsedPayload} />;\n }\n\n return <ClickyTextPreview title=\"Response body\" content={rawText} />;\n}\n\nfunction ClickyIconNode({ node }: { node: ClickyNode }) {\n const inlineStyle = toInlineStyle(node.style, node.plain ?? node.unicode);\n\n return (\n <span\n style={inlineStyle}\n title={node.tooltip?.plain}\n className=\"inline-flex items-center\"\n >\n {node.iconify ? (\n <Icon name={node.iconify} />\n ) : (\n <span>{node.unicode ?? node.plain}</span>\n )}\n </span>\n );\n}\n\nfunction ClickyHeading({ node }: { node: ClickyNode }) {\n const level = clampHeadingLevel(node.level);\n const content = node.content ?? clickyNodeFallbackText(node);\n const inlineStyle = toInlineStyle(node.style, clickyNodeText(content));\n const className = cn(\n headingClassName(level),\n \"text-foreground\",\n node.style?.className,\n );\n\n switch (level) {\n case 1:\n return (\n <h1 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h1>\n );\n case 2:\n return (\n <h2 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h2>\n );\n case 3:\n return (\n <h3 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h3>\n );\n case 4:\n return (\n <h4 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h4>\n );\n case 5:\n return (\n <h5 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h5>\n );\n default:\n return (\n <h6 className={className} style={inlineStyle}>\n {content && <ClickyNodeRenderer node={content} />}\n </h6>\n );\n }\n}\n\nfunction clampHeadingLevel(level: number | undefined) {\n if (!Number.isFinite(level)) return 1;\n return Math.min(6, Math.max(1, Math.trunc(level ?? 1)));\n}\n\nfunction headingClassName(level: number) {\n switch (level) {\n case 1:\n return \"text-2xl font-semibold leading-tight\";\n case 2:\n return \"text-xl font-semibold leading-tight\";\n case 3:\n return \"text-lg font-semibold leading-snug\";\n case 4:\n return \"text-base font-semibold leading-snug\";\n case 5:\n return \"text-sm font-semibold leading-snug\";\n default:\n return \"text-xs font-semibold uppercase leading-snug text-muted-foreground\";\n }\n}\n\nfunction ClickyBlockquote({ node }: { node: ClickyNode }) {\n const content = node.content ?? clickyNodeFallbackText(node);\n if (!content) return null;\n\n return (\n <blockquote className=\"border-l-4 border-border pl-density-3 text-sm leading-relaxed text-muted-foreground\">\n <ClickyNodeRenderer node={content} />\n </blockquote>\n );\n}\n\nfunction ClickyAdmonition({ node }: { node: ClickyNode }) {\n const severity = normalizeAdmonitionSeverity(node.severity);\n const title = node.label ?? {\n kind: \"text\" as const,\n text: prettifyName(severity),\n plain: prettifyName(severity),\n };\n const tone = admonitionToneClassName(severity);\n\n return (\n <div\n role={severity === \"danger\" || severity === \"warning\" ? \"alert\" : \"note\"}\n data-severity={severity}\n className={cn(\n \"rounded-md border px-density-3 py-density-2\",\n tone.container,\n )}\n >\n <div className={cn(\"text-sm font-semibold\", tone.title)}>\n <ClickyNodeRenderer node={title} />\n </div>\n {node.content && (\n <div className={cn(\"mt-1 text-sm leading-relaxed\", tone.body)}>\n <ClickyNodeRenderer node={node.content} />\n </div>\n )}\n </div>\n );\n}\n\nfunction normalizeAdmonitionSeverity(severity: string | undefined) {\n const normalized = (severity ?? \"note\").trim().toLowerCase();\n if (\n normalized === \"info\" ||\n normalized === \"tip\" ||\n normalized === \"warning\" ||\n normalized === \"danger\" ||\n normalized === \"note\"\n ) {\n return normalized;\n }\n return \"note\";\n}\n\nfunction admonitionToneClassName(severity: string) {\n switch (severity) {\n case \"info\":\n return {\n container: \"border-sky-500/30 bg-sky-500/5\",\n title: \"text-sky-800 dark:text-sky-300\",\n body: \"text-sky-950/80 dark:text-sky-100/80\",\n };\n case \"tip\":\n return {\n container: \"border-emerald-500/30 bg-emerald-500/5\",\n title: \"text-emerald-800 dark:text-emerald-300\",\n body: \"text-emerald-950/80 dark:text-emerald-100/80\",\n };\n case \"warning\":\n return {\n container: \"border-yellow-500/40 bg-yellow-500/10\",\n title: \"text-yellow-800 dark:text-yellow-300\",\n body: \"text-yellow-950/80 dark:text-yellow-100/80\",\n };\n case \"danger\":\n return {\n container: \"border-destructive/40 bg-destructive/10\",\n title: \"text-destructive\",\n body: \"text-destructive/90\",\n };\n default:\n return {\n container: \"border-border bg-muted/30\",\n title: \"text-foreground\",\n body: \"text-muted-foreground\",\n };\n }\n}\n\nfunction ClickyFootnoteRef({ node }: { node: ClickyNode }) {\n const id = normalizeFootnoteId(node.id);\n if (!id) return null;\n\n return (\n <sup id={footnoteDomId(\"fnref\", id)} className=\"align-super text-[0.75em]\">\n <a\n href={`#${footnoteDomId(\"fn\", id)}`}\n aria-label={`Footnote ${id}`}\n className=\"text-primary hover:underline\"\n >\n {`[^${id}]`}\n </a>\n </sup>\n );\n}\n\nfunction ClickyFootnote({ node }: { node: ClickyNode }) {\n const id = normalizeFootnoteId(node.id);\n if (!id) return null;\n\n return (\n <div id={footnoteDomId(\"fn\", id)} className=\"text-sm text-muted-foreground\">\n <span className=\"mr-2 font-mono text-xs text-foreground\">{`[^${id}]`}</span>\n {node.content && <ClickyNodeRenderer node={node.content} />}\n <FootnoteBackLink id={id} />\n </div>\n );\n}\n\nfunction ClickyFootnotes({ node }: { node: ClickyNode }) {\n const items = (node.items ?? []).filter((item) =>\n normalizeFootnoteId(item.id),\n );\n if (items.length === 0) return null;\n\n return (\n <section\n aria-label=\"Footnotes\"\n className=\"border-t border-border pt-density-2 text-xs text-muted-foreground\"\n >\n <ol className=\"ml-5 list-decimal space-y-1\">\n {items.map((item, index) => (\n <li\n key={`${item.id}-${index}`}\n id={footnoteDomId(\"fn\", item.id ?? \"\")}\n >\n {item.content && <ClickyNodeRenderer node={item.content} />}\n <FootnoteBackLink id={item.id ?? \"\"} />\n </li>\n ))}\n </ol>\n </section>\n );\n}\n\nfunction FootnoteBackLink({ id }: { id: string }) {\n return (\n <a\n href={`#${footnoteDomId(\"fnref\", id)}`}\n aria-label={`Back to footnote reference ${id}`}\n className=\"ml-2 text-primary hover:underline\"\n >\n back\n </a>\n );\n}\n\nfunction normalizeFootnoteId(id: string | undefined) {\n return (id ?? \"\").trim();\n}\n\nfunction footnoteDomId(prefix: \"fn\" | \"fnref\", id: string) {\n return `${prefix}-${encodeURIComponent(id)}`;\n}\n\nfunction clickyNodeFallbackText(node: ClickyNode): ClickyNode | undefined {\n const text = node.text ?? node.plain;\n return text ? { kind: \"text\", text, plain: text } : undefined;\n}\n\nfunction ClickyList({ node }: { node: ClickyNode }) {\n const items = node.items ?? [];\n if (items.length === 0) return null;\n\n if (node.inline) {\n return (\n <span className=\"inline-flex flex-wrap items-start gap-1\">\n {items.map((item, index) => (\n <Fragment key={index}>\n {index > 0 && <span className=\"text-muted-foreground\">,</span>}\n <span className=\"inline-flex items-center gap-1\">\n {!node.ordered && node.bullet && (\n <ClickyNodeRenderer node={node.bullet} />\n )}\n {node.ordered && (\n <span className=\"text-muted-foreground\">{index + 1}.</span>\n )}\n <ClickyNodeRenderer node={item} />\n </span>\n </Fragment>\n ))}\n </span>\n );\n }\n\n if (node.unstyled) {\n return (\n <div className=\"space-y-1\">\n {items.map((item, index) => (\n <div key={index} className=\"flex items-start gap-2\">\n {!node.ordered && node.bullet && (\n <ClickyNodeRenderer node={node.bullet} />\n )}\n {node.ordered && (\n <span className=\"text-muted-foreground\">{index + 1}.</span>\n )}\n <div className=\"min-w-0 flex-1\">\n <ClickyNodeRenderer node={item} />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n const Tag = node.ordered ? \"ol\" : \"ul\";\n const listClass = node.ordered ? \"list-decimal\" : \"list-disc\";\n\n return (\n <Tag className={cn(\"ml-5 space-y-1 text-sm\", listClass)}>\n {items.map((item, index) => (\n <li key={index}>\n <ClickyNodeRenderer node={item} />\n </li>\n ))}\n </Tag>\n );\n}\n\nfunction ClickyMap({ node }: { node: ClickyNode }) {\n const runtime = useContext(ClickyRuntimeContext);\n const fields = (node.fields ?? []).filter(\n (field) => !(runtime.tablePagination && isPaginationMetadataField(field)),\n );\n if (fields.length === 0) return null;\n\n const inlineFields = fields.filter((field) => isInlineNode(field.value));\n const blockFields = fields.filter((field) => !isInlineNode(field.value));\n\n // A map that is nothing but a wrapper around one table renders the table\n // directly — no field label, no bordered box — so it behaves exactly like a\n // bare table node (same fill/scroll, e.g. inside a scrollBody=false modal).\n // Multi-field maps keep the labelled/bordered section layout below.\n const unwrapsSingleTable =\n inlineFields.length === 0 &&\n blockFields.length === 1 &&\n blockFields[0]?.value.kind === \"table\";\n\n if (unwrapsSingleTable) {\n return <ClickyNodeRenderer node={blockFields[0]!.value} />;\n }\n\n return (\n <div className=\"space-y-density-4\">\n {inlineFields.length > 0 && (\n <dl className=\"grid gap-density-3 md:grid-cols-2\">\n {inlineFields.map((field) => (\n <div key={field.name}>\n <dt className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {field.label || prettifyName(field.name)}\n </dt>\n <dd className=\"mt-1 text-sm text-foreground\">\n <ClickyNodeRenderer node={field.value} />\n </dd>\n </div>\n ))}\n </dl>\n )}\n\n {blockFields.map((field) => (\n <section key={field.name} className=\"space-y-2\">\n <div className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {field.label || prettifyName(field.name)}\n </div>\n <div className=\"rounded-md border border-border bg-background p-density-3\">\n <ClickyNodeRenderer node={field.value} />\n </div>\n </section>\n ))}\n </div>\n );\n}\n\nfunction isPaginationMetadataField(field: ClickyField) {\n const name = (field.label || field.name || \"\").toLowerCase();\n if (name !== \"page\" || field.value.kind !== \"map\") return false;\n const keys = new Set(\n (field.value.fields ?? []).map((item) => item.name.toLowerCase()),\n );\n return keys.has(\"limit\") && keys.has(\"offset\") && keys.has(\"total\");\n}\n\nfunction ClickyTableNode({ node }: { node: ClickyNode }) {\n return (\n <ClickyTable\n columns={node.columns ?? []}\n rows={node.rows ?? []}\n {...(node.autoFilter !== undefined\n ? { autoFilter: node.autoFilter }\n : {})}\n />\n );\n}\n\nexport function ClickyTable({\n columns,\n rows,\n autoFilter,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n search,\n timeRange,\n externalFilters,\n pagination,\n rowSelection,\n menuActions,\n}: ClickyTableProps) {\n const runtime = useContext(ClickyRuntimeContext);\n const rowClick = onTableRowClick ?? runtime.onTableRowClick;\n const rowHref = getTableRowHref ?? runtime.getTableRowHref;\n const rowClickable = isTableRowClickable ?? runtime.isTableRowClickable;\n const effectiveSearch = search ?? runtime.tableSearch;\n const effectiveTimeRange = timeRange ?? runtime.tableTimeRange;\n const effectiveExternalFilters =\n externalFilters ?? runtime.tableExternalFilters;\n const effectivePagination = pagination ?? runtime.tablePagination;\n const effectiveRowSelection = rowSelection ?? runtime.tableRowSelection;\n const effectiveMenuActions = menuActions ?? runtime.tableMenuActions;\n\n if (columns.length === 0) {\n return <div className=\"text-sm text-muted-foreground\">No data</div>;\n }\n\n if (shouldRenderRowsAsCollapsedStructs(columns, rows)) {\n return <ClickyCollapsedStructRows columns={columns} rows={rows} />;\n }\n\n const tableColumns: DataTableColumn<ClickyRow>[] = columns.map((column) => {\n const tagColumn = isClickyTagColumn(column);\n const keyValueColumn = isClickyKeyValueColumn(column);\n const jsonColumn = column.type === \"json\";\n const base: DataTableColumn<ClickyRow> = {\n key: `cells.${column.name}`,\n label: column.header ? (\n <ClickyNodeRenderer node={column.header} />\n ) : (\n column.label || prettifyName(column.name)\n ),\n ...(column.align ? { align: column.align } : {}),\n ...(column.sortable !== undefined ? { sortable: column.sortable } : {}),\n ...(column.filterable !== undefined\n ? { filterable: column.filterable }\n : {}),\n ...(column.grow !== undefined ? { grow: column.grow } : {}),\n ...(column.shrink !== undefined ? { shrink: column.shrink } : {}),\n };\n\n if (keyValueColumn) {\n return {\n ...base,\n kind: \"tags\",\n render: (value) => <ClickyKeyValueCell node={value as ClickyNode} />,\n sortValue: (value) => clickyKeyValueText(value as ClickyNode),\n filterValue: (value) => clickyKeyValueTokens(value as ClickyNode),\n };\n }\n\n if (jsonColumn) {\n return {\n ...base,\n render: (value) => <ClickyJSONCell node={value as ClickyNode} />,\n sortValue: (value) => clickyJSONText(value as ClickyNode),\n filterValue: (value) => clickyJSONText(value as ClickyNode),\n };\n }\n\n if (tagColumn) {\n return {\n ...base,\n kind: \"tags\",\n render: (value) => {\n const tags = clickyNodeTags(value as ClickyNode, column);\n return <TagList tags={tags} maxVisible={3} />;\n },\n sortValue: (value) =>\n clickyNodeTags(value as ClickyNode, column).length,\n filterValue: (value) =>\n clickyNodeTags(value as ClickyNode, column).map((tag) => tag.token),\n };\n }\n\n return {\n ...base,\n ...(column.kind ? { kind: column.kind } : {}),\n render: (value) => <ClickyNodeRenderer node={value as ClickyNode} />,\n sortValue: (value) => clickyNodeText(value as ClickyNode),\n filterValue: (value) => clickyNodeText(value as ClickyNode),\n };\n });\n\n const defaultSortColumn =\n columns.find((column) => column.sortable !== false) ?? columns[0];\n\n // Fill a bounded flex-column parent (e.g. a scrollBody=false modal) so the\n // table's own scroll region scrolls rather than the whole dialog; `flex-1` is\n // inert in an unbounded/block parent, so page-level tables size to content.\n return (\n <DataTable<ClickyRow>\n className=\"min-h-0 flex-1\"\n data={rows}\n columns={tableColumns}\n {...(autoFilter !== undefined ? { autoFilter } : {})}\n {...(defaultSortColumn\n ? {\n defaultSort: {\n key: `cells.${defaultSortColumn.name}`,\n dir: \"asc\" as const,\n },\n }\n : {})}\n getRowId={(row, index) =>\n effectiveRowSelection?.getRowId(row, index) ??\n `${index}-${columns\n .map((column) => clickyNodeText(row.cells[column.name]))\n .filter(Boolean)\n .join(\"|\")}`\n }\n {...(effectiveRowSelection\n ? { rowSelection: effectiveRowSelection }\n : {})}\n {...(rowClick ? { onRowClick: rowClick } : {})}\n {...(rowHref ? { getRowHref: rowHref } : {})}\n {...(rowClick && (rowClickable || rowHref)\n ? {\n isRowClickable: rowClickable ?? ((row) => Boolean(rowHref?.(row))),\n }\n : {})}\n {...(effectiveSearch ? { externalSearch: effectiveSearch } : {})}\n {...(effectiveTimeRange ? { externalTimeRange: effectiveTimeRange } : {})}\n {...(effectiveExternalFilters\n ? { externalFilters: effectiveExternalFilters }\n : {})}\n {...(effectivePagination ? { pagination: effectivePagination } : {})}\n {...(effectiveMenuActions ? { menuActions: effectiveMenuActions } : {})}\n />\n );\n}\n\nfunction ClickyCollapsedStructRows({\n columns,\n rows,\n}: {\n columns: ClickyColumn[];\n rows: ClickyRow[];\n}) {\n return (\n <div className=\"space-y-2\">\n {rows.map((row, index) => {\n const label = rowStructLabel(row, columns, index);\n const content = rowAsMap(row, columns);\n\n return (\n <details\n key={rowStructKey(row, columns, index)}\n className=\"rounded-md border border-border bg-background\"\n >\n <summary className=\"cursor-pointer px-3 py-2 text-sm font-medium text-foreground\">\n {label}\n </summary>\n <div className=\"border-t border-border p-3\">\n <ClickyMap node={content} />\n </div>\n </details>\n );\n })}\n </div>\n );\n}\n\nfunction shouldRenderRowsAsCollapsedStructs(\n columns: ClickyColumn[],\n rows: ClickyRow[],\n) {\n if (rows.length === 0) return false;\n if (\n columns.some(\n (column) => isClickyKeyValueColumn(column) || column.type === \"json\",\n )\n ) {\n return false;\n }\n\n return rows.every((row) => {\n const cells = columns\n .map((column) => row.cells[column.name])\n .filter(Boolean);\n if (cells.length === 0) return false;\n\n const complexCells = cells.filter(isStructCellNode);\n return complexCells.length > 0 && complexCells.length === cells.length;\n });\n}\n\nfunction isClickyTagColumn(column: ClickyColumn) {\n if (column.kind === \"tags\") return true;\n\n const normalized = column.name.toLowerCase();\n return /(^|[._-])(tags?|labels?|annotations?)$/.test(normalized);\n}\n\nfunction isClickyKeyValueColumn(column: ClickyColumn) {\n return column.type === \"key_value\" || column.type === \"key_values\";\n}\n\ntype ClickyKeyValuePair = {\n key: string;\n value: ClickyNode;\n};\n\nfunction ClickyKeyValueCell({ node }: { node: ClickyNode | undefined }) {\n const pairs = clickyNodeKeyValues(node);\n if (pairs.length === 0) {\n const fallback = clickyNodeText(node).trim();\n return fallback ? (\n <span className=\"text-sm text-foreground\">{fallback}</span>\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n );\n }\n\n return (\n <dl className=\"grid grid-cols-[max-content_minmax(0,1fr)] gap-x-2 gap-y-1 text-xs\">\n {pairs.map((pair, index) => (\n <Fragment key={`${pair.key}-${index}`}>\n <dt className=\"font-medium text-muted-foreground\">{pair.key}</dt>\n <dd className=\"min-w-0 break-words text-foreground\">\n <ClickyNodeRenderer node={pair.value} />\n </dd>\n </Fragment>\n ))}\n </dl>\n );\n}\n\nfunction ClickyJSONCell({ node }: { node: ClickyNode | undefined }) {\n const value = clickyNodeJSONValue(node);\n return (\n <div\n className=\"max-h-40 min-w-40 max-w-xl overflow-auto text-xs\"\n onClick={(event) => event.stopPropagation()}\n >\n <JsonView data={value} defaultOpenDepth={0} />\n </div>\n );\n}\n\nfunction clickyNodeKeyValues(\n node: ClickyNode | undefined,\n): ClickyKeyValuePair[] {\n if (!node) return [];\n if (node.kind === \"map\") return clickyFieldsToKeyValues(node.fields ?? []);\n if (node.kind === \"list\") {\n return (node.items ?? []).flatMap((item) => clickyNodeKeyValues(item));\n }\n\n const source = node.kind === \"code\" ? node.source : (node.text ?? node.plain);\n if (!source) return [];\n try {\n return unknownToKeyValues(JSON.parse(source) as unknown);\n } catch {\n return [];\n }\n}\n\nfunction clickyFieldsToKeyValues(fields: ClickyField[]): ClickyKeyValuePair[] {\n const keyField = fields.find((field) => /^(key|name)$/i.test(field.name));\n const valueField = fields.find((field) => /^value$/i.test(field.name));\n if (keyField && valueField) {\n const key = clickyNodeText(keyField.value).trim();\n if (key) return [{ key, value: valueField.value }];\n }\n return fields.map((field) => ({\n key: field.label || field.name,\n value: field.value,\n }));\n}\n\nfunction unknownToKeyValues(value: unknown): ClickyKeyValuePair[] {\n if (Array.isArray(value)) return value.flatMap(unknownToKeyValues);\n if (!value || typeof value !== \"object\") return [];\n\n const object = value as Record<string, unknown>;\n const keyName = Object.keys(object).find((key) => /^(key|name)$/i.test(key));\n const valueName = Object.keys(object).find((key) => /^value$/i.test(key));\n if (keyName && valueName && typeof object[keyName] === \"string\") {\n return [\n {\n key: object[keyName],\n value: unknownToClickyNode(object[valueName]),\n },\n ];\n }\n\n return Object.keys(object)\n .sort((left, right) => left.localeCompare(right))\n .map((key) => ({ key, value: unknownToClickyNode(object[key]) }));\n}\n\nfunction unknownToClickyNode(value: unknown): ClickyNode {\n if (Array.isArray(value)) {\n return {\n kind: \"list\",\n plain: JSON.stringify(value),\n items: value.map(unknownToClickyNode),\n };\n }\n if (value && typeof value === \"object\") {\n const object = value as Record<string, unknown>;\n return {\n kind: \"map\",\n plain: JSON.stringify(value),\n fields: Object.keys(object)\n .sort((left, right) => left.localeCompare(right))\n .map((key) => ({ name: key, value: unknownToClickyNode(object[key]) })),\n };\n }\n const text = value === null ? \"null\" : String(value ?? \"\");\n return { kind: \"text\", text, plain: text };\n}\n\nfunction clickyKeyValueTokens(node: ClickyNode | undefined) {\n return clickyNodeKeyValues(node)\n .map((pair) => `${pair.key}=${clickyNodeCanonicalText(pair.value)}`)\n .filter((token) => !token.endsWith(\"=\"));\n}\n\nfunction clickyKeyValueText(node: ClickyNode | undefined) {\n return clickyKeyValueTokens(node).join(\", \");\n}\n\nfunction clickyNodeCanonicalText(node: ClickyNode | undefined) {\n const text = clickyNodeText(node).trim();\n if (text) return text;\n const value = clickyNodeJSONValue(node);\n return value === undefined ? \"\" : JSON.stringify(value);\n}\n\nfunction clickyNodeJSONValue(node: ClickyNode | undefined): unknown {\n if (!node) return undefined;\n if (node.kind === \"map\") {\n return Object.fromEntries(\n (node.fields ?? []).map((field) => [\n field.name,\n clickyNodeJSONValue(field.value),\n ]),\n );\n }\n if (node.kind === \"list\") {\n return (node.items ?? []).map(clickyNodeJSONValue);\n }\n const source =\n node.kind === \"code\"\n ? (node.source ?? node.plain)\n : (node.text ?? node.plain);\n if (source === undefined) return clickyNodeText(node);\n try {\n return JSON.parse(source) as unknown;\n } catch {\n return source;\n }\n}\n\nfunction clickyJSONText(node: ClickyNode | undefined) {\n const value = clickyNodeJSONValue(node);\n return value === undefined ? \"\" : JSON.stringify(value);\n}\n\nfunction clickyNodeTags(\n node: ClickyNode | undefined,\n column: ClickyColumn,\n): NormalizedTag[] {\n if (!isClickyTagColumn(column)) return [];\n\n const value = clickyNodeTagsValue(node);\n return normalizeTags(value);\n}\n\nfunction clickyNodeTagsValue(node: ClickyNode | undefined): TagsValue {\n if (!node) return [];\n\n if (node.kind === \"map\" && node.fields?.length) {\n return Object.fromEntries(\n node.fields\n .map((field) => [field.name, clickyNodeText(field.value)] as const)\n .filter(([, value]) => value.trim() !== \"\"),\n );\n }\n\n if (node.kind === \"list\" && node.items?.length) {\n return node.items.map((item) => clickyNodeText(item)).filter(Boolean);\n }\n\n const text = clickyNodeText(node).trim();\n if (!text) return [];\n\n return text\n .split(/[,\\s]+/)\n .map((value) => value.trim())\n .filter(Boolean);\n}\n\nfunction isStructCellNode(node: ClickyNode | undefined) {\n if (!node) return false;\n if (node.kind === \"map\") return (node.fields ?? []).length > 0;\n if (node.kind === \"table\") return (node.rows ?? []).length > 0;\n if (node.kind !== \"list\") return false;\n\n const items = node.items ?? [];\n return items.length > 0 && items.every(isStructCellNode);\n}\n\nfunction rowAsMap(row: ClickyRow, columns: ClickyColumn[]): ClickyNode {\n return {\n kind: \"map\",\n fields: columns.flatMap((column) => {\n const value = row.cells[column.name];\n if (!value) return [];\n return [\n {\n name: column.name,\n label:\n clickyNodeText(column.header) ||\n column.label ||\n prettifyName(column.name),\n value,\n },\n ];\n }),\n };\n}\n\nfunction rowStructLabel(\n row: ClickyRow,\n columns: ClickyColumn[],\n index: number,\n) {\n const entityLabel = singularizeLabel(\n columns.find((column) => hasMeaningfulText(row.cells[column.name]))\n ?.label ??\n columns[0]?.label ??\n columns[0]?.name ??\n \"Item\",\n );\n const title = rowTitle(row, columns);\n return title\n ? `${entityLabel} ${index + 1}: ${title}`\n : `${entityLabel} ${index + 1}`;\n}\n\nfunction rowStructKey(row: ClickyRow, columns: ClickyColumn[], index: number) {\n const title = rowTitle(row, columns);\n return `${index}-${title || columns.map((column) => clickyNodeText(row.cells[column.name])).join(\"|\")}`;\n}\n\nfunction rowTitle(row: ClickyRow, columns: ClickyColumn[]) {\n const preferredFieldNames = [\n \"name\",\n \"title\",\n \"agreementname\",\n \"companyname\",\n \"customernumber\",\n \"id\",\n \"guid\",\n ];\n\n for (const preferred of preferredFieldNames) {\n for (const column of columns) {\n const candidate = findFieldText(row.cells[column.name], preferred);\n if (candidate) return candidate;\n }\n }\n\n for (const column of columns) {\n const candidate = clickyNodeText(row.cells[column.name]).trim();\n if (candidate) return candidate;\n }\n\n return \"\";\n}\n\nfunction findFieldText(\n node: ClickyNode | undefined,\n preferredName: string,\n): string {\n if (!node) return \"\";\n\n if (node.kind === \"map\") {\n for (const field of node.fields ?? []) {\n if (normalizeFieldName(field.name) === preferredName) {\n const text = clickyNodeText(field.value).trim();\n if (text) return text;\n }\n }\n }\n\n for (const field of node.fields ?? []) {\n const text = findFieldText(field.value, preferredName);\n if (text) return text;\n }\n\n for (const item of node.items ?? []) {\n const text = findFieldText(item, preferredName);\n if (text) return text;\n }\n\n return \"\";\n}\n\nfunction hasMeaningfulText(node: ClickyNode | undefined) {\n return Boolean(\n clickyNodeText(node).trim() || (node?.fields ?? []).length > 0,\n );\n}\n\nfunction normalizeFieldName(name: string) {\n return name.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction singularizeLabel(label: string) {\n const normalized = prettifyName(label).trim();\n return normalized.endsWith(\"s\") ? normalized.slice(0, -1) : normalized;\n}\n\nfunction ClickyTreeNode({ node }: { node: ClickyNode }) {\n const roots = node.roots ?? [];\n if (roots.length === 0) return null;\n\n return (\n <Tree<ClickyTreeItem>\n roots={roots}\n getChildren={(item) => item.children}\n getKey={(item) => item.id}\n defaultOpen={(_, depth) => depth < 1}\n renderRow={({ node: item }) => (\n <div className=\"min-w-0 flex-1 truncate\">\n <ClickyNodeRenderer node={item.label} />\n </div>\n )}\n />\n );\n}\n\nfunction isBadgeShape(value: string | undefined): value is BadgeShape {\n return value === \"pill\" || value === \"rounded\" || value === \"square\";\n}\n\nfunction ClickyBadgeNode({ node }: { node: ClickyNode }) {\n const props: ComponentProps<typeof Badge> = { variant: \"label\" };\n if (node.badgeLabel !== undefined) props.label = node.badgeLabel;\n if (node.badgeValue !== undefined) props.value = node.badgeValue;\n if (node.badgeColor !== undefined) props.color = node.badgeColor;\n if (node.badgeText !== undefined) props.textColor = node.badgeText;\n if (node.badgeIcon !== undefined) props.icon = node.badgeIcon;\n if (isBadgeShape(node.badgeShape)) props.shape = node.badgeShape;\n return <Badge {...props} />;\n}\n\nfunction ClickyStackTraceNode({ node }: { node: ClickyNode }) {\n const input = {\n causedBy: node.causedBy ?? [],\n frames: node.frames ?? [],\n language: \"java\" as const,\n ...(node.exceptionClass !== undefined\n ? { exceptionClass: node.exceptionClass }\n : {}),\n ...(node.message !== undefined ? { message: node.message } : {}),\n };\n\n return <StackTrace input={input} className=\"space-y-1\" />;\n}\n\nfunction ClickyCollapsed({ node }: { node: ClickyNode }) {\n return (\n <details className=\"rounded-md border border-border bg-background\">\n <summary className=\"cursor-pointer px-3 py-2 text-sm font-medium text-foreground\">\n <ClickyNodeRenderer node={node.label} />\n </summary>\n {node.content && (\n <div className=\"border-t border-border px-3 py-3\">\n <ClickyNodeRenderer node={node.content} />\n </div>\n )}\n </details>\n );\n}\n\nfunction ClickyButtonNode({ node }: { node: ClickyNode }) {\n const title = [node.id, node.payload].filter(Boolean).join(\"\\n\") || undefined;\n const content = node.label ? (\n <ClickyNodeRenderer node={node.label} />\n ) : (\n node.text\n );\n\n if (node.href) {\n return (\n <a\n href={node.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={title}\n className=\"inline-flex items-center rounded-md border border-border bg-background px-3 py-1.5 text-sm font-medium text-foreground hover:bg-accent\"\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n title={title}\n className=\"inline-flex items-center rounded-md border border-border bg-muted px-3 py-1.5 text-sm font-medium text-foreground\"\n >\n {content}\n </button>\n );\n}\n\nfunction ClickyButtonGroup({ node }: { node: ClickyNode }) {\n const items = node.items ?? [];\n if (items.length === 0) return null;\n\n return (\n <div className=\"flex flex-wrap gap-2\">\n {items.map((item, index) => (\n <ClickyNodeRenderer key={index} node={item} />\n ))}\n </div>\n );\n}\n\nfunction ClickyHtmlNode({ node }: { node: ClickyNode }) {\n const sanitized = sanitizeHtml(node.html ?? \"\");\n if (!sanitized) return null;\n\n const Tag = isBlockHtml(sanitized) ? \"div\" : \"span\";\n return <Tag dangerouslySetInnerHTML={{ __html: sanitized }} />;\n}\n\nfunction toInlineStyle(\n style?: ClickyStyle,\n text?: string,\n): CSSProperties | undefined {\n if (!style)\n return text?.includes(\"\\n\") ? { whiteSpace: \"pre-wrap\" } : undefined;\n\n const inlineStyle: CSSProperties = {};\n\n if (style.color) inlineStyle.color = style.color;\n if (style.backgroundColor)\n inlineStyle.backgroundColor = style.backgroundColor;\n if (style.bold) inlineStyle.fontWeight = 700;\n if (style.faint) inlineStyle.opacity = 0.7;\n if (style.italic) inlineStyle.fontStyle = \"italic\";\n\n const decorations: string[] = [];\n if (style.underline) decorations.push(\"underline\");\n if (style.strikethrough) decorations.push(\"line-through\");\n if (decorations.length > 0)\n inlineStyle.textDecoration = decorations.join(\" \");\n\n if (\n style.textTransform === \"uppercase\" ||\n style.textTransform === \"lowercase\" ||\n style.textTransform === \"capitalize\"\n ) {\n inlineStyle.textTransform = style.textTransform;\n }\n\n if (style.maxWidth && style.maxWidth > 0) {\n inlineStyle.maxWidth = `${style.maxWidth}ch`;\n }\n\n if (style.maxLines && style.maxLines > 0) {\n inlineStyle.display = \"-webkit-box\";\n inlineStyle.overflow = \"hidden\";\n inlineStyle.WebkitLineClamp = style.maxLines;\n inlineStyle.WebkitBoxOrient = \"vertical\";\n inlineStyle.whiteSpace = \"pre-wrap\";\n }\n\n if (\n style.truncateMode === \"suffix\" &&\n style.maxWidth &&\n (!style.maxLines || style.maxLines <= 1)\n ) {\n inlineStyle.overflow = \"hidden\";\n inlineStyle.textOverflow = \"ellipsis\";\n inlineStyle.whiteSpace = \"nowrap\";\n inlineStyle.display = \"inline-block\";\n inlineStyle.verticalAlign = \"bottom\";\n }\n\n if (style.monospace) {\n inlineStyle.fontFamily =\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace';\n }\n\n if (!inlineStyle.whiteSpace && text?.includes(\"\\n\")) {\n inlineStyle.whiteSpace = \"pre-wrap\";\n }\n\n return Object.keys(inlineStyle).length > 0 ? inlineStyle : undefined;\n}\n\nfunction prettifyName(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/_/g, \" \")\n .replace(/\\b\\w/g, (value) => value.toUpperCase());\n}\n\nfunction clickyNodeToCommandRequest(node: ClickyNode): ClickyCommandRequest {\n return {\n command: node.command ?? \"\",\n args: node.args ?? [],\n flags: node.flags ?? {},\n target: node.target ?? \"Dialog\",\n autoRun: node.autoRun ?? false,\n };\n}\n\nfunction resolveClickyCommand(\n request: ClickyCommandRequest,\n runtime: ClickyCommandRuntime | undefined,\n operations: ResolvedOperation[],\n): ClickyResolvedCommand {\n const resolved =\n runtime?.resolveCommand?.(request, operations) ??\n defaultResolveClickyCommand(request, operations);\n return { request, operation: resolved };\n}\n\nfunction defaultResolveClickyCommand(\n request: ClickyCommandRequest,\n operations: ResolvedOperation[],\n): ResolvedOperation | undefined {\n const wanted = normalizeCommandPath(request.command);\n if (!wanted) return undefined;\n\n return operations.find((operation) => {\n const metaCommand = normalizeCommandPath(\n operation.operation[\"x-clicky\"]?.command,\n );\n if (metaCommand && metaCommand === wanted) {\n return true;\n }\n\n const operationId = normalizeCommandPath(\n operation.operation.operationId?.replaceAll(\"_\", \"/\"),\n );\n return operationId === wanted;\n });\n}\n\nfunction normalizeCommandPath(value: string | undefined) {\n return (value ?? \"\")\n .trim()\n .replace(/^\\//, \"\")\n .replace(/\\s+/g, \"/\")\n .replace(/\\/+/g, \"/\")\n .toLowerCase();\n}\n\nfunction buildCommandParameterValues(\n parameters: OpenAPIParameter[],\n request: ClickyCommandRequest,\n): ParameterValues {\n const values: ParameterValues = { ...request.flags };\n const args = [...(request.args ?? [])];\n const positionalParams = parameters.filter((param) =>\n isPositionalParam(param),\n );\n let argIndex = 0;\n\n for (const param of positionalParams) {\n if (param.name === \"args\") {\n const remaining = args.slice(argIndex);\n if (remaining.length > 0) {\n values.args = remaining.join(\",\");\n }\n argIndex = args.length;\n continue;\n }\n\n if (argIndex < args.length) {\n values[param.name] = args[argIndex] ?? \"\";\n argIndex += 1;\n }\n }\n\n return values;\n}\n\nfunction missingRequiredParameters(\n parameters: OpenAPIParameter[],\n values: ParameterValues,\n) {\n return parameters.filter(\n (param) => param.required && (values[param.name] ?? \"\").trim() === \"\",\n );\n}\n\nasync function executeClickyCommand(\n client: OperationsApiClient,\n operation: ResolvedOperation,\n values: ParameterValues,\n) {\n return client.executeCommand(\n operation.path,\n operation.method,\n packParameterValues(\n pruneParameterValues(values),\n operation.operation.parameters ?? [],\n ),\n { Accept: \"application/json+clicky\" },\n );\n}\n\nfunction buildCommandExecutionHref(\n resolved: ClickyResolvedCommand,\n): string | undefined {\n const operation = resolved.operation;\n if (!operation) {\n return undefined;\n }\n\n const values = buildCommandParameterValues(\n operation.operation.parameters ?? [],\n resolved.request,\n );\n const params = packParameterValues(\n pruneParameterValues(values),\n operation.operation.parameters ?? [],\n );\n const url = substituteOperationPath(operation.path, params);\n\n if (operation.method.toUpperCase() !== \"GET\") {\n return url;\n }\n\n return url;\n}\n\nfunction substituteOperationPath(path: string, params: Record<string, string>) {\n const url = new URL(path, \"http://localhost\");\n const remaining = { ...params };\n\n for (const [key, value] of Object.entries(params)) {\n if (url.pathname.includes(`{${key}}`)) {\n url.pathname = url.pathname.replace(\n `{${key}}`,\n encodeURIComponent(value),\n );\n delete remaining[key];\n }\n }\n\n for (const [key, value] of Object.entries(remaining)) {\n url.searchParams.set(key, value);\n }\n\n return `${url.pathname}${url.search}`;\n}\n\nfunction browserAnchorTarget(target: ClickyLinkTarget | undefined) {\n if (target === \"_self\") {\n return \"_self\";\n }\n\n if (target === \"_window\" || target === \"_tab\") {\n return \"_blank\";\n }\n\n return undefined;\n}\n\nfunction isExecutionResponse(value: unknown): value is ExecutionResponse {\n return (\n value != null &&\n typeof value === \"object\" &&\n (\"stdout\" in value || \"output\" in value || \"message\" in value)\n );\n}\n\nfunction clickyNodeText(node: ClickyNode | null | undefined): string {\n if (!node) return \"\";\n if (node.kind === \"heading\" || node.kind === \"blockquote\") {\n return clickyNodeText(node.content) || node.plain || \"\";\n }\n if (node.kind === \"admonition\") {\n return (\n [clickyNodeText(node.label), clickyNodeText(node.content)]\n .filter(Boolean)\n .join(\" \") ||\n node.plain ||\n \"\"\n );\n }\n if (node.kind === \"footnote-ref\") {\n return node.id ? `[^${node.id}]` : node.plain || \"\";\n }\n if (node.kind === \"footnote\")\n return clickyNodeText(node.content) || node.plain || \"\";\n if (node.kind === \"footnotes\") {\n return (\n (node.items ?? []).map((item) => clickyNodeText(item)).join(\" \") ||\n node.plain ||\n \"\"\n );\n }\n if (node.plain) return node.plain;\n if (node.text) return node.text;\n if (node.kind === \"html\")\n return sanitizeHtml(node.html ?? \"\")\n .replace(/<[^>]+>/g, \" \")\n .trim();\n if (node.kind === \"code\") return node.source ?? \"\";\n if (\n (node.kind === \"link\" || node.kind === \"link-command\") &&\n node.children?.length\n ) {\n return [\n node.text,\n ...node.children.map((child) => clickyNodeText(child)),\n ].join(\"\");\n }\n if (node.kind === \"button\" && node.label) return clickyNodeText(node.label);\n if (node.kind === \"button-group\") {\n return (node.items ?? []).map((item) => clickyNodeText(item)).join(\" \");\n }\n if (node.kind === \"text\" && node.children?.length) {\n return [\n node.text,\n ...node.children.map((child) => clickyNodeText(child)),\n ].join(\"\");\n }\n return \"\";\n}\n\nfunction isInlineNode(node: ClickyNode): boolean {\n return (\n node.kind === \"text\" ||\n node.kind === \"link\" ||\n node.kind === \"link-command\" ||\n node.kind === \"icon\" ||\n node.kind === \"html\" ||\n node.kind === \"footnote-ref\" ||\n node.kind === \"badge\" ||\n node.kind === \"button\" ||\n node.kind === \"button-group\"\n );\n}\n"],"names":["Fragment","_b","_a"],"mappings":"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"}
|