@flanksource/clicky-ui 0.2.21 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/comments/CommentAuthor.cjs +58 -0
- package/dist/comments/CommentAuthor.cjs.map +1 -0
- package/dist/comments/CommentAuthor.d.ts +17 -0
- package/dist/comments/CommentAuthor.d.ts.map +1 -0
- package/dist/comments/CommentAuthor.js +58 -0
- package/dist/comments/CommentAuthor.js.map +1 -0
- package/dist/comments/CommentCard.cjs +343 -0
- package/dist/comments/CommentCard.cjs.map +1 -0
- package/dist/comments/CommentCard.d.ts +27 -0
- package/dist/comments/CommentCard.d.ts.map +1 -0
- package/dist/comments/CommentCard.js +343 -0
- package/dist/comments/CommentCard.js.map +1 -0
- package/dist/comments/CommentComposer.cjs +207 -0
- package/dist/comments/CommentComposer.cjs.map +1 -0
- package/dist/comments/CommentComposer.d.ts +23 -0
- package/dist/comments/CommentComposer.d.ts.map +1 -0
- package/dist/comments/CommentComposer.js +207 -0
- package/dist/comments/CommentComposer.js.map +1 -0
- package/dist/comments/CommentFilterBar.cjs +145 -0
- package/dist/comments/CommentFilterBar.cjs.map +1 -0
- package/dist/comments/CommentFilterBar.d.ts +15 -0
- package/dist/comments/CommentFilterBar.d.ts.map +1 -0
- package/dist/comments/CommentFilterBar.js +145 -0
- package/dist/comments/CommentFilterBar.js.map +1 -0
- package/dist/comments/CommentMarkdown.cjs +156 -0
- package/dist/comments/CommentMarkdown.cjs.map +1 -0
- package/dist/comments/CommentMarkdown.d.ts +13 -0
- package/dist/comments/CommentMarkdown.d.ts.map +1 -0
- package/dist/comments/CommentMarkdown.js +156 -0
- package/dist/comments/CommentMarkdown.js.map +1 -0
- package/dist/comments/CommentProgress.cjs +86 -0
- package/dist/comments/CommentProgress.cjs.map +1 -0
- package/dist/comments/CommentProgress.d.ts +16 -0
- package/dist/comments/CommentProgress.d.ts.map +1 -0
- package/dist/comments/CommentProgress.js +86 -0
- package/dist/comments/CommentProgress.js.map +1 -0
- package/dist/comments/CommentProvider.cjs +99 -0
- package/dist/comments/CommentProvider.cjs.map +1 -0
- package/dist/comments/CommentProvider.d.ts +19 -0
- package/dist/comments/CommentProvider.d.ts.map +1 -0
- package/dist/comments/CommentProvider.js +99 -0
- package/dist/comments/CommentProvider.js.map +1 -0
- package/dist/comments/CommentSidePanel.cjs +219 -0
- package/dist/comments/CommentSidePanel.cjs.map +1 -0
- package/dist/comments/CommentSidePanel.d.ts +16 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -0
- package/dist/comments/CommentSidePanel.js +219 -0
- package/dist/comments/CommentSidePanel.js.map +1 -0
- package/dist/comments/CommentThread.cjs +57 -0
- package/dist/comments/CommentThread.cjs.map +1 -0
- package/dist/comments/CommentThread.d.ts +24 -0
- package/dist/comments/CommentThread.d.ts.map +1 -0
- package/dist/comments/CommentThread.js +57 -0
- package/dist/comments/CommentThread.js.map +1 -0
- package/dist/comments/CommentThreadList.cjs +124 -0
- package/dist/comments/CommentThreadList.cjs.map +1 -0
- package/dist/comments/CommentThreadList.d.ts +25 -0
- package/dist/comments/CommentThreadList.d.ts.map +1 -0
- package/dist/comments/CommentThreadList.js +124 -0
- package/dist/comments/CommentThreadList.js.map +1 -0
- package/dist/comments/GroupedComments.cjs +74 -0
- package/dist/comments/GroupedComments.cjs.map +1 -0
- package/dist/comments/GroupedComments.d.ts +18 -0
- package/dist/comments/GroupedComments.d.ts.map +1 -0
- package/dist/comments/GroupedComments.js +74 -0
- package/dist/comments/GroupedComments.js.map +1 -0
- package/dist/comments/MentionTextarea.cjs +253 -0
- package/dist/comments/MentionTextarea.cjs.map +1 -0
- package/dist/comments/MentionTextarea.d.ts +28 -0
- package/dist/comments/MentionTextarea.d.ts.map +1 -0
- package/dist/comments/MentionTextarea.js +253 -0
- package/dist/comments/MentionTextarea.js.map +1 -0
- package/dist/comments/comment-context.cjs +33 -0
- package/dist/comments/comment-context.cjs.map +1 -0
- package/dist/comments/comment-context.d.ts +32 -0
- package/dist/comments/comment-context.d.ts.map +1 -0
- package/dist/comments/comment-context.js +33 -0
- package/dist/comments/comment-context.js.map +1 -0
- package/dist/comments/comment-fixtures.d.ts +11 -0
- package/dist/comments/comment-fixtures.d.ts.map +1 -0
- package/dist/comments/comment-types.cjs +19 -0
- package/dist/comments/comment-types.cjs.map +1 -0
- package/dist/comments/comment-types.d.ts +170 -0
- package/dist/comments/comment-types.d.ts.map +1 -0
- package/dist/comments/comment-types.js +19 -0
- package/dist/comments/comment-types.js.map +1 -0
- package/dist/comments/comment-utils.cjs +216 -0
- package/dist/comments/comment-utils.cjs.map +1 -0
- package/dist/comments/comment-utils.d.ts +59 -0
- package/dist/comments/comment-utils.d.ts.map +1 -0
- package/dist/comments/comment-utils.js +216 -0
- package/dist/comments/comment-utils.js.map +1 -0
- package/dist/comments.cjs +57 -0
- package/dist/comments.cjs.map +1 -0
- package/dist/comments.d.ts +16 -0
- package/dist/comments.d.ts.map +1 -0
- package/dist/comments.js +57 -0
- package/dist/comments.js.map +1 -0
- package/dist/components/Combobox.cjs +5 -2
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +5 -2
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/FilterBar.cjs +293 -256
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +293 -256
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +22 -6
- 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 +25 -9
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/MultiSelect.cjs +29 -32
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js +30 -33
- package/dist/components/MultiSelect.js.map +1 -1
- package/dist/components/NamespacePicker.cjs +52 -0
- package/dist/components/NamespacePicker.cjs.map +1 -0
- package/dist/components/NamespacePicker.d.ts +17 -0
- package/dist/components/NamespacePicker.d.ts.map +1 -0
- package/dist/components/NamespacePicker.js +52 -0
- package/dist/components/NamespacePicker.js.map +1 -0
- package/dist/components/TimeRange.cjs +29 -37
- package/dist/components/TimeRange.cjs.map +1 -1
- package/dist/components/TimeRange.d.ts.map +1 -1
- package/dist/components/TimeRange.js +30 -38
- package/dist/components/TimeRange.js.map +1 -1
- package/dist/components/TreePickerField.cjs +6 -3
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +6 -3
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/form-lookup-context.cjs +36 -0
- package/dist/components/form-lookup-context.cjs.map +1 -0
- package/dist/components/form-lookup-context.d.ts +9 -0
- package/dist/components/form-lookup-context.d.ts.map +1 -0
- package/dist/components/form-lookup-context.js +36 -0
- package/dist/components/form-lookup-context.js.map +1 -0
- package/dist/components/icon-menu-picker.cjs +9 -3
- package/dist/components/icon-menu-picker.cjs.map +1 -1
- package/dist/components/icon-menu-picker.d.ts.map +1 -1
- package/dist/components/icon-menu-picker.js +9 -3
- package/dist/components/icon-menu-picker.js.map +1 -1
- package/dist/components/json-schema-form-discriminator.cjs +67 -0
- package/dist/components/json-schema-form-discriminator.cjs.map +1 -0
- package/dist/components/json-schema-form-discriminator.d.ts +10 -0
- package/dist/components/json-schema-form-discriminator.d.ts.map +1 -0
- package/dist/components/json-schema-form-discriminator.js +67 -0
- package/dist/components/json-schema-form-discriminator.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +146 -3
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +22 -0
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +147 -4
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-grid.cjs +92 -0
- package/dist/components/json-schema-form-grid.cjs.map +1 -0
- package/dist/components/json-schema-form-grid.d.ts +9 -0
- package/dist/components/json-schema-form-grid.d.ts.map +1 -0
- package/dist/components/json-schema-form-grid.js +92 -0
- package/dist/components/json-schema-form-grid.js.map +1 -0
- package/dist/components/json-schema-form-refs.cjs +60 -0
- package/dist/components/json-schema-form-refs.cjs.map +1 -0
- package/dist/components/json-schema-form-refs.d.ts +3 -0
- package/dist/components/json-schema-form-refs.d.ts.map +1 -0
- package/dist/components/json-schema-form-refs.js +60 -0
- package/dist/components/json-schema-form-refs.js.map +1 -0
- package/dist/components/json-schema-form-render.cjs +34 -5
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +36 -7
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +29 -2
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +29 -2
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-template-menu.cjs +83 -0
- package/dist/components/json-schema-form-template-menu.cjs.map +1 -0
- package/dist/components/json-schema-form-template-menu.d.ts +15 -0
- package/dist/components/json-schema-form-template-menu.d.ts.map +1 -0
- package/dist/components/json-schema-form-template-menu.js +83 -0
- package/dist/components/json-schema-form-template-menu.js.map +1 -0
- package/dist/components/json-schema-form-template.cjs +18 -0
- package/dist/components/json-schema-form-template.cjs.map +1 -0
- package/dist/components/json-schema-form-template.d.ts +13 -0
- package/dist/components/json-schema-form-template.d.ts.map +1 -0
- package/dist/components/json-schema-form-template.js +18 -0
- package/dist/components/json-schema-form-template.js.map +1 -0
- package/dist/components/json-schema-form-types.d.ts +41 -2
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +8 -0
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +1 -0
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +8 -0
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/workload-picker-utils.cjs.map +1 -1
- package/dist/components/workload-picker-utils.d.ts +11 -1
- package/dist/components/workload-picker-utils.d.ts.map +1 -1
- package/dist/components/workload-picker-utils.js.map +1 -1
- package/dist/components.cjs +10 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +7 -2
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +10 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +231 -69
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +7 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.fixtures.d.ts +3 -1
- package/dist/data/Clicky.fixtures.d.ts.map +1 -1
- package/dist/data/Clicky.js +232 -70
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +23 -17
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +7 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +24 -18
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/ExecutionTree.cjs +68 -0
- package/dist/data/ExecutionTree.cjs.map +1 -0
- package/dist/data/ExecutionTree.d.ts +40 -0
- package/dist/data/ExecutionTree.d.ts.map +1 -0
- package/dist/data/ExecutionTree.js +68 -0
- package/dist/data/ExecutionTree.js.map +1 -0
- package/dist/data/Gauge.cjs +37 -4
- package/dist/data/Gauge.cjs.map +1 -1
- package/dist/data/Gauge.d.ts +6 -1
- package/dist/data/Gauge.d.ts.map +1 -1
- package/dist/data/Gauge.js +37 -4
- package/dist/data/Gauge.js.map +1 -1
- package/dist/data/GaugeHoverCard.cjs +35 -0
- package/dist/data/GaugeHoverCard.cjs.map +1 -0
- package/dist/data/GaugeHoverCard.d.ts +25 -0
- package/dist/data/GaugeHoverCard.d.ts.map +1 -0
- package/dist/data/GaugeHoverCard.js +35 -0
- package/dist/data/GaugeHoverCard.js.map +1 -0
- package/dist/data/MarkdownEditor.cjs +616 -0
- package/dist/data/MarkdownEditor.cjs.map +1 -0
- package/dist/data/MarkdownEditor.d.ts +61 -0
- package/dist/data/MarkdownEditor.d.ts.map +1 -0
- package/dist/data/MarkdownEditor.js +616 -0
- package/dist/data/MarkdownEditor.js.map +1 -0
- package/dist/data/MarkdownEditor.model.cjs +27 -0
- package/dist/data/MarkdownEditor.model.cjs.map +1 -0
- package/dist/data/MarkdownEditor.model.d.ts +38 -0
- package/dist/data/MarkdownEditor.model.d.ts.map +1 -0
- package/dist/data/MarkdownEditor.model.js +27 -0
- package/dist/data/MarkdownEditor.model.js.map +1 -0
- package/dist/data/ObjectGraph.cjs +44 -0
- package/dist/data/ObjectGraph.cjs.map +1 -0
- package/dist/data/ObjectGraph.d.ts +39 -0
- package/dist/data/ObjectGraph.d.ts.map +1 -0
- package/dist/data/ObjectGraph.js +44 -0
- package/dist/data/ObjectGraph.js.map +1 -0
- package/dist/data/SchemaViewer.cjs +152 -0
- package/dist/data/SchemaViewer.cjs.map +1 -0
- package/dist/data/SchemaViewer.d.ts +27 -0
- package/dist/data/SchemaViewer.d.ts.map +1 -0
- package/dist/data/SchemaViewer.js +152 -0
- package/dist/data/SchemaViewer.js.map +1 -0
- package/dist/data/TimeseriesCoreBars.cjs +169 -32
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts +42 -5
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +170 -33
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.cjs +5 -5
- package/dist/data/TimeseriesCoreBars.model.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.d.ts +4 -4
- package/dist/data/TimeseriesCoreBars.model.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.js +5 -5
- package/dist/data/TimeseriesCoreBars.model.js.map +1 -1
- package/dist/data/TimeseriesGauge.cjs +132 -36
- package/dist/data/TimeseriesGauge.cjs.map +1 -1
- package/dist/data/TimeseriesGauge.d.ts +15 -1
- package/dist/data/TimeseriesGauge.d.ts.map +1 -1
- package/dist/data/TimeseriesGauge.js +133 -37
- package/dist/data/TimeseriesGauge.js.map +1 -1
- package/dist/data/WorkloadCard.cjs +371 -0
- package/dist/data/WorkloadCard.cjs.map +1 -0
- package/dist/data/WorkloadCard.d.ts +25 -0
- package/dist/data/WorkloadCard.d.ts.map +1 -0
- package/dist/data/WorkloadCard.js +371 -0
- package/dist/data/WorkloadCard.js.map +1 -0
- package/dist/data/WorkloadCard.model.cjs +51 -0
- package/dist/data/WorkloadCard.model.cjs.map +1 -0
- package/dist/data/WorkloadCard.model.d.ts +53 -0
- package/dist/data/WorkloadCard.model.d.ts.map +1 -0
- package/dist/data/WorkloadCard.model.js +51 -0
- package/dist/data/WorkloadCard.model.js.map +1 -0
- package/dist/data/ai/ChatFab.cjs +3 -1
- package/dist/data/ai/ChatFab.cjs.map +1 -1
- package/dist/data/ai/ChatFab.d.ts.map +1 -1
- package/dist/data/ai/ChatFab.js +3 -1
- package/dist/data/ai/ChatFab.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +19 -9
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +4 -2
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +19 -9
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.cjs +20 -0
- package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -0
- package/dist/data/ai/ChatWindowRequestBody.d.ts +9 -0
- package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -0
- package/dist/data/ai/ChatWindowRequestBody.js +20 -0
- package/dist/data/ai/ChatWindowRequestBody.js.map +1 -0
- package/dist/data/ai/chat-window-context.cjs +2 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +1 -1
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +2 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/context.cjs.map +1 -1
- package/dist/data/ai/context.d.ts +3 -0
- package/dist/data/ai/context.d.ts.map +1 -1
- package/dist/data/ai/context.js.map +1 -1
- package/dist/data/chat/Chat.cjs +21 -1
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +11 -2
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +22 -2
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Message.cjs +13 -4
- package/dist/data/chat/Message.cjs.map +1 -1
- package/dist/data/chat/Message.d.ts +4 -2
- package/dist/data/chat/Message.d.ts.map +1 -1
- package/dist/data/chat/Message.js +13 -4
- package/dist/data/chat/Message.js.map +1 -1
- package/dist/data/chat/ToolCall.cjs +9 -4
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +3 -2
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +9 -4
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/index.d.ts +1 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +7 -0
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/gauge-stats.cjs +19 -0
- package/dist/data/gauge-stats.cjs.map +1 -0
- package/dist/data/gauge-stats.d.ts +15 -0
- package/dist/data/gauge-stats.d.ts.map +1 -0
- package/dist/data/gauge-stats.js +19 -0
- package/dist/data/gauge-stats.js.map +1 -0
- package/dist/data/schema-viewer-model.cjs +436 -0
- package/dist/data/schema-viewer-model.cjs.map +1 -0
- package/dist/data/schema-viewer-model.d.ts +64 -0
- package/dist/data/schema-viewer-model.d.ts.map +1 -0
- package/dist/data/schema-viewer-model.js +436 -0
- package/dist/data/schema-viewer-model.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 +14 -4
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +31 -1
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-sort.cjs +19 -10
- package/dist/hooks/use-sort.cjs.map +1 -1
- package/dist/hooks/use-sort.d.ts +3 -0
- package/dist/hooks/use-sort.d.ts.map +1 -1
- package/dist/hooks/use-sort.js +19 -10
- package/dist/hooks/use-sort.js.map +1 -1
- package/dist/index.cjs +98 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +6 -10
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +2 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +6 -10
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +50 -38
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +5 -1
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +50 -38
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/overlay/HoverCard.cjs +7 -2
- package/dist/overlay/HoverCard.cjs.map +1 -1
- package/dist/overlay/HoverCard.d.ts.map +1 -1
- package/dist/overlay/HoverCard.js +7 -2
- package/dist/overlay/HoverCard.js.map +1 -1
- package/dist/overlay/Modal.cjs +20 -17
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +21 -18
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/Toast.cjs +9 -1
- package/dist/overlay/Toast.cjs.map +1 -1
- package/dist/overlay/Toast.d.ts.map +1 -1
- package/dist/overlay/Toast.js +9 -1
- package/dist/overlay/Toast.js.map +1 -1
- package/dist/overlay/modalStack.cjs +53 -1
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts +12 -0
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +54 -2
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/overlay/zIndex.cjs +20 -0
- package/dist/overlay/zIndex.cjs.map +1 -0
- package/dist/overlay/zIndex.d.ts +39 -0
- package/dist/overlay/zIndex.d.ts.map +1 -0
- package/dist/overlay/zIndex.js +20 -0
- package/dist/overlay/zIndex.js.map +1 -0
- package/dist/rpc/EntityExplorerApp.cjs +102 -143
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +34 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +105 -146
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +135 -0
- package/dist/rpc/OperationActionBar.cjs.map +1 -0
- package/dist/rpc/OperationActionBar.d.ts +20 -0
- package/dist/rpc/OperationActionBar.d.ts.map +1 -0
- package/dist/rpc/OperationActionBar.js +135 -0
- package/dist/rpc/OperationActionBar.js.map +1 -0
- package/dist/rpc/OperationCatalog.cjs +79 -116
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +8 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +80 -117
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationCommandPage.cjs +134 -223
- package/dist/rpc/OperationCommandPage.cjs.map +1 -1
- package/dist/rpc/OperationCommandPage.d.ts +1 -1
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
- package/dist/rpc/OperationCommandPage.js +135 -224
- package/dist/rpc/OperationCommandPage.js.map +1 -1
- package/dist/rpc/OperationEntityPage.cjs +49 -100
- package/dist/rpc/OperationEntityPage.cjs.map +1 -1
- package/dist/rpc/OperationEntityPage.d.ts +6 -1
- package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
- package/dist/rpc/OperationEntityPage.js +50 -101
- package/dist/rpc/OperationEntityPage.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +43 -0
- package/dist/rpc/OperationResultView.cjs.map +1 -0
- package/dist/rpc/OperationResultView.d.ts +30 -0
- package/dist/rpc/OperationResultView.d.ts.map +1 -0
- package/dist/rpc/OperationResultView.js +43 -0
- package/dist/rpc/OperationResultView.js.map +1 -0
- package/dist/rpc/SchemaActionForm.cjs +102 -0
- package/dist/rpc/SchemaActionForm.cjs.map +1 -0
- package/dist/rpc/SchemaActionForm.d.ts +23 -0
- package/dist/rpc/SchemaActionForm.d.ts.map +1 -0
- package/dist/rpc/SchemaActionForm.js +102 -0
- package/dist/rpc/SchemaActionForm.js.map +1 -0
- package/dist/rpc/accept-options.cjs.map +1 -1
- package/dist/rpc/accept-options.d.ts +0 -1
- package/dist/rpc/accept-options.d.ts.map +1 -1
- package/dist/rpc/accept-options.js.map +1 -1
- package/dist/rpc/apiClient.cjs +34 -2
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.d.ts +4 -1
- package/dist/rpc/apiClient.d.ts.map +1 -1
- package/dist/rpc/apiClient.js +34 -2
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/clickyMetadata.cjs +4 -4
- package/dist/rpc/clickyMetadata.cjs.map +1 -1
- package/dist/rpc/clickyMetadata.d.ts +0 -1
- package/dist/rpc/clickyMetadata.d.ts.map +1 -1
- package/dist/rpc/clickyMetadata.js +4 -4
- package/dist/rpc/clickyMetadata.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +1 -0
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts +6 -1
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +1 -0
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/rpc/rowNavigation.cjs +86 -0
- package/dist/rpc/rowNavigation.cjs.map +1 -0
- package/dist/rpc/rowNavigation.d.ts +14 -0
- package/dist/rpc/rowNavigation.d.ts.map +1 -0
- package/dist/rpc/rowNavigation.js +86 -0
- package/dist/rpc/rowNavigation.js.map +1 -0
- package/dist/rpc/schemaActionPath.cjs +22 -0
- package/dist/rpc/schemaActionPath.cjs.map +1 -0
- package/dist/rpc/schemaActionPath.d.ts +4 -0
- package/dist/rpc/schemaActionPath.d.ts.map +1 -0
- package/dist/rpc/schemaActionPath.js +22 -0
- package/dist/rpc/schemaActionPath.js.map +1 -0
- package/dist/rpc/surfaceIconMap.cjs +35 -0
- package/dist/rpc/surfaceIconMap.cjs.map +1 -0
- package/dist/rpc/surfaceIconMap.d.ts +3 -0
- package/dist/rpc/surfaceIconMap.d.ts.map +1 -0
- package/dist/rpc/surfaceIconMap.js +35 -0
- package/dist/rpc/surfaceIconMap.js.map +1 -0
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +2 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc/useOperations.cjs.map +1 -1
- package/dist/rpc/useOperations.d.ts +4 -1
- package/dist/rpc/useOperations.d.ts.map +1 -1
- package/dist/rpc/useOperations.js.map +1 -1
- package/dist/rpc.cjs +4 -2
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +7 -6
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +4 -2
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
- package/dist/rpc/AcceptPicker.cjs +0 -135
- package/dist/rpc/AcceptPicker.cjs.map +0 -1
- package/dist/rpc/AcceptPicker.d.ts +0 -12
- package/dist/rpc/AcceptPicker.d.ts.map +0 -1
- package/dist/rpc/AcceptPicker.js +0 -135
- package/dist/rpc/AcceptPicker.js.map +0 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const Tree = require("./Tree.cjs");
|
|
5
|
+
function ExecutionTree({
|
|
6
|
+
roots,
|
|
7
|
+
className,
|
|
8
|
+
empty,
|
|
9
|
+
showControls,
|
|
10
|
+
defaultOpenDepth = 1,
|
|
11
|
+
costThreshold,
|
|
12
|
+
renderRow,
|
|
13
|
+
loadChildren
|
|
14
|
+
}) {
|
|
15
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
16
|
+
Tree.Tree,
|
|
17
|
+
{
|
|
18
|
+
roots,
|
|
19
|
+
getKey: (n) => n.id,
|
|
20
|
+
getChildren: (n) => n.children,
|
|
21
|
+
defaultOpen: (_n, depth) => depth < defaultOpenDepth,
|
|
22
|
+
...className !== void 0 ? { className } : {},
|
|
23
|
+
...empty !== void 0 ? { empty } : {},
|
|
24
|
+
...showControls !== void 0 ? { showControls } : {},
|
|
25
|
+
...loadChildren ? { loadChildren, hasMoreChildren: (n) => n.expandable === true } : {},
|
|
26
|
+
renderRow: ({ node }) => renderRow ? renderRow(node) : /* @__PURE__ */ jsxRuntime.jsx(DefaultExecutionRow, { node, costThreshold })
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
function DefaultExecutionRow({ node, costThreshold }) {
|
|
31
|
+
const slow = costThreshold != null && node.cost != null && node.cost >= costThreshold;
|
|
32
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-2 font-mono text-xs", children: [
|
|
33
|
+
node.status && /* @__PURE__ */ jsxRuntime.jsx(StatusDot, { status: node.status }),
|
|
34
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-foreground", children: node.label }),
|
|
35
|
+
node.cost != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: slow ? "text-red-600" : "text-muted-foreground", children: formatCost(node) }),
|
|
36
|
+
node.times != null && node.times > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground/60", children: [
|
|
37
|
+
"×",
|
|
38
|
+
node.times
|
|
39
|
+
] }),
|
|
40
|
+
node.className && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "break-all text-muted-foreground/60", children: [
|
|
41
|
+
node.className,
|
|
42
|
+
node.lineNumber != null && node.lineNumber > 0 ? `:${node.lineNumber}` : ""
|
|
43
|
+
] }),
|
|
44
|
+
node.detail && Object.entries(node.detail).map(([k, v]) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground/60", children: [
|
|
45
|
+
k,
|
|
46
|
+
"=",
|
|
47
|
+
v
|
|
48
|
+
] }, k))
|
|
49
|
+
] });
|
|
50
|
+
}
|
|
51
|
+
function formatCost(node) {
|
|
52
|
+
const unit = node.unit || "ms";
|
|
53
|
+
const value = node.cost ?? 0;
|
|
54
|
+
return unit === "ms" ? `${value.toFixed(3)}ms` : `${value} ${unit}`;
|
|
55
|
+
}
|
|
56
|
+
const STATUS_COLOR = {
|
|
57
|
+
ok: "text-green-600",
|
|
58
|
+
success: "text-green-600",
|
|
59
|
+
error: "text-red-600",
|
|
60
|
+
warning: "text-amber-500",
|
|
61
|
+
running: "text-blue-600",
|
|
62
|
+
pending: "text-muted-foreground"
|
|
63
|
+
};
|
|
64
|
+
function StatusDot({ status }) {
|
|
65
|
+
return /* @__PURE__ */ jsxRuntime.jsx("span", { className: `shrink-0 ${STATUS_COLOR[status] ?? "text-muted-foreground"}`, title: status, children: "●" });
|
|
66
|
+
}
|
|
67
|
+
exports.ExecutionTree = ExecutionTree;
|
|
68
|
+
//# sourceMappingURL=ExecutionTree.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionTree.cjs","sources":["../../src/data/ExecutionTree.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Tree } from \"./Tree\";\n\n// ExecutionTree renders a generic, type-agnostic call/execution tree — a method\n// call tree, a span tree, an activity sequence — where each node carries a cost\n// and a status and may nest. It is the shared home for what used to be\n// per-feature call-tree renderers: any producer maps its data into\n// ExecutionNode and gets the same tree, timing, and status rendering.\n\nexport type ExecutionNode = {\n /** Stable unique key within the tree. */\n id: string;\n /** Display label (method/operation/step name). */\n label: string;\n /** Free-form node kind hint. */\n kind?: string;\n /** Outcome: ok | error | warning | running | pending. */\n status?: string;\n /** Numeric cost in `unit`. */\n cost?: number;\n /** Cost unit (default \"ms\"). */\n unit?: string;\n /** Aggregated invocation count (renders ×N when > 1). */\n times?: number;\n /** Owning class / file, rendered as a muted suffix. */\n className?: string;\n lineNumber?: number;\n /** Extra key/values rendered as muted chips. */\n detail?: Record<string, string>;\n /** Node can be expanded via loadChildren even with no inline children. */\n expandable?: boolean;\n children?: ExecutionNode[];\n};\n\nexport type ExecutionTreeProps<T extends ExecutionNode = ExecutionNode> = {\n roots: T[];\n className?: string;\n empty?: ReactNode;\n showControls?: boolean;\n /** Open nodes shallower than this depth on first render (default 1). */\n defaultOpenDepth?: number;\n /** Costs at or above this value render in red (slow-path highlight). */\n costThreshold?: number;\n /** Override the entire row rendering. */\n renderRow?: (node: T) => ReactNode;\n loadChildren?: (node: T) => Promise<T[]>;\n};\n\nexport function ExecutionTree<T extends ExecutionNode = ExecutionNode>({\n roots,\n className,\n empty,\n showControls,\n defaultOpenDepth = 1,\n costThreshold,\n renderRow,\n loadChildren,\n}: ExecutionTreeProps<T>) {\n return (\n <Tree<T>\n roots={roots}\n getKey={(n) => n.id}\n getChildren={(n) => n.children as T[] | undefined}\n defaultOpen={(_n, depth) => depth < defaultOpenDepth}\n {...(className !== undefined ? { className } : {})}\n {...(empty !== undefined ? { empty } : {})}\n {...(showControls !== undefined ? { showControls } : {})}\n {...(loadChildren ? { loadChildren, hasMoreChildren: (n: T) => n.expandable === true } : {})}\n renderRow={({ node }) =>\n renderRow ? renderRow(node) : <DefaultExecutionRow node={node} costThreshold={costThreshold} />\n }\n />\n );\n}\n\nfunction DefaultExecutionRow({ node, costThreshold }: { node: ExecutionNode; costThreshold: number | undefined }) {\n const slow = costThreshold != null && node.cost != null && node.cost >= costThreshold;\n return (\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-2 font-mono text-xs\">\n {node.status && <StatusDot status={node.status} />}\n <span className=\"font-semibold text-foreground\">{node.label}</span>\n {node.cost != null && (\n <span className={slow ? \"text-red-600\" : \"text-muted-foreground\"}>{formatCost(node)}</span>\n )}\n {node.times != null && node.times > 1 && (\n <span className=\"text-muted-foreground/60\">×{node.times}</span>\n )}\n {node.className && (\n <span className=\"break-all text-muted-foreground/60\">\n {node.className}\n {node.lineNumber != null && node.lineNumber > 0 ? `:${node.lineNumber}` : \"\"}\n </span>\n )}\n {node.detail &&\n Object.entries(node.detail).map(([k, v]) => (\n <span key={k} className=\"text-muted-foreground/60\">\n {k}={v}\n </span>\n ))}\n </div>\n );\n}\n\nfunction formatCost(node: ExecutionNode): string {\n const unit = node.unit || \"ms\";\n const value = node.cost ?? 0;\n return unit === \"ms\" ? `${value.toFixed(3)}ms` : `${value} ${unit}`;\n}\n\nconst STATUS_COLOR: Record<string, string> = {\n ok: \"text-green-600\",\n success: \"text-green-600\",\n error: \"text-red-600\",\n warning: \"text-amber-500\",\n running: \"text-blue-600\",\n pending: \"text-muted-foreground\",\n};\n\nfunction StatusDot({ status }: { status: string }) {\n return (\n <span className={`shrink-0 ${STATUS_COLOR[status] ?? \"text-muted-foreground\"}`} title={status}>\n ●\n </span>\n );\n}\n"],"names":["jsx","Tree","jsxs"],"mappings":";;;;AAgDO,SAAS,cAAuD;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACEA,2BAAAA;AAAAA,IAACC,KAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,QAAQ,CAAC,MAAM,EAAE;AAAA,MACjB,aAAa,CAAC,MAAM,EAAE;AAAA,MACtB,aAAa,CAAC,IAAI,UAAU,QAAQ;AAAA,MACnC,GAAI,cAAc,SAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAC9C,GAAI,UAAU,SAAY,EAAE,MAAA,IAAU,CAAA;AAAA,MACtC,GAAI,iBAAiB,SAAY,EAAE,aAAA,IAAiB,CAAA;AAAA,MACpD,GAAI,eAAe,EAAE,cAAc,iBAAiB,CAAC,MAAS,EAAE,eAAe,KAAA,IAAS,CAAA;AAAA,MACzF,WAAW,CAAC,EAAE,KAAA,MACZ,YAAY,UAAU,IAAI,IAAID,+BAAC,qBAAA,EAAoB,MAAY,cAAA,CAA8B;AAAA,IAAA;AAAA,EAAA;AAIrG;AAEA,SAAS,oBAAoB,EAAE,MAAM,iBAA6E;AAChH,QAAM,OAAO,iBAAiB,QAAQ,KAAK,QAAQ,QAAQ,KAAK,QAAQ;AACxE,SACEE,2BAAAA,KAAC,OAAA,EAAI,WAAU,sEACZ,UAAA;AAAA,IAAA,KAAK,UAAUF,+BAAC,WAAA,EAAU,QAAQ,KAAK,QAAQ;AAAA,IAChDA,2BAAAA,IAAC,QAAA,EAAK,WAAU,iCAAiC,eAAK,OAAM;AAAA,IAC3D,KAAK,QAAQ,QACZA,2BAAAA,IAAC,QAAA,EAAK,WAAW,OAAO,iBAAiB,yBAA0B,UAAA,WAAW,IAAI,EAAA,CAAE;AAAA,IAErF,KAAK,SAAS,QAAQ,KAAK,QAAQ,KAClCE,2BAAAA,KAAC,QAAA,EAAK,WAAU,4BAA2B,UAAA;AAAA,MAAA;AAAA,MAAE,KAAK;AAAA,IAAA,GAAM;AAAA,IAEzD,KAAK,aACJA,gCAAC,QAAA,EAAK,WAAU,sCACb,UAAA;AAAA,MAAA,KAAK;AAAA,MACL,KAAK,cAAc,QAAQ,KAAK,aAAa,IAAI,IAAI,KAAK,UAAU,KAAK;AAAA,IAAA,GAC5E;AAAA,IAED,KAAK,UACJ,OAAO,QAAQ,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MACpCA,gCAAC,QAAA,EAAa,WAAU,4BACrB,UAAA;AAAA,MAAA;AAAA,MAAE;AAAA,MAAE;AAAA,IAAA,EAAA,GADI,CAEX,CACD;AAAA,EAAA,GACL;AAEJ;AAEA,SAAS,WAAW,MAA6B;AAC/C,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,QAAQ,KAAK,QAAQ;AAC3B,SAAO,SAAS,OAAO,GAAG,MAAM,QAAQ,CAAC,CAAC,OAAO,GAAG,KAAK,IAAI,IAAI;AACnE;AAEA,MAAM,eAAuC;AAAA,EAC3C,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AAEA,SAAS,UAAU,EAAE,UAA8B;AACjD,SACEF,2BAAAA,IAAC,QAAA,EAAK,WAAW,YAAY,aAAa,MAAM,KAAK,uBAAuB,IAAI,OAAO,QAAQ,UAAA,IAAA,CAE/F;AAEJ;;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export type ExecutionNode = {
|
|
3
|
+
/** Stable unique key within the tree. */
|
|
4
|
+
id: string;
|
|
5
|
+
/** Display label (method/operation/step name). */
|
|
6
|
+
label: string;
|
|
7
|
+
/** Free-form node kind hint. */
|
|
8
|
+
kind?: string;
|
|
9
|
+
/** Outcome: ok | error | warning | running | pending. */
|
|
10
|
+
status?: string;
|
|
11
|
+
/** Numeric cost in `unit`. */
|
|
12
|
+
cost?: number;
|
|
13
|
+
/** Cost unit (default "ms"). */
|
|
14
|
+
unit?: string;
|
|
15
|
+
/** Aggregated invocation count (renders ×N when > 1). */
|
|
16
|
+
times?: number;
|
|
17
|
+
/** Owning class / file, rendered as a muted suffix. */
|
|
18
|
+
className?: string;
|
|
19
|
+
lineNumber?: number;
|
|
20
|
+
/** Extra key/values rendered as muted chips. */
|
|
21
|
+
detail?: Record<string, string>;
|
|
22
|
+
/** Node can be expanded via loadChildren even with no inline children. */
|
|
23
|
+
expandable?: boolean;
|
|
24
|
+
children?: ExecutionNode[];
|
|
25
|
+
};
|
|
26
|
+
export type ExecutionTreeProps<T extends ExecutionNode = ExecutionNode> = {
|
|
27
|
+
roots: T[];
|
|
28
|
+
className?: string;
|
|
29
|
+
empty?: ReactNode;
|
|
30
|
+
showControls?: boolean;
|
|
31
|
+
/** Open nodes shallower than this depth on first render (default 1). */
|
|
32
|
+
defaultOpenDepth?: number;
|
|
33
|
+
/** Costs at or above this value render in red (slow-path highlight). */
|
|
34
|
+
costThreshold?: number;
|
|
35
|
+
/** Override the entire row rendering. */
|
|
36
|
+
renderRow?: (node: T) => ReactNode;
|
|
37
|
+
loadChildren?: (node: T) => Promise<T[]>;
|
|
38
|
+
};
|
|
39
|
+
export declare function ExecutionTree<T extends ExecutionNode = ExecutionNode>({ roots, className, empty, showControls, defaultOpenDepth, costThreshold, renderRow, loadChildren, }: ExecutionTreeProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
//# sourceMappingURL=ExecutionTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionTree.d.ts","sourceRoot":"","sources":["../../src/data/ExecutionTree.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,IAAI;IACxE,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IACnC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF,wBAAgB,aAAa,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,EAAE,EACrE,KAAK,EACL,SAAS,EACT,KAAK,EACL,YAAY,EACZ,gBAAoB,EACpB,aAAa,EACb,SAAS,EACT,YAAY,GACb,EAAE,kBAAkB,CAAC,CAAC,CAAC,2CAgBvB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Tree } from "./Tree.js";
|
|
3
|
+
function ExecutionTree({
|
|
4
|
+
roots,
|
|
5
|
+
className,
|
|
6
|
+
empty,
|
|
7
|
+
showControls,
|
|
8
|
+
defaultOpenDepth = 1,
|
|
9
|
+
costThreshold,
|
|
10
|
+
renderRow,
|
|
11
|
+
loadChildren
|
|
12
|
+
}) {
|
|
13
|
+
return /* @__PURE__ */ jsx(
|
|
14
|
+
Tree,
|
|
15
|
+
{
|
|
16
|
+
roots,
|
|
17
|
+
getKey: (n) => n.id,
|
|
18
|
+
getChildren: (n) => n.children,
|
|
19
|
+
defaultOpen: (_n, depth) => depth < defaultOpenDepth,
|
|
20
|
+
...className !== void 0 ? { className } : {},
|
|
21
|
+
...empty !== void 0 ? { empty } : {},
|
|
22
|
+
...showControls !== void 0 ? { showControls } : {},
|
|
23
|
+
...loadChildren ? { loadChildren, hasMoreChildren: (n) => n.expandable === true } : {},
|
|
24
|
+
renderRow: ({ node }) => renderRow ? renderRow(node) : /* @__PURE__ */ jsx(DefaultExecutionRow, { node, costThreshold })
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
function DefaultExecutionRow({ node, costThreshold }) {
|
|
29
|
+
const slow = costThreshold != null && node.cost != null && node.cost >= costThreshold;
|
|
30
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-2 font-mono text-xs", children: [
|
|
31
|
+
node.status && /* @__PURE__ */ jsx(StatusDot, { status: node.status }),
|
|
32
|
+
/* @__PURE__ */ jsx("span", { className: "font-semibold text-foreground", children: node.label }),
|
|
33
|
+
node.cost != null && /* @__PURE__ */ jsx("span", { className: slow ? "text-red-600" : "text-muted-foreground", children: formatCost(node) }),
|
|
34
|
+
node.times != null && node.times > 1 && /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground/60", children: [
|
|
35
|
+
"×",
|
|
36
|
+
node.times
|
|
37
|
+
] }),
|
|
38
|
+
node.className && /* @__PURE__ */ jsxs("span", { className: "break-all text-muted-foreground/60", children: [
|
|
39
|
+
node.className,
|
|
40
|
+
node.lineNumber != null && node.lineNumber > 0 ? `:${node.lineNumber}` : ""
|
|
41
|
+
] }),
|
|
42
|
+
node.detail && Object.entries(node.detail).map(([k, v]) => /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground/60", children: [
|
|
43
|
+
k,
|
|
44
|
+
"=",
|
|
45
|
+
v
|
|
46
|
+
] }, k))
|
|
47
|
+
] });
|
|
48
|
+
}
|
|
49
|
+
function formatCost(node) {
|
|
50
|
+
const unit = node.unit || "ms";
|
|
51
|
+
const value = node.cost ?? 0;
|
|
52
|
+
return unit === "ms" ? `${value.toFixed(3)}ms` : `${value} ${unit}`;
|
|
53
|
+
}
|
|
54
|
+
const STATUS_COLOR = {
|
|
55
|
+
ok: "text-green-600",
|
|
56
|
+
success: "text-green-600",
|
|
57
|
+
error: "text-red-600",
|
|
58
|
+
warning: "text-amber-500",
|
|
59
|
+
running: "text-blue-600",
|
|
60
|
+
pending: "text-muted-foreground"
|
|
61
|
+
};
|
|
62
|
+
function StatusDot({ status }) {
|
|
63
|
+
return /* @__PURE__ */ jsx("span", { className: `shrink-0 ${STATUS_COLOR[status] ?? "text-muted-foreground"}`, title: status, children: "●" });
|
|
64
|
+
}
|
|
65
|
+
export {
|
|
66
|
+
ExecutionTree
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=ExecutionTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionTree.js","sources":["../../src/data/ExecutionTree.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Tree } from \"./Tree\";\n\n// ExecutionTree renders a generic, type-agnostic call/execution tree — a method\n// call tree, a span tree, an activity sequence — where each node carries a cost\n// and a status and may nest. It is the shared home for what used to be\n// per-feature call-tree renderers: any producer maps its data into\n// ExecutionNode and gets the same tree, timing, and status rendering.\n\nexport type ExecutionNode = {\n /** Stable unique key within the tree. */\n id: string;\n /** Display label (method/operation/step name). */\n label: string;\n /** Free-form node kind hint. */\n kind?: string;\n /** Outcome: ok | error | warning | running | pending. */\n status?: string;\n /** Numeric cost in `unit`. */\n cost?: number;\n /** Cost unit (default \"ms\"). */\n unit?: string;\n /** Aggregated invocation count (renders ×N when > 1). */\n times?: number;\n /** Owning class / file, rendered as a muted suffix. */\n className?: string;\n lineNumber?: number;\n /** Extra key/values rendered as muted chips. */\n detail?: Record<string, string>;\n /** Node can be expanded via loadChildren even with no inline children. */\n expandable?: boolean;\n children?: ExecutionNode[];\n};\n\nexport type ExecutionTreeProps<T extends ExecutionNode = ExecutionNode> = {\n roots: T[];\n className?: string;\n empty?: ReactNode;\n showControls?: boolean;\n /** Open nodes shallower than this depth on first render (default 1). */\n defaultOpenDepth?: number;\n /** Costs at or above this value render in red (slow-path highlight). */\n costThreshold?: number;\n /** Override the entire row rendering. */\n renderRow?: (node: T) => ReactNode;\n loadChildren?: (node: T) => Promise<T[]>;\n};\n\nexport function ExecutionTree<T extends ExecutionNode = ExecutionNode>({\n roots,\n className,\n empty,\n showControls,\n defaultOpenDepth = 1,\n costThreshold,\n renderRow,\n loadChildren,\n}: ExecutionTreeProps<T>) {\n return (\n <Tree<T>\n roots={roots}\n getKey={(n) => n.id}\n getChildren={(n) => n.children as T[] | undefined}\n defaultOpen={(_n, depth) => depth < defaultOpenDepth}\n {...(className !== undefined ? { className } : {})}\n {...(empty !== undefined ? { empty } : {})}\n {...(showControls !== undefined ? { showControls } : {})}\n {...(loadChildren ? { loadChildren, hasMoreChildren: (n: T) => n.expandable === true } : {})}\n renderRow={({ node }) =>\n renderRow ? renderRow(node) : <DefaultExecutionRow node={node} costThreshold={costThreshold} />\n }\n />\n );\n}\n\nfunction DefaultExecutionRow({ node, costThreshold }: { node: ExecutionNode; costThreshold: number | undefined }) {\n const slow = costThreshold != null && node.cost != null && node.cost >= costThreshold;\n return (\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-2 font-mono text-xs\">\n {node.status && <StatusDot status={node.status} />}\n <span className=\"font-semibold text-foreground\">{node.label}</span>\n {node.cost != null && (\n <span className={slow ? \"text-red-600\" : \"text-muted-foreground\"}>{formatCost(node)}</span>\n )}\n {node.times != null && node.times > 1 && (\n <span className=\"text-muted-foreground/60\">×{node.times}</span>\n )}\n {node.className && (\n <span className=\"break-all text-muted-foreground/60\">\n {node.className}\n {node.lineNumber != null && node.lineNumber > 0 ? `:${node.lineNumber}` : \"\"}\n </span>\n )}\n {node.detail &&\n Object.entries(node.detail).map(([k, v]) => (\n <span key={k} className=\"text-muted-foreground/60\">\n {k}={v}\n </span>\n ))}\n </div>\n );\n}\n\nfunction formatCost(node: ExecutionNode): string {\n const unit = node.unit || \"ms\";\n const value = node.cost ?? 0;\n return unit === \"ms\" ? `${value.toFixed(3)}ms` : `${value} ${unit}`;\n}\n\nconst STATUS_COLOR: Record<string, string> = {\n ok: \"text-green-600\",\n success: \"text-green-600\",\n error: \"text-red-600\",\n warning: \"text-amber-500\",\n running: \"text-blue-600\",\n pending: \"text-muted-foreground\",\n};\n\nfunction StatusDot({ status }: { status: string }) {\n return (\n <span className={`shrink-0 ${STATUS_COLOR[status] ?? \"text-muted-foreground\"}`} title={status}>\n ●\n </span>\n );\n}\n"],"names":[],"mappings":";;AAgDO,SAAS,cAAuD;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,QAAQ,CAAC,MAAM,EAAE;AAAA,MACjB,aAAa,CAAC,MAAM,EAAE;AAAA,MACtB,aAAa,CAAC,IAAI,UAAU,QAAQ;AAAA,MACnC,GAAI,cAAc,SAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAC9C,GAAI,UAAU,SAAY,EAAE,MAAA,IAAU,CAAA;AAAA,MACtC,GAAI,iBAAiB,SAAY,EAAE,aAAA,IAAiB,CAAA;AAAA,MACpD,GAAI,eAAe,EAAE,cAAc,iBAAiB,CAAC,MAAS,EAAE,eAAe,KAAA,IAAS,CAAA;AAAA,MACzF,WAAW,CAAC,EAAE,KAAA,MACZ,YAAY,UAAU,IAAI,IAAI,oBAAC,qBAAA,EAAoB,MAAY,cAAA,CAA8B;AAAA,IAAA;AAAA,EAAA;AAIrG;AAEA,SAAS,oBAAoB,EAAE,MAAM,iBAA6E;AAChH,QAAM,OAAO,iBAAiB,QAAQ,KAAK,QAAQ,QAAQ,KAAK,QAAQ;AACxE,SACE,qBAAC,OAAA,EAAI,WAAU,sEACZ,UAAA;AAAA,IAAA,KAAK,UAAU,oBAAC,WAAA,EAAU,QAAQ,KAAK,QAAQ;AAAA,IAChD,oBAAC,QAAA,EAAK,WAAU,iCAAiC,eAAK,OAAM;AAAA,IAC3D,KAAK,QAAQ,QACZ,oBAAC,QAAA,EAAK,WAAW,OAAO,iBAAiB,yBAA0B,UAAA,WAAW,IAAI,EAAA,CAAE;AAAA,IAErF,KAAK,SAAS,QAAQ,KAAK,QAAQ,KAClC,qBAAC,QAAA,EAAK,WAAU,4BAA2B,UAAA;AAAA,MAAA;AAAA,MAAE,KAAK;AAAA,IAAA,GAAM;AAAA,IAEzD,KAAK,aACJ,qBAAC,QAAA,EAAK,WAAU,sCACb,UAAA;AAAA,MAAA,KAAK;AAAA,MACL,KAAK,cAAc,QAAQ,KAAK,aAAa,IAAI,IAAI,KAAK,UAAU,KAAK;AAAA,IAAA,GAC5E;AAAA,IAED,KAAK,UACJ,OAAO,QAAQ,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MACpC,qBAAC,QAAA,EAAa,WAAU,4BACrB,UAAA;AAAA,MAAA;AAAA,MAAE;AAAA,MAAE;AAAA,IAAA,EAAA,GADI,CAEX,CACD;AAAA,EAAA,GACL;AAEJ;AAEA,SAAS,WAAW,MAA6B;AAC/C,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,QAAQ,KAAK,QAAQ;AAC3B,SAAO,SAAS,OAAO,GAAG,MAAM,QAAQ,CAAC,CAAC,OAAO,GAAG,KAAK,IAAI,IAAI;AACnE;AAEA,MAAM,eAAuC;AAAA,EAC3C,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AACX;AAEA,SAAS,UAAU,EAAE,UAA8B;AACjD,SACE,oBAAC,QAAA,EAAK,WAAW,YAAY,aAAa,MAAM,KAAK,uBAAuB,IAAI,OAAO,QAAQ,UAAA,IAAA,CAE/F;AAEJ;"}
|
package/dist/data/Gauge.cjs
CHANGED
|
@@ -20,10 +20,37 @@ function Gauge({
|
|
|
20
20
|
icon,
|
|
21
21
|
subtitle,
|
|
22
22
|
meta,
|
|
23
|
+
variant = "default",
|
|
24
|
+
showLabel = true,
|
|
23
25
|
className
|
|
24
26
|
}) {
|
|
25
27
|
const pct = max > 0 ? Math.round(value / max * 100) : 0;
|
|
26
28
|
const displayValue = max === 100 ? value : pct;
|
|
29
|
+
const labelText = typeof label === "string" || typeof label === "number" ? String(label) : void 0;
|
|
30
|
+
const valueNode = /* @__PURE__ */ jsxRuntime.jsxs("span", { className: utils.cn("font-semibold tabular-nums", toneClass[tone]), children: [
|
|
31
|
+
displayValue,
|
|
32
|
+
suffix ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-[0.85em] opacity-60", children: suffix }) : null
|
|
33
|
+
] });
|
|
34
|
+
if (variant === "cell") {
|
|
35
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
36
|
+
"span",
|
|
37
|
+
{
|
|
38
|
+
className: utils.cn(
|
|
39
|
+
"inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs",
|
|
40
|
+
className
|
|
41
|
+
),
|
|
42
|
+
title: labelText,
|
|
43
|
+
"aria-label": !showLabel ? labelText : void 0,
|
|
44
|
+
children: [
|
|
45
|
+
icon ? /* @__PURE__ */ jsxRuntime.jsx(GaugeIcon, { icon }) : null,
|
|
46
|
+
showLabel ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate text-muted-foreground", children: label }) : null,
|
|
47
|
+
valueNode,
|
|
48
|
+
meta ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 truncate text-muted-foreground", children: meta }) : null
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
const showHeader = icon || showLabel || meta;
|
|
27
54
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
28
55
|
"div",
|
|
29
56
|
{
|
|
@@ -31,18 +58,24 @@ function Gauge({
|
|
|
31
58
|
"flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3",
|
|
32
59
|
className
|
|
33
60
|
),
|
|
61
|
+
title: !showLabel ? labelText : void 0,
|
|
62
|
+
"aria-label": !showLabel ? labelText : void 0,
|
|
34
63
|
children: [
|
|
35
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2 text-xs text-muted-foreground", children: [
|
|
64
|
+
showHeader ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2 text-xs text-muted-foreground", children: [
|
|
36
65
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex min-w-0 items-center gap-1.5", children: [
|
|
37
66
|
icon ? /* @__PURE__ */ jsxRuntime.jsx(GaugeIcon, { icon }) : null,
|
|
38
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: label })
|
|
67
|
+
showLabel ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: label }) : null
|
|
39
68
|
] }),
|
|
40
69
|
meta ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 truncate", children: meta }) : null
|
|
41
|
-
] }),
|
|
70
|
+
] }) : null,
|
|
42
71
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
43
72
|
"span",
|
|
44
73
|
{
|
|
45
|
-
className: utils.cn(
|
|
74
|
+
className: utils.cn(
|
|
75
|
+
showHeader && "mt-2",
|
|
76
|
+
"text-2xl font-semibold tabular-nums tracking-tight",
|
|
77
|
+
toneClass[tone]
|
|
78
|
+
),
|
|
46
79
|
children: [
|
|
47
80
|
displayValue,
|
|
48
81
|
suffix ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-0.5 text-sm opacity-60", children: suffix }) : null
|
package/dist/data/Gauge.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Gauge.cjs","sources":["../../src/data/Gauge.tsx"],"sourcesContent":["import { isValidElement, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\n\nexport type GaugeTone = \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport type GaugeProps = {\n label: ReactNode;\n value: number;\n max?: number;\n tone?: GaugeTone;\n suffix?: string;\n icon?: string | StaticIconComponent | ReactNode;\n subtitle?: ReactNode;\n meta?: ReactNode;\n className?: string;\n};\n\nconst toneClass: Record<GaugeTone, string> = {\n neutral: \"text-foreground\",\n success: \"text-green-600 dark:text-green-400\",\n warning: \"text-yellow-600 dark:text-yellow-400\",\n danger: \"text-red-600 dark:text-red-400\",\n info: \"text-blue-600 dark:text-blue-400\",\n};\n\nexport function Gauge({\n label,\n value,\n max = 100,\n tone = \"neutral\",\n suffix = \"%\",\n icon,\n subtitle,\n meta,\n className,\n}: GaugeProps) {\n const pct = max > 0 ? Math.round((value / max) * 100) : 0;\n const displayValue = max === 100 ? value : pct;\n return (\n <div\n className={cn(\n \"flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-2 text-xs text-muted-foreground\">\n
|
|
1
|
+
{"version":3,"file":"Gauge.cjs","sources":["../../src/data/Gauge.tsx"],"sourcesContent":["import { isValidElement, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\n\nexport type GaugeTone = \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\";\nexport type GaugeVariant = \"default\" | \"cell\";\n\nexport type GaugeProps = {\n label: ReactNode;\n value: number;\n max?: number;\n tone?: GaugeTone;\n suffix?: string;\n icon?: string | StaticIconComponent | ReactNode;\n subtitle?: ReactNode;\n meta?: ReactNode;\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: GaugeVariant;\n /** Show the text label. Icons and values remain visible when false. */\n showLabel?: boolean;\n className?: string;\n};\n\nconst toneClass: Record<GaugeTone, string> = {\n neutral: \"text-foreground\",\n success: \"text-green-600 dark:text-green-400\",\n warning: \"text-yellow-600 dark:text-yellow-400\",\n danger: \"text-red-600 dark:text-red-400\",\n info: \"text-blue-600 dark:text-blue-400\",\n};\n\nexport function Gauge({\n label,\n value,\n max = 100,\n tone = \"neutral\",\n suffix = \"%\",\n icon,\n subtitle,\n meta,\n variant = \"default\",\n showLabel = true,\n className,\n}: GaugeProps) {\n const pct = max > 0 ? Math.round((value / max) * 100) : 0;\n const displayValue = max === 100 ? value : pct;\n const labelText =\n typeof label === \"string\" || typeof label === \"number\" ? String(label) : undefined;\n const valueNode = (\n <span className={cn(\"font-semibold tabular-nums\", toneClass[tone])}>\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-[0.85em] opacity-60\">{suffix}</span> : null}\n </span>\n );\n\n if (variant === \"cell\") {\n return (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs\",\n className,\n )}\n title={labelText}\n aria-label={!showLabel ? labelText : undefined}\n >\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? (\n <span className=\"min-w-0 truncate text-muted-foreground\">{label}</span>\n ) : null}\n {valueNode}\n {meta ? <span className=\"shrink-0 truncate text-muted-foreground\">{meta}</span> : null}\n </span>\n );\n }\n\n const showHeader = icon || showLabel || meta;\n\n return (\n <div\n className={cn(\n \"flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3\",\n className,\n )}\n title={!showLabel ? labelText : undefined}\n aria-label={!showLabel ? labelText : undefined}\n >\n {showHeader ? (\n <div className=\"flex items-center justify-between gap-2 text-xs text-muted-foreground\">\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? <span className=\"truncate\">{label}</span> : null}\n </span>\n {meta ? <span className=\"shrink-0 truncate\">{meta}</span> : null}\n </div>\n ) : null}\n <span\n className={cn(\n showHeader && \"mt-2\",\n \"text-2xl font-semibold tabular-nums tracking-tight\",\n toneClass[tone],\n )}\n >\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-sm opacity-60\">{suffix}</span> : null}\n </span>\n {subtitle ? (\n <span className=\"mt-1 truncate text-xs text-muted-foreground\">{subtitle}</span>\n ) : null}\n </div>\n );\n}\n\nfunction GaugeIcon({ icon }: { icon: string | StaticIconComponent | ReactNode }) {\n if (typeof icon === \"string\") {\n return <Icon name={icon} width={16} height={16} className=\"text-muted-foreground\" />;\n }\n if (isValidElement(icon)) {\n return (\n <span className=\"inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">\n {icon}\n </span>\n );\n }\n\n return (\n <Icon\n icon={icon as StaticIconComponent}\n width={16}\n height={16}\n className=\"text-muted-foreground\"\n />\n );\n}\n"],"names":["cn","jsx","jsxs","Icon","isValidElement"],"mappings":"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"}
|
package/dist/data/Gauge.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { StaticIconComponent } from './Icon';
|
|
3
3
|
export type GaugeTone = "neutral" | "success" | "warning" | "danger" | "info";
|
|
4
|
+
export type GaugeVariant = "default" | "cell";
|
|
4
5
|
export type GaugeProps = {
|
|
5
6
|
label: ReactNode;
|
|
6
7
|
value: number;
|
|
@@ -10,7 +11,11 @@ export type GaugeProps = {
|
|
|
10
11
|
icon?: string | StaticIconComponent | ReactNode;
|
|
11
12
|
subtitle?: ReactNode;
|
|
12
13
|
meta?: ReactNode;
|
|
14
|
+
/** Visual density/layout. `cell` is a compact inline form for table/grid cells. */
|
|
15
|
+
variant?: GaugeVariant;
|
|
16
|
+
/** Show the text label. Icons and values remain visible when false. */
|
|
17
|
+
showLabel?: boolean;
|
|
13
18
|
className?: string;
|
|
14
19
|
};
|
|
15
|
-
export declare function Gauge({ label, value, max, tone, suffix, icon, subtitle, meta, className, }: GaugeProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare function Gauge({ label, value, max, tone, suffix, icon, subtitle, meta, variant, showLabel, className, }: GaugeProps): import("react/jsx-runtime").JSX.Element;
|
|
16
21
|
//# sourceMappingURL=Gauge.d.ts.map
|
package/dist/data/Gauge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Gauge.d.ts","sourceRoot":"","sources":["../../src/data/Gauge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAExD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Gauge.d.ts","sourceRoot":"","sources":["../../src/data/Gauge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAExD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC9E,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mFAAmF;IACnF,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,uEAAuE;IACvE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,KAAK,EACL,GAAS,EACT,IAAgB,EAChB,MAAY,EACZ,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,OAAmB,EACnB,SAAgB,EAChB,SAAS,GACV,EAAE,UAAU,2CAmEZ"}
|
package/dist/data/Gauge.js
CHANGED
|
@@ -18,10 +18,37 @@ function Gauge({
|
|
|
18
18
|
icon,
|
|
19
19
|
subtitle,
|
|
20
20
|
meta,
|
|
21
|
+
variant = "default",
|
|
22
|
+
showLabel = true,
|
|
21
23
|
className
|
|
22
24
|
}) {
|
|
23
25
|
const pct = max > 0 ? Math.round(value / max * 100) : 0;
|
|
24
26
|
const displayValue = max === 100 ? value : pct;
|
|
27
|
+
const labelText = typeof label === "string" || typeof label === "number" ? String(label) : void 0;
|
|
28
|
+
const valueNode = /* @__PURE__ */ jsxs("span", { className: cn("font-semibold tabular-nums", toneClass[tone]), children: [
|
|
29
|
+
displayValue,
|
|
30
|
+
suffix ? /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-[0.85em] opacity-60", children: suffix }) : null
|
|
31
|
+
] });
|
|
32
|
+
if (variant === "cell") {
|
|
33
|
+
return /* @__PURE__ */ jsxs(
|
|
34
|
+
"span",
|
|
35
|
+
{
|
|
36
|
+
className: cn(
|
|
37
|
+
"inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs",
|
|
38
|
+
className
|
|
39
|
+
),
|
|
40
|
+
title: labelText,
|
|
41
|
+
"aria-label": !showLabel ? labelText : void 0,
|
|
42
|
+
children: [
|
|
43
|
+
icon ? /* @__PURE__ */ jsx(GaugeIcon, { icon }) : null,
|
|
44
|
+
showLabel ? /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-muted-foreground", children: label }) : null,
|
|
45
|
+
valueNode,
|
|
46
|
+
meta ? /* @__PURE__ */ jsx("span", { className: "shrink-0 truncate text-muted-foreground", children: meta }) : null
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
const showHeader = icon || showLabel || meta;
|
|
25
52
|
return /* @__PURE__ */ jsxs(
|
|
26
53
|
"div",
|
|
27
54
|
{
|
|
@@ -29,18 +56,24 @@ function Gauge({
|
|
|
29
56
|
"flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3",
|
|
30
57
|
className
|
|
31
58
|
),
|
|
59
|
+
title: !showLabel ? labelText : void 0,
|
|
60
|
+
"aria-label": !showLabel ? labelText : void 0,
|
|
32
61
|
children: [
|
|
33
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 text-xs text-muted-foreground", children: [
|
|
62
|
+
showHeader ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 text-xs text-muted-foreground", children: [
|
|
34
63
|
/* @__PURE__ */ jsxs("span", { className: "inline-flex min-w-0 items-center gap-1.5", children: [
|
|
35
64
|
icon ? /* @__PURE__ */ jsx(GaugeIcon, { icon }) : null,
|
|
36
|
-
/* @__PURE__ */ jsx("span", { className: "truncate", children: label })
|
|
65
|
+
showLabel ? /* @__PURE__ */ jsx("span", { className: "truncate", children: label }) : null
|
|
37
66
|
] }),
|
|
38
67
|
meta ? /* @__PURE__ */ jsx("span", { className: "shrink-0 truncate", children: meta }) : null
|
|
39
|
-
] }),
|
|
68
|
+
] }) : null,
|
|
40
69
|
/* @__PURE__ */ jsxs(
|
|
41
70
|
"span",
|
|
42
71
|
{
|
|
43
|
-
className: cn(
|
|
72
|
+
className: cn(
|
|
73
|
+
showHeader && "mt-2",
|
|
74
|
+
"text-2xl font-semibold tabular-nums tracking-tight",
|
|
75
|
+
toneClass[tone]
|
|
76
|
+
),
|
|
44
77
|
children: [
|
|
45
78
|
displayValue,
|
|
46
79
|
suffix ? /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-sm opacity-60", children: suffix }) : null
|
package/dist/data/Gauge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Gauge.js","sources":["../../src/data/Gauge.tsx"],"sourcesContent":["import { isValidElement, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\n\nexport type GaugeTone = \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport type GaugeProps = {\n label: ReactNode;\n value: number;\n max?: number;\n tone?: GaugeTone;\n suffix?: string;\n icon?: string | StaticIconComponent | ReactNode;\n subtitle?: ReactNode;\n meta?: ReactNode;\n className?: string;\n};\n\nconst toneClass: Record<GaugeTone, string> = {\n neutral: \"text-foreground\",\n success: \"text-green-600 dark:text-green-400\",\n warning: \"text-yellow-600 dark:text-yellow-400\",\n danger: \"text-red-600 dark:text-red-400\",\n info: \"text-blue-600 dark:text-blue-400\",\n};\n\nexport function Gauge({\n label,\n value,\n max = 100,\n tone = \"neutral\",\n suffix = \"%\",\n icon,\n subtitle,\n meta,\n className,\n}: GaugeProps) {\n const pct = max > 0 ? Math.round((value / max) * 100) : 0;\n const displayValue = max === 100 ? value : pct;\n return (\n <div\n className={cn(\n \"flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-2 text-xs text-muted-foreground\">\n
|
|
1
|
+
{"version":3,"file":"Gauge.js","sources":["../../src/data/Gauge.tsx"],"sourcesContent":["import { isValidElement, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\n\nexport type GaugeTone = \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\";\nexport type GaugeVariant = \"default\" | \"cell\";\n\nexport type GaugeProps = {\n label: ReactNode;\n value: number;\n max?: number;\n tone?: GaugeTone;\n suffix?: string;\n icon?: string | StaticIconComponent | ReactNode;\n subtitle?: ReactNode;\n meta?: ReactNode;\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: GaugeVariant;\n /** Show the text label. Icons and values remain visible when false. */\n showLabel?: boolean;\n className?: string;\n};\n\nconst toneClass: Record<GaugeTone, string> = {\n neutral: \"text-foreground\",\n success: \"text-green-600 dark:text-green-400\",\n warning: \"text-yellow-600 dark:text-yellow-400\",\n danger: \"text-red-600 dark:text-red-400\",\n info: \"text-blue-600 dark:text-blue-400\",\n};\n\nexport function Gauge({\n label,\n value,\n max = 100,\n tone = \"neutral\",\n suffix = \"%\",\n icon,\n subtitle,\n meta,\n variant = \"default\",\n showLabel = true,\n className,\n}: GaugeProps) {\n const pct = max > 0 ? Math.round((value / max) * 100) : 0;\n const displayValue = max === 100 ? value : pct;\n const labelText =\n typeof label === \"string\" || typeof label === \"number\" ? String(label) : undefined;\n const valueNode = (\n <span className={cn(\"font-semibold tabular-nums\", toneClass[tone])}>\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-[0.85em] opacity-60\">{suffix}</span> : null}\n </span>\n );\n\n if (variant === \"cell\") {\n return (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1.5 whitespace-nowrap align-middle text-xs\",\n className,\n )}\n title={labelText}\n aria-label={!showLabel ? labelText : undefined}\n >\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? (\n <span className=\"min-w-0 truncate text-muted-foreground\">{label}</span>\n ) : null}\n {valueNode}\n {meta ? <span className=\"shrink-0 truncate text-muted-foreground\">{meta}</span> : null}\n </span>\n );\n }\n\n const showHeader = icon || showLabel || meta;\n\n return (\n <div\n className={cn(\n \"flex min-h-28 w-[15.5rem] shrink-0 flex-col rounded-lg border border-border bg-card p-3\",\n className,\n )}\n title={!showLabel ? labelText : undefined}\n aria-label={!showLabel ? labelText : undefined}\n >\n {showHeader ? (\n <div className=\"flex items-center justify-between gap-2 text-xs text-muted-foreground\">\n <span className=\"inline-flex min-w-0 items-center gap-1.5\">\n {icon ? <GaugeIcon icon={icon} /> : null}\n {showLabel ? <span className=\"truncate\">{label}</span> : null}\n </span>\n {meta ? <span className=\"shrink-0 truncate\">{meta}</span> : null}\n </div>\n ) : null}\n <span\n className={cn(\n showHeader && \"mt-2\",\n \"text-2xl font-semibold tabular-nums tracking-tight\",\n toneClass[tone],\n )}\n >\n {displayValue}\n {suffix ? <span className=\"ml-0.5 text-sm opacity-60\">{suffix}</span> : null}\n </span>\n {subtitle ? (\n <span className=\"mt-1 truncate text-xs text-muted-foreground\">{subtitle}</span>\n ) : null}\n </div>\n );\n}\n\nfunction GaugeIcon({ icon }: { icon: string | StaticIconComponent | ReactNode }) {\n if (typeof icon === \"string\") {\n return <Icon name={icon} width={16} height={16} className=\"text-muted-foreground\" />;\n }\n if (isValidElement(icon)) {\n return (\n <span className=\"inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground [&>svg]:h-4 [&>svg]:w-4\">\n {icon}\n </span>\n );\n }\n\n return (\n <Icon\n icon={icon as StaticIconComponent}\n width={16}\n height={16}\n className=\"text-muted-foreground\"\n />\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const utils = require("../lib/utils.cjs");
|
|
6
|
+
const HoverCard = require("../overlay/HoverCard.cjs");
|
|
7
|
+
function GaugeHoverCard({
|
|
8
|
+
title,
|
|
9
|
+
rows,
|
|
10
|
+
footer,
|
|
11
|
+
trigger,
|
|
12
|
+
placement = "top",
|
|
13
|
+
className
|
|
14
|
+
}) {
|
|
15
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
16
|
+
HoverCard.HoverCard,
|
|
17
|
+
{
|
|
18
|
+
placement,
|
|
19
|
+
delay: 150,
|
|
20
|
+
trigger,
|
|
21
|
+
cardClassName: "min-w-[9rem]",
|
|
22
|
+
...className ? { className } : {},
|
|
23
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 text-[11px]", children: [
|
|
24
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium text-foreground", children: title }),
|
|
25
|
+
/* @__PURE__ */ jsxRuntime.jsx("dl", { className: "grid grid-cols-[auto_1fr] gap-x-4 gap-y-0.5 tabular-nums", children: rows.map((r) => /* @__PURE__ */ jsxRuntime.jsxs(react.Fragment, { children: [
|
|
26
|
+
/* @__PURE__ */ jsxRuntime.jsx("dt", { className: "text-muted-foreground", children: r.label }),
|
|
27
|
+
/* @__PURE__ */ jsxRuntime.jsx("dd", { className: utils.cn("text-right font-medium text-foreground", r.tone), children: r.value })
|
|
28
|
+
] }, r.label)) }),
|
|
29
|
+
footer ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 text-[10px] text-muted-foreground", children: footer }) : null
|
|
30
|
+
] })
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
exports.GaugeHoverCard = GaugeHoverCard;
|
|
35
|
+
//# sourceMappingURL=GaugeHoverCard.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaugeHoverCard.cjs","sources":["../../src/data/GaugeHoverCard.tsx"],"sourcesContent":["import { Fragment, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { HoverCard, type HoverCardPlacement } from \"../overlay/HoverCard\";\n\nexport interface GaugeHoverRow {\n /** Row label, e.g. \"Current\", \"Min\", \"Capacity\". */\n label: string;\n /** Pre-formatted value (already unit-scaled by the caller). */\n value: string;\n /** Optional text-tone class for the value (e.g. a threshold colour). */\n tone?: string;\n}\n\nexport interface GaugeHoverCardProps {\n /** Card heading — the metric label. */\n title: string;\n /** Stat rows (current/min/max/…) rendered as a definition list. */\n rows: GaugeHoverRow[];\n /** Optional footer note, e.g. the look-back window. */\n footer?: ReactNode;\n /** The gauge visual that opens the card on hover/focus. */\n trigger: ReactNode;\n placement?: HoverCardPlacement;\n /** Classes for the HoverCard trigger wrapper (e.g. to keep a block gauge centred). */\n className?: string;\n}\n\n// GaugeHoverCard wraps a gauge's visual in a HoverCard whose body lists the\n// metric's label and its current/min/max/avg/capacity readings. Shared by\n// TimeseriesGauge and TimeseriesCoreBars so both surface the same hover summary.\nexport function GaugeHoverCard({\n title,\n rows,\n footer,\n trigger,\n placement = \"top\",\n className,\n}: GaugeHoverCardProps) {\n return (\n <HoverCard\n placement={placement}\n delay={150}\n trigger={trigger}\n cardClassName=\"min-w-[9rem]\"\n {...(className ? { className } : {})}\n >\n <div className=\"flex flex-col gap-1 text-[11px]\">\n <div className=\"font-medium text-foreground\">{title}</div>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-4 gap-y-0.5 tabular-nums\">\n {rows.map((r) => (\n <Fragment key={r.label}>\n <dt className=\"text-muted-foreground\">{r.label}</dt>\n <dd className={cn(\"text-right font-medium text-foreground\", r.tone)}>\n {r.value}\n </dd>\n </Fragment>\n ))}\n </dl>\n {footer ? (\n <div className=\"mt-0.5 text-[10px] text-muted-foreground\">{footer}</div>\n ) : null}\n </div>\n </HoverCard>\n );\n}\n"],"names":["jsx","HoverCard","jsxs","Fragment","cn"],"mappings":";;;;;;AA8BO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAAwB;AACtB,SACEA,2BAAAA;AAAAA,IAACC,UAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,eAAc;AAAA,MACb,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAEjC,UAAAC,2BAAAA,KAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,QAAAF,2BAAAA,IAAC,OAAA,EAAI,WAAU,+BAA+B,UAAA,OAAM;AAAA,QACpDA,2BAAAA,IAAC,QAAG,WAAU,4DACX,eAAK,IAAI,CAAC,MACTE,2BAAAA,KAACC,MAAAA,UAAA,EACC,UAAA;AAAA,UAAAH,2BAAAA,IAAC,MAAA,EAAG,WAAU,yBAAyB,UAAA,EAAE,OAAM;AAAA,UAC/CA,2BAAAA,IAAC,QAAG,WAAWI,SAAG,0CAA0C,EAAE,IAAI,GAC/D,UAAA,EAAE,MAAA,CACL;AAAA,QAAA,EAAA,GAJa,EAAE,KAKjB,CACD,GACH;AAAA,QACC,SACCJ,2BAAAA,IAAC,OAAA,EAAI,WAAU,4CAA4C,kBAAO,IAChE;AAAA,MAAA,EAAA,CACN;AAAA,IAAA;AAAA,EAAA;AAGN;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { HoverCardPlacement } from '../overlay/HoverCard';
|
|
3
|
+
export interface GaugeHoverRow {
|
|
4
|
+
/** Row label, e.g. "Current", "Min", "Capacity". */
|
|
5
|
+
label: string;
|
|
6
|
+
/** Pre-formatted value (already unit-scaled by the caller). */
|
|
7
|
+
value: string;
|
|
8
|
+
/** Optional text-tone class for the value (e.g. a threshold colour). */
|
|
9
|
+
tone?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface GaugeHoverCardProps {
|
|
12
|
+
/** Card heading — the metric label. */
|
|
13
|
+
title: string;
|
|
14
|
+
/** Stat rows (current/min/max/…) rendered as a definition list. */
|
|
15
|
+
rows: GaugeHoverRow[];
|
|
16
|
+
/** Optional footer note, e.g. the look-back window. */
|
|
17
|
+
footer?: ReactNode;
|
|
18
|
+
/** The gauge visual that opens the card on hover/focus. */
|
|
19
|
+
trigger: ReactNode;
|
|
20
|
+
placement?: HoverCardPlacement;
|
|
21
|
+
/** Classes for the HoverCard trigger wrapper (e.g. to keep a block gauge centred). */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function GaugeHoverCard({ title, rows, footer, trigger, placement, className, }: GaugeHoverCardProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=GaugeHoverCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaugeHoverCard.d.ts","sourceRoot":"","sources":["../../src/data/GaugeHoverCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAa,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,uDAAuD;IACvD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,2DAA2D;IAC3D,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,MAAM,EACN,OAAO,EACP,SAAiB,EACjB,SAAS,GACV,EAAE,mBAAmB,2CA2BrB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment } from "react";
|
|
3
|
+
import { cn } from "../lib/utils.js";
|
|
4
|
+
import { HoverCard } from "../overlay/HoverCard.js";
|
|
5
|
+
function GaugeHoverCard({
|
|
6
|
+
title,
|
|
7
|
+
rows,
|
|
8
|
+
footer,
|
|
9
|
+
trigger,
|
|
10
|
+
placement = "top",
|
|
11
|
+
className
|
|
12
|
+
}) {
|
|
13
|
+
return /* @__PURE__ */ jsx(
|
|
14
|
+
HoverCard,
|
|
15
|
+
{
|
|
16
|
+
placement,
|
|
17
|
+
delay: 150,
|
|
18
|
+
trigger,
|
|
19
|
+
cardClassName: "min-w-[9rem]",
|
|
20
|
+
...className ? { className } : {},
|
|
21
|
+
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1 text-[11px]", children: [
|
|
22
|
+
/* @__PURE__ */ jsx("div", { className: "font-medium text-foreground", children: title }),
|
|
23
|
+
/* @__PURE__ */ jsx("dl", { className: "grid grid-cols-[auto_1fr] gap-x-4 gap-y-0.5 tabular-nums", children: rows.map((r) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
24
|
+
/* @__PURE__ */ jsx("dt", { className: "text-muted-foreground", children: r.label }),
|
|
25
|
+
/* @__PURE__ */ jsx("dd", { className: cn("text-right font-medium text-foreground", r.tone), children: r.value })
|
|
26
|
+
] }, r.label)) }),
|
|
27
|
+
footer ? /* @__PURE__ */ jsx("div", { className: "mt-0.5 text-[10px] text-muted-foreground", children: footer }) : null
|
|
28
|
+
] })
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
GaugeHoverCard
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=GaugeHoverCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GaugeHoverCard.js","sources":["../../src/data/GaugeHoverCard.tsx"],"sourcesContent":["import { Fragment, type ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { HoverCard, type HoverCardPlacement } from \"../overlay/HoverCard\";\n\nexport interface GaugeHoverRow {\n /** Row label, e.g. \"Current\", \"Min\", \"Capacity\". */\n label: string;\n /** Pre-formatted value (already unit-scaled by the caller). */\n value: string;\n /** Optional text-tone class for the value (e.g. a threshold colour). */\n tone?: string;\n}\n\nexport interface GaugeHoverCardProps {\n /** Card heading — the metric label. */\n title: string;\n /** Stat rows (current/min/max/…) rendered as a definition list. */\n rows: GaugeHoverRow[];\n /** Optional footer note, e.g. the look-back window. */\n footer?: ReactNode;\n /** The gauge visual that opens the card on hover/focus. */\n trigger: ReactNode;\n placement?: HoverCardPlacement;\n /** Classes for the HoverCard trigger wrapper (e.g. to keep a block gauge centred). */\n className?: string;\n}\n\n// GaugeHoverCard wraps a gauge's visual in a HoverCard whose body lists the\n// metric's label and its current/min/max/avg/capacity readings. Shared by\n// TimeseriesGauge and TimeseriesCoreBars so both surface the same hover summary.\nexport function GaugeHoverCard({\n title,\n rows,\n footer,\n trigger,\n placement = \"top\",\n className,\n}: GaugeHoverCardProps) {\n return (\n <HoverCard\n placement={placement}\n delay={150}\n trigger={trigger}\n cardClassName=\"min-w-[9rem]\"\n {...(className ? { className } : {})}\n >\n <div className=\"flex flex-col gap-1 text-[11px]\">\n <div className=\"font-medium text-foreground\">{title}</div>\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-4 gap-y-0.5 tabular-nums\">\n {rows.map((r) => (\n <Fragment key={r.label}>\n <dt className=\"text-muted-foreground\">{r.label}</dt>\n <dd className={cn(\"text-right font-medium text-foreground\", r.tone)}>\n {r.value}\n </dd>\n </Fragment>\n ))}\n </dl>\n {footer ? (\n <div className=\"mt-0.5 text-[10px] text-muted-foreground\">{footer}</div>\n ) : null}\n </div>\n </HoverCard>\n );\n}\n"],"names":[],"mappings":";;;;AA8BO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAAwB;AACtB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,eAAc;AAAA,MACb,GAAI,YAAY,EAAE,UAAA,IAAc,CAAA;AAAA,MAEjC,UAAA,qBAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,QAAA,oBAAC,OAAA,EAAI,WAAU,+BAA+B,UAAA,OAAM;AAAA,QACpD,oBAAC,QAAG,WAAU,4DACX,eAAK,IAAI,CAAC,MACT,qBAAC,UAAA,EACC,UAAA;AAAA,UAAA,oBAAC,MAAA,EAAG,WAAU,yBAAyB,UAAA,EAAE,OAAM;AAAA,UAC/C,oBAAC,QAAG,WAAW,GAAG,0CAA0C,EAAE,IAAI,GAC/D,UAAA,EAAE,MAAA,CACL;AAAA,QAAA,EAAA,GAJa,EAAE,KAKjB,CACD,GACH;AAAA,QACC,SACC,oBAAC,OAAA,EAAI,WAAU,4CAA4C,kBAAO,IAChE;AAAA,MAAA,EAAA,CACN;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|