@flanksource/clicky-ui 0.3.15 → 0.3.16
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 +10 -0
- package/dist/ai.cjs +33 -4
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +31 -2
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +6 -0
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +7 -1
- package/dist/chat.js.map +1 -1
- package/dist/components/Combobox.cjs +92 -170
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts +2 -111
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +95 -173
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ComboboxActions.cjs +70 -0
- package/dist/components/ComboboxActions.cjs.map +1 -0
- package/dist/components/ComboboxActions.d.ts +8 -0
- package/dist/components/ComboboxActions.d.ts.map +1 -0
- package/dist/components/ComboboxActions.js +70 -0
- package/dist/components/ComboboxActions.js.map +1 -0
- package/dist/components/ComboboxMenu.cjs +160 -0
- package/dist/components/ComboboxMenu.cjs.map +1 -0
- package/dist/components/ComboboxMenu.d.ts +22 -0
- package/dist/components/ComboboxMenu.d.ts.map +1 -0
- package/dist/components/ComboboxMenu.js +160 -0
- package/dist/components/ComboboxMenu.js.map +1 -0
- package/dist/components/EndpointSelector.cjs +407 -0
- package/dist/components/EndpointSelector.cjs.map +1 -0
- package/dist/components/EndpointSelector.d.ts +3 -0
- package/dist/components/EndpointSelector.d.ts.map +1 -0
- package/dist/components/EndpointSelector.js +407 -0
- package/dist/components/EndpointSelector.js.map +1 -0
- package/dist/components/EndpointSelector.model.d.ts +52 -0
- package/dist/components/EndpointSelector.model.d.ts.map +1 -0
- package/dist/components/FilterBar.cjs +12 -0
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +4 -0
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +12 -0
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/InputField.cjs +11 -12
- package/dist/components/InputField.cjs.map +1 -1
- package/dist/components/InputField.d.ts +7 -0
- package/dist/components/InputField.d.ts.map +1 -1
- package/dist/components/InputField.js +12 -13
- package/dist/components/InputField.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +22 -16
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +22 -16
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/MultiSelect.cjs +3 -3
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js +3 -3
- package/dist/components/MultiSelect.js.map +1 -1
- package/dist/components/SecretKeySelector.cjs +150 -77
- package/dist/components/SecretKeySelector.cjs.map +1 -1
- package/dist/components/SecretKeySelector.d.ts.map +1 -1
- package/dist/components/SecretKeySelector.js +151 -78
- package/dist/components/SecretKeySelector.js.map +1 -1
- package/dist/components/WorkloadPicker.cjs +2 -1
- package/dist/components/WorkloadPicker.cjs.map +1 -1
- package/dist/components/WorkloadPicker.d.ts +6 -1
- package/dist/components/WorkloadPicker.d.ts.map +1 -1
- package/dist/components/WorkloadPicker.js +2 -1
- package/dist/components/WorkloadPicker.js.map +1 -1
- package/dist/components/combobox-types.d.ts +107 -0
- package/dist/components/combobox-types.d.ts.map +1 -0
- package/dist/components/combobox-utils.cjs +21 -0
- package/dist/components/combobox-utils.cjs.map +1 -0
- package/dist/components/combobox-utils.d.ts +15 -0
- package/dist/components/combobox-utils.d.ts.map +1 -0
- package/dist/components/combobox-utils.js +21 -0
- package/dist/components/combobox-utils.js.map +1 -0
- package/dist/components/endpoint-port.cjs +12 -0
- package/dist/components/endpoint-port.cjs.map +1 -0
- package/dist/components/endpoint-port.d.ts +4 -0
- package/dist/components/endpoint-port.d.ts.map +1 -0
- package/dist/components/endpoint-port.js +12 -0
- package/dist/components/endpoint-port.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +12 -23
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +12 -23
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-discriminator.cjs +6 -2
- package/dist/components/json-schema-form-discriminator.cjs.map +1 -1
- package/dist/components/json-schema-form-discriminator.d.ts.map +1 -1
- package/dist/components/json-schema-form-discriminator.js +6 -2
- package/dist/components/json-schema-form-discriminator.js.map +1 -1
- package/dist/components/json-schema-form-error-display.cjs +50 -0
- package/dist/components/json-schema-form-error-display.cjs.map +1 -0
- package/dist/components/json-schema-form-error-display.d.ts +12 -0
- package/dist/components/json-schema-form-error-display.d.ts.map +1 -0
- package/dist/components/json-schema-form-error-display.js +50 -0
- package/dist/components/json-schema-form-error-display.js.map +1 -0
- package/dist/components/json-schema-form-error-types.d.ts +26 -0
- package/dist/components/json-schema-form-error-types.d.ts.map +1 -0
- package/dist/components/json-schema-form-errors.cjs +169 -0
- package/dist/components/json-schema-form-errors.cjs.map +1 -0
- package/dist/components/json-schema-form-errors.d.ts +14 -0
- package/dist/components/json-schema-form-errors.d.ts.map +1 -0
- package/dist/components/json-schema-form-errors.js +169 -0
- package/dist/components/json-schema-form-errors.js.map +1 -0
- package/dist/components/json-schema-form-object.cjs +12 -2
- 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 +12 -2
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-refs.cjs +84 -19
- package/dist/components/json-schema-form-refs.cjs.map +1 -1
- package/dist/components/json-schema-form-refs.d.ts.map +1 -1
- package/dist/components/json-schema-form-refs.js +84 -19
- package/dist/components/json-schema-form-refs.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +33 -10
- 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 +34 -11
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +16 -4
- 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 +17 -5
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +4 -3
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components.cjs +13 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +8 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +15 -2
- package/dist/components.js.map +1 -1
- package/dist/data/DataTable.cjs +177 -6
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +39 -0
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.grouping.cjs +21 -0
- package/dist/data/DataTable.grouping.cjs.map +1 -0
- package/dist/data/DataTable.grouping.d.ts +26 -0
- package/dist/data/DataTable.grouping.d.ts.map +1 -0
- package/dist/data/DataTable.grouping.js +21 -0
- package/dist/data/DataTable.grouping.js.map +1 -0
- package/dist/data/DataTable.js +177 -6
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/Markdown.cjs +45 -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 +45 -1
- package/dist/data/Markdown.js.map +1 -1
- package/dist/data/MarkdownEditor.cjs +4 -3
- package/dist/data/MarkdownEditor.cjs.map +1 -1
- package/dist/data/MarkdownEditor.d.ts +6 -2
- package/dist/data/MarkdownEditor.d.ts.map +1 -1
- package/dist/data/MarkdownEditor.js +4 -3
- package/dist/data/MarkdownEditor.js.map +1 -1
- package/dist/data/StatStrip.cjs +99 -0
- package/dist/data/StatStrip.cjs.map +1 -0
- package/dist/data/StatStrip.d.ts +41 -0
- package/dist/data/StatStrip.d.ts.map +1 -0
- package/dist/data/StatStrip.js +99 -0
- package/dist/data/StatStrip.js.map +1 -0
- package/dist/data/TaskManager.cjs +20 -1
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts +3 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +20 -1
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +49 -0
- package/dist/data/TaskManagerButton.cjs.map +1 -0
- package/dist/data/TaskManagerButton.d.ts +8 -0
- package/dist/data/TaskManagerButton.d.ts.map +1 -0
- package/dist/data/TaskManagerButton.js +49 -0
- package/dist/data/TaskManagerButton.js.map +1 -0
- package/dist/data/TaskProcessDetails.cjs +113 -0
- package/dist/data/TaskProcessDetails.cjs.map +1 -0
- package/dist/data/TaskProcessDetails.d.ts +6 -0
- package/dist/data/TaskProcessDetails.d.ts.map +1 -0
- package/dist/data/TaskProcessDetails.js +113 -0
- package/dist/data/TaskProcessDetails.js.map +1 -0
- package/dist/data/TaskProgress.cjs +106 -19
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +4 -2
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +107 -20
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +43 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/Tree.cjs +91 -82
- package/dist/data/Tree.cjs.map +1 -1
- package/dist/data/Tree.d.ts +3 -1
- package/dist/data/Tree.d.ts.map +1 -1
- package/dist/data/Tree.js +91 -82
- package/dist/data/Tree.js.map +1 -1
- package/dist/data/TreeNode.cjs +3 -0
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts +2 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +3 -0
- package/dist/data/TreeNode.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +9 -140
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +2 -40
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +6 -137
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.models.cjs +11 -0
- package/dist/data/ai/ChatWindow.models.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.models.d.ts +3 -0
- package/dist/data/ai/ChatWindow.models.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.models.js +11 -0
- package/dist/data/ai/ChatWindow.models.js.map +1 -0
- package/dist/data/ai/ChatWindow.preferences.cjs +57 -0
- package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.preferences.d.ts +13 -0
- package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.preferences.js +57 -0
- package/dist/data/ai/ChatWindow.preferences.js.map +1 -0
- package/dist/data/ai/ChatWindow.tool-catalog.cjs +99 -0
- package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts +3 -0
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.tool-catalog.js +99 -0
- package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -0
- package/dist/data/ai/ChatWindow.types.d.ts +41 -0
- package/dist/data/ai/ChatWindow.types.d.ts.map +1 -0
- package/dist/data/ai/ContextBadges.cjs +76 -46
- package/dist/data/ai/ContextBadges.cjs.map +1 -1
- package/dist/data/ai/ContextBadges.d.ts.map +1 -1
- package/dist/data/ai/ContextBadges.js +77 -47
- package/dist/data/ai/ContextBadges.js.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.cjs +151 -32
- package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts +7 -4
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js +152 -33
- package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
- package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs +133 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.cjs.map +1 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts +11 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.d.ts.map +1 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.js +133 -0
- package/dist/data/ai/PromptPicker/PromptSourceRepair.js.map +1 -0
- package/dist/data/ai/PromptPicker/index.d.ts +2 -1
- package/dist/data/ai/PromptPicker/index.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/types.cjs +7 -0
- package/dist/data/ai/PromptPicker/types.cjs.map +1 -0
- package/dist/data/ai/PromptPicker/types.d.ts +18 -2
- package/dist/data/ai/PromptPicker/types.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/types.js +7 -0
- package/dist/data/ai/PromptPicker/types.js.map +1 -0
- package/dist/data/ai/PromptRunEditor/index.cjs +82 -14
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +5 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +83 -15
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/RuntimeBar.cjs +336 -0
- package/dist/data/ai/RuntimeBar.cjs.map +1 -0
- package/dist/data/ai/RuntimeBar.d.ts +27 -0
- package/dist/data/ai/RuntimeBar.d.ts.map +1 -0
- package/dist/data/ai/RuntimeBar.js +336 -0
- package/dist/data/ai/RuntimeBar.js.map +1 -0
- package/dist/data/ai/SessionChatComposer.cjs +56 -0
- package/dist/data/ai/SessionChatComposer.cjs.map +1 -0
- package/dist/data/ai/SessionChatComposer.d.ts +24 -0
- package/dist/data/ai/SessionChatComposer.d.ts.map +1 -0
- package/dist/data/ai/SessionChatComposer.js +56 -0
- package/dist/data/ai/SessionChatComposer.js.map +1 -0
- package/dist/data/ai/SessionInspector.cjs +222 -382
- package/dist/data/ai/SessionInspector.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.collection-types.d.ts +55 -0
- package/dist/data/ai/SessionInspector.collection-types.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.collection.cjs +377 -0
- package/dist/data/ai/SessionInspector.collection.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.collection.d.ts +15 -0
- package/dist/data/ai/SessionInspector.collection.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.collection.js +377 -0
- package/dist/data/ai/SessionInspector.collection.js.map +1 -0
- package/dist/data/ai/SessionInspector.d.ts +9 -4
- package/dist/data/ai/SessionInspector.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.files.cjs +162 -0
- package/dist/data/ai/SessionInspector.files.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.files.d.ts +5 -0
- package/dist/data/ai/SessionInspector.files.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.files.js +162 -0
- package/dist/data/ai/SessionInspector.files.js.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.cjs +148 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.d.ts +15 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.js +148 -0
- package/dist/data/ai/SessionInspector.hierarchy-state.js.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy.cjs +256 -0
- package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy.d.ts +9 -0
- package/dist/data/ai/SessionInspector.hierarchy.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.hierarchy.js +256 -0
- package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -0
- package/dist/data/ai/SessionInspector.js +224 -384
- package/dist/data/ai/SessionInspector.js.map +1 -1
- package/dist/data/ai/SessionInspector.model.cjs +125 -0
- package/dist/data/ai/SessionInspector.model.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.model.d.ts +14 -0
- package/dist/data/ai/SessionInspector.model.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.model.js +125 -0
- package/dist/data/ai/SessionInspector.model.js.map +1 -0
- package/dist/data/ai/SessionInspector.panels.cjs +265 -0
- package/dist/data/ai/SessionInspector.panels.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.panels.d.ts +10 -0
- package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.panels.js +265 -0
- package/dist/data/ai/SessionInspector.panels.js.map +1 -0
- package/dist/data/ai/SessionInspector.plan.cjs +77 -0
- package/dist/data/ai/SessionInspector.plan.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.plan.d.ts +6 -0
- package/dist/data/ai/SessionInspector.plan.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.plan.js +77 -0
- package/dist/data/ai/SessionInspector.plan.js.map +1 -0
- package/dist/data/ai/SessionInspector.summary.cjs +182 -0
- package/dist/data/ai/SessionInspector.summary.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.summary.d.ts +8 -0
- package/dist/data/ai/SessionInspector.summary.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.summary.js +182 -0
- package/dist/data/ai/SessionInspector.summary.js.map +1 -0
- package/dist/data/ai/SessionInspector.transcript.cjs +94 -0
- package/dist/data/ai/SessionInspector.transcript.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.transcript.d.ts +7 -0
- package/dist/data/ai/SessionInspector.transcript.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.transcript.js +94 -0
- package/dist/data/ai/SessionInspector.transcript.js.map +1 -0
- package/dist/data/ai/SessionInspector.turns.d.ts +11 -0
- package/dist/data/ai/SessionInspector.turns.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.cjs +86 -121
- package/dist/data/ai/SessionViewer.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +8 -1
- package/dist/data/ai/SessionViewer.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.fixtures.d.ts +2 -0
- package/dist/data/ai/SessionViewer.fixtures.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.header.cjs +110 -0
- package/dist/data/ai/SessionViewer.header.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.header.d.ts +11 -0
- package/dist/data/ai/SessionViewer.header.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.header.js +110 -0
- package/dist/data/ai/SessionViewer.header.js.map +1 -0
- package/dist/data/ai/SessionViewer.js +87 -122
- package/dist/data/ai/SessionViewer.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +109 -39
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +2 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +109 -39
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.row-metadata.cjs +132 -0
- package/dist/data/ai/SessionViewer.row-metadata.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.row-metadata.d.ts +14 -0
- package/dist/data/ai/SessionViewer.row-metadata.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.row-metadata.js +132 -0
- package/dist/data/ai/SessionViewer.row-metadata.js.map +1 -0
- package/dist/data/ai/SessionViewer.row-time.cjs +15 -0
- package/dist/data/ai/SessionViewer.row-time.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.row-time.d.ts +3 -0
- package/dist/data/ai/SessionViewer.row-time.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.row-time.js +15 -0
- package/dist/data/ai/SessionViewer.row-time.js.map +1 -0
- package/dist/data/ai/SessionViewer.rows.cjs +37 -424
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts +5 -2
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +31 -418
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SessionViewer.tool-details.cjs +65 -0
- package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tool-details.d.ts +20 -0
- package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tool-details.js +65 -0
- package/dist/data/ai/SessionViewer.tool-details.js.map +1 -0
- package/dist/data/ai/SessionViewer.tool-row.cjs +404 -0
- package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -0
- package/dist/data/ai/SessionViewer.tool-row.d.ts +12 -0
- package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -0
- package/dist/data/ai/SessionViewer.tool-row.js +404 -0
- package/dist/data/ai/SessionViewer.tool-row.js.map +1 -0
- package/dist/data/ai/SessionViewer.unified.d.ts +10 -2
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs +44 -26
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js +47 -29
- package/dist/data/ai/SpecRuntimeEditor/CommitSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +45 -153
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +51 -159
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +0 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +0 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs +0 -5
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js +0 -5
- package/dist/data/ai/SpecRuntimeEditor/WorkspaceSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/summaries.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.cjs +19 -6
- package/dist/data/ai/SpecRuntimeEditor/update.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts +5 -2
- package/dist/data/ai/SpecRuntimeEditor/update.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/update.js +19 -6
- package/dist/data/ai/SpecRuntimeEditor/update.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +67 -10
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +31 -4
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +67 -10
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +2 -1
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +2 -1
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/agent-action-icons.cjs +7 -10
- package/dist/data/ai/agent-action-icons.cjs.map +1 -1
- package/dist/data/ai/agent-action-icons.d.ts +1 -2
- package/dist/data/ai/agent-action-icons.d.ts.map +1 -1
- package/dist/data/ai/agent-action-icons.js +8 -11
- package/dist/data/ai/agent-action-icons.js.map +1 -1
- package/dist/data/ai/context.cjs.map +1 -1
- package/dist/data/ai/context.d.ts +4 -0
- package/dist/data/ai/context.d.ts.map +1 -1
- package/dist/data/ai/context.js.map +1 -1
- package/dist/data/ai/examples/sessions/claude-complete.cjs +513 -0
- package/dist/data/ai/examples/sessions/claude-complete.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/claude-complete.d.ts +3 -0
- package/dist/data/ai/examples/sessions/claude-complete.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/claude-complete.js +513 -0
- package/dist/data/ai/examples/sessions/claude-complete.js.map +1 -0
- package/dist/data/ai/examples/sessions/claude.cjs +252 -0
- package/dist/data/ai/examples/sessions/claude.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/claude.d.ts +3 -0
- package/dist/data/ai/examples/sessions/claude.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/claude.js +252 -0
- package/dist/data/ai/examples/sessions/claude.js.map +1 -0
- package/dist/data/ai/examples/sessions/codex-complete.cjs +394 -0
- package/dist/data/ai/examples/sessions/codex-complete.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/codex-complete.d.ts +3 -0
- package/dist/data/ai/examples/sessions/codex-complete.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/codex-complete.js +394 -0
- package/dist/data/ai/examples/sessions/codex-complete.js.map +1 -0
- package/dist/data/ai/examples/sessions/codex.cjs +236 -0
- package/dist/data/ai/examples/sessions/codex.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/codex.d.ts +3 -0
- package/dist/data/ai/examples/sessions/codex.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/codex.js +236 -0
- package/dist/data/ai/examples/sessions/codex.js.map +1 -0
- package/dist/data/ai/examples/sessions/index.cjs +21 -0
- package/dist/data/ai/examples/sessions/index.cjs.map +1 -0
- package/dist/data/ai/examples/sessions/index.d.ts +10 -0
- package/dist/data/ai/examples/sessions/index.d.ts.map +1 -0
- package/dist/data/ai/examples/sessions/index.js +21 -0
- package/dist/data/ai/examples/sessions/index.js.map +1 -0
- package/dist/data/ai/index.d.ts +8 -3
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/runtime-mode.cjs +62 -0
- package/dist/data/ai/runtime-mode.cjs.map +1 -1
- package/dist/data/ai/runtime-mode.d.ts +27 -0
- package/dist/data/ai/runtime-mode.d.ts.map +1 -1
- package/dist/data/ai/runtime-mode.js +62 -0
- package/dist/data/ai/runtime-mode.js.map +1 -1
- package/dist/data/cells/EntityCell.cjs +64 -0
- package/dist/data/cells/EntityCell.cjs.map +1 -0
- package/dist/data/cells/EntityCell.d.ts +27 -0
- package/dist/data/cells/EntityCell.d.ts.map +1 -0
- package/dist/data/cells/EntityCell.js +64 -0
- package/dist/data/cells/EntityCell.js.map +1 -0
- package/dist/data/chat/Attachment.cjs +53 -13
- package/dist/data/chat/Attachment.cjs.map +1 -1
- package/dist/data/chat/Attachment.d.ts +9 -3
- package/dist/data/chat/Attachment.d.ts.map +1 -1
- package/dist/data/chat/Attachment.js +54 -14
- package/dist/data/chat/Attachment.js.map +1 -1
- package/dist/data/chat/Chat.cjs +25 -17
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +8 -4
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +22 -14
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ContextMeter.cjs +142 -39
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +4 -1
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +143 -40
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/Conversation.cjs +55 -3
- package/dist/data/chat/Conversation.cjs.map +1 -1
- package/dist/data/chat/Conversation.d.ts +5 -1
- package/dist/data/chat/Conversation.d.ts.map +1 -1
- package/dist/data/chat/Conversation.js +55 -3
- package/dist/data/chat/Conversation.js.map +1 -1
- package/dist/data/chat/ModelSelector.cjs +8 -10
- package/dist/data/chat/ModelSelector.cjs.map +1 -1
- package/dist/data/chat/ModelSelector.d.ts.map +1 -1
- package/dist/data/chat/ModelSelector.js +9 -11
- package/dist/data/chat/ModelSelector.js.map +1 -1
- package/dist/data/chat/PromptInput.cjs +56 -5
- package/dist/data/chat/PromptInput.cjs.map +1 -1
- package/dist/data/chat/PromptInput.d.ts +10 -1
- package/dist/data/chat/PromptInput.d.ts.map +1 -1
- package/dist/data/chat/PromptInput.js +57 -6
- package/dist/data/chat/PromptInput.js.map +1 -1
- package/dist/data/chat/attachment-upload.cjs +33 -0
- package/dist/data/chat/attachment-upload.cjs.map +1 -0
- package/dist/data/chat/attachment-upload.d.ts +21 -0
- package/dist/data/chat/attachment-upload.d.ts.map +1 -0
- package/dist/data/chat/attachment-upload.js +33 -0
- package/dist/data/chat/attachment-upload.js.map +1 -0
- package/dist/data/chat/effort-icons.cjs +36 -6
- package/dist/data/chat/effort-icons.cjs.map +1 -1
- package/dist/data/chat/effort-icons.d.ts +6 -3
- package/dist/data/chat/effort-icons.d.ts.map +1 -1
- package/dist/data/chat/effort-icons.js +37 -7
- package/dist/data/chat/effort-icons.js.map +1 -1
- package/dist/data/chat/index.d.ts +3 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/models.cjs +8 -0
- package/dist/data/chat/models.cjs.map +1 -0
- package/dist/data/chat/models.d.ts +11 -0
- package/dist/data/chat/models.d.ts.map +1 -0
- package/dist/data/chat/models.js +8 -0
- package/dist/data/chat/models.js.map +1 -0
- package/dist/data/chat/provider-icons.cjs +49 -16
- package/dist/data/chat/provider-icons.cjs.map +1 -1
- package/dist/data/chat/provider-icons.d.ts +2 -0
- package/dist/data/chat/provider-icons.d.ts.map +1 -1
- package/dist/data/chat/provider-icons.js +50 -17
- package/dist/data/chat/provider-icons.js.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +9 -0
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/examples/markdown-preview-mock.cjs +45 -0
- package/dist/data/examples/markdown-preview-mock.cjs.map +1 -0
- package/dist/data/examples/markdown-preview-mock.d.ts +23 -0
- package/dist/data/examples/markdown-preview-mock.d.ts.map +1 -0
- package/dist/data/examples/markdown-preview-mock.js +45 -0
- package/dist/data/examples/markdown-preview-mock.js.map +1 -0
- package/dist/data/examples/markdown-syntax.cjs +36 -0
- package/dist/data/examples/markdown-syntax.cjs.map +1 -0
- package/dist/data/examples/markdown-syntax.d.ts +12 -0
- package/dist/data/examples/markdown-syntax.d.ts.map +1 -0
- package/dist/data/examples/markdown-syntax.js +36 -0
- package/dist/data/examples/markdown-syntax.js.map +1 -0
- package/dist/data/examples/markdown-syntax.md.cjs +4 -0
- package/dist/data/examples/markdown-syntax.md.cjs.map +1 -0
- package/dist/data/examples/markdown-syntax.md.js +5 -0
- package/dist/data/examples/markdown-syntax.md.js.map +1 -0
- package/dist/data/task-process-details.cjs +48 -0
- package/dist/data/task-process-details.cjs.map +1 -0
- package/dist/data/task-process-details.d.ts +5 -0
- package/dist/data/task-process-details.d.ts.map +1 -0
- package/dist/data/task-process-details.js +48 -0
- package/dist/data/task-process-details.js.map +1 -0
- package/dist/data/version-info.cjs +2 -2
- package/dist/data/version-info.js +2 -2
- package/dist/data.cjs +30 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +7 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +30 -0
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-hotkey.cjs +98 -0
- package/dist/hooks/use-hotkey.cjs.map +1 -0
- package/dist/hooks/use-hotkey.d.ts +42 -0
- package/dist/hooks/use-hotkey.d.ts.map +1 -0
- package/dist/hooks/use-hotkey.js +98 -0
- package/dist/hooks/use-hotkey.js.map +1 -0
- package/dist/hooks/use-task-run.cjs +23 -1
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +23 -1
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/hooks.cjs +4 -0
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +1 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +4 -0
- package/dist/hooks.js.map +1 -1
- package/dist/icons/components/UiBank.cjs +15 -0
- package/dist/icons/components/UiBank.cjs.map +1 -0
- package/dist/icons/components/UiBank.d.ts +15 -0
- package/dist/icons/components/UiBank.d.ts.map +1 -0
- package/dist/icons/components/UiBank.js +15 -0
- package/dist/icons/components/UiBank.js.map +1 -0
- package/dist/icons/components/UiChartOfAccounts.cjs +15 -0
- package/dist/icons/components/UiChartOfAccounts.cjs.map +1 -0
- package/dist/icons/components/UiChartOfAccounts.d.ts +15 -0
- package/dist/icons/components/UiChartOfAccounts.d.ts.map +1 -0
- package/dist/icons/components/UiChartOfAccounts.js +15 -0
- package/dist/icons/components/UiChartOfAccounts.js.map +1 -0
- package/dist/icons/components/UiCloudUpload.cjs +15 -0
- package/dist/icons/components/UiCloudUpload.cjs.map +1 -0
- package/dist/icons/components/UiCloudUpload.d.ts +15 -0
- package/dist/icons/components/UiCloudUpload.d.ts.map +1 -0
- package/dist/icons/components/UiCloudUpload.js +15 -0
- package/dist/icons/components/UiCloudUpload.js.map +1 -0
- package/dist/icons/components/UiLedger.cjs +15 -0
- package/dist/icons/components/UiLedger.cjs.map +1 -0
- package/dist/icons/components/UiLedger.d.ts +15 -0
- package/dist/icons/components/UiLedger.d.ts.map +1 -0
- package/dist/icons/components/UiLedger.js +15 -0
- package/dist/icons/components/UiLedger.js.map +1 -0
- package/dist/icons/components/UiReceipt.cjs +15 -0
- package/dist/icons/components/UiReceipt.cjs.map +1 -0
- package/dist/icons/components/UiReceipt.d.ts +15 -0
- package/dist/icons/components/UiReceipt.d.ts.map +1 -0
- package/dist/icons/components/UiReceipt.js +15 -0
- package/dist/icons/components/UiReceipt.js.map +1 -0
- package/dist/icons/index.d.ts +10 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons.cjs +15 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +15 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +47 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +49 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +270 -238
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +9 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.debug.cjs +53 -0
- package/dist/layout/AppShell.debug.cjs.map +1 -0
- package/dist/layout/AppShell.debug.d.ts +6 -0
- package/dist/layout/AppShell.debug.d.ts.map +1 -0
- package/dist/layout/AppShell.debug.js +53 -0
- package/dist/layout/AppShell.debug.js.map +1 -0
- package/dist/layout/AppShell.js +269 -237
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +90 -0
- package/dist/layout/AppShell.nav.cjs.map +1 -0
- package/dist/layout/AppShell.nav.d.ts +7 -0
- package/dist/layout/AppShell.nav.d.ts.map +1 -0
- package/dist/layout/AppShell.nav.js +90 -0
- package/dist/layout/AppShell.nav.js.map +1 -0
- package/dist/layout/AppSidebar.cjs +35 -5
- package/dist/layout/AppSidebar.cjs.map +1 -1
- package/dist/layout/AppSidebar.d.ts +4 -1
- package/dist/layout/AppSidebar.d.ts.map +1 -1
- package/dist/layout/AppSidebar.js +35 -5
- package/dist/layout/AppSidebar.js.map +1 -1
- package/dist/layout/Panel.cjs +25 -41
- package/dist/layout/Panel.cjs.map +1 -1
- package/dist/layout/Panel.d.ts +2 -1
- package/dist/layout/Panel.d.ts.map +1 -1
- package/dist/layout/Panel.js +26 -42
- package/dist/layout/Panel.js.map +1 -1
- package/dist/layout/PanelFrame.cjs +56 -0
- package/dist/layout/PanelFrame.cjs.map +1 -0
- package/dist/layout/PanelFrame.d.ts +15 -0
- package/dist/layout/PanelFrame.d.ts.map +1 -0
- package/dist/layout/PanelFrame.js +56 -0
- package/dist/layout/PanelFrame.js.map +1 -0
- package/dist/layout/Section.cjs +51 -41
- package/dist/layout/Section.cjs.map +1 -1
- package/dist/layout/Section.d.ts +3 -2
- package/dist/layout/Section.d.ts.map +1 -1
- package/dist/layout/Section.js +51 -41
- package/dist/layout/Section.js.map +1 -1
- package/dist/layout/content-width.cjs +8 -0
- package/dist/layout/content-width.cjs.map +1 -0
- package/dist/layout/content-width.d.ts +3 -0
- package/dist/layout/content-width.d.ts.map +1 -0
- package/dist/layout/content-width.js +8 -0
- package/dist/layout/content-width.js.map +1 -0
- package/dist/overlay/CommandPalette.cjs +207 -0
- package/dist/overlay/CommandPalette.cjs.map +1 -0
- package/dist/overlay/CommandPalette.d.ts +71 -0
- package/dist/overlay/CommandPalette.d.ts.map +1 -0
- package/dist/overlay/CommandPalette.js +207 -0
- package/dist/overlay/CommandPalette.js.map +1 -0
- package/dist/overlay/CommandPalette.model.cjs +70 -0
- package/dist/overlay/CommandPalette.model.cjs.map +1 -0
- package/dist/overlay/CommandPalette.model.d.ts +71 -0
- package/dist/overlay/CommandPalette.model.d.ts.map +1 -0
- package/dist/overlay/CommandPalette.model.js +70 -0
- package/dist/overlay/CommandPalette.model.js.map +1 -0
- package/dist/overlay/CommandPaletteList.cjs +88 -0
- package/dist/overlay/CommandPaletteList.cjs.map +1 -0
- package/dist/overlay/CommandPaletteList.d.ts +23 -0
- package/dist/overlay/CommandPaletteList.d.ts.map +1 -0
- package/dist/overlay/CommandPaletteList.js +88 -0
- package/dist/overlay/CommandPaletteList.js.map +1 -0
- package/dist/overlay/CommandPaletteTrigger.cjs +36 -0
- package/dist/overlay/CommandPaletteTrigger.cjs.map +1 -0
- package/dist/overlay/CommandPaletteTrigger.d.ts +22 -0
- package/dist/overlay/CommandPaletteTrigger.d.ts.map +1 -0
- package/dist/overlay/CommandPaletteTrigger.js +36 -0
- package/dist/overlay/CommandPaletteTrigger.js.map +1 -0
- package/dist/overlay/Modal.cjs +12 -5
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +12 -5
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/modalStack.js +1 -1
- package/dist/overlay/zIndex.cjs +2 -0
- package/dist/overlay/zIndex.cjs.map +1 -1
- package/dist/overlay/zIndex.js +2 -0
- package/dist/overlay/zIndex.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +6 -0
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +6 -0
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +49 -52
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +17 -2
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +49 -52
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/clickyMetadata.cjs +2 -1
- package/dist/rpc/clickyMetadata.cjs.map +1 -1
- package/dist/rpc/clickyMetadata.d.ts.map +1 -1
- package/dist/rpc/clickyMetadata.js +2 -1
- package/dist/rpc/clickyMetadata.js.map +1 -1
- package/dist/rpc/rpc-story-fixtures/orders.fixture.d.ts.map +1 -1
- package/dist/rpc/rpc-story-fixtures/services.fixture.d.ts.map +1 -1
- package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts +25 -2
- package/dist/rpc/rpc-story-fixtures/surface-fixture.d.ts.map +1 -1
- package/dist/rpc/rpc-story-fixtures/widgets.fixture.d.ts.map +1 -1
- package/dist/rpc/rpc-story.fixtures.d.ts +2 -1
- package/dist/rpc/rpc-story.fixtures.d.ts.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +1 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +11 -0
- package/dist/tailwind-preset.cjs.map +1 -1
- package/dist/tailwind-preset.d.ts.map +1 -1
- package/dist/tailwind-preset.js +11 -0
- package/dist/tailwind-preset.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppSidebar.js","sources":["../../src/layout/AppSidebar.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiSidebar } from \"../icons\";\nimport type { RenderLink } from \"../rpc/EndpointList\";\nimport { useRouter } from \"../rpc/router\";\n\n// AppSidebar / AppLayout are a router-agnostic application shell: a collapsible\n// left navigation rail driven by declarative sections, plus a flex layout that\n// pairs it with an optional header and the routed content. Navigation and active\n// state come from the RouterAdapter (see ../rpc/router) — by default a plain\n// <a href={to}> browser adapter, or the host's react-router/memory adapter via\n// RouterProvider. The `pathname` and `renderLink` props still override the\n// adapter for cases where a rail's active state is independent of the URL.\n//\n// A section may carry flat `items` and/or collapsible `groups`. Groups are for\n// high-cardinality clusters (e.g. provider surfaces) that benefit from being\n// folded away; their open/closed state persists per `group.key`.\n\nexport interface AppNavItem {\n /** Stable key; also used as the React key. */\n key: string;\n title: string;\n /** Destination passed to renderLink (or href for external items). */\n to: string;\n icon?: ReactNode;\n /** Render a plain anchor (new-tab style) instead of a routed link. */\n external?: boolean;\n /** Optional trailing adornment (count, status dot, etc.). */\n badge?: ReactNode;\n}\n\nexport interface AppNavGroup {\n /** Stable key; also the persistence key for collapsed state. */\n key: string;\n label: string;\n icon?: ReactNode;\n /** Collapsed on first render until the user toggles it. */\n defaultCollapsed?: boolean;\n items?: AppNavItem[];\n /** Nested groups (one extra level, e.g. Providers > Xero). */\n groups?: AppNavGroup[];\n}\n\nexport interface AppNavSection {\n /** Section heading; omitted for the leading section. */\n label?: string;\n items?: AppNavItem[];\n /** Collapsible groups rendered after the flat items. */\n groups?: AppNavGroup[];\n}\n\nexport interface AppSidebarProps {\n sections: AppNavSection[];\n /** Current path for active-state. Defaults to the RouterAdapter's pathname. */\n pathname?: string;\n /** Render routed links. Defaults to the RouterAdapter's renderLink (a plain\n * <a href={to}> unless a RouterProvider supplies a router Link). */\n renderLink?: RenderLink;\n /** Branding shown at the top of the expanded rail (logo/title). */\n header?: ReactNode;\n /** Pinned to the bottom of the rail (theme switcher, version, etc.). */\n footer?: ReactNode;\n /** localStorage key persisting the rail collapsed state. */\n collapsedStorageKey?: string;\n /** localStorage key persisting per-group collapsed state. */\n groupCollapsedStorageKey?: string;\n /** Override the default prefix-match active test. */\n isActive?: (pathname: string, to: string) => boolean;\n className?: string;\n}\n\nconst DEFAULT_COLLAPSE_KEY = \"clicky-ui:app-sidebar:collapsed\";\nconst DEFAULT_GROUP_COLLAPSE_KEY = \"clicky-ui:app-sidebar:groups\";\n\nfunction defaultIsActive(pathname: string, to: string): boolean {\n if (to === \"/\") return pathname === \"/\";\n return pathname === to || pathname.startsWith(`${to}/`);\n}\n\nfunction useCollapsed(storageKey: string): [boolean, () => void] {\n const [collapsed, setCollapsed] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.localStorage.getItem(storageKey) === \"true\";\n });\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n window.localStorage.setItem(storageKey, String(collapsed));\n }, [collapsed, storageKey]);\n return [collapsed, () => setCollapsed((c) => !c)];\n}\n\ninterface GroupState {\n isCollapsed: (key: string, fallback: boolean) => boolean;\n toggle: (key: string, fallback: boolean) => void;\n}\n\nfunction readGroupState(storageKey: string): Record<string, boolean> {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (!raw) return {};\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === \"object\" ? (parsed as Record<string, boolean>) : {};\n } catch {\n return {};\n }\n}\n\nfunction useGroupCollapsed(storageKey: string): GroupState {\n const [state, setState] = useState<Record<string, boolean>>(() => readGroupState(storageKey));\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(state));\n } catch {\n // Sidebar state is a UX nicety; private-mode storage failures are safe to swallow.\n }\n }, [state, storageKey]);\n return {\n isCollapsed: (key, fallback) => state[key] ?? fallback,\n toggle: (key, fallback) => setState((prev) => ({ ...prev, [key]: !(prev[key] ?? fallback) })),\n };\n}\n\nfunction flattenGroupItems(groups: AppNavGroup[]): AppNavItem[] {\n const out: AppNavItem[] = [];\n for (const group of groups) {\n if (group.items) out.push(...group.items);\n if (group.groups) out.push(...flattenGroupItems(group.groups));\n }\n return out;\n}\n\nexport function AppSidebar({\n sections,\n pathname: pathnameProp,\n renderLink: renderLinkProp,\n header,\n footer,\n collapsedStorageKey = DEFAULT_COLLAPSE_KEY,\n groupCollapsedStorageKey = DEFAULT_GROUP_COLLAPSE_KEY,\n isActive = defaultIsActive,\n className,\n}: AppSidebarProps) {\n const router = useRouter();\n const pathname = pathnameProp ?? router.pathname;\n const renderLink = renderLinkProp ?? router.renderLink;\n const [collapsed, toggleCollapsed] = useCollapsed(collapsedStorageKey);\n const groupState = useGroupCollapsed(groupCollapsedStorageKey);\n return (\n <nav\n className={cn(\n \"flex shrink-0 flex-col overflow-hidden border-r border-border bg-muted/30 transition-[width] duration-200\",\n collapsed ? \"w-16\" : \"w-64\",\n className,\n )}\n >\n <div\n className={cn(\n \"flex shrink-0 items-center border-b border-border py-3\",\n collapsed ? \"justify-center px-2\" : \"justify-between px-4\",\n )}\n >\n {!collapsed && <div className=\"min-w-0 flex-1\">{header}</div>}\n <button\n type=\"button\"\n onClick={toggleCollapsed}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"\n >\n <Icon icon={UiSidebar} className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className={cn(\"flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto py-2\", collapsed ? \"px-2\" : \"px-3\")}>\n {sections.map((section, i) => (\n <div key={section.label ?? `section-${i}`} className=\"flex flex-col\">\n {section.label && <SectionLabel collapsed={collapsed}>{section.label}</SectionLabel>}\n {section.items?.map((item) => (\n <SidebarItem\n key={item.key}\n item={item}\n active={isActive(pathname, item.to)}\n collapsed={collapsed}\n renderLink={renderLink}\n />\n ))}\n {section.groups?.map((group) =>\n collapsed ? (\n flattenGroupItems([group]).map((item) => (\n <SidebarItem\n key={item.key}\n item={item}\n active={isActive(pathname, item.to)}\n collapsed\n renderLink={renderLink}\n />\n ))\n ) : (\n <SidebarGroup\n key={group.key}\n group={group}\n pathname={pathname}\n isActive={isActive}\n renderLink={renderLink}\n groupState={groupState}\n />\n ),\n )}\n </div>\n ))}\n </div>\n\n {footer && <div className={cn(\"mt-auto border-t border-border py-3\", collapsed ? \"px-2\" : \"px-4\")}>{footer}</div>}\n </nav>\n );\n}\n\nfunction SidebarGroup({\n group,\n pathname,\n isActive,\n renderLink,\n groupState,\n}: {\n group: AppNavGroup;\n pathname: string;\n isActive: (pathname: string, to: string) => boolean;\n renderLink: RenderLink;\n groupState: GroupState;\n}) {\n const fallback = group.defaultCollapsed ?? false;\n const collapsed = groupState.isCollapsed(group.key, fallback);\n return (\n <div className=\"flex flex-col\">\n <button\n type=\"button\"\n onClick={() => groupState.toggle(group.key, fallback)}\n aria-expanded={!collapsed}\n className=\"flex items-center gap-2 rounded-md px-3 py-1.5 text-[11px] font-semibold uppercase tracking-[0.14em] text-muted-foreground transition-colors hover:bg-accent/40\"\n >\n {group.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">{group.icon}</span>}\n <span className=\"flex-1 truncate text-left\">{group.label}</span>\n <span aria-hidden className=\"text-[0.65rem] opacity-60\">\n {collapsed ? \"▸\" : \"▾\"}\n </span>\n </button>\n {!collapsed && (\n <div className=\"ml-2 mt-0.5 flex flex-col gap-0.5 border-l border-border/60 pl-2\">\n {group.items?.map((item) => (\n <SidebarItem\n key={item.key}\n item={item}\n active={isActive(pathname, item.to)}\n collapsed={false}\n renderLink={renderLink}\n />\n ))}\n {group.groups?.map((sub) => (\n <SidebarGroup\n key={sub.key}\n group={sub}\n pathname={pathname}\n isActive={isActive}\n renderLink={renderLink}\n groupState={groupState}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction SidebarItem({\n item,\n active,\n collapsed,\n renderLink,\n}: {\n item: AppNavItem;\n active: boolean;\n collapsed: boolean;\n renderLink: RenderLink;\n}) {\n const className = cn(\n \"flex items-center gap-2.5 rounded-md px-3 py-1.5 text-[13px] text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n collapsed && \"justify-center px-0\",\n active && \"bg-accent font-medium text-accent-foreground\",\n );\n const title = collapsed ? item.title : undefined;\n const children = (\n <>\n {item.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">{item.icon}</span>}\n {!collapsed && <span className=\"flex-1 truncate\">{item.title}</span>}\n {!collapsed && item.badge}\n </>\n );\n\n if (item.external) {\n return (\n <a href={item.to} className={className} title={title} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n );\n }\n return renderLink({ key: item.key, to: item.to, className, children, ...(title ? { title } : {}) });\n}\n\nfunction SectionLabel({ children, collapsed }: { children: ReactNode; collapsed: boolean }) {\n if (collapsed) {\n return <div className=\"mx-2 mb-1 mt-3 border-t border-border first:mt-2\" />;\n }\n return (\n <div className=\"mb-0.5 mt-3 px-3 text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground first:mt-2\">\n {children}\n </div>\n );\n}\n\nexport interface AppLayoutProps {\n sidebar: ReactNode;\n header?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\n/** Flex shell pairing the sidebar rail with an optional header and the routed\n * content area. The content area scrolls independently of the rail. */\nexport function AppLayout({ sidebar, header, children, className }: AppLayoutProps) {\n return (\n <div className={cn(\"flex h-full min-h-0 w-full overflow-hidden bg-background\", className)}>\n {sidebar}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {header}\n <main className=\"min-h-0 min-w-0 flex-1 overflow-y-auto\">{children}</main>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AppSidebar.js","sources":["../../src/layout/AppSidebar.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiSidebar } from \"../icons\";\nimport type { RenderLink } from \"../rpc/EndpointList\";\nimport { useRouter } from \"../rpc/router\";\nimport {\n contentWidthClassName,\n type ContentWidth,\n} from \"./content-width\";\n\n// AppSidebar / AppLayout are a router-agnostic application shell: a collapsible\n// left navigation rail driven by declarative sections, plus a flex layout that\n// pairs it with an optional header and the routed content. Navigation and active\n// state come from the RouterAdapter (see ../rpc/router) — by default a plain\n// <a href={to}> browser adapter, or the host's react-router/memory adapter via\n// RouterProvider. The `pathname` and `renderLink` props still override the\n// adapter for cases where a rail's active state is independent of the URL.\n//\n// A section may carry flat `items` and/or collapsible `groups`. Groups are for\n// high-cardinality clusters (e.g. provider surfaces) that benefit from being\n// folded away; their open/closed state persists per `group.key`.\n\nexport interface AppNavItem {\n /** Stable key; also used as the React key. */\n key: string;\n title: string;\n /** Destination passed to renderLink (or href for external items). */\n to: string;\n icon?: ReactNode;\n /** Render a plain anchor (new-tab style) instead of a routed link. */\n external?: boolean;\n /** Optional trailing adornment (count, status dot, etc.). */\n badge?: ReactNode;\n}\n\nexport interface AppNavGroup {\n /** Stable key; also the persistence key for collapsed state. */\n key: string;\n label: string;\n icon?: ReactNode;\n /** Collapsed on first render until the user toggles it. */\n defaultCollapsed?: boolean;\n items?: AppNavItem[];\n /** Nested groups (one extra level, e.g. Providers > Xero). */\n groups?: AppNavGroup[];\n}\n\nexport interface AppNavSection {\n /** Section heading; omitted for the leading section. */\n label?: string;\n items?: AppNavItem[];\n /** Collapsible groups rendered after the flat items. */\n groups?: AppNavGroup[];\n}\n\nexport interface AppSidebarProps {\n sections: AppNavSection[];\n /** Current path for active-state. Defaults to the RouterAdapter's pathname. */\n pathname?: string;\n /** Render routed links. Defaults to the RouterAdapter's renderLink (a plain\n * <a href={to}> unless a RouterProvider supplies a router Link). */\n renderLink?: RenderLink;\n /** Branding shown at the top of the expanded rail (logo/title). */\n header?: ReactNode;\n /** Pinned to the bottom of the rail (theme switcher, version, etc.). */\n footer?: ReactNode;\n /** localStorage key persisting the rail collapsed state. */\n collapsedStorageKey?: string;\n /** localStorage key persisting per-group collapsed state. */\n groupCollapsedStorageKey?: string;\n /** Override the default prefix-match active test. */\n isActive?: (pathname: string, to: string) => boolean;\n className?: string;\n}\n\nconst DEFAULT_COLLAPSE_KEY = \"clicky-ui:app-sidebar:collapsed\";\nconst DEFAULT_GROUP_COLLAPSE_KEY = \"clicky-ui:app-sidebar:groups\";\n\nfunction defaultIsActive(pathname: string, to: string): boolean {\n if (to === \"/\") return pathname === \"/\";\n return pathname === to || pathname.startsWith(`${to}/`);\n}\n\nfunction useCollapsed(storageKey: string): [boolean, () => void] {\n const [collapsed, setCollapsed] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.localStorage.getItem(storageKey) === \"true\";\n });\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n window.localStorage.setItem(storageKey, String(collapsed));\n }, [collapsed, storageKey]);\n return [collapsed, () => setCollapsed((c) => !c)];\n}\n\ninterface GroupState {\n isCollapsed: (key: string, fallback: boolean) => boolean;\n toggle: (key: string, fallback: boolean) => void;\n}\n\nfunction readGroupState(storageKey: string): Record<string, boolean> {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (!raw) return {};\n const parsed = JSON.parse(raw);\n return parsed && typeof parsed === \"object\" ? (parsed as Record<string, boolean>) : {};\n } catch {\n return {};\n }\n}\n\nfunction useGroupCollapsed(storageKey: string): GroupState {\n const [state, setState] = useState<Record<string, boolean>>(() => readGroupState(storageKey));\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(state));\n } catch {\n // Sidebar state is a UX nicety; private-mode storage failures are safe to swallow.\n }\n }, [state, storageKey]);\n return {\n isCollapsed: (key, fallback) => state[key] ?? fallback,\n toggle: (key, fallback) => setState((prev) => ({ ...prev, [key]: !(prev[key] ?? fallback) })),\n };\n}\n\nfunction flattenGroupItems(groups: AppNavGroup[]): AppNavItem[] {\n const out: AppNavItem[] = [];\n for (const group of groups) {\n if (group.items) out.push(...group.items);\n if (group.groups) out.push(...flattenGroupItems(group.groups));\n }\n return out;\n}\n\nexport function AppSidebar({\n sections,\n pathname: pathnameProp,\n renderLink: renderLinkProp,\n header,\n footer,\n collapsedStorageKey = DEFAULT_COLLAPSE_KEY,\n groupCollapsedStorageKey = DEFAULT_GROUP_COLLAPSE_KEY,\n isActive = defaultIsActive,\n className,\n}: AppSidebarProps) {\n const router = useRouter();\n const pathname = pathnameProp ?? router.pathname;\n const renderLink = renderLinkProp ?? router.renderLink;\n const [collapsed, toggleCollapsed] = useCollapsed(collapsedStorageKey);\n const groupState = useGroupCollapsed(groupCollapsedStorageKey);\n return (\n <nav\n className={cn(\n \"flex shrink-0 flex-col overflow-hidden border-r border-border bg-muted/30 transition-[width] duration-200\",\n collapsed ? \"w-16\" : \"w-64\",\n className,\n )}\n >\n <div\n className={cn(\n \"flex shrink-0 items-center border-b border-border py-3\",\n collapsed ? \"justify-center px-2\" : \"justify-between px-4\",\n )}\n >\n {!collapsed && <div className=\"min-w-0 flex-1\">{header}</div>}\n <button\n type=\"button\"\n onClick={toggleCollapsed}\n aria-label={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n title={collapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"\n >\n <Icon icon={UiSidebar} className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className={cn(\"flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto py-2\", collapsed ? \"px-2\" : \"px-3\")}>\n {sections.map((section, i) => (\n <div key={section.label ?? `section-${i}`} className=\"flex flex-col\">\n {section.label && <SectionLabel collapsed={collapsed}>{section.label}</SectionLabel>}\n {section.items?.map((item) => (\n <SidebarItem\n key={item.key}\n item={item}\n active={isActive(pathname, item.to)}\n collapsed={collapsed}\n renderLink={renderLink}\n />\n ))}\n {section.groups?.map((group) =>\n collapsed ? (\n flattenGroupItems([group]).map((item) => (\n <SidebarItem\n key={item.key}\n item={item}\n active={isActive(pathname, item.to)}\n collapsed\n renderLink={renderLink}\n />\n ))\n ) : (\n <SidebarGroup\n key={group.key}\n group={group}\n pathname={pathname}\n isActive={isActive}\n renderLink={renderLink}\n groupState={groupState}\n />\n ),\n )}\n </div>\n ))}\n </div>\n\n {footer && <div className={cn(\"mt-auto border-t border-border py-3\", collapsed ? \"px-2\" : \"px-4\")}>{footer}</div>}\n </nav>\n );\n}\n\nfunction SidebarGroup({\n group,\n pathname,\n isActive,\n renderLink,\n groupState,\n}: {\n group: AppNavGroup;\n pathname: string;\n isActive: (pathname: string, to: string) => boolean;\n renderLink: RenderLink;\n groupState: GroupState;\n}) {\n const fallback = group.defaultCollapsed ?? false;\n const collapsed = groupState.isCollapsed(group.key, fallback);\n return (\n <div className=\"flex flex-col\">\n <button\n type=\"button\"\n onClick={() => groupState.toggle(group.key, fallback)}\n aria-expanded={!collapsed}\n className=\"flex items-center gap-2 rounded-md px-3 py-1.5 text-[11px] font-semibold uppercase tracking-[0.14em] text-muted-foreground transition-colors hover:bg-accent/40\"\n >\n {group.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">{group.icon}</span>}\n <span className=\"flex-1 truncate text-left\">{group.label}</span>\n <span aria-hidden className=\"text-[0.65rem] opacity-60\">\n {collapsed ? \"▸\" : \"▾\"}\n </span>\n </button>\n {!collapsed && (\n <div className=\"ml-2 mt-0.5 flex flex-col gap-0.5 border-l border-border/60 pl-2\">\n {group.items?.map((item) => (\n <SidebarItem\n key={item.key}\n item={item}\n active={isActive(pathname, item.to)}\n collapsed={false}\n renderLink={renderLink}\n />\n ))}\n {group.groups?.map((sub) => (\n <SidebarGroup\n key={sub.key}\n group={sub}\n pathname={pathname}\n isActive={isActive}\n renderLink={renderLink}\n groupState={groupState}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction SidebarItem({\n item,\n active,\n collapsed,\n renderLink,\n}: {\n item: AppNavItem;\n active: boolean;\n collapsed: boolean;\n renderLink: RenderLink;\n}) {\n const className = cn(\n \"flex items-center gap-2.5 rounded-md px-3 py-1.5 text-[13px] text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\",\n collapsed && \"justify-center px-0\",\n active && \"bg-accent font-medium text-accent-foreground\",\n );\n const title = collapsed ? item.title : undefined;\n const children = (\n <>\n {item.icon && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">{item.icon}</span>}\n {!collapsed && <span className=\"flex-1 truncate\">{item.title}</span>}\n {!collapsed && item.badge}\n </>\n );\n\n if (item.external) {\n return (\n <a href={item.to} className={className} title={title} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n );\n }\n return renderLink({ key: item.key, to: item.to, className, children, ...(title ? { title } : {}) });\n}\n\nfunction SectionLabel({ children, collapsed }: { children: ReactNode; collapsed: boolean }) {\n if (collapsed) {\n return <div className=\"mx-2 mb-1 mt-3 border-t border-border first:mt-2\" />;\n }\n return (\n <div className=\"mb-0.5 mt-3 px-3 text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground first:mt-2\">\n {children}\n </div>\n );\n}\n\nexport interface AppLayoutProps {\n sidebar: ReactNode;\n header?: ReactNode;\n children: ReactNode;\n /** Centers content at responsive wide breakpoints, or allows it to fill the workspace. */\n contentWidth?: ContentWidth;\n className?: string;\n}\n\n/** Flex shell pairing the sidebar rail with an optional header and the routed\n * content area. The content area scrolls independently of the rail. */\nexport function AppLayout({\n sidebar,\n header,\n children,\n contentWidth = \"contained\",\n className,\n}: AppLayoutProps) {\n return (\n <div className={cn(\"flex h-full min-h-0 w-full overflow-hidden bg-background\", className)}>\n {sidebar}\n <div\n data-slot=\"app-layout-column\"\n className=\"@container/app-content flex min-w-0 flex-1 flex-col\"\n >\n {header && (\n <div\n data-slot=\"app-layout-header-content\"\n data-content-width={contentWidth}\n className={contentWidthClassName(contentWidth)}\n >\n {header}\n </div>\n )}\n <main className=\"min-h-0 min-w-0 flex-1 overflow-y-auto\">\n <div\n data-slot=\"app-layout-content\"\n data-content-width={contentWidth}\n className={contentWidthClassName(contentWidth)}\n >\n {children}\n </div>\n </main>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
package/dist/layout/Panel.cjs
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const utils = require("../lib/utils.cjs");
|
|
5
4
|
const Icon = require("../data/Icon.cjs");
|
|
6
|
-
const
|
|
7
|
-
default: "",
|
|
8
|
-
danger: "border-l-2 border-l-red-500",
|
|
9
|
-
warning: "border-l-2 border-l-yellow-500",
|
|
10
|
-
success: "border-l-2 border-l-green-500",
|
|
11
|
-
info: "border-l-2 border-l-blue-500"
|
|
12
|
-
};
|
|
5
|
+
const PanelFrame = require("./PanelFrame.cjs");
|
|
13
6
|
function Panel({
|
|
14
7
|
title,
|
|
15
8
|
icon,
|
|
@@ -24,41 +17,32 @@ function Panel({
|
|
|
24
17
|
children
|
|
25
18
|
}) {
|
|
26
19
|
const hasHeader = title !== void 0 || icon !== void 0 || actions !== void 0;
|
|
27
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
28
|
-
|
|
20
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
21
|
+
PanelFrame.PanelFrame,
|
|
29
22
|
{
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
className: utils.cn(
|
|
40
|
-
"flex items-center gap-2 px-density-3 py-density-2 border-b border-border",
|
|
41
|
-
headerClassName
|
|
23
|
+
...hasHeader ? {
|
|
24
|
+
header: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
25
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
|
|
26
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
27
|
+
Icon.Icon,
|
|
28
|
+
{
|
|
29
|
+
...typeof icon === "string" ? { name: icon } : { icon },
|
|
30
|
+
className: "text-base text-muted-foreground"
|
|
31
|
+
}
|
|
42
32
|
),
|
|
43
|
-
children:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
]
|
|
57
|
-
}
|
|
58
|
-
),
|
|
59
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn(padded && "px-density-3 py-density-2", bodyClassName), children }),
|
|
60
|
-
footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-density-3 py-density-2 border-t border-border", children: footer })
|
|
61
|
-
]
|
|
33
|
+
title !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-sm font-medium text-card-foreground", children: title }),
|
|
34
|
+
count !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center justify-center rounded-full bg-muted px-1.5 text-[11px] font-semibold text-muted-foreground", children: count })
|
|
35
|
+
] }),
|
|
36
|
+
actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-1", children: actions })
|
|
37
|
+
] })
|
|
38
|
+
} : {},
|
|
39
|
+
...footer !== void 0 ? { footer } : {},
|
|
40
|
+
tone,
|
|
41
|
+
padded,
|
|
42
|
+
...className !== void 0 ? { className } : {},
|
|
43
|
+
...headerClassName !== void 0 ? { headerClassName } : {},
|
|
44
|
+
...bodyClassName !== void 0 ? { bodyClassName } : {},
|
|
45
|
+
children
|
|
62
46
|
}
|
|
63
47
|
);
|
|
64
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.cjs","sources":["../../src/layout/Panel.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"Panel.cjs","sources":["../../src/layout/Panel.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { PanelFrame, type PanelTone } from \"./PanelFrame\";\n\nexport type { PanelTone } from \"./PanelFrame\";\n\nexport type PanelProps = {\n /** Header title. Omit (with no icon/count/actions) to render a headerless card. */\n title?: ReactNode;\n /** Optional leading icon. */\n icon?: string | StaticIconComponent;\n /** Optional count pill shown after the title. */\n count?: number;\n /** Right-aligned header content (copy buttons, summaries, links). */\n actions?: ReactNode;\n /** Optional footer row below the body. */\n footer?: ReactNode;\n /** Semantic left-border accent. */\n tone?: PanelTone;\n /** Pad the body. Defaults to true; pass false for flush row lists. */\n padded?: boolean;\n /** Classes applied to the panel root. */\n className?: string;\n /** Classes applied to the header row. */\n headerClassName?: string;\n /** Classes applied to the body. */\n bodyClassName?: string;\n /** Panel content. */\n children: ReactNode;\n};\n\n/**\n * A non-collapsible carded surface with an optional header. Use for content\n * panels (checks, results, comments) where {@link Section}'s disclosure\n * behaviour isn't wanted. Sits on `bg-card` with a border and rounded corners.\n */\nexport function Panel({\n title,\n icon,\n count,\n actions,\n footer,\n tone = \"default\",\n padded = true,\n className,\n headerClassName,\n bodyClassName,\n children,\n}: PanelProps) {\n const hasHeader =\n title !== undefined || icon !== undefined || actions !== undefined;\n return (\n <PanelFrame\n {...(hasHeader\n ? {\n header: (\n <>\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n {icon && (\n <Icon\n {...(typeof icon === \"string\"\n ? { name: icon }\n : { icon })}\n className=\"text-base text-muted-foreground\"\n />\n )}\n {title !== undefined && (\n <span className=\"truncate text-sm font-medium text-card-foreground\">\n {title}\n </span>\n )}\n {count !== undefined && (\n <span className=\"inline-flex items-center justify-center rounded-full bg-muted px-1.5 text-[11px] font-semibold text-muted-foreground\">\n {count}\n </span>\n )}\n </div>\n {actions && (\n <div className=\"flex shrink-0 items-center gap-1\">\n {actions}\n </div>\n )}\n </>\n ),\n }\n : {})}\n {...(footer !== undefined ? { footer } : {})}\n tone={tone}\n padded={padded}\n {...(className !== undefined ? { className } : {})}\n {...(headerClassName !== undefined ? { headerClassName } : {})}\n {...(bodyClassName !== undefined ? { bodyClassName } : {})}\n >\n {children}\n </PanelFrame>\n );\n}\n"],"names":["jsx","PanelFrame","jsxs","Fragment","Icon"],"mappings":";;;;;AAoCO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAe;AACb,QAAM,YACJ,UAAU,UAAa,SAAS,UAAa,YAAY;AAC3D,SACEA,2BAAAA;AAAAA,IAACC,WAAAA;AAAAA,IAAA;AAAA,MACE,GAAI,YACD;AAAA,QACE,QACEC,2BAAAA,KAAAC,qBAAA,EACE,UAAA;AAAA,UAAAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,0CACZ,UAAA;AAAA,YAAA,QACCF,2BAAAA;AAAAA,cAACI,KAAAA;AAAAA,cAAA;AAAA,gBACE,GAAI,OAAO,SAAS,WACjB,EAAE,MAAM,KAAA,IACR,EAAE,KAAA;AAAA,gBACN,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGb,UAAU,UACTJ,2BAAAA,IAAC,QAAA,EAAK,WAAU,qDACb,UAAA,OACH;AAAA,YAED,UAAU,UACTA,2BAAAA,IAAC,QAAA,EAAK,WAAU,wHACb,UAAA,MAAA,CACH;AAAA,UAAA,GAEJ;AAAA,UACC,WACCA,2BAAAA,IAAC,OAAA,EAAI,WAAU,oCACZ,UAAA,QAAA,CACH;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA,IAGJ,CAAA;AAAA,MACH,GAAI,WAAW,SAAY,EAAE,OAAA,IAAW,CAAA;AAAA,MACzC;AAAA,MACA;AAAA,MACC,GAAI,cAAc,SAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAC9C,GAAI,oBAAoB,SAAY,EAAE,gBAAA,IAAoB,CAAA;AAAA,MAC1D,GAAI,kBAAkB,SAAY,EAAE,cAAA,IAAkB,CAAA;AAAA,MAEtD;AAAA,IAAA;AAAA,EAAA;AAGP;;"}
|
package/dist/layout/Panel.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { StaticIconComponent } from '../data/Icon';
|
|
3
|
-
|
|
3
|
+
import { PanelTone } from './PanelFrame';
|
|
4
|
+
export type { PanelTone } from './PanelFrame';
|
|
4
5
|
export type PanelProps = {
|
|
5
6
|
/** Header title. Omit (with no icon/count/actions) to render a headerless card. */
|
|
6
7
|
title?: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/layout/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/layout/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG;IACvB,mFAAmF;IACnF,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACpC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,mCAAmC;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,IAAgB,EAChB,MAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACb,QAAQ,GACT,EAAE,UAAU,2CAgDZ"}
|
package/dist/layout/Panel.js
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
import { jsxs,
|
|
2
|
-
import { cn } from "../lib/utils.js";
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
3
2
|
import { Icon } from "../data/Icon.js";
|
|
4
|
-
|
|
5
|
-
default: "",
|
|
6
|
-
danger: "border-l-2 border-l-red-500",
|
|
7
|
-
warning: "border-l-2 border-l-yellow-500",
|
|
8
|
-
success: "border-l-2 border-l-green-500",
|
|
9
|
-
info: "border-l-2 border-l-blue-500"
|
|
10
|
-
};
|
|
3
|
+
import { PanelFrame } from "./PanelFrame.js";
|
|
11
4
|
function Panel({
|
|
12
5
|
title,
|
|
13
6
|
icon,
|
|
@@ -22,41 +15,32 @@ function Panel({
|
|
|
22
15
|
children
|
|
23
16
|
}) {
|
|
24
17
|
const hasHeader = title !== void 0 || icon !== void 0 || actions !== void 0;
|
|
25
|
-
return /* @__PURE__ */
|
|
26
|
-
|
|
18
|
+
return /* @__PURE__ */ jsx(
|
|
19
|
+
PanelFrame,
|
|
27
20
|
{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
className: cn(
|
|
38
|
-
"flex items-center gap-2 px-density-3 py-density-2 border-b border-border",
|
|
39
|
-
headerClassName
|
|
21
|
+
...hasHeader ? {
|
|
22
|
+
header: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
23
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
|
|
24
|
+
icon && /* @__PURE__ */ jsx(
|
|
25
|
+
Icon,
|
|
26
|
+
{
|
|
27
|
+
...typeof icon === "string" ? { name: icon } : { icon },
|
|
28
|
+
className: "text-base text-muted-foreground"
|
|
29
|
+
}
|
|
40
30
|
),
|
|
41
|
-
children:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
),
|
|
57
|
-
/* @__PURE__ */ jsx("div", { className: cn(padded && "px-density-3 py-density-2", bodyClassName), children }),
|
|
58
|
-
footer && /* @__PURE__ */ jsx("div", { className: "px-density-3 py-density-2 border-t border-border", children: footer })
|
|
59
|
-
]
|
|
31
|
+
title !== void 0 && /* @__PURE__ */ jsx("span", { className: "truncate text-sm font-medium text-card-foreground", children: title }),
|
|
32
|
+
count !== void 0 && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center justify-center rounded-full bg-muted px-1.5 text-[11px] font-semibold text-muted-foreground", children: count })
|
|
33
|
+
] }),
|
|
34
|
+
actions && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1", children: actions })
|
|
35
|
+
] })
|
|
36
|
+
} : {},
|
|
37
|
+
...footer !== void 0 ? { footer } : {},
|
|
38
|
+
tone,
|
|
39
|
+
padded,
|
|
40
|
+
...className !== void 0 ? { className } : {},
|
|
41
|
+
...headerClassName !== void 0 ? { headerClassName } : {},
|
|
42
|
+
...bodyClassName !== void 0 ? { bodyClassName } : {},
|
|
43
|
+
children
|
|
60
44
|
}
|
|
61
45
|
);
|
|
62
46
|
}
|
package/dist/layout/Panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.js","sources":["../../src/layout/Panel.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"Panel.js","sources":["../../src/layout/Panel.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { PanelFrame, type PanelTone } from \"./PanelFrame\";\n\nexport type { PanelTone } from \"./PanelFrame\";\n\nexport type PanelProps = {\n /** Header title. Omit (with no icon/count/actions) to render a headerless card. */\n title?: ReactNode;\n /** Optional leading icon. */\n icon?: string | StaticIconComponent;\n /** Optional count pill shown after the title. */\n count?: number;\n /** Right-aligned header content (copy buttons, summaries, links). */\n actions?: ReactNode;\n /** Optional footer row below the body. */\n footer?: ReactNode;\n /** Semantic left-border accent. */\n tone?: PanelTone;\n /** Pad the body. Defaults to true; pass false for flush row lists. */\n padded?: boolean;\n /** Classes applied to the panel root. */\n className?: string;\n /** Classes applied to the header row. */\n headerClassName?: string;\n /** Classes applied to the body. */\n bodyClassName?: string;\n /** Panel content. */\n children: ReactNode;\n};\n\n/**\n * A non-collapsible carded surface with an optional header. Use for content\n * panels (checks, results, comments) where {@link Section}'s disclosure\n * behaviour isn't wanted. Sits on `bg-card` with a border and rounded corners.\n */\nexport function Panel({\n title,\n icon,\n count,\n actions,\n footer,\n tone = \"default\",\n padded = true,\n className,\n headerClassName,\n bodyClassName,\n children,\n}: PanelProps) {\n const hasHeader =\n title !== undefined || icon !== undefined || actions !== undefined;\n return (\n <PanelFrame\n {...(hasHeader\n ? {\n header: (\n <>\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n {icon && (\n <Icon\n {...(typeof icon === \"string\"\n ? { name: icon }\n : { icon })}\n className=\"text-base text-muted-foreground\"\n />\n )}\n {title !== undefined && (\n <span className=\"truncate text-sm font-medium text-card-foreground\">\n {title}\n </span>\n )}\n {count !== undefined && (\n <span className=\"inline-flex items-center justify-center rounded-full bg-muted px-1.5 text-[11px] font-semibold text-muted-foreground\">\n {count}\n </span>\n )}\n </div>\n {actions && (\n <div className=\"flex shrink-0 items-center gap-1\">\n {actions}\n </div>\n )}\n </>\n ),\n }\n : {})}\n {...(footer !== undefined ? { footer } : {})}\n tone={tone}\n padded={padded}\n {...(className !== undefined ? { className } : {})}\n {...(headerClassName !== undefined ? { headerClassName } : {})}\n {...(bodyClassName !== undefined ? { bodyClassName } : {})}\n >\n {children}\n </PanelFrame>\n );\n}\n"],"names":[],"mappings":";;;AAoCO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAe;AACb,QAAM,YACJ,UAAU,UAAa,SAAS,UAAa,YAAY;AAC3D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAI,YACD;AAAA,QACE,QACE,qBAAA,UAAA,EACE,UAAA;AAAA,UAAA,qBAAC,OAAA,EAAI,WAAU,0CACZ,UAAA;AAAA,YAAA,QACC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACE,GAAI,OAAO,SAAS,WACjB,EAAE,MAAM,KAAA,IACR,EAAE,KAAA;AAAA,gBACN,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGb,UAAU,UACT,oBAAC,QAAA,EAAK,WAAU,qDACb,UAAA,OACH;AAAA,YAED,UAAU,UACT,oBAAC,QAAA,EAAK,WAAU,wHACb,UAAA,MAAA,CACH;AAAA,UAAA,GAEJ;AAAA,UACC,WACC,oBAAC,OAAA,EAAI,WAAU,oCACZ,UAAA,QAAA,CACH;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA,IAGJ,CAAA;AAAA,MACH,GAAI,WAAW,SAAY,EAAE,OAAA,IAAW,CAAA;AAAA,MACzC;AAAA,MACA;AAAA,MACC,GAAI,cAAc,SAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAC9C,GAAI,oBAAoB,SAAY,EAAE,gBAAA,IAAoB,CAAA;AAAA,MAC1D,GAAI,kBAAkB,SAAY,EAAE,cAAA,IAAkB,CAAA;AAAA,MAEtD;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const utils = require("../lib/utils.cjs");
|
|
5
|
+
const toneRing = {
|
|
6
|
+
default: "",
|
|
7
|
+
danger: "border-l-2 border-l-red-500",
|
|
8
|
+
warning: "border-l-2 border-l-yellow-500",
|
|
9
|
+
success: "border-l-2 border-l-green-500",
|
|
10
|
+
info: "border-l-2 border-l-blue-500"
|
|
11
|
+
};
|
|
12
|
+
function PanelFrame({
|
|
13
|
+
header,
|
|
14
|
+
footer,
|
|
15
|
+
tone = "default",
|
|
16
|
+
padded = true,
|
|
17
|
+
bodyVisible = true,
|
|
18
|
+
className,
|
|
19
|
+
headerClassName,
|
|
20
|
+
bodyClassName,
|
|
21
|
+
children
|
|
22
|
+
}) {
|
|
23
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
className: utils.cn(
|
|
27
|
+
"overflow-hidden rounded-md border border-border bg-card",
|
|
28
|
+
toneRing[tone],
|
|
29
|
+
className
|
|
30
|
+
),
|
|
31
|
+
children: [
|
|
32
|
+
header !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
33
|
+
"div",
|
|
34
|
+
{
|
|
35
|
+
className: utils.cn(
|
|
36
|
+
"flex items-center gap-2 px-density-3 py-density-2",
|
|
37
|
+
bodyVisible && "border-b border-border",
|
|
38
|
+
headerClassName
|
|
39
|
+
),
|
|
40
|
+
children: header
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
bodyVisible && /* @__PURE__ */ jsxRuntime.jsx(
|
|
44
|
+
"div",
|
|
45
|
+
{
|
|
46
|
+
className: utils.cn(padded && "px-density-3 py-density-2", bodyClassName),
|
|
47
|
+
children
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
bodyVisible && footer !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-t border-border px-density-3 py-density-2", children: footer })
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
exports.PanelFrame = PanelFrame;
|
|
56
|
+
//# sourceMappingURL=PanelFrame.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelFrame.cjs","sources":["../../src/layout/PanelFrame.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type PanelTone = \"default\" | \"danger\" | \"warning\" | \"success\" | \"info\";\n\nexport type PanelFrameProps = {\n header?: ReactNode;\n footer?: ReactNode;\n tone?: PanelTone;\n padded?: boolean;\n bodyVisible?: boolean;\n className?: string;\n headerClassName?: string;\n bodyClassName?: string;\n children: ReactNode;\n};\n\nconst toneRing: Record<PanelTone, string> = {\n default: \"\",\n danger: \"border-l-2 border-l-red-500\",\n warning: \"border-l-2 border-l-yellow-500\",\n success: \"border-l-2 border-l-green-500\",\n info: \"border-l-2 border-l-blue-500\",\n};\n\nexport function PanelFrame({\n header,\n footer,\n tone = \"default\",\n padded = true,\n bodyVisible = true,\n className,\n headerClassName,\n bodyClassName,\n children,\n}: PanelFrameProps) {\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-md border border-border bg-card\",\n toneRing[tone],\n className,\n )}\n >\n {header !== undefined && (\n <div\n className={cn(\n \"flex items-center gap-2 px-density-3 py-density-2\",\n bodyVisible && \"border-b border-border\",\n headerClassName,\n )}\n >\n {header}\n </div>\n )}\n {bodyVisible && (\n <div\n className={cn(padded && \"px-density-3 py-density-2\", bodyClassName)}\n >\n {children}\n </div>\n )}\n {bodyVisible && footer !== undefined && (\n <div className=\"border-t border-border px-density-3 py-density-2\">\n {footer}\n </div>\n )}\n </div>\n );\n}\n"],"names":["jsxs","cn","jsx"],"mappings":";;;;AAiBA,MAAM,WAAsC;AAAA,EAC1C,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AACR;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,SAAS;AAAA,EACT,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoB;AAClB,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA,SAAS,IAAI;AAAA,QACb;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,WAAW,UACVC,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWD,MAAAA;AAAAA,cACT;AAAA,cACA,eAAe;AAAA,cACf;AAAA,YAAA;AAAA,YAGD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,eACCC,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWD,MAAAA,GAAG,UAAU,6BAA6B,aAAa;AAAA,YAEjE;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,eAAe,WAAW,yCACxB,OAAA,EAAI,WAAU,oDACZ,UAAA,OAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export type PanelTone = "default" | "danger" | "warning" | "success" | "info";
|
|
3
|
+
export type PanelFrameProps = {
|
|
4
|
+
header?: ReactNode;
|
|
5
|
+
footer?: ReactNode;
|
|
6
|
+
tone?: PanelTone;
|
|
7
|
+
padded?: boolean;
|
|
8
|
+
bodyVisible?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
headerClassName?: string;
|
|
11
|
+
bodyClassName?: string;
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
};
|
|
14
|
+
export declare function PanelFrame({ header, footer, tone, padded, bodyVisible, className, headerClassName, bodyClassName, children, }: PanelFrameProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=PanelFrame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelFrame.d.ts","sourceRoot":"","sources":["../../src/layout/PanelFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9E,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAUF,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,MAAM,EACN,IAAgB,EAChB,MAAa,EACb,WAAkB,EAClB,SAAS,EACT,eAAe,EACf,aAAa,EACb,QAAQ,GACT,EAAE,eAAe,2CAkCjB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../lib/utils.js";
|
|
3
|
+
const toneRing = {
|
|
4
|
+
default: "",
|
|
5
|
+
danger: "border-l-2 border-l-red-500",
|
|
6
|
+
warning: "border-l-2 border-l-yellow-500",
|
|
7
|
+
success: "border-l-2 border-l-green-500",
|
|
8
|
+
info: "border-l-2 border-l-blue-500"
|
|
9
|
+
};
|
|
10
|
+
function PanelFrame({
|
|
11
|
+
header,
|
|
12
|
+
footer,
|
|
13
|
+
tone = "default",
|
|
14
|
+
padded = true,
|
|
15
|
+
bodyVisible = true,
|
|
16
|
+
className,
|
|
17
|
+
headerClassName,
|
|
18
|
+
bodyClassName,
|
|
19
|
+
children
|
|
20
|
+
}) {
|
|
21
|
+
return /* @__PURE__ */ jsxs(
|
|
22
|
+
"div",
|
|
23
|
+
{
|
|
24
|
+
className: cn(
|
|
25
|
+
"overflow-hidden rounded-md border border-border bg-card",
|
|
26
|
+
toneRing[tone],
|
|
27
|
+
className
|
|
28
|
+
),
|
|
29
|
+
children: [
|
|
30
|
+
header !== void 0 && /* @__PURE__ */ jsx(
|
|
31
|
+
"div",
|
|
32
|
+
{
|
|
33
|
+
className: cn(
|
|
34
|
+
"flex items-center gap-2 px-density-3 py-density-2",
|
|
35
|
+
bodyVisible && "border-b border-border",
|
|
36
|
+
headerClassName
|
|
37
|
+
),
|
|
38
|
+
children: header
|
|
39
|
+
}
|
|
40
|
+
),
|
|
41
|
+
bodyVisible && /* @__PURE__ */ jsx(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
className: cn(padded && "px-density-3 py-density-2", bodyClassName),
|
|
45
|
+
children
|
|
46
|
+
}
|
|
47
|
+
),
|
|
48
|
+
bodyVisible && footer !== void 0 && /* @__PURE__ */ jsx("div", { className: "border-t border-border px-density-3 py-density-2", children: footer })
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
PanelFrame
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=PanelFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelFrame.js","sources":["../../src/layout/PanelFrame.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type PanelTone = \"default\" | \"danger\" | \"warning\" | \"success\" | \"info\";\n\nexport type PanelFrameProps = {\n header?: ReactNode;\n footer?: ReactNode;\n tone?: PanelTone;\n padded?: boolean;\n bodyVisible?: boolean;\n className?: string;\n headerClassName?: string;\n bodyClassName?: string;\n children: ReactNode;\n};\n\nconst toneRing: Record<PanelTone, string> = {\n default: \"\",\n danger: \"border-l-2 border-l-red-500\",\n warning: \"border-l-2 border-l-yellow-500\",\n success: \"border-l-2 border-l-green-500\",\n info: \"border-l-2 border-l-blue-500\",\n};\n\nexport function PanelFrame({\n header,\n footer,\n tone = \"default\",\n padded = true,\n bodyVisible = true,\n className,\n headerClassName,\n bodyClassName,\n children,\n}: PanelFrameProps) {\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-md border border-border bg-card\",\n toneRing[tone],\n className,\n )}\n >\n {header !== undefined && (\n <div\n className={cn(\n \"flex items-center gap-2 px-density-3 py-density-2\",\n bodyVisible && \"border-b border-border\",\n headerClassName,\n )}\n >\n {header}\n </div>\n )}\n {bodyVisible && (\n <div\n className={cn(padded && \"px-density-3 py-density-2\", bodyClassName)}\n >\n {children}\n </div>\n )}\n {bodyVisible && footer !== undefined && (\n <div className=\"border-t border-border px-density-3 py-density-2\">\n {footer}\n </div>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;AAiBA,MAAM,WAAsC;AAAA,EAC1C,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AACR;AAEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,SAAS;AAAA,EACT,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoB;AAClB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,SAAS,IAAI;AAAA,QACb;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,WAAW,UACV;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,eAAe;AAAA,cACf;AAAA,YAAA;AAAA,YAGD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,eACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,GAAG,UAAU,6BAA6B,aAAa;AAAA,YAEjE;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,eAAe,WAAW,8BACxB,OAAA,EAAI,WAAU,oDACZ,UAAA,OAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
package/dist/layout/Section.cjs
CHANGED
|
@@ -4,15 +4,9 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const utils = require("../lib/utils.cjs");
|
|
6
6
|
const Icon = require("../data/Icon.cjs");
|
|
7
|
+
const PanelFrame = require("./PanelFrame.cjs");
|
|
7
8
|
const UiChevronDown = require("../icons/components/UiChevronDown.cjs");
|
|
8
9
|
const UiChevronRight = require("../icons/components/UiChevronRight.cjs");
|
|
9
|
-
const toneRing = {
|
|
10
|
-
default: "",
|
|
11
|
-
danger: "border-l-2 border-red-500",
|
|
12
|
-
warning: "border-l-2 border-yellow-500",
|
|
13
|
-
success: "border-l-2 border-green-500",
|
|
14
|
-
info: "border-l-2 border-blue-500"
|
|
15
|
-
};
|
|
16
10
|
function Section({
|
|
17
11
|
title,
|
|
18
12
|
summary,
|
|
@@ -43,47 +37,63 @@ function Section({
|
|
|
43
37
|
className: "text-muted-foreground text-xs"
|
|
44
38
|
}
|
|
45
39
|
),
|
|
46
|
-
icon && /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { ...typeof icon === "string" ? { name: icon } : { icon }, className: "text-base" }),
|
|
47
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-sm flex-1 truncate", children: title })
|
|
48
|
-
] });
|
|
49
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("rounded-md border border-border bg-background", toneRing[tone], className), children: [
|
|
50
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
51
|
-
"div",
|
|
52
|
-
{
|
|
53
|
-
className: utils.cn(
|
|
54
|
-
"w-full flex items-center gap-2 px-density-3 py-density-2 text-left",
|
|
55
|
-
headerClassName
|
|
56
|
-
),
|
|
57
|
-
children: [
|
|
58
|
-
collapsible ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
59
|
-
"button",
|
|
60
|
-
{
|
|
61
|
-
type: "button",
|
|
62
|
-
onClick: toggle,
|
|
63
|
-
"aria-expanded": open,
|
|
64
|
-
className: "flex flex-1 min-w-0 items-center gap-2 text-left rounded-sm hover:bg-accent/50 transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
65
|
-
children: leading
|
|
66
|
-
}
|
|
67
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-1 min-w-0 items-center gap-2", children: leading }),
|
|
68
|
-
summary && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground shrink-0", children: summary })
|
|
69
|
-
]
|
|
70
|
-
}
|
|
71
|
-
),
|
|
72
|
-
open && /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn("px-density-3 py-density-2 border-t border-border", bodyClassName), children })
|
|
73
|
-
] });
|
|
74
|
-
}
|
|
75
|
-
function DetailEmptyState({ icon, label, description, className }) {
|
|
76
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("p-density-6 text-center text-muted-foreground", className), children: [
|
|
77
40
|
icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
78
41
|
Icon.Icon,
|
|
79
42
|
{
|
|
80
43
|
...typeof icon === "string" ? { name: icon } : { icon },
|
|
81
|
-
className: "text-
|
|
44
|
+
className: "text-base"
|
|
82
45
|
}
|
|
83
46
|
),
|
|
84
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
85
|
-
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs mt-density-1 opacity-70", children: description })
|
|
47
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-sm flex-1 truncate", children: title })
|
|
86
48
|
] });
|
|
49
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
50
|
+
PanelFrame.PanelFrame,
|
|
51
|
+
{
|
|
52
|
+
header: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
53
|
+
collapsible ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
54
|
+
"button",
|
|
55
|
+
{
|
|
56
|
+
type: "button",
|
|
57
|
+
onClick: toggle,
|
|
58
|
+
"aria-expanded": open,
|
|
59
|
+
className: "flex min-w-0 flex-1 items-center gap-2 rounded-sm text-left transition-colors hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
|
|
60
|
+
children: leading
|
|
61
|
+
}
|
|
62
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: leading }),
|
|
63
|
+
summary && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-xs text-muted-foreground", children: summary })
|
|
64
|
+
] }),
|
|
65
|
+
tone,
|
|
66
|
+
bodyVisible: open,
|
|
67
|
+
className: utils.cn("overflow-visible bg-background", className),
|
|
68
|
+
headerClassName: utils.cn("w-full text-left", headerClassName),
|
|
69
|
+
...bodyClassName !== void 0 ? { bodyClassName } : {},
|
|
70
|
+
children
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
function DetailEmptyState({
|
|
75
|
+
icon,
|
|
76
|
+
label,
|
|
77
|
+
description,
|
|
78
|
+
className
|
|
79
|
+
}) {
|
|
80
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
className: utils.cn("p-density-6 text-center text-muted-foreground", className),
|
|
84
|
+
children: [
|
|
85
|
+
icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
86
|
+
Icon.Icon,
|
|
87
|
+
{
|
|
88
|
+
...typeof icon === "string" ? { name: icon } : { icon },
|
|
89
|
+
className: "text-3xl mb-density-2"
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: label }),
|
|
93
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs mt-density-1 opacity-70", children: description })
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
);
|
|
87
97
|
}
|
|
88
98
|
exports.DetailEmptyState = DetailEmptyState;
|
|
89
99
|
exports.Section = Section;
|