@flanksource/clicky-ui 0.3.55 → 0.3.57
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 +6 -0
- package/dist/ai.cjs +6 -0
- package/dist/ai.js +3 -1
- package/dist/chat.cjs +2 -0
- package/dist/chat.d.ts +1 -0
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +2 -1
- package/dist/comments/CommentCard.cjs +37 -7
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts +11 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +37 -7
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentCardParts.cjs +9 -4
- package/dist/comments/CommentCardParts.cjs.map +1 -1
- package/dist/comments/CommentCardParts.d.ts.map +1 -1
- package/dist/comments/CommentCardParts.js +9 -4
- package/dist/comments/CommentCardParts.js.map +1 -1
- package/dist/comments/CommentComposer.cjs +8 -8
- package/dist/comments/CommentComposer.cjs.map +1 -1
- package/dist/comments/CommentComposer.d.ts.map +1 -1
- package/dist/comments/CommentComposer.js +8 -8
- package/dist/comments/CommentComposer.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +5 -1
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +1 -1
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +5 -1
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +17 -11
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.d.ts +6 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -1
- package/dist/comments/CommentSidePanel.js +17 -11
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/CommentThread.cjs +4 -1
- package/dist/comments/CommentThread.cjs.map +1 -1
- package/dist/comments/CommentThread.d.ts +4 -1
- package/dist/comments/CommentThread.d.ts.map +1 -1
- package/dist/comments/CommentThread.js +4 -1
- package/dist/comments/CommentThread.js.map +1 -1
- package/dist/comments/CommentThreadList.cjs +6 -3
- package/dist/comments/CommentThreadList.cjs.map +1 -1
- package/dist/comments/CommentThreadList.d.ts +7 -2
- package/dist/comments/CommentThreadList.d.ts.map +1 -1
- package/dist/comments/CommentThreadList.js +6 -3
- package/dist/comments/CommentThreadList.js.map +1 -1
- package/dist/comments/MentionTextarea.cjs +1 -1
- package/dist/comments/MentionTextarea.cjs.map +1 -1
- package/dist/comments/MentionTextarea.d.ts.map +1 -1
- package/dist/comments/MentionTextarea.js +1 -1
- package/dist/comments/MentionTextarea.js.map +1 -1
- package/dist/comments/comment-assign.cjs +68 -0
- package/dist/comments/comment-assign.cjs.map +1 -0
- package/dist/comments/comment-assign.d.ts +31 -0
- package/dist/comments/comment-assign.d.ts.map +1 -0
- package/dist/comments/comment-assign.js +67 -0
- package/dist/comments/comment-assign.js.map +1 -0
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +39 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.js.map +1 -1
- package/dist/comments/comment-utils.cjs +2 -0
- package/dist/comments/comment-utils.cjs.map +1 -1
- package/dist/comments/comment-utils.d.ts +2 -0
- package/dist/comments/comment-utils.d.ts.map +1 -1
- package/dist/comments/comment-utils.js +2 -0
- package/dist/comments/comment-utils.js.map +1 -1
- package/dist/comments.cjs +3 -0
- package/dist/comments.d.ts +1 -0
- package/dist/comments.d.ts.map +1 -1
- package/dist/comments.js +2 -1
- package/dist/components/ComboboxMenu.cjs +23 -13
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +23 -13
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/ErrorWrapper.cjs +15 -4
- package/dist/components/ErrorWrapper.cjs.map +1 -1
- package/dist/components/ErrorWrapper.d.ts +7 -0
- package/dist/components/ErrorWrapper.d.ts.map +1 -1
- package/dist/components/ErrorWrapper.js +15 -4
- package/dist/components/ErrorWrapper.js.map +1 -1
- package/dist/components/FilterBar.cjs +29 -6
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +3 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +29 -6
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/ItemActions.cjs +1 -1
- package/dist/components/ItemActions.cjs.map +1 -1
- package/dist/components/ItemActions.js +1 -1
- package/dist/components/ItemActions.js.map +1 -1
- package/dist/components/ListMenu.cjs +33 -3
- package/dist/components/ListMenu.cjs.map +1 -1
- package/dist/components/ListMenu.d.ts +4 -1
- package/dist/components/ListMenu.d.ts.map +1 -1
- package/dist/components/ListMenu.js +33 -3
- package/dist/components/ListMenu.js.map +1 -1
- package/dist/components/ListMenuItems.cjs +80 -0
- package/dist/components/ListMenuItems.cjs.map +1 -0
- package/dist/components/ListMenuItems.d.ts +8 -0
- package/dist/components/ListMenuItems.d.ts.map +1 -0
- package/dist/components/ListMenuItems.js +80 -0
- package/dist/components/ListMenuItems.js.map +1 -0
- package/dist/components/LocalPathPicker.cjs +182 -0
- package/dist/components/LocalPathPicker.cjs.map +1 -0
- package/dist/components/LocalPathPicker.d.ts +11 -0
- package/dist/components/LocalPathPicker.d.ts.map +1 -0
- package/dist/components/LocalPathPicker.js +182 -0
- package/dist/components/LocalPathPicker.js.map +1 -0
- package/dist/components/LocalPathTree.cjs +89 -0
- package/dist/components/LocalPathTree.cjs.map +1 -0
- package/dist/components/LocalPathTree.d.ts +9 -0
- package/dist/components/LocalPathTree.d.ts.map +1 -0
- package/dist/components/LocalPathTree.js +89 -0
- package/dist/components/LocalPathTree.js.map +1 -0
- package/dist/components/RangeSlider.cjs +10 -30
- package/dist/components/RangeSlider.cjs.map +1 -1
- package/dist/components/RangeSlider.d.ts.map +1 -1
- package/dist/components/RangeSlider.js +4 -24
- package/dist/components/RangeSlider.js.map +1 -1
- package/dist/components/Slider.cjs +79 -0
- package/dist/components/Slider.cjs.map +1 -0
- package/dist/components/Slider.d.ts +23 -0
- package/dist/components/Slider.d.ts.map +1 -0
- package/dist/components/Slider.js +79 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/combobox-types.d.ts +4 -1
- package/dist/components/combobox-types.d.ts.map +1 -1
- package/dist/components/filter-bar-field-utils.cjs +3 -5
- package/dist/components/filter-bar-field-utils.cjs.map +1 -1
- package/dist/components/filter-bar-field-utils.d.ts.map +1 -1
- package/dist/components/filter-bar-field-utils.js +3 -5
- package/dist/components/filter-bar-field-utils.js.map +1 -1
- package/dist/components/filter-bar-tree-model.cjs +22 -0
- package/dist/components/filter-bar-tree-model.cjs.map +1 -0
- package/dist/components/filter-bar-tree-model.d.ts +33 -0
- package/dist/components/filter-bar-tree-model.d.ts.map +1 -0
- package/dist/components/filter-bar-tree-model.js +21 -0
- package/dist/components/filter-bar-tree-model.js.map +1 -0
- package/dist/components/filter-bar-tree.cjs +84 -0
- package/dist/components/filter-bar-tree.cjs.map +1 -0
- package/dist/components/filter-bar-tree.d.ts +7 -0
- package/dist/components/filter-bar-tree.d.ts.map +1 -0
- package/dist/components/filter-bar-tree.js +84 -0
- package/dist/components/filter-bar-tree.js.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs +2 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -1
- package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -1
- package/dist/components/json-schema-form-debug-glyph-map.js +2 -0
- package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -1
- package/dist/components/json-schema-form-help-links.cjs +18 -0
- package/dist/components/json-schema-form-help-links.cjs.map +1 -0
- package/dist/components/json-schema-form-help-links.d.ts +5 -0
- package/dist/components/json-schema-form-help-links.d.ts.map +1 -0
- package/dist/components/json-schema-form-help-links.js +18 -0
- package/dist/components/json-schema-form-help-links.js.map +1 -0
- package/dist/components/json-schema-form-help-model.cjs +7 -0
- package/dist/components/json-schema-form-help-model.cjs.map +1 -0
- package/dist/components/json-schema-form-help-model.d.ts +3 -0
- package/dist/components/json-schema-form-help-model.d.ts.map +1 -0
- package/dist/components/json-schema-form-help-model.js +7 -0
- package/dist/components/json-schema-form-help-model.js.map +1 -0
- package/dist/components/json-schema-form-json.cjs +48 -0
- package/dist/components/json-schema-form-json.cjs.map +1 -0
- package/dist/components/json-schema-form-json.d.ts +7 -0
- package/dist/components/json-schema-form-json.d.ts.map +1 -0
- package/dist/components/json-schema-form-json.js +48 -0
- package/dist/components/json-schema-form-json.js.map +1 -0
- package/dist/components/json-schema-form-layout.cjs +7 -5
- package/dist/components/json-schema-form-layout.cjs.map +1 -1
- package/dist/components/json-schema-form-layout.d.ts +2 -2
- package/dist/components/json-schema-form-layout.d.ts.map +1 -1
- package/dist/components/json-schema-form-layout.js +7 -5
- package/dist/components/json-schema-form-layout.js.map +1 -1
- package/dist/components/json-schema-form-object.cjs +2 -13
- 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 +2 -13
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-refs.cjs +1 -1
- 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 +1 -1
- package/dist/components/json-schema-form-refs.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +20 -6
- 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 +20 -6
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +22 -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 +22 -2
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +5 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-union-model.cjs +46 -0
- package/dist/components/json-schema-form-union-model.cjs.map +1 -0
- package/dist/components/json-schema-form-union-model.d.ts +6 -0
- package/dist/components/json-schema-form-union-model.d.ts.map +1 -0
- package/dist/components/json-schema-form-union-model.js +43 -0
- package/dist/components/json-schema-form-union-model.js.map +1 -0
- package/dist/components/json-schema-form-union.cjs +52 -0
- package/dist/components/json-schema-form-union.cjs.map +1 -0
- package/dist/components/json-schema-form-union.d.ts +7 -0
- package/dist/components/json-schema-form-union.d.ts.map +1 -0
- package/dist/components/json-schema-form-union.js +52 -0
- package/dist/components/json-schema-form-union.js.map +1 -0
- package/dist/components/list-menu-virtual.cjs +5 -0
- package/dist/components/list-menu-virtual.cjs.map +1 -0
- package/dist/components/list-menu-virtual.d.ts +12 -0
- package/dist/components/list-menu-virtual.d.ts.map +1 -0
- package/dist/components/list-menu-virtual.js +6 -0
- package/dist/components/list-menu-virtual.js.map +1 -0
- package/dist/components/local-path.cjs +12 -0
- package/dist/components/local-path.cjs.map +1 -0
- package/dist/components/local-path.d.ts +14 -0
- package/dist/components/local-path.d.ts.map +1 -0
- package/dist/components/local-path.js +12 -0
- package/dist/components/local-path.js.map +1 -0
- package/dist/components/slider-shared.cjs +32 -0
- package/dist/components/slider-shared.cjs.map +1 -0
- package/dist/components/slider-shared.d.ts +18 -0
- package/dist/components/slider-shared.d.ts.map +1 -0
- package/dist/components/slider-shared.js +27 -0
- package/dist/components/slider-shared.js.map +1 -0
- package/dist/components.cjs +8 -0
- package/dist/components.d.ts +6 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +5 -1
- package/dist/connections/ConnectionsPage.cjs +51 -19
- package/dist/connections/ConnectionsPage.cjs.map +1 -1
- package/dist/connections/ConnectionsPage.d.ts +9 -1
- package/dist/connections/ConnectionsPage.d.ts.map +1 -1
- package/dist/connections/ConnectionsPage.js +52 -20
- package/dist/connections/ConnectionsPage.js.map +1 -1
- package/dist/connections/connectionDashboard.cjs +13 -8
- package/dist/connections/connectionDashboard.cjs.map +1 -1
- package/dist/connections/connectionDashboard.d.ts +8 -3
- package/dist/connections/connectionDashboard.d.ts.map +1 -1
- package/dist/connections/connectionDashboard.js +14 -9
- package/dist/connections/connectionDashboard.js.map +1 -1
- package/dist/connections/connectionDashboardModel.cjs.map +1 -1
- package/dist/connections/connectionDashboardModel.d.ts +4 -0
- package/dist/connections/connectionDashboardModel.d.ts.map +1 -1
- package/dist/connections/connectionDashboardModel.js.map +1 -1
- package/dist/connections/connectionDashboardRow.cjs +75 -55
- package/dist/connections/connectionDashboardRow.cjs.map +1 -1
- package/dist/connections/connectionDashboardRow.d.ts +3 -2
- package/dist/connections/connectionDashboardRow.d.ts.map +1 -1
- package/dist/connections/connectionDashboardRow.js +75 -55
- package/dist/connections/connectionDashboardRow.js.map +1 -1
- package/dist/connections/connectionNamespaceField.cjs +17 -0
- package/dist/connections/connectionNamespaceField.cjs.map +1 -0
- package/dist/connections/connectionNamespaceField.d.ts +10 -0
- package/dist/connections/connectionNamespaceField.d.ts.map +1 -0
- package/dist/connections/connectionNamespaceField.js +17 -0
- package/dist/connections/connectionNamespaceField.js.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.cjs +98 -0
- package/dist/connections/connectionSchemaFormExtensions.cjs.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.d.ts +41 -0
- package/dist/connections/connectionSchemaFormExtensions.d.ts.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.js +96 -0
- package/dist/connections/connectionSchemaFormExtensions.js.map +1 -0
- package/dist/connections/connectionsPageModel.cjs +11 -0
- package/dist/connections/connectionsPageModel.cjs.map +1 -1
- package/dist/connections/connectionsPageModel.d.ts +5 -0
- package/dist/connections/connectionsPageModel.d.ts.map +1 -1
- package/dist/connections/connectionsPageModel.js +11 -1
- package/dist/connections/connectionsPageModel.js.map +1 -1
- package/dist/connections.cjs +5 -0
- package/dist/connections.d.ts +2 -1
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +3 -2
- package/dist/data/AvatarBadge.cjs +3 -3
- package/dist/data/AvatarBadge.cjs.map +1 -1
- package/dist/data/AvatarBadge.js +3 -3
- package/dist/data/AvatarBadge.js.map +1 -1
- package/dist/data/CodeDiff.cjs +2 -0
- package/dist/data/CodeDiff.cjs.map +1 -1
- package/dist/data/CodeDiff.js +2 -0
- package/dist/data/CodeDiff.js.map +1 -1
- package/dist/data/DataTable.cjs +3 -2
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +3 -2
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/Gauge.cjs +1 -1
- package/dist/data/Gauge.cjs.map +1 -1
- package/dist/data/Gauge.js +1 -1
- package/dist/data/Gauge.js.map +1 -1
- package/dist/data/HighlightedTokens.cjs +2 -10
- package/dist/data/HighlightedTokens.cjs.map +1 -1
- package/dist/data/HighlightedTokens.d.ts.map +1 -1
- package/dist/data/HighlightedTokens.js +1 -9
- package/dist/data/HighlightedTokens.js.map +1 -1
- package/dist/data/Markdown.cjs +38 -11
- package/dist/data/Markdown.cjs.map +1 -1
- package/dist/data/Markdown.d.ts +9 -1
- package/dist/data/Markdown.d.ts.map +1 -1
- package/dist/data/Markdown.js +39 -12
- package/dist/data/Markdown.js.map +1 -1
- package/dist/data/MultiGaugeBar.cjs +157 -0
- package/dist/data/MultiGaugeBar.cjs.map +1 -0
- package/dist/data/MultiGaugeBar.d.ts +29 -0
- package/dist/data/MultiGaugeBar.d.ts.map +1 -0
- package/dist/data/MultiGaugeBar.js +157 -0
- package/dist/data/MultiGaugeBar.js.map +1 -0
- package/dist/data/OpenInFilesLink.cjs +27 -0
- package/dist/data/OpenInFilesLink.cjs.map +1 -0
- package/dist/data/OpenInFilesLink.d.ts +15 -0
- package/dist/data/OpenInFilesLink.d.ts.map +1 -0
- package/dist/data/OpenInFilesLink.js +27 -0
- package/dist/data/OpenInFilesLink.js.map +1 -0
- package/dist/data/ProgressBar.cjs +5 -3
- package/dist/data/ProgressBar.cjs.map +1 -1
- package/dist/data/ProgressBar.d.ts +5 -1
- package/dist/data/ProgressBar.d.ts.map +1 -1
- package/dist/data/ProgressBar.js +5 -3
- package/dist/data/ProgressBar.js.map +1 -1
- package/dist/data/ProgressBars.cjs +13 -5
- package/dist/data/ProgressBars.cjs.map +1 -1
- package/dist/data/ProgressBars.d.ts +6 -1
- package/dist/data/ProgressBars.d.ts.map +1 -1
- package/dist/data/ProgressBars.js +13 -5
- package/dist/data/ProgressBars.js.map +1 -1
- package/dist/data/Properties.cjs +3 -3
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.js +3 -3
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/TaskProgress.cjs +14 -6
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +3 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +14 -6
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskPrompts.cjs +96 -0
- package/dist/data/TaskPrompts.cjs.map +1 -0
- package/dist/data/TaskPrompts.d.ts +6 -0
- package/dist/data/TaskPrompts.d.ts.map +1 -0
- package/dist/data/TaskPrompts.js +96 -0
- package/dist/data/TaskPrompts.js.map +1 -0
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +3 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.cjs +7 -3
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +8 -4
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/TimeseriesGauge.cjs +12 -5
- package/dist/data/TimeseriesGauge.cjs.map +1 -1
- package/dist/data/TimeseriesGauge.d.ts.map +1 -1
- package/dist/data/TimeseriesGauge.js +13 -6
- package/dist/data/TimeseriesGauge.js.map +1 -1
- package/dist/data/TimeseriesPanel.cjs +10 -9
- package/dist/data/TimeseriesPanel.cjs.map +1 -1
- package/dist/data/TimeseriesPanel.d.ts +1 -1
- package/dist/data/TimeseriesPanel.d.ts.map +1 -1
- package/dist/data/TimeseriesPanel.js +11 -10
- package/dist/data/TimeseriesPanel.js.map +1 -1
- package/dist/data/TimeseriesPanel.model.cjs +62 -10
- package/dist/data/TimeseriesPanel.model.cjs.map +1 -1
- package/dist/data/TimeseriesPanel.model.d.ts +40 -1
- package/dist/data/TimeseriesPanel.model.d.ts.map +1 -1
- package/dist/data/TimeseriesPanel.model.js +62 -11
- package/dist/data/TimeseriesPanel.model.js.map +1 -1
- package/dist/data/WorkloadCard.cjs +7 -3
- package/dist/data/WorkloadCard.cjs.map +1 -1
- package/dist/data/WorkloadCard.d.ts +3 -1
- package/dist/data/WorkloadCard.d.ts.map +1 -1
- package/dist/data/WorkloadCard.js +7 -3
- package/dist/data/WorkloadCard.js.map +1 -1
- package/dist/data/WorkloadCard.model.cjs.map +1 -1
- package/dist/data/WorkloadCard.model.d.ts +2 -0
- package/dist/data/WorkloadCard.model.d.ts.map +1 -1
- package/dist/data/WorkloadCard.model.js.map +1 -1
- package/dist/data/ai/ChatWindow.placement.cjs +2 -1
- package/dist/data/ai/ChatWindow.placement.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.placement.d.ts +1 -1
- package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.placement.js +2 -1
- package/dist/data/ai/ChatWindow.placement.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs +6 -3
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js +6 -3
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPage.cjs +2 -1
- package/dist/data/ai/PromptCatalog/PromptPage.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPage.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPage.js +2 -1
- package/dist/data/ai/PromptCatalog/PromptPage.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs +9 -6
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js +9 -6
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs +3 -3
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts +2 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js +3 -3
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js.map +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs +4 -3
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.js +4 -3
- package/dist/data/ai/PromptCatalog/prompt-page-model.js.map +1 -1
- package/dist/data/ai/PromptCatalog/types.d.ts +1 -0
- package/dist/data/ai/PromptCatalog/types.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.cjs +2 -2
- package/dist/data/ai/SpecRuntimeBar.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.d.ts +4 -1
- package/dist/data/ai/SpecRuntimeBar.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.js +2 -2
- package/dist/data/ai/SpecRuntimeBar.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/ThreadPicker.cjs +2 -2
- package/dist/data/ai/ThreadPicker.cjs.map +1 -1
- package/dist/data/ai/ThreadPicker.js +2 -2
- package/dist/data/ai/ThreadPicker.js.map +1 -1
- package/dist/data/ai/index.d.ts +2 -0
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/use-prompt-run-stream.cjs +126 -0
- package/dist/data/ai/use-prompt-run-stream.cjs.map +1 -0
- package/dist/data/ai/use-prompt-run-stream.d.ts +52 -0
- package/dist/data/ai/use-prompt-run-stream.d.ts.map +1 -0
- package/dist/data/ai/use-prompt-run-stream.js +126 -0
- package/dist/data/ai/use-prompt-run-stream.js.map +1 -0
- package/dist/data/cache-browser/CacheBrowser.cjs +1 -0
- package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -1
- package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -1
- package/dist/data/cache-browser/CacheBrowser.js +1 -0
- package/dist/data/cache-browser/CacheBrowser.js.map +1 -1
- package/dist/data/charts/BarChart.cjs +194 -0
- package/dist/data/charts/BarChart.cjs.map +1 -0
- package/dist/data/charts/BarChart.d.ts +19 -0
- package/dist/data/charts/BarChart.d.ts.map +1 -0
- package/dist/data/charts/BarChart.js +194 -0
- package/dist/data/charts/BarChart.js.map +1 -0
- package/dist/data/charts/ChartLegend.cjs +54 -0
- package/dist/data/charts/ChartLegend.cjs.map +1 -0
- package/dist/data/charts/ChartLegend.d.ts +17 -0
- package/dist/data/charts/ChartLegend.d.ts.map +1 -0
- package/dist/data/charts/ChartLegend.js +54 -0
- package/dist/data/charts/ChartLegend.js.map +1 -0
- package/dist/data/charts/Sparkline.cjs +56 -0
- package/dist/data/charts/Sparkline.cjs.map +1 -0
- package/dist/data/charts/Sparkline.d.ts +15 -0
- package/dist/data/charts/Sparkline.d.ts.map +1 -0
- package/dist/data/charts/Sparkline.js +56 -0
- package/dist/data/charts/Sparkline.js.map +1 -0
- package/dist/data/charts/StackedBarChart.cjs +241 -0
- package/dist/data/charts/StackedBarChart.cjs.map +1 -0
- package/dist/data/charts/StackedBarChart.d.ts +20 -0
- package/dist/data/charts/StackedBarChart.d.ts.map +1 -0
- package/dist/data/charts/StackedBarChart.js +241 -0
- package/dist/data/charts/StackedBarChart.js.map +1 -0
- package/dist/data/charts/TrendChart.cjs +157 -0
- package/dist/data/charts/TrendChart.cjs.map +1 -0
- package/dist/data/charts/TrendChart.d.ts +20 -0
- package/dist/data/charts/TrendChart.d.ts.map +1 -0
- package/dist/data/charts/TrendChart.js +157 -0
- package/dist/data/charts/TrendChart.js.map +1 -0
- package/dist/data/charts/chart-marks.cjs +115 -0
- package/dist/data/charts/chart-marks.cjs.map +1 -0
- package/dist/data/charts/chart-marks.d.ts +39 -0
- package/dist/data/charts/chart-marks.d.ts.map +1 -0
- package/dist/data/charts/chart-marks.js +112 -0
- package/dist/data/charts/chart-marks.js.map +1 -0
- package/dist/data/charts/chart-palette.cjs +74 -0
- package/dist/data/charts/chart-palette.cjs.map +1 -0
- package/dist/data/charts/chart-palette.d.ts +58 -0
- package/dist/data/charts/chart-palette.d.ts.map +1 -0
- package/dist/data/charts/chart-palette.js +72 -0
- package/dist/data/charts/chart-palette.js.map +1 -0
- package/dist/data/charts/chart-scale.cjs +115 -0
- package/dist/data/charts/chart-scale.cjs.map +1 -0
- package/dist/data/charts/chart-scale.d.ts +41 -0
- package/dist/data/charts/chart-scale.d.ts.map +1 -0
- package/dist/data/charts/chart-scale.js +104 -0
- package/dist/data/charts/chart-scale.js.map +1 -0
- package/dist/data/charts/chart.test-utils.d.ts +7 -0
- package/dist/data/charts/chart.test-utils.d.ts.map +1 -0
- package/dist/data/charts/index.d.ts +7 -0
- package/dist/data/charts/index.d.ts.map +1 -0
- package/dist/data/chat/MessageActions.cjs +1 -1
- package/dist/data/chat/MessageActions.cjs.map +1 -1
- package/dist/data/chat/MessageActions.js +1 -1
- package/dist/data/chat/MessageActions.js.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.js +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.cjs +9 -2
- package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.js +9 -2
- package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
- package/dist/data/diagnostics/ProblemActions.cjs +37 -0
- package/dist/data/diagnostics/ProblemActions.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemActions.d.ts +6 -0
- package/dist/data/diagnostics/ProblemActions.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemActions.js +37 -0
- package/dist/data/diagnostics/ProblemActions.js.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.cjs +33 -0
- package/dist/data/diagnostics/ProblemFacet.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.d.ts +9 -0
- package/dist/data/diagnostics/ProblemFacet.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.js +33 -0
- package/dist/data/diagnostics/ProblemFacet.js.map +1 -0
- package/dist/data/diagnostics/ProblemRow.cjs +62 -0
- package/dist/data/diagnostics/ProblemRow.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemRow.d.ts +14 -0
- package/dist/data/diagnostics/ProblemRow.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemRow.js +62 -0
- package/dist/data/diagnostics/ProblemRow.js.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.cjs +18 -0
- package/dist/data/diagnostics/ProblemViewOptions.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.d.ts +6 -0
- package/dist/data/diagnostics/ProblemViewOptions.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.js +18 -0
- package/dist/data/diagnostics/ProblemViewOptions.js.map +1 -0
- package/dist/data/diagnostics/StackFrameRow.cjs +1 -1
- package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
- package/dist/data/diagnostics/StackFrameRow.js +1 -1
- package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
- package/dist/data/diagnostics/diagnostic-identity.cjs +14 -0
- package/dist/data/diagnostics/diagnostic-identity.cjs.map +1 -0
- package/dist/data/diagnostics/diagnostic-identity.d.ts +3 -0
- package/dist/data/diagnostics/diagnostic-identity.d.ts.map +1 -0
- package/dist/data/diagnostics/diagnostic-identity.js +14 -0
- package/dist/data/diagnostics/diagnostic-identity.js.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.cjs +16 -0
- package/dist/data/diagnostics/use-problem-expansion.cjs.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.d.ts +3 -0
- package/dist/data/diagnostics/use-problem-expansion.d.ts.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.js +16 -0
- package/dist/data/diagnostics/use-problem-expansion.js.map +1 -0
- package/dist/data/git/GitChangeList.cjs +9 -6
- package/dist/data/git/GitChangeList.cjs.map +1 -1
- package/dist/data/git/GitChangeList.d.ts +6 -0
- package/dist/data/git/GitChangeList.d.ts.map +1 -1
- package/dist/data/git/GitChangeList.js +9 -6
- package/dist/data/git/GitChangeList.js.map +1 -1
- package/dist/data/git/pickers/GitPickersDemo.d.ts.map +1 -1
- package/dist/data/git/pickers/ReferencePicker.cjs +1 -0
- package/dist/data/git/pickers/ReferencePicker.cjs.map +1 -1
- package/dist/data/git/pickers/ReferencePicker.js +1 -0
- package/dist/data/git/pickers/ReferencePicker.js.map +1 -1
- package/dist/data/lint/LintDetail.cjs +230 -189
- package/dist/data/lint/LintDetail.cjs.map +1 -1
- package/dist/data/lint/LintDetail.d.ts +25 -3
- package/dist/data/lint/LintDetail.d.ts.map +1 -1
- package/dist/data/lint/LintDetail.js +231 -192
- package/dist/data/lint/LintDetail.js.map +1 -1
- package/dist/data/lint/LintFilterBar.cjs +78 -83
- package/dist/data/lint/LintFilterBar.cjs.map +1 -1
- package/dist/data/lint/LintFilterBar.d.ts +23 -6
- package/dist/data/lint/LintFilterBar.d.ts.map +1 -1
- package/dist/data/lint/LintFilterBar.js +78 -85
- package/dist/data/lint/LintFilterBar.js.map +1 -1
- package/dist/data/lint/LintIgnoreMenu.cjs +59 -0
- package/dist/data/lint/LintIgnoreMenu.cjs.map +1 -0
- package/dist/data/lint/LintIgnoreMenu.d.ts +20 -0
- package/dist/data/lint/LintIgnoreMenu.d.ts.map +1 -0
- package/dist/data/lint/LintIgnoreMenu.js +58 -0
- package/dist/data/lint/LintIgnoreMenu.js.map +1 -0
- package/dist/data/lint/LintResults.cjs +59 -14
- package/dist/data/lint/LintResults.cjs.map +1 -1
- package/dist/data/lint/LintResults.d.ts +25 -1
- package/dist/data/lint/LintResults.d.ts.map +1 -1
- package/dist/data/lint/LintResults.fixtures.d.ts +19 -0
- package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -1
- package/dist/data/lint/LintResults.js +60 -15
- package/dist/data/lint/LintResults.js.map +1 -1
- package/dist/data/lint/LintTable.cjs +156 -0
- package/dist/data/lint/LintTable.cjs.map +1 -0
- package/dist/data/lint/LintTable.d.ts +13 -0
- package/dist/data/lint/LintTable.d.ts.map +1 -0
- package/dist/data/lint/LintTable.js +156 -0
- package/dist/data/lint/LintTable.js.map +1 -0
- package/dist/data/lint/LintTreeNode.cjs +42 -19
- package/dist/data/lint/LintTreeNode.cjs.map +1 -1
- package/dist/data/lint/LintTreeNode.d.ts +7 -2
- package/dist/data/lint/LintTreeNode.d.ts.map +1 -1
- package/dist/data/lint/LintTreeNode.js +44 -21
- package/dist/data/lint/LintTreeNode.js.map +1 -1
- package/dist/data/lint/ViolationSnippet.cjs +113 -0
- package/dist/data/lint/ViolationSnippet.cjs.map +1 -0
- package/dist/data/lint/ViolationSnippet.d.ts +20 -0
- package/dist/data/lint/ViolationSnippet.d.ts.map +1 -0
- package/dist/data/lint/ViolationSnippet.js +112 -0
- package/dist/data/lint/ViolationSnippet.js.map +1 -0
- package/dist/data/lint/actions.cjs +44 -16
- package/dist/data/lint/actions.cjs.map +1 -1
- package/dist/data/lint/actions.d.ts +7 -3
- package/dist/data/lint/actions.d.ts.map +1 -1
- package/dist/data/lint/actions.js +44 -16
- package/dist/data/lint/actions.js.map +1 -1
- package/dist/data/lint/grouping.cjs +105 -8
- package/dist/data/lint/grouping.cjs.map +1 -1
- package/dist/data/lint/grouping.d.ts +21 -1
- package/dist/data/lint/grouping.d.ts.map +1 -1
- package/dist/data/lint/grouping.js +105 -10
- package/dist/data/lint/grouping.js.map +1 -1
- package/dist/data/lint/ignore-menu-items.cjs +18 -0
- package/dist/data/lint/ignore-menu-items.cjs.map +1 -0
- package/dist/data/lint/ignore-menu-items.d.ts +6 -0
- package/dist/data/lint/ignore-menu-items.d.ts.map +1 -0
- package/dist/data/lint/ignore-menu-items.js +17 -0
- package/dist/data/lint/ignore-menu-items.js.map +1 -0
- package/dist/data/lint/index.d.ts +7 -5
- package/dist/data/lint/index.d.ts.map +1 -1
- package/dist/data/lint/stats.cjs +19 -4
- package/dist/data/lint/stats.cjs.map +1 -1
- package/dist/data/lint/stats.d.ts +13 -3
- package/dist/data/lint/stats.d.ts.map +1 -1
- package/dist/data/lint/stats.js +17 -5
- package/dist/data/lint/stats.js.map +1 -1
- package/dist/data/lint/types.cjs +8 -0
- package/dist/data/lint/types.cjs.map +1 -1
- package/dist/data/lint/types.d.ts +47 -0
- package/dist/data/lint/types.d.ts.map +1 -1
- package/dist/data/lint/types.js +8 -1
- package/dist/data/lint/types.js.map +1 -1
- package/dist/data/lint/violation-menu-items.cjs +31 -0
- package/dist/data/lint/violation-menu-items.cjs.map +1 -0
- package/dist/data/lint/violation-menu-items.d.ts +12 -0
- package/dist/data/lint/violation-menu-items.d.ts.map +1 -0
- package/dist/data/lint/violation-menu-items.js +31 -0
- package/dist/data/lint/violation-menu-items.js.map +1 -0
- package/dist/data/markdown-source-blocks.cjs +38 -0
- package/dist/data/markdown-source-blocks.cjs.map +1 -0
- package/dist/data/markdown-source-blocks.d.ts +32 -0
- package/dist/data/markdown-source-blocks.d.ts.map +1 -0
- package/dist/data/markdown-source-blocks.js +35 -0
- package/dist/data/markdown-source-blocks.js.map +1 -0
- package/dist/data/test-runner/FilterFacet.cjs +52 -0
- package/dist/data/test-runner/FilterFacet.cjs.map +1 -0
- package/dist/data/test-runner/FilterFacet.d.ts +13 -0
- package/dist/data/test-runner/FilterFacet.d.ts.map +1 -0
- package/dist/data/test-runner/FilterFacet.js +52 -0
- package/dist/data/test-runner/FilterFacet.js.map +1 -0
- package/dist/data/test-runner/MatrixMarks.cjs +19 -29
- package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
- package/dist/data/test-runner/MatrixMarks.d.ts +4 -4
- package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
- package/dist/data/test-runner/MatrixMarks.js +19 -29
- package/dist/data/test-runner/MatrixMarks.js.map +1 -1
- package/dist/data/test-runner/TestAttemptDetail.cjs +1 -1
- package/dist/data/test-runner/TestAttemptDetail.js +1 -1
- package/dist/data/test-runner/TestDetailPanel.cjs +11 -0
- package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.js +11 -0
- package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
- package/dist/data/test-runner/TestFilterBar.cjs +3 -44
- package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
- package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
- package/dist/data/test-runner/TestFilterBar.js +3 -44
- package/dist/data/test-runner/TestFilterBar.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +3 -1
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +7 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +3 -1
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/context.cjs.map +1 -1
- package/dist/data/test-runner/context.d.ts +3 -0
- package/dist/data/test-runner/context.d.ts.map +1 -1
- package/dist/data/test-runner/context.js.map +1 -1
- package/dist/data/test-runner/types.d.ts +2 -0
- package/dist/data/test-runner/types.d.ts.map +1 -1
- package/dist/data/timeseries-query.cjs +98 -2
- package/dist/data/timeseries-query.cjs.map +1 -1
- package/dist/data/timeseries-query.d.ts +31 -5
- package/dist/data/timeseries-query.d.ts.map +1 -1
- package/dist/data/timeseries-query.js +98 -3
- package/dist/data/timeseries-query.js.map +1 -1
- package/dist/data/timeseries-stream-provider.cjs +38 -0
- package/dist/data/timeseries-stream-provider.cjs.map +1 -0
- package/dist/data/timeseries-stream-provider.d.ts +26 -0
- package/dist/data/timeseries-stream-provider.d.ts.map +1 -0
- package/dist/data/timeseries-stream-provider.js +38 -0
- package/dist/data/timeseries-stream-provider.js.map +1 -0
- package/dist/data/timeseries-stream.cjs +304 -0
- package/dist/data/timeseries-stream.cjs.map +1 -0
- package/dist/data/timeseries-stream.d.ts +81 -0
- package/dist/data/timeseries-stream.d.ts.map +1 -0
- package/dist/data/timeseries-stream.fixtures.d.ts +36 -0
- package/dist/data/timeseries-stream.fixtures.d.ts.map +1 -0
- package/dist/data/timeseries-stream.js +296 -0
- package/dist/data/timeseries-stream.js.map +1 -0
- package/dist/data/token-style.cjs +13 -0
- package/dist/data/token-style.cjs.map +1 -0
- package/dist/data/token-style.d.ts +4 -0
- package/dist/data/token-style.d.ts.map +1 -0
- package/dist/data/token-style.js +13 -0
- package/dist/data/token-style.js.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.cjs +1 -1
- package/dist/data/traces/ProcessTraceDetail.js +1 -1
- package/dist/data/traces/index.d.ts +8 -1
- package/dist/data/traces/index.d.ts.map +1 -1
- package/dist/data/traces/otel/OperationList.cjs +64 -0
- package/dist/data/traces/otel/OperationList.cjs.map +1 -0
- package/dist/data/traces/otel/OperationList.d.ts +10 -0
- package/dist/data/traces/otel/OperationList.d.ts.map +1 -0
- package/dist/data/traces/otel/OperationList.js +64 -0
- package/dist/data/traces/otel/OperationList.js.map +1 -0
- package/dist/data/traces/otel/OtelTraceDetail.cjs +781 -0
- package/dist/data/traces/otel/OtelTraceDetail.cjs.map +1 -0
- package/dist/data/traces/otel/OtelTraceDetail.d.ts +7 -0
- package/dist/data/traces/otel/OtelTraceDetail.d.ts.map +1 -0
- package/dist/data/traces/otel/OtelTraceDetail.js +781 -0
- package/dist/data/traces/otel/OtelTraceDetail.js.map +1 -0
- package/dist/data/traces/otel/OtelTraceSearch.cjs +145 -0
- package/dist/data/traces/otel/OtelTraceSearch.cjs.map +1 -0
- package/dist/data/traces/otel/OtelTraceSearch.d.ts +16 -0
- package/dist/data/traces/otel/OtelTraceSearch.d.ts.map +1 -0
- package/dist/data/traces/otel/OtelTraceSearch.js +145 -0
- package/dist/data/traces/otel/OtelTraceSearch.js.map +1 -0
- package/dist/data/traces/otel/OtelTraceTable.cjs +47 -0
- package/dist/data/traces/otel/OtelTraceTable.cjs.map +1 -0
- package/dist/data/traces/otel/OtelTraceTable.d.ts +12 -0
- package/dist/data/traces/otel/OtelTraceTable.d.ts.map +1 -0
- package/dist/data/traces/otel/OtelTraceTable.js +47 -0
- package/dist/data/traces/otel/OtelTraceTable.js.map +1 -0
- package/dist/data/traces/otel/QueryBar.cjs +158 -0
- package/dist/data/traces/otel/QueryBar.cjs.map +1 -0
- package/dist/data/traces/otel/QueryBar.d.ts +12 -0
- package/dist/data/traces/otel/QueryBar.d.ts.map +1 -0
- package/dist/data/traces/otel/QueryBar.js +158 -0
- package/dist/data/traces/otel/QueryBar.js.map +1 -0
- package/dist/data/traces/otel/SpanCards.cjs +264 -0
- package/dist/data/traces/otel/SpanCards.cjs.map +1 -0
- package/dist/data/traces/otel/SpanCards.d.ts +17 -0
- package/dist/data/traces/otel/SpanCards.d.ts.map +1 -0
- package/dist/data/traces/otel/SpanCards.js +261 -0
- package/dist/data/traces/otel/SpanCards.js.map +1 -0
- package/dist/data/traces/otel/SpanCategory.cjs +18 -0
- package/dist/data/traces/otel/SpanCategory.cjs.map +1 -0
- package/dist/data/traces/otel/SpanCategory.d.ts +7 -0
- package/dist/data/traces/otel/SpanCategory.d.ts.map +1 -0
- package/dist/data/traces/otel/SpanCategory.js +18 -0
- package/dist/data/traces/otel/SpanCategory.js.map +1 -0
- package/dist/data/traces/otel/TraceResults.cjs +195 -0
- package/dist/data/traces/otel/TraceResults.cjs.map +1 -0
- package/dist/data/traces/otel/TraceResults.d.ts +19 -0
- package/dist/data/traces/otel/TraceResults.d.ts.map +1 -0
- package/dist/data/traces/otel/TraceResults.js +193 -0
- package/dist/data/traces/otel/TraceResults.js.map +1 -0
- package/dist/data/traces/otel/api.cjs +36 -0
- package/dist/data/traces/otel/api.cjs.map +1 -0
- package/dist/data/traces/otel/api.d.ts +87 -0
- package/dist/data/traces/otel/api.d.ts.map +1 -0
- package/dist/data/traces/otel/api.js +33 -0
- package/dist/data/traces/otel/api.js.map +1 -0
- package/dist/data/traces/otel/fixtures.d.ts +4 -0
- package/dist/data/traces/otel/fixtures.d.ts.map +1 -0
- package/dist/data/traces/otel/metrics.cjs +7 -0
- package/dist/data/traces/otel/metrics.cjs.map +1 -0
- package/dist/data/traces/otel/metrics.d.ts +2 -0
- package/dist/data/traces/otel/metrics.d.ts.map +1 -0
- package/dist/data/traces/otel/metrics.js +7 -0
- package/dist/data/traces/otel/metrics.js.map +1 -0
- package/dist/data/traces/otel/model.cjs +167 -0
- package/dist/data/traces/otel/model.cjs.map +1 -0
- package/dist/data/traces/otel/model.d.ts +81 -0
- package/dist/data/traces/otel/model.d.ts.map +1 -0
- package/dist/data/traces/otel/model.js +154 -0
- package/dist/data/traces/otel/model.js.map +1 -0
- package/dist/data/traces/otel/query.cjs +90 -0
- package/dist/data/traces/otel/query.cjs.map +1 -0
- package/dist/data/traces/otel/query.d.ts +20 -0
- package/dist/data/traces/otel/query.d.ts.map +1 -0
- package/dist/data/traces/otel/query.js +86 -0
- package/dist/data/traces/otel/query.js.map +1 -0
- package/dist/data/traces/otel/result-model.cjs +25 -0
- package/dist/data/traces/otel/result-model.cjs.map +1 -0
- package/dist/data/traces/otel/result-model.d.ts +5 -0
- package/dist/data/traces/otel/result-model.d.ts.map +1 -0
- package/dist/data/traces/otel/result-model.js +24 -0
- package/dist/data/traces/otel/result-model.js.map +1 -0
- package/dist/data/traces/otel/source.cjs +11 -0
- package/dist/data/traces/otel/source.cjs.map +1 -0
- package/dist/data/traces/otel/source.d.ts +5 -0
- package/dist/data/traces/otel/source.d.ts.map +1 -0
- package/dist/data/traces/otel/source.js +10 -0
- package/dist/data/traces/otel/source.js.map +1 -0
- package/dist/data/traces/otel/span-traces.cjs +39 -0
- package/dist/data/traces/otel/span-traces.cjs.map +1 -0
- package/dist/data/traces/otel/span-traces.d.ts +3 -0
- package/dist/data/traces/otel/span-traces.d.ts.map +1 -0
- package/dist/data/traces/otel/span-traces.js +39 -0
- package/dist/data/traces/otel/span-traces.js.map +1 -0
- package/dist/data/use-data-table-virtual.d.ts +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data/workload-panel/MemoryStack.cjs +49 -0
- package/dist/data/workload-panel/MemoryStack.cjs.map +1 -0
- package/dist/data/workload-panel/MemoryStack.d.ts +11 -0
- package/dist/data/workload-panel/MemoryStack.d.ts.map +1 -0
- package/dist/data/workload-panel/MemoryStack.js +48 -0
- package/dist/data/workload-panel/MemoryStack.js.map +1 -0
- package/dist/data/workload-panel/Metrics.cjs +197 -0
- package/dist/data/workload-panel/Metrics.cjs.map +1 -0
- package/dist/data/workload-panel/Metrics.d.ts +11 -0
- package/dist/data/workload-panel/Metrics.d.ts.map +1 -0
- package/dist/data/workload-panel/Metrics.js +196 -0
- package/dist/data/workload-panel/Metrics.js.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.cjs +66 -0
- package/dist/data/workload-panel/WorkloadPanel.cjs.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.d.ts +3 -0
- package/dist/data/workload-panel/WorkloadPanel.d.ts.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.js +66 -0
- package/dist/data/workload-panel/WorkloadPanel.js.map +1 -0
- package/dist/data/workload-panel/fixtures.d.ts +60 -0
- package/dist/data/workload-panel/fixtures.d.ts.map +1 -0
- package/dist/data/workload-panel/model.cjs +137 -0
- package/dist/data/workload-panel/model.cjs.map +1 -0
- package/dist/data/workload-panel/model.d.ts +53 -0
- package/dist/data/workload-panel/model.d.ts.map +1 -0
- package/dist/data/workload-panel/model.js +133 -0
- package/dist/data/workload-panel/model.js.map +1 -0
- package/dist/data/workload-panel/types.d.ts +56 -0
- package/dist/data/workload-panel/types.d.ts.map +1 -0
- package/dist/data.cjs +68 -6
- package/dist/data.d.ts +9 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +32 -10
- package/dist/file-findings/AnnotatedCode.cjs +243 -0
- package/dist/file-findings/AnnotatedCode.cjs.map +1 -0
- package/dist/file-findings/AnnotatedCode.d.ts +30 -0
- package/dist/file-findings/AnnotatedCode.d.ts.map +1 -0
- package/dist/file-findings/AnnotatedCode.js +243 -0
- package/dist/file-findings/AnnotatedCode.js.map +1 -0
- package/dist/file-findings/FileFindingsView.cjs +213 -0
- package/dist/file-findings/FileFindingsView.cjs.map +1 -0
- package/dist/file-findings/FileFindingsView.d.ts +35 -0
- package/dist/file-findings/FileFindingsView.d.ts.map +1 -0
- package/dist/file-findings/FileFindingsView.js +213 -0
- package/dist/file-findings/FileFindingsView.js.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.cjs +22 -0
- package/dist/file-findings/LazyAnnotatedCode.cjs.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.d.ts +5 -0
- package/dist/file-findings/LazyAnnotatedCode.d.ts.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.js +22 -0
- package/dist/file-findings/LazyAnnotatedCode.js.map +1 -0
- package/dist/file-findings/adapters.cjs +155 -0
- package/dist/file-findings/adapters.cjs.map +1 -0
- package/dist/file-findings/adapters.d.ts +24 -0
- package/dist/file-findings/adapters.d.ts.map +1 -0
- package/dist/file-findings/adapters.js +153 -0
- package/dist/file-findings/adapters.js.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.cjs +97 -0
- package/dist/file-findings/file-review/CommentDraft.cjs.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.d.ts +25 -0
- package/dist/file-findings/file-review/CommentDraft.d.ts.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.js +97 -0
- package/dist/file-findings/file-review/CommentDraft.js.map +1 -0
- package/dist/file-findings/file-review/FileReview.cjs +863 -0
- package/dist/file-findings/file-review/FileReview.cjs.map +1 -0
- package/dist/file-findings/file-review/FileReview.d.ts +79 -0
- package/dist/file-findings/file-review/FileReview.d.ts.map +1 -0
- package/dist/file-findings/file-review/FileReview.fixtures.d.ts +25 -0
- package/dist/file-findings/file-review/FileReview.fixtures.d.ts.map +1 -0
- package/dist/file-findings/file-review/FileReview.js +863 -0
- package/dist/file-findings/file-review/FileReview.js.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.cjs +77 -0
- package/dist/file-findings/file-review/InlineAuthors.cjs.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.d.ts +9 -0
- package/dist/file-findings/file-review/InlineAuthors.d.ts.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.js +77 -0
- package/dist/file-findings/file-review/InlineAuthors.js.map +1 -0
- package/dist/file-findings/file-review/InlineThread.cjs +77 -0
- package/dist/file-findings/file-review/InlineThread.cjs.map +1 -0
- package/dist/file-findings/file-review/InlineThread.d.ts +27 -0
- package/dist/file-findings/file-review/InlineThread.d.ts.map +1 -0
- package/dist/file-findings/file-review/InlineThread.js +77 -0
- package/dist/file-findings/file-review/InlineThread.js.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.cjs +164 -0
- package/dist/file-findings/file-review/ProblemsList.cjs.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.d.ts +15 -0
- package/dist/file-findings/file-review/ProblemsList.d.ts.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.js +164 -0
- package/dist/file-findings/file-review/ProblemsList.js.map +1 -0
- package/dist/file-findings/file-review/SourceView.cjs +179 -0
- package/dist/file-findings/file-review/SourceView.cjs.map +1 -0
- package/dist/file-findings/file-review/SourceView.d.ts +29 -0
- package/dist/file-findings/file-review/SourceView.d.ts.map +1 -0
- package/dist/file-findings/file-review/SourceView.js +179 -0
- package/dist/file-findings/file-review/SourceView.js.map +1 -0
- package/dist/file-findings/file-review/blame.cjs +35 -0
- package/dist/file-findings/file-review/blame.cjs.map +1 -0
- package/dist/file-findings/file-review/blame.d.ts +28 -0
- package/dist/file-findings/file-review/blame.d.ts.map +1 -0
- package/dist/file-findings/file-review/blame.js +33 -0
- package/dist/file-findings/file-review/blame.js.map +1 -0
- package/dist/file-findings/file-review/geometry.cjs +101 -0
- package/dist/file-findings/file-review/geometry.cjs.map +1 -0
- package/dist/file-findings/file-review/geometry.d.ts +45 -0
- package/dist/file-findings/file-review/geometry.d.ts.map +1 -0
- package/dist/file-findings/file-review/geometry.js +98 -0
- package/dist/file-findings/file-review/geometry.js.map +1 -0
- package/dist/file-findings/file-review/hooks.cjs +101 -0
- package/dist/file-findings/file-review/hooks.cjs.map +1 -0
- package/dist/file-findings/file-review/hooks.d.ts +22 -0
- package/dist/file-findings/file-review/hooks.d.ts.map +1 -0
- package/dist/file-findings/file-review/hooks.js +99 -0
- package/dist/file-findings/file-review/hooks.js.map +1 -0
- package/dist/file-findings/file-review/marks.cjs +52 -0
- package/dist/file-findings/file-review/marks.cjs.map +1 -0
- package/dist/file-findings/file-review/marks.d.ts +23 -0
- package/dist/file-findings/file-review/marks.d.ts.map +1 -0
- package/dist/file-findings/file-review/marks.js +47 -0
- package/dist/file-findings/file-review/marks.js.map +1 -0
- package/dist/file-findings/file-review/problem-filters.cjs +14 -0
- package/dist/file-findings/file-review/problem-filters.cjs.map +1 -0
- package/dist/file-findings/file-review/problem-filters.d.ts +10 -0
- package/dist/file-findings/file-review/problem-filters.d.ts.map +1 -0
- package/dist/file-findings/file-review/problem-filters.js +13 -0
- package/dist/file-findings/file-review/problem-filters.js.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.cjs +234 -0
- package/dist/file-findings/file-review/quote-anchor.cjs.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.d.ts +54 -0
- package/dist/file-findings/file-review/quote-anchor.d.ts.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.js +226 -0
- package/dist/file-findings/file-review/quote-anchor.js.map +1 -0
- package/dist/file-findings/file-review/source-anchor.cjs +104 -0
- package/dist/file-findings/file-review/source-anchor.cjs.map +1 -0
- package/dist/file-findings/file-review/source-anchor.d.ts +27 -0
- package/dist/file-findings/file-review/source-anchor.d.ts.map +1 -0
- package/dist/file-findings/file-review/source-anchor.js +99 -0
- package/dist/file-findings/file-review/source-anchor.js.map +1 -0
- package/dist/file-findings/file-review/source-marks.cjs +71 -0
- package/dist/file-findings/file-review/source-marks.cjs.map +1 -0
- package/dist/file-findings/file-review/source-marks.d.ts +27 -0
- package/dist/file-findings/file-review/source-marks.d.ts.map +1 -0
- package/dist/file-findings/file-review/source-marks.js +68 -0
- package/dist/file-findings/file-review/source-marks.js.map +1 -0
- package/dist/file-findings/findings-comments.cjs +136 -0
- package/dist/file-findings/findings-comments.cjs.map +1 -0
- package/dist/file-findings/findings-comments.d.ts +28 -0
- package/dist/file-findings/findings-comments.d.ts.map +1 -0
- package/dist/file-findings/findings-comments.js +131 -0
- package/dist/file-findings/findings-comments.js.map +1 -0
- package/dist/file-findings/findings-languages.cjs +53 -0
- package/dist/file-findings/findings-languages.cjs.map +1 -0
- package/dist/file-findings/findings-languages.d.ts +11 -0
- package/dist/file-findings/findings-languages.d.ts.map +1 -0
- package/dist/file-findings/findings-languages.js +53 -0
- package/dist/file-findings/findings-languages.js.map +1 -0
- package/dist/file-findings/mdx-source.cjs +48 -0
- package/dist/file-findings/mdx-source.cjs.map +1 -0
- package/dist/file-findings/mdx-source.d.ts +7 -0
- package/dist/file-findings/mdx-source.d.ts.map +1 -0
- package/dist/file-findings/mdx-source.js +48 -0
- package/dist/file-findings/mdx-source.js.map +1 -0
- package/dist/file-findings/monaco-language.cjs +73 -0
- package/dist/file-findings/monaco-language.cjs.map +1 -0
- package/dist/file-findings/monaco-language.d.ts +11 -0
- package/dist/file-findings/monaco-language.d.ts.map +1 -0
- package/dist/file-findings/monaco-language.js +72 -0
- package/dist/file-findings/monaco-language.js.map +1 -0
- package/dist/file-findings/severity-counts.cjs +20 -0
- package/dist/file-findings/severity-counts.cjs.map +1 -0
- package/dist/file-findings/severity-counts.d.ts +5 -0
- package/dist/file-findings/severity-counts.d.ts.map +1 -0
- package/dist/file-findings/severity-counts.js +19 -0
- package/dist/file-findings/severity-counts.js.map +1 -0
- package/dist/file-findings/types.cjs +12 -0
- package/dist/file-findings/types.cjs.map +1 -0
- package/dist/file-findings/types.d.ts +43 -0
- package/dist/file-findings/types.d.ts.map +1 -0
- package/dist/file-findings/types.js +11 -0
- package/dist/file-findings/types.js.map +1 -0
- package/dist/file-findings.cjs +47 -0
- package/dist/file-findings.d.ts +15 -0
- package/dist/file-findings.d.ts.map +1 -0
- package/dist/file-findings.js +15 -0
- package/dist/hooks/event-hub.cjs +22 -8
- package/dist/hooks/event-hub.cjs.map +1 -1
- package/dist/hooks/event-hub.d.ts.map +1 -1
- package/dist/hooks/event-hub.js +22 -8
- package/dist/hooks/event-hub.js.map +1 -1
- package/dist/icons/components/UiBrowser.cjs +51 -0
- package/dist/icons/components/UiBrowser.cjs.map +1 -0
- package/dist/icons/components/UiBrowser.d.ts +15 -0
- package/dist/icons/components/UiBrowser.d.ts.map +1 -0
- package/dist/icons/components/UiBrowser.js +48 -0
- package/dist/icons/components/UiBrowser.js.map +1 -0
- package/dist/icons/components/UiCreditCard.cjs +51 -0
- package/dist/icons/components/UiCreditCard.cjs.map +1 -0
- package/dist/icons/components/UiCreditCard.d.ts +15 -0
- package/dist/icons/components/UiCreditCard.d.ts.map +1 -0
- package/dist/icons/components/UiCreditCard.js +48 -0
- package/dist/icons/components/UiCreditCard.js.map +1 -0
- package/dist/icons/components/UiShoppingCart.cjs +51 -0
- package/dist/icons/components/UiShoppingCart.cjs.map +1 -0
- package/dist/icons/components/UiShoppingCart.d.ts +15 -0
- package/dist/icons/components/UiShoppingCart.d.ts.map +1 -0
- package/dist/icons/components/UiShoppingCart.js +48 -0
- package/dist/icons/components/UiShoppingCart.js.map +1 -0
- package/dist/icons/index.d.ts +6 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +6 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +6 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +9 -0
- package/dist/icons.js +4 -1
- package/dist/index.cjs +86 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -12
- package/dist/layout/AppShell.cjs +37 -21
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +13 -2
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +37 -21
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +7 -6
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +7 -6
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/layout/SplitPane.cjs +16 -6
- package/dist/layout/SplitPane.cjs.map +1 -1
- package/dist/layout/SplitPane.d.ts +12 -2
- package/dist/layout/SplitPane.d.ts.map +1 -1
- package/dist/layout/SplitPane.js +16 -6
- package/dist/layout/SplitPane.js.map +1 -1
- package/dist/layout/Workspace.cjs +37 -33
- package/dist/layout/Workspace.cjs.map +1 -1
- package/dist/layout/Workspace.d.ts.map +1 -1
- package/dist/layout/Workspace.js +37 -33
- package/dist/layout/Workspace.js.map +1 -1
- package/dist/layout/Workspace.regions.cjs +3 -3
- package/dist/layout/Workspace.regions.cjs.map +1 -1
- package/dist/layout/Workspace.regions.js +3 -3
- package/dist/layout/Workspace.regions.js.map +1 -1
- package/dist/lib/breakpoints.cjs +102 -0
- package/dist/lib/breakpoints.cjs.map +1 -0
- package/dist/lib/breakpoints.d.ts +36 -0
- package/dist/lib/breakpoints.d.ts.map +1 -0
- package/dist/lib/breakpoints.js +99 -0
- package/dist/lib/breakpoints.js.map +1 -0
- package/dist/lib/combobox.cjs +2 -1
- package/dist/lib/combobox.cjs.map +1 -1
- package/dist/lib/combobox.d.ts +1 -1
- package/dist/lib/combobox.d.ts.map +1 -1
- package/dist/lib/combobox.js +2 -1
- package/dist/lib/combobox.js.map +1 -1
- package/dist/lib/path-tree.cjs +21 -0
- package/dist/lib/path-tree.cjs.map +1 -1
- package/dist/lib/path-tree.d.ts +15 -0
- package/dist/lib/path-tree.d.ts.map +1 -1
- package/dist/lib/path-tree.js +21 -1
- package/dist/lib/path-tree.js.map +1 -1
- package/dist/overlay/Modal.cjs +2 -1
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +2 -1
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/dropdownMenuContext.d.ts +1 -1
- package/dist/profiles/editor/profileEditor.cjs +1 -1
- package/dist/profiles/editor/profileEditor.cjs.map +1 -1
- package/dist/profiles/editor/profileEditor.js +1 -1
- package/dist/profiles/editor/profileEditor.js.map +1 -1
- package/dist/profiles/editor/profileEditorSections.cjs +6 -2
- package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
- package/dist/profiles/editor/profileEditorSections.d.ts.map +1 -1
- package/dist/profiles/editor/profileEditorSections.js +6 -2
- package/dist/profiles/editor/profileEditorSections.js.map +1 -1
- package/dist/profiles/query/prometheusResults.cjs +24 -36
- package/dist/profiles/query/prometheusResults.cjs.map +1 -1
- package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
- package/dist/profiles/query/prometheusResults.js +24 -36
- package/dist/profiles/query/prometheusResults.js.map +1 -1
- package/dist/rpc/CommandForm.cjs +1 -1
- package/dist/rpc/CommandForm.cjs.map +1 -1
- package/dist/rpc/CommandForm.js +1 -1
- package/dist/rpc/CommandForm.js.map +1 -1
- package/dist/rpc/classify.cjs +1 -1
- package/dist/rpc/classify.cjs.map +1 -1
- package/dist/rpc/classify.d.ts.map +1 -1
- package/dist/rpc/classify.js +1 -1
- package/dist/rpc/classify.js.map +1 -1
- package/dist/rpc/useOperations.d.ts +24 -24
- package/dist/rpc.cjs +0 -2
- package/dist/rpc.d.ts +0 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +1 -2
- package/dist/styles.css +1 -1
- package/dist/utils.cjs +6 -0
- package/dist/utils.d.ts +2 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -2
- package/package.json +9 -3
- package/schemas/json-schema-form.schema.json +9 -1
|
@@ -2,13 +2,15 @@ const require_utils = require("../lib/utils.cjs");
|
|
|
2
2
|
const require_color = require("../lib/color.cjs");
|
|
3
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
4
|
// src/data/ProgressBar.tsx
|
|
5
|
-
function ProgressBar({ segments, total, height = "h-2", className }) {
|
|
5
|
+
function ProgressBar({ segments, total, label, formatValue = String, height = "h-2", className }) {
|
|
6
6
|
if (total === 0) return null;
|
|
7
|
-
const tooltip = segments.filter((s) => s.count > 0).map((s) => `${s.count} ${s.label}`).join(", ");
|
|
7
|
+
const tooltip = segments.filter((s) => s.count > 0).map((s) => `${formatValue(s.count)} ${s.label}`).join(", ");
|
|
8
8
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
9
9
|
className: require_utils.cn("w-full bg-muted rounded-full flex overflow-hidden", height, className),
|
|
10
10
|
title: tooltip,
|
|
11
11
|
role: "progressbar",
|
|
12
|
+
"aria-label": label,
|
|
13
|
+
"aria-valuetext": `${formatValue(segments.reduce((acc, s) => acc + s.count, 0))} of ${formatValue(total)}. ${tooltip}`,
|
|
12
14
|
"aria-valuemin": 0,
|
|
13
15
|
"aria-valuemax": total,
|
|
14
16
|
"aria-valuenow": segments.reduce((acc, s) => acc + s.count, 0),
|
|
@@ -22,7 +24,7 @@ function ProgressBar({ segments, total, height = "h-2", className }) {
|
|
|
22
24
|
width: `${pct}%`,
|
|
23
25
|
...asClass ? {} : { backgroundColor: seg.color }
|
|
24
26
|
},
|
|
25
|
-
title: `${seg.count} ${seg.label}`
|
|
27
|
+
title: `${formatValue(seg.count)} ${seg.label}`
|
|
26
28
|
}, i);
|
|
27
29
|
})
|
|
28
30
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressBar.cjs","names":["cn","isTailwindColorClass"],"sources":["../../src/data/ProgressBar.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { isTailwindColorClass } from \"../lib/color\";\n\nexport type ProgressSegment = {\n /** Numeric amount represented by this segment. */\n count: number;\n /** Segment fill: a Tailwind bg class (e.g. \"bg-green-500\") or a CSS color value. */\n color: string;\n /** Label used in the tooltip. */\n label: string;\n};\n\nexport type ProgressBarProps = {\n /** Segments rendered in order from left to right. */\n segments: ProgressSegment[];\n /** Total value used to calculate segment percentages. */\n total: number;\n /** Height utility class, e.g. `h-2`. */\n height?: string;\n /** Classes applied to the progressbar root. */\n className?: string;\n};\n\nexport function ProgressBar({
|
|
1
|
+
{"version":3,"file":"ProgressBar.cjs","names":["cn","isTailwindColorClass"],"sources":["../../src/data/ProgressBar.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { isTailwindColorClass } from \"../lib/color\";\n\nexport type ProgressSegment = {\n /** Numeric amount represented by this segment. */\n count: number;\n /** Segment fill: a Tailwind bg class (e.g. \"bg-green-500\") or a CSS color value. */\n color: string;\n /** Label used in the tooltip. */\n label: string;\n};\n\nexport type ProgressBarProps = {\n /** Segments rendered in order from left to right. */\n segments: ProgressSegment[];\n /** Total value used to calculate segment percentages. */\n total: number;\n /** Accessible name for the measured resource. */\n label?: string;\n /** Formats amounts in tooltips and the accessible summary, e.g. bytes or durations. */\n formatValue?: (value: number) => string;\n /** Height utility class, e.g. `h-2`. */\n height?: string;\n /** Classes applied to the progressbar root. */\n className?: string;\n};\n\nexport function ProgressBar({\n segments,\n total,\n label,\n formatValue = String,\n height = \"h-2\",\n className,\n}: ProgressBarProps) {\n if (total === 0) return null;\n\n const tooltip = segments\n .filter((s) => s.count > 0)\n .map((s) => `${formatValue(s.count)} ${s.label}`)\n .join(\", \");\n\n return (\n <div\n className={cn(\n \"w-full bg-muted rounded-full flex overflow-hidden\",\n height,\n className,\n )}\n title={tooltip}\n role=\"progressbar\"\n aria-label={label}\n aria-valuetext={`${formatValue(segments.reduce((acc, s) => acc + s.count, 0))} of ${formatValue(total)}. ${tooltip}`}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={segments.reduce((acc, s) => acc + s.count, 0)}\n >\n {segments.map((seg, i) => {\n if (seg.count === 0) return null;\n const pct = (seg.count / total) * 100;\n const asClass = isTailwindColorClass(seg.color);\n return (\n <div\n key={i}\n className={cn(\n asClass ? seg.color : undefined,\n height,\n \"transition-all duration-300\",\n )}\n style={{\n width: `${pct}%`,\n ...(asClass ? {} : { backgroundColor: seg.color }),\n }}\n title={`${formatValue(seg.count)} ${seg.label}`}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;AA2BA,SAAgB,YAAY,EAC1B,UACA,OACA,OACA,cAAc,QACd,SAAS,OACT,aACmB;CACnB,IAAI,UAAU,GAAG,OAAO;CAExB,MAAM,UAAU,SACb,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,CAC1B,KAAK,MAAM,GAAG,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAChD,KAAK,IAAI;CAEZ,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,WAAWA,cAAAA,GACT,qDACA,QACA,SACF;EACA,OAAO;EACP,MAAK;EACL,cAAY;EACZ,kBAAgB,GAAG,YAAY,SAAS,QAAQ,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,YAAY,KAAK,EAAE,IAAI;EAC3G,iBAAe;EACf,iBAAe;EACf,iBAAe,SAAS,QAAQ,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC;EAE1D,UAAA,SAAS,KAAK,KAAK,MAAM;GACxB,IAAI,IAAI,UAAU,GAAG,OAAO;GAC5B,MAAM,MAAO,IAAI,QAAQ,QAAS;GAClC,MAAM,UAAUC,cAAAA,qBAAqB,IAAI,KAAK;GAC9C,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAEE,WAAWD,cAAAA,GACT,UAAU,IAAI,QAAQ,KAAA,GACtB,QACA,6BACF;IACA,OAAO;KACL,OAAO,GAAG,IAAI;KACd,GAAI,UAAU,CAAC,IAAI,EAAE,iBAAiB,IAAI,MAAM;IAClD;IACA,OAAO,GAAG,YAAY,IAAI,KAAK,EAAE,GAAG,IAAI;GACzC,GAXM,CAWN;EAEL,CAAC;CACE,CAAA;AAET"}
|
|
@@ -11,10 +11,14 @@ export type ProgressBarProps = {
|
|
|
11
11
|
segments: ProgressSegment[];
|
|
12
12
|
/** Total value used to calculate segment percentages. */
|
|
13
13
|
total: number;
|
|
14
|
+
/** Accessible name for the measured resource. */
|
|
15
|
+
label?: string;
|
|
16
|
+
/** Formats amounts in tooltips and the accessible summary, e.g. bytes or durations. */
|
|
17
|
+
formatValue?: (value: number) => string;
|
|
14
18
|
/** Height utility class, e.g. `h-2`. */
|
|
15
19
|
height?: string;
|
|
16
20
|
/** Classes applied to the progressbar root. */
|
|
17
21
|
className?: string;
|
|
18
22
|
};
|
|
19
|
-
export declare function ProgressBar({ segments, total, height, className }: ProgressBarProps): import("react").JSX.Element | null;
|
|
23
|
+
export declare function ProgressBar({ segments, total, label, formatValue, height, className, }: ProgressBarProps): import("react").JSX.Element | null;
|
|
20
24
|
//# sourceMappingURL=ProgressBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../src/data/ProgressBar.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,eAAe,GAAG;IAC5B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qDAAqD;IACrD,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../src/data/ProgressBar.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,eAAe,GAAG;IAC5B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qDAAqD;IACrD,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,KAAK,EACL,KAAK,EACL,WAAoB,EACpB,MAAc,EACd,SAAS,GACV,EAAE,gBAAgB,sCA6ClB"}
|
package/dist/data/ProgressBar.js
CHANGED
|
@@ -2,13 +2,15 @@ import { cn } from "../lib/utils.js";
|
|
|
2
2
|
import { isTailwindColorClass } from "../lib/color.js";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
// src/data/ProgressBar.tsx
|
|
5
|
-
function ProgressBar({ segments, total, height = "h-2", className }) {
|
|
5
|
+
function ProgressBar({ segments, total, label, formatValue = String, height = "h-2", className }) {
|
|
6
6
|
if (total === 0) return null;
|
|
7
|
-
const tooltip = segments.filter((s) => s.count > 0).map((s) => `${s.count} ${s.label}`).join(", ");
|
|
7
|
+
const tooltip = segments.filter((s) => s.count > 0).map((s) => `${formatValue(s.count)} ${s.label}`).join(", ");
|
|
8
8
|
return /* @__PURE__ */ jsx("div", {
|
|
9
9
|
className: cn("w-full bg-muted rounded-full flex overflow-hidden", height, className),
|
|
10
10
|
title: tooltip,
|
|
11
11
|
role: "progressbar",
|
|
12
|
+
"aria-label": label,
|
|
13
|
+
"aria-valuetext": `${formatValue(segments.reduce((acc, s) => acc + s.count, 0))} of ${formatValue(total)}. ${tooltip}`,
|
|
12
14
|
"aria-valuemin": 0,
|
|
13
15
|
"aria-valuemax": total,
|
|
14
16
|
"aria-valuenow": segments.reduce((acc, s) => acc + s.count, 0),
|
|
@@ -22,7 +24,7 @@ function ProgressBar({ segments, total, height = "h-2", className }) {
|
|
|
22
24
|
width: `${pct}%`,
|
|
23
25
|
...asClass ? {} : { backgroundColor: seg.color }
|
|
24
26
|
},
|
|
25
|
-
title: `${seg.count} ${seg.label}`
|
|
27
|
+
title: `${formatValue(seg.count)} ${seg.label}`
|
|
26
28
|
}, i);
|
|
27
29
|
})
|
|
28
30
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressBar.js","names":[],"sources":["../../src/data/ProgressBar.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { isTailwindColorClass } from \"../lib/color\";\n\nexport type ProgressSegment = {\n /** Numeric amount represented by this segment. */\n count: number;\n /** Segment fill: a Tailwind bg class (e.g. \"bg-green-500\") or a CSS color value. */\n color: string;\n /** Label used in the tooltip. */\n label: string;\n};\n\nexport type ProgressBarProps = {\n /** Segments rendered in order from left to right. */\n segments: ProgressSegment[];\n /** Total value used to calculate segment percentages. */\n total: number;\n /** Height utility class, e.g. `h-2`. */\n height?: string;\n /** Classes applied to the progressbar root. */\n className?: string;\n};\n\nexport function ProgressBar({
|
|
1
|
+
{"version":3,"file":"ProgressBar.js","names":[],"sources":["../../src/data/ProgressBar.tsx"],"sourcesContent":["import { cn } from \"../lib/utils\";\nimport { isTailwindColorClass } from \"../lib/color\";\n\nexport type ProgressSegment = {\n /** Numeric amount represented by this segment. */\n count: number;\n /** Segment fill: a Tailwind bg class (e.g. \"bg-green-500\") or a CSS color value. */\n color: string;\n /** Label used in the tooltip. */\n label: string;\n};\n\nexport type ProgressBarProps = {\n /** Segments rendered in order from left to right. */\n segments: ProgressSegment[];\n /** Total value used to calculate segment percentages. */\n total: number;\n /** Accessible name for the measured resource. */\n label?: string;\n /** Formats amounts in tooltips and the accessible summary, e.g. bytes or durations. */\n formatValue?: (value: number) => string;\n /** Height utility class, e.g. `h-2`. */\n height?: string;\n /** Classes applied to the progressbar root. */\n className?: string;\n};\n\nexport function ProgressBar({\n segments,\n total,\n label,\n formatValue = String,\n height = \"h-2\",\n className,\n}: ProgressBarProps) {\n if (total === 0) return null;\n\n const tooltip = segments\n .filter((s) => s.count > 0)\n .map((s) => `${formatValue(s.count)} ${s.label}`)\n .join(\", \");\n\n return (\n <div\n className={cn(\n \"w-full bg-muted rounded-full flex overflow-hidden\",\n height,\n className,\n )}\n title={tooltip}\n role=\"progressbar\"\n aria-label={label}\n aria-valuetext={`${formatValue(segments.reduce((acc, s) => acc + s.count, 0))} of ${formatValue(total)}. ${tooltip}`}\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={segments.reduce((acc, s) => acc + s.count, 0)}\n >\n {segments.map((seg, i) => {\n if (seg.count === 0) return null;\n const pct = (seg.count / total) * 100;\n const asClass = isTailwindColorClass(seg.color);\n return (\n <div\n key={i}\n className={cn(\n asClass ? seg.color : undefined,\n height,\n \"transition-all duration-300\",\n )}\n style={{\n width: `${pct}%`,\n ...(asClass ? {} : { backgroundColor: seg.color }),\n }}\n title={`${formatValue(seg.count)} ${seg.label}`}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;AA2BA,SAAgB,YAAY,EAC1B,UACA,OACA,OACA,cAAc,QACd,SAAS,OACT,aACmB;CACnB,IAAI,UAAU,GAAG,OAAO;CAExB,MAAM,UAAU,SACb,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,CAC1B,KAAK,MAAM,GAAG,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAChD,KAAK,IAAI;CAEZ,OACE,oBAAC,OAAD;EACE,WAAW,GACT,qDACA,QACA,SACF;EACA,OAAO;EACP,MAAK;EACL,cAAY;EACZ,kBAAgB,GAAG,YAAY,SAAS,QAAQ,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,YAAY,KAAK,EAAE,IAAI;EAC3G,iBAAe;EACf,iBAAe;EACf,iBAAe,SAAS,QAAQ,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC;EAE1D,UAAA,SAAS,KAAK,KAAK,MAAM;GACxB,IAAI,IAAI,UAAU,GAAG,OAAO;GAC5B,MAAM,MAAO,IAAI,QAAQ,QAAS;GAClC,MAAM,UAAU,qBAAqB,IAAI,KAAK;GAC9C,OACE,oBAAC,OAAD;IAEE,WAAW,GACT,UAAU,IAAI,QAAQ,KAAA,GACtB,QACA,6BACF;IACA,OAAO;KACL,OAAO,GAAG,IAAI;KACd,GAAI,UAAU,CAAC,IAAI,EAAE,iBAAiB,IAAI,MAAM;IAClD;IACA,OAAO,GAAG,YAAY,IAAI,KAAK,EAAE,GAAG,IAAI;GACzC,GAXM,CAWN;EAEL,CAAC;CACE,CAAA;AAET"}
|
|
@@ -35,7 +35,7 @@ function defaultFormatUnits(units) {
|
|
|
35
35
|
* <capacity>" caption sits below with the icon+title. It is purely presentational
|
|
36
36
|
* — pass plain `usage`/`max` numbers (TimeseriesCoreBars wraps it with live data).
|
|
37
37
|
*/
|
|
38
|
-
function ProgressBars({ usage, max, unit, title, icon, thresholds = [75, 90], variant = "default", showLabel = true, showValue = true, showCapacity = false, orientation, stats, hoverCard = true, hoverFooter, className }) {
|
|
38
|
+
function ProgressBars({ usage, max, unit, title, icon, thresholds = [75, 90], variant = "default", showLabel = true, showValue = true, showCapacity = false, orientation, stats, hoverCard = true, hoverFooter, error = null, className }) {
|
|
39
39
|
const perBar = unit?.perBar ?? 1e3;
|
|
40
40
|
const unitLabel = unit?.label ?? "cores";
|
|
41
41
|
const barLabel = unit?.barLabel ?? "core";
|
|
@@ -46,11 +46,15 @@ function ProgressBars({ usage, max, unit, title, icon, thresholds = [75, 90], va
|
|
|
46
46
|
const capacityText = model.limitUnits !== void 0 ? formatUnits(model.limitUnits) : "?";
|
|
47
47
|
const caption = !model.hasUsage ? "—" : showCapacity ? `${usageText} / ${capacityText} ${unitLabel}` : `${usageText} ${unitLabel}`;
|
|
48
48
|
const compactCaption = !model.hasUsage ? "—" : showCapacity ? `${usageText}/${capacityText} ${unitLabel}` : `${usageText} ${unitLabel}`;
|
|
49
|
-
const titleText = `${title}: ${compactCaption}`;
|
|
49
|
+
const titleText = `${title}: ${error ? error.message : compactCaption}`;
|
|
50
50
|
const isCell = variant === "cell";
|
|
51
51
|
const pctTone = model.limitUnits === void 0 ? void 0 : model.pct >= thresholds[1] ? "text-red-500" : model.pct >= thresholds[0] ? "text-amber-500" : "text-emerald-500";
|
|
52
52
|
const fmt = (n) => `${formatUnits(n)} ${unitLabel}`;
|
|
53
|
-
const hoverRows =
|
|
53
|
+
const hoverRows = error ? [{
|
|
54
|
+
label: "Error",
|
|
55
|
+
value: error.message,
|
|
56
|
+
tone: "text-red-500"
|
|
57
|
+
}] : model.hasUsage ? [
|
|
54
58
|
{
|
|
55
59
|
label: "Current",
|
|
56
60
|
value: fmt(model.usageUnits),
|
|
@@ -105,10 +109,14 @@ function ProgressBars({ usage, max, unit, title, icon, thresholds = [75, 90], va
|
|
|
105
109
|
}, i);
|
|
106
110
|
})
|
|
107
111
|
});
|
|
108
|
-
const valueNode = showValue ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
112
|
+
const valueNode = !showValue ? null : error ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
113
|
+
className: require_utils.cn("min-w-0 max-w-full truncate text-red-500", isCell ? null : "text-xs"),
|
|
114
|
+
title: error.message,
|
|
115
|
+
children: error.message
|
|
116
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
109
117
|
className: require_utils.cn("shrink-0 font-semibold tabular-nums text-foreground", isCell ? null : "text-xs"),
|
|
110
118
|
children: valueText
|
|
111
|
-
})
|
|
119
|
+
});
|
|
112
120
|
const label = icon || showLabel ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
113
121
|
className: require_utils.cn("inline-flex min-w-0 items-center gap-1 text-xs text-muted-foreground"),
|
|
114
122
|
children: [icon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProgressBarsIcon, { icon }) : null, showLabel ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressBars.cjs","names":["Icon","deriveProgressBars","cn","GaugeHoverCard"],"sources":["../../src/data/ProgressBars.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { deriveProgressBars } from \"./ProgressBars.model\";\nimport { GaugeHoverCard, type GaugeHoverRow } from \"./GaugeHoverCard\";\n\nexport type ProgressBarsVariant = \"default\" | \"cell\";\nexport type ProgressBarsOrientation = \"horizontal\" | \"vertical\";\n\n/**\n * Describes what one bar represents, letting the same component render CPU cores,\n * memory gigabytes, or any other quantised capacity. Defaults model CPU cores.\n */\nexport interface ProgressBarsUnit {\n /** Raw value that fills one bar, in the domain of `usage`/`max`. Default 1000 (millicores → 1 core). */\n perBar?: number;\n /** Caption/tooltip suffix naming the unit, plural. Default \"cores\". */\n label?: string;\n /** Per-bar hover tooltip noun, singular. Default \"core\". */\n barLabel?: string;\n /** Format a bar-unit count for the caption. Default: integers as-is, else 1 decimal. */\n format?: (units: number) => string;\n}\n\n/** Summary statistics for the hover card, in the same domain as `usage`/`max`. */\nexport interface ProgressBarsStats {\n /** Smallest value over the window. */\n min: number;\n /** Largest value over the window. */\n max: number;\n /** Mean value over the window. */\n avg: number;\n}\n\nexport interface ProgressBarsProps {\n /** Usage that fills the bars, in the raw domain (e.g. CPU millicores). */\n usage: number | undefined;\n /**\n * The capacity, in the same raw domain as `usage`. Determines the number of\n * bars (one per `unit.perBar`). When omitted or 0, the bar count falls back to\n * the ceiling of the usage so an unbounded reading still renders.\n */\n max?: number;\n /** What one bar represents. Defaults to CPU cores (perBar 1000, label \"cores\"). */\n unit?: ProgressBarsUnit;\n title: string;\n /** Iconify name or static icon component shown beside the label. */\n icon?: string | StaticIconComponent;\n /**\n * Utilisation thresholds (percent of capacity) at which the fill turns amber\n * then red. Defaults to [75, 90].\n */\n thresholds?: [warning: number, danger: number];\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: ProgressBarsVariant;\n /** Show the title text. Icons and values remain visible unless separately hidden. */\n showLabel?: boolean;\n /** Show the value/capacity caption. Icons and bars remain visible when false. */\n showValue?: boolean;\n /**\n * Include the capacity in the caption (\"2.3 / 4 cores\"). Defaults to false — the\n * caption shows only the current value (\"2.3 cores\") since the bars already\n * convey capacity. Set true to append the \"/ <capacity>\".\n */\n showCapacity?: boolean;\n /** Bar direction. Vertical bars fill bottom-up; horizontal bars fill left-to-right. */\n orientation?: ProgressBarsOrientation;\n /**\n * Summary stats for the hover card's Min/Max/Avg rows, in the SAME raw domain as\n * `usage`/`max` (NOT divided by perBar). Pass null to omit those rows.\n */\n stats?: ProgressBarsStats | null;\n /**\n * Wrap the bars in a hover card summarising the metric (label + current / min /\n * max / avg / capacity). Defaults to true.\n */\n hoverCard?: boolean;\n /** Footer note in the hover card, e.g. the look-back window (\"over last 1h\"). */\n hoverFooter?: ReactNode;\n className?: string;\n}\n\nfunction toneClass(pct: number, [warn, danger]: [number, number]): string {\n if (pct >= danger) return \"bg-red-500\";\n if (pct >= warn) return \"bg-amber-500\";\n return \"bg-emerald-500\";\n}\n\nfunction ProgressBarsIcon({ icon }: { icon: string | StaticIconComponent }) {\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n }\n return (\n <Icon\n icon={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n}\n\nfunction defaultFormatUnits(units: number): string {\n return Number.isInteger(units) ? String(units) : units.toFixed(1);\n}\n\n/**\n * ProgressBars renders quantised utilisation as a row of bars — one bar per unit\n * of capacity (the ceiling of the limit) — filled left to right by the usage. The\n * bar that straddles the usage boundary is partially filled (\"blocked out\") to\n * show the fractional unit in use, and the trailing bars stay empty to show\n * headroom; the bar colour crosses warning and danger thresholds. A \"<used> /\n * <capacity>\" caption sits below with the icon+title. It is purely presentational\n * — pass plain `usage`/`max` numbers (TimeseriesCoreBars wraps it with live data).\n */\nexport function ProgressBars({\n usage,\n max,\n unit,\n title,\n icon,\n thresholds = [75, 90],\n variant = \"default\",\n showLabel = true,\n showValue = true,\n showCapacity = false,\n orientation,\n stats,\n hoverCard = true,\n hoverFooter,\n className,\n}: ProgressBarsProps) {\n const perBar = unit?.perBar ?? 1000;\n const unitLabel = unit?.label ?? \"cores\";\n const barLabel = unit?.barLabel ?? \"core\";\n const formatUnits = unit?.format ?? defaultFormatUnits;\n\n const model = deriveProgressBars(usage, max, perBar);\n const tone = toneClass(model.pct, thresholds);\n const usageText = formatUnits(model.usageUnits);\n const capacityText =\n model.limitUnits !== undefined ? formatUnits(model.limitUnits) : \"?\";\n const caption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText} / ${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const compactCaption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText}/${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const titleText = `${title}: ${compactCaption}`;\n const isCell = variant === \"cell\";\n\n // Hover card: surface current/min/max/avg/capacity in bar-units (stats are in\n // the raw domain, so divide by perBar) so they read in the same unit as the\n // caption. A bounded reading colours the current row by its threshold.\n const pctTone =\n model.limitUnits === undefined\n ? undefined\n : model.pct >= thresholds[1]\n ? \"text-red-500\"\n : model.pct >= thresholds[0]\n ? \"text-amber-500\"\n : \"text-emerald-500\";\n const fmt = (n: number) => `${formatUnits(n)} ${unitLabel}`;\n const hoverRows: GaugeHoverRow[] = model.hasUsage\n ? [\n { label: \"Current\", value: fmt(model.usageUnits), ...(pctTone ? { tone: pctTone } : {}) },\n ...(stats\n ? [\n { label: \"Min\", value: fmt(stats.min / perBar) },\n { label: \"Max\", value: fmt(stats.max / perBar) },\n { label: \"Avg\", value: fmt(stats.avg / perBar) },\n ]\n : []),\n ...(model.limitUnits !== undefined\n ? [{ label: \"Capacity\", value: fmt(model.limitUnits) }]\n : []),\n ]\n : [];\n\n const resolvedOrientation = orientation ?? \"vertical\";\n const isDense = model.barCount > 4;\n const valueText = isCell ? compactCaption : caption;\n const hiddenAccessibleText = !showLabel || !showValue ? titleText : undefined;\n const bars = (\n <span\n className={cn(\n \"flex shrink-0\",\n resolvedOrientation === \"vertical\"\n ? cn(\"items-end\", isCell ? \"h-4 gap-px\" : \"h-10 gap-0.5\")\n : cn(\n \"flex-col justify-center\",\n isCell ? \"h-4 w-10 gap-px\" : \"h-10 w-16 gap-0.5\",\n ),\n )}\n aria-hidden={isCell ? \"true\" : undefined}\n data-orientation={resolvedOrientation}\n data-bar-count={model.barCount}\n data-bar-density={isDense ? \"compact\" : \"default\"}\n >\n {model.bars.map((bar, i) => {\n const barPct = Math.round(bar.fill * 100);\n return (\n <span\n key={i}\n className={cn(\n \"relative overflow-hidden bg-muted\",\n resolvedOrientation === \"vertical\"\n ? cn(\n \"h-full\",\n isCell\n ? isDense\n ? \"w-[3px] rounded-[2px]\"\n : \"w-1.5 rounded-[2px]\"\n : isDense\n ? \"w-1 rounded-sm\"\n : \"w-2 rounded-sm\",\n )\n : cn(\"min-h-px w-full flex-1 rounded-[2px]\"),\n )}\n title={`${barLabel} ${i + 1}: ${barPct}%`}\n aria-label={!isCell ? `${barLabel} ${i + 1}: ${barPct}%` : undefined}\n data-fill={bar.fill}\n >\n <span\n className={cn(\n \"absolute bottom-0 left-0 transition-all duration-300\",\n tone,\n )}\n style={\n resolvedOrientation === \"vertical\"\n ? { height: `${barPct}%`, right: 0 }\n : { width: `${barPct}%`, top: 0 }\n }\n />\n </span>\n );\n })}\n </span>\n );\n const valueNode = showValue ? (\n <span\n className={cn(\n \"shrink-0 font-semibold tabular-nums text-foreground\",\n isCell ? null : \"text-xs\",\n )}\n >\n {valueText}\n </span>\n ) : null;\n const label =\n icon || showLabel ? (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1 text-xs text-muted-foreground\",\n )}\n >\n {icon ? <ProgressBarsIcon icon={icon} /> : null}\n {showLabel ? <span className=\"min-w-0 truncate\">{title}</span> : null}\n </span>\n ) : null;\n\n const useHover = hoverCard && hoverRows.length > 0;\n\n if (isCell) {\n const cell = (\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 {...(useHover ? {} : { title: titleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {label}\n {bars}\n {valueNode}\n </span>\n );\n return useHover ? (\n <GaugeHoverCard title={title} rows={hoverRows} footer={hoverFooter} trigger={cell} />\n ) : (\n cell\n );\n }\n\n const block = (\n <div\n className={cn(\"flex flex-col items-center gap-1\", className)}\n {...(useHover ? {} : { title: hiddenAccessibleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {bars}\n {valueNode}\n {label}\n </div>\n );\n return useHover ? (\n <GaugeHoverCard\n title={title}\n rows={hoverRows}\n footer={hoverFooter}\n trigger={block}\n className=\"w-full justify-center\"\n />\n ) : (\n block\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProgressBars.cjs","names":["Icon","deriveProgressBars","cn","GaugeHoverCard"],"sources":["../../src/data/ProgressBars.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { deriveProgressBars } from \"./ProgressBars.model\";\nimport { GaugeHoverCard, type GaugeHoverRow } from \"./GaugeHoverCard\";\n\nexport type ProgressBarsVariant = \"default\" | \"cell\";\nexport type ProgressBarsOrientation = \"horizontal\" | \"vertical\";\n\n/**\n * Describes what one bar represents, letting the same component render CPU cores,\n * memory gigabytes, or any other quantised capacity. Defaults model CPU cores.\n */\nexport interface ProgressBarsUnit {\n /** Raw value that fills one bar, in the domain of `usage`/`max`. Default 1000 (millicores → 1 core). */\n perBar?: number;\n /** Caption/tooltip suffix naming the unit, plural. Default \"cores\". */\n label?: string;\n /** Per-bar hover tooltip noun, singular. Default \"core\". */\n barLabel?: string;\n /** Format a bar-unit count for the caption. Default: integers as-is, else 1 decimal. */\n format?: (units: number) => string;\n}\n\n/** Summary statistics for the hover card, in the same domain as `usage`/`max`. */\nexport interface ProgressBarsStats {\n /** Smallest value over the window. */\n min: number;\n /** Largest value over the window. */\n max: number;\n /** Mean value over the window. */\n avg: number;\n}\n\nexport interface ProgressBarsProps {\n /** Usage that fills the bars, in the raw domain (e.g. CPU millicores). */\n usage: number | undefined;\n /**\n * The capacity, in the same raw domain as `usage`. Determines the number of\n * bars (one per `unit.perBar`). When omitted or 0, the bar count falls back to\n * the ceiling of the usage so an unbounded reading still renders.\n */\n max?: number;\n /** What one bar represents. Defaults to CPU cores (perBar 1000, label \"cores\"). */\n unit?: ProgressBarsUnit;\n title: string;\n /** Iconify name or static icon component shown beside the label. */\n icon?: string | StaticIconComponent;\n /**\n * Utilisation thresholds (percent of capacity) at which the fill turns amber\n * then red. Defaults to [75, 90].\n */\n thresholds?: [warning: number, danger: number];\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: ProgressBarsVariant;\n /** Show the title text. Icons and values remain visible unless separately hidden. */\n showLabel?: boolean;\n /** Show the value/capacity caption. Icons and bars remain visible when false. */\n showValue?: boolean;\n /**\n * Include the capacity in the caption (\"2.3 / 4 cores\"). Defaults to false — the\n * caption shows only the current value (\"2.3 cores\") since the bars already\n * convey capacity. Set true to append the \"/ <capacity>\".\n */\n showCapacity?: boolean;\n /** Bar direction. Vertical bars fill bottom-up; horizontal bars fill left-to-right. */\n orientation?: ProgressBarsOrientation;\n /**\n * Summary stats for the hover card's Min/Max/Avg rows, in the SAME raw domain as\n * `usage`/`max` (NOT divided by perBar). Pass null to omit those rows.\n */\n stats?: ProgressBarsStats | null;\n /**\n * Wrap the bars in a hover card summarising the metric (label + current / min /\n * max / avg / capacity). Defaults to true.\n */\n hoverCard?: boolean;\n /** Footer note in the hover card, e.g. the look-back window (\"over last 1h\"). */\n hoverFooter?: ReactNode;\n /**\n * A failed read. Its message replaces the caption (in red) and the accessible\n * label's reading, and is the hover card's only row, as TimeseriesGauge shows one.\n */\n error?: Error | null;\n className?: string;\n}\n\nfunction toneClass(pct: number, [warn, danger]: [number, number]): string {\n if (pct >= danger) return \"bg-red-500\";\n if (pct >= warn) return \"bg-amber-500\";\n return \"bg-emerald-500\";\n}\n\nfunction ProgressBarsIcon({ icon }: { icon: string | StaticIconComponent }) {\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n }\n return (\n <Icon\n icon={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n}\n\nfunction defaultFormatUnits(units: number): string {\n return Number.isInteger(units) ? String(units) : units.toFixed(1);\n}\n\n/**\n * ProgressBars renders quantised utilisation as a row of bars — one bar per unit\n * of capacity (the ceiling of the limit) — filled left to right by the usage. The\n * bar that straddles the usage boundary is partially filled (\"blocked out\") to\n * show the fractional unit in use, and the trailing bars stay empty to show\n * headroom; the bar colour crosses warning and danger thresholds. A \"<used> /\n * <capacity>\" caption sits below with the icon+title. It is purely presentational\n * — pass plain `usage`/`max` numbers (TimeseriesCoreBars wraps it with live data).\n */\nexport function ProgressBars({\n usage,\n max,\n unit,\n title,\n icon,\n thresholds = [75, 90],\n variant = \"default\",\n showLabel = true,\n showValue = true,\n showCapacity = false,\n orientation,\n stats,\n hoverCard = true,\n hoverFooter,\n error = null,\n className,\n}: ProgressBarsProps) {\n const perBar = unit?.perBar ?? 1000;\n const unitLabel = unit?.label ?? \"cores\";\n const barLabel = unit?.barLabel ?? \"core\";\n const formatUnits = unit?.format ?? defaultFormatUnits;\n\n const model = deriveProgressBars(usage, max, perBar);\n const tone = toneClass(model.pct, thresholds);\n const usageText = formatUnits(model.usageUnits);\n const capacityText =\n model.limitUnits !== undefined ? formatUnits(model.limitUnits) : \"?\";\n const caption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText} / ${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const compactCaption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText}/${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const titleText = `${title}: ${error ? error.message : compactCaption}`;\n const isCell = variant === \"cell\";\n\n // Hover card: surface current/min/max/avg/capacity in bar-units (stats are in\n // the raw domain, so divide by perBar) so they read in the same unit as the\n // caption. A bounded reading colours the current row by its threshold.\n const pctTone =\n model.limitUnits === undefined\n ? undefined\n : model.pct >= thresholds[1]\n ? \"text-red-500\"\n : model.pct >= thresholds[0]\n ? \"text-amber-500\"\n : \"text-emerald-500\";\n const fmt = (n: number) => `${formatUnits(n)} ${unitLabel}`;\n const hoverRows: GaugeHoverRow[] = error\n ? [{ label: \"Error\", value: error.message, tone: \"text-red-500\" }]\n : model.hasUsage\n ? [\n { label: \"Current\", value: fmt(model.usageUnits), ...(pctTone ? { tone: pctTone } : {}) },\n ...(stats\n ? [\n { label: \"Min\", value: fmt(stats.min / perBar) },\n { label: \"Max\", value: fmt(stats.max / perBar) },\n { label: \"Avg\", value: fmt(stats.avg / perBar) },\n ]\n : []),\n ...(model.limitUnits !== undefined\n ? [{ label: \"Capacity\", value: fmt(model.limitUnits) }]\n : []),\n ]\n : [];\n\n const resolvedOrientation = orientation ?? \"vertical\";\n const isDense = model.barCount > 4;\n const valueText = isCell ? compactCaption : caption;\n const hiddenAccessibleText = !showLabel || !showValue ? titleText : undefined;\n const bars = (\n <span\n className={cn(\n \"flex shrink-0\",\n resolvedOrientation === \"vertical\"\n ? cn(\"items-end\", isCell ? \"h-4 gap-px\" : \"h-10 gap-0.5\")\n : cn(\n \"flex-col justify-center\",\n isCell ? \"h-4 w-10 gap-px\" : \"h-10 w-16 gap-0.5\",\n ),\n )}\n aria-hidden={isCell ? \"true\" : undefined}\n data-orientation={resolvedOrientation}\n data-bar-count={model.barCount}\n data-bar-density={isDense ? \"compact\" : \"default\"}\n >\n {model.bars.map((bar, i) => {\n const barPct = Math.round(bar.fill * 100);\n return (\n <span\n key={i}\n className={cn(\n \"relative overflow-hidden bg-muted\",\n resolvedOrientation === \"vertical\"\n ? cn(\n \"h-full\",\n isCell\n ? isDense\n ? \"w-[3px] rounded-[2px]\"\n : \"w-1.5 rounded-[2px]\"\n : isDense\n ? \"w-1 rounded-sm\"\n : \"w-2 rounded-sm\",\n )\n : cn(\"min-h-px w-full flex-1 rounded-[2px]\"),\n )}\n title={`${barLabel} ${i + 1}: ${barPct}%`}\n aria-label={!isCell ? `${barLabel} ${i + 1}: ${barPct}%` : undefined}\n data-fill={bar.fill}\n >\n <span\n className={cn(\n \"absolute bottom-0 left-0 transition-all duration-300\",\n tone,\n )}\n style={\n resolvedOrientation === \"vertical\"\n ? { height: `${barPct}%`, right: 0 }\n : { width: `${barPct}%`, top: 0 }\n }\n />\n </span>\n );\n })}\n </span>\n );\n const valueNode = !showValue ? null : error ? (\n <span\n className={cn(\"min-w-0 max-w-full truncate text-red-500\", isCell ? null : \"text-xs\")}\n title={error.message}\n >\n {error.message}\n </span>\n ) : (\n <span\n className={cn(\n \"shrink-0 font-semibold tabular-nums text-foreground\",\n isCell ? null : \"text-xs\",\n )}\n >\n {valueText}\n </span>\n );\n const label =\n icon || showLabel ? (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1 text-xs text-muted-foreground\",\n )}\n >\n {icon ? <ProgressBarsIcon icon={icon} /> : null}\n {showLabel ? <span className=\"min-w-0 truncate\">{title}</span> : null}\n </span>\n ) : null;\n\n const useHover = hoverCard && hoverRows.length > 0;\n\n if (isCell) {\n const cell = (\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 {...(useHover ? {} : { title: titleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {label}\n {bars}\n {valueNode}\n </span>\n );\n return useHover ? (\n <GaugeHoverCard title={title} rows={hoverRows} footer={hoverFooter} trigger={cell} />\n ) : (\n cell\n );\n }\n\n const block = (\n <div\n className={cn(\"flex flex-col items-center gap-1\", className)}\n {...(useHover ? {} : { title: hiddenAccessibleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {bars}\n {valueNode}\n {label}\n </div>\n );\n return useHover ? (\n <GaugeHoverCard\n title={title}\n rows={hoverRows}\n footer={hoverFooter}\n trigger={block}\n className=\"w-full justify-center\"\n />\n ) : (\n block\n );\n}\n"],"mappings":"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"}
|
|
@@ -70,6 +70,11 @@ export interface ProgressBarsProps {
|
|
|
70
70
|
hoverCard?: boolean;
|
|
71
71
|
/** Footer note in the hover card, e.g. the look-back window ("over last 1h"). */
|
|
72
72
|
hoverFooter?: ReactNode;
|
|
73
|
+
/**
|
|
74
|
+
* A failed read. Its message replaces the caption (in red) and the accessible
|
|
75
|
+
* label's reading, and is the hover card's only row, as TimeseriesGauge shows one.
|
|
76
|
+
*/
|
|
77
|
+
error?: Error | null;
|
|
73
78
|
className?: string;
|
|
74
79
|
}
|
|
75
80
|
/**
|
|
@@ -81,5 +86,5 @@ export interface ProgressBarsProps {
|
|
|
81
86
|
* <capacity>" caption sits below with the icon+title. It is purely presentational
|
|
82
87
|
* — pass plain `usage`/`max` numbers (TimeseriesCoreBars wraps it with live data).
|
|
83
88
|
*/
|
|
84
|
-
export declare function ProgressBars({ usage, max, unit, title, icon, thresholds, variant, showLabel, showValue, showCapacity, orientation, stats, hoverCard, hoverFooter, className, }: ProgressBarsProps): import("react").JSX.Element;
|
|
89
|
+
export declare function ProgressBars({ usage, max, unit, title, icon, thresholds, variant, showLabel, showValue, showCapacity, orientation, stats, hoverCard, hoverFooter, error, className, }: ProgressBarsProps): import("react").JSX.Element;
|
|
85
90
|
//# sourceMappingURL=ProgressBars.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressBars.d.ts","sourceRoot":"","sources":["../../src/data/ProgressBars.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAIxD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAED,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACpC;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,mFAAmF;IACnF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,qFAAqF;IACrF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uFAAuF;IACvF,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC;;;OAGG;IACH,KAAK,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,GAAG,EACH,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,UAAqB,EACrB,OAAmB,EACnB,SAAgB,EAChB,SAAgB,EAChB,YAAoB,EACpB,WAAW,EACX,KAAK,EACL,SAAgB,EAChB,WAAW,EACX,SAAS,GACV,EAAE,iBAAiB,+
|
|
1
|
+
{"version":3,"file":"ProgressBars.d.ts","sourceRoot":"","sources":["../../src/data/ProgressBars.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAQ,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAIxD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACpC;AAED,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACpC;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,mFAAmF;IACnF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,qFAAqF;IACrF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uFAAuF;IACvF,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC;;;OAGG;IACH,KAAK,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,GAAG,EACH,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,UAAqB,EACrB,OAAmB,EACnB,SAAgB,EAChB,SAAgB,EAChB,YAAoB,EACpB,WAAW,EACX,KAAK,EACL,SAAgB,EAChB,WAAW,EACX,KAAY,EACZ,SAAS,GACV,EAAE,iBAAiB,+BA6LnB"}
|
|
@@ -35,7 +35,7 @@ function defaultFormatUnits(units) {
|
|
|
35
35
|
* <capacity>" caption sits below with the icon+title. It is purely presentational
|
|
36
36
|
* — pass plain `usage`/`max` numbers (TimeseriesCoreBars wraps it with live data).
|
|
37
37
|
*/
|
|
38
|
-
function ProgressBars({ usage, max, unit, title, icon, thresholds = [75, 90], variant = "default", showLabel = true, showValue = true, showCapacity = false, orientation, stats, hoverCard = true, hoverFooter, className }) {
|
|
38
|
+
function ProgressBars({ usage, max, unit, title, icon, thresholds = [75, 90], variant = "default", showLabel = true, showValue = true, showCapacity = false, orientation, stats, hoverCard = true, hoverFooter, error = null, className }) {
|
|
39
39
|
const perBar = unit?.perBar ?? 1e3;
|
|
40
40
|
const unitLabel = unit?.label ?? "cores";
|
|
41
41
|
const barLabel = unit?.barLabel ?? "core";
|
|
@@ -46,11 +46,15 @@ function ProgressBars({ usage, max, unit, title, icon, thresholds = [75, 90], va
|
|
|
46
46
|
const capacityText = model.limitUnits !== void 0 ? formatUnits(model.limitUnits) : "?";
|
|
47
47
|
const caption = !model.hasUsage ? "—" : showCapacity ? `${usageText} / ${capacityText} ${unitLabel}` : `${usageText} ${unitLabel}`;
|
|
48
48
|
const compactCaption = !model.hasUsage ? "—" : showCapacity ? `${usageText}/${capacityText} ${unitLabel}` : `${usageText} ${unitLabel}`;
|
|
49
|
-
const titleText = `${title}: ${compactCaption}`;
|
|
49
|
+
const titleText = `${title}: ${error ? error.message : compactCaption}`;
|
|
50
50
|
const isCell = variant === "cell";
|
|
51
51
|
const pctTone = model.limitUnits === void 0 ? void 0 : model.pct >= thresholds[1] ? "text-red-500" : model.pct >= thresholds[0] ? "text-amber-500" : "text-emerald-500";
|
|
52
52
|
const fmt = (n) => `${formatUnits(n)} ${unitLabel}`;
|
|
53
|
-
const hoverRows =
|
|
53
|
+
const hoverRows = error ? [{
|
|
54
|
+
label: "Error",
|
|
55
|
+
value: error.message,
|
|
56
|
+
tone: "text-red-500"
|
|
57
|
+
}] : model.hasUsage ? [
|
|
54
58
|
{
|
|
55
59
|
label: "Current",
|
|
56
60
|
value: fmt(model.usageUnits),
|
|
@@ -105,10 +109,14 @@ function ProgressBars({ usage, max, unit, title, icon, thresholds = [75, 90], va
|
|
|
105
109
|
}, i);
|
|
106
110
|
})
|
|
107
111
|
});
|
|
108
|
-
const valueNode = showValue ? /* @__PURE__ */ jsx("span", {
|
|
112
|
+
const valueNode = !showValue ? null : error ? /* @__PURE__ */ jsx("span", {
|
|
113
|
+
className: cn("min-w-0 max-w-full truncate text-red-500", isCell ? null : "text-xs"),
|
|
114
|
+
title: error.message,
|
|
115
|
+
children: error.message
|
|
116
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
109
117
|
className: cn("shrink-0 font-semibold tabular-nums text-foreground", isCell ? null : "text-xs"),
|
|
110
118
|
children: valueText
|
|
111
|
-
})
|
|
119
|
+
});
|
|
112
120
|
const label = icon || showLabel ? /* @__PURE__ */ jsxs("span", {
|
|
113
121
|
className: cn("inline-flex min-w-0 items-center gap-1 text-xs text-muted-foreground"),
|
|
114
122
|
children: [icon ? /* @__PURE__ */ jsx(ProgressBarsIcon, { icon }) : null, showLabel ? /* @__PURE__ */ jsx("span", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressBars.js","names":[],"sources":["../../src/data/ProgressBars.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { deriveProgressBars } from \"./ProgressBars.model\";\nimport { GaugeHoverCard, type GaugeHoverRow } from \"./GaugeHoverCard\";\n\nexport type ProgressBarsVariant = \"default\" | \"cell\";\nexport type ProgressBarsOrientation = \"horizontal\" | \"vertical\";\n\n/**\n * Describes what one bar represents, letting the same component render CPU cores,\n * memory gigabytes, or any other quantised capacity. Defaults model CPU cores.\n */\nexport interface ProgressBarsUnit {\n /** Raw value that fills one bar, in the domain of `usage`/`max`. Default 1000 (millicores → 1 core). */\n perBar?: number;\n /** Caption/tooltip suffix naming the unit, plural. Default \"cores\". */\n label?: string;\n /** Per-bar hover tooltip noun, singular. Default \"core\". */\n barLabel?: string;\n /** Format a bar-unit count for the caption. Default: integers as-is, else 1 decimal. */\n format?: (units: number) => string;\n}\n\n/** Summary statistics for the hover card, in the same domain as `usage`/`max`. */\nexport interface ProgressBarsStats {\n /** Smallest value over the window. */\n min: number;\n /** Largest value over the window. */\n max: number;\n /** Mean value over the window. */\n avg: number;\n}\n\nexport interface ProgressBarsProps {\n /** Usage that fills the bars, in the raw domain (e.g. CPU millicores). */\n usage: number | undefined;\n /**\n * The capacity, in the same raw domain as `usage`. Determines the number of\n * bars (one per `unit.perBar`). When omitted or 0, the bar count falls back to\n * the ceiling of the usage so an unbounded reading still renders.\n */\n max?: number;\n /** What one bar represents. Defaults to CPU cores (perBar 1000, label \"cores\"). */\n unit?: ProgressBarsUnit;\n title: string;\n /** Iconify name or static icon component shown beside the label. */\n icon?: string | StaticIconComponent;\n /**\n * Utilisation thresholds (percent of capacity) at which the fill turns amber\n * then red. Defaults to [75, 90].\n */\n thresholds?: [warning: number, danger: number];\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: ProgressBarsVariant;\n /** Show the title text. Icons and values remain visible unless separately hidden. */\n showLabel?: boolean;\n /** Show the value/capacity caption. Icons and bars remain visible when false. */\n showValue?: boolean;\n /**\n * Include the capacity in the caption (\"2.3 / 4 cores\"). Defaults to false — the\n * caption shows only the current value (\"2.3 cores\") since the bars already\n * convey capacity. Set true to append the \"/ <capacity>\".\n */\n showCapacity?: boolean;\n /** Bar direction. Vertical bars fill bottom-up; horizontal bars fill left-to-right. */\n orientation?: ProgressBarsOrientation;\n /**\n * Summary stats for the hover card's Min/Max/Avg rows, in the SAME raw domain as\n * `usage`/`max` (NOT divided by perBar). Pass null to omit those rows.\n */\n stats?: ProgressBarsStats | null;\n /**\n * Wrap the bars in a hover card summarising the metric (label + current / min /\n * max / avg / capacity). Defaults to true.\n */\n hoverCard?: boolean;\n /** Footer note in the hover card, e.g. the look-back window (\"over last 1h\"). */\n hoverFooter?: ReactNode;\n className?: string;\n}\n\nfunction toneClass(pct: number, [warn, danger]: [number, number]): string {\n if (pct >= danger) return \"bg-red-500\";\n if (pct >= warn) return \"bg-amber-500\";\n return \"bg-emerald-500\";\n}\n\nfunction ProgressBarsIcon({ icon }: { icon: string | StaticIconComponent }) {\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n }\n return (\n <Icon\n icon={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n}\n\nfunction defaultFormatUnits(units: number): string {\n return Number.isInteger(units) ? String(units) : units.toFixed(1);\n}\n\n/**\n * ProgressBars renders quantised utilisation as a row of bars — one bar per unit\n * of capacity (the ceiling of the limit) — filled left to right by the usage. The\n * bar that straddles the usage boundary is partially filled (\"blocked out\") to\n * show the fractional unit in use, and the trailing bars stay empty to show\n * headroom; the bar colour crosses warning and danger thresholds. A \"<used> /\n * <capacity>\" caption sits below with the icon+title. It is purely presentational\n * — pass plain `usage`/`max` numbers (TimeseriesCoreBars wraps it with live data).\n */\nexport function ProgressBars({\n usage,\n max,\n unit,\n title,\n icon,\n thresholds = [75, 90],\n variant = \"default\",\n showLabel = true,\n showValue = true,\n showCapacity = false,\n orientation,\n stats,\n hoverCard = true,\n hoverFooter,\n className,\n}: ProgressBarsProps) {\n const perBar = unit?.perBar ?? 1000;\n const unitLabel = unit?.label ?? \"cores\";\n const barLabel = unit?.barLabel ?? \"core\";\n const formatUnits = unit?.format ?? defaultFormatUnits;\n\n const model = deriveProgressBars(usage, max, perBar);\n const tone = toneClass(model.pct, thresholds);\n const usageText = formatUnits(model.usageUnits);\n const capacityText =\n model.limitUnits !== undefined ? formatUnits(model.limitUnits) : \"?\";\n const caption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText} / ${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const compactCaption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText}/${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const titleText = `${title}: ${compactCaption}`;\n const isCell = variant === \"cell\";\n\n // Hover card: surface current/min/max/avg/capacity in bar-units (stats are in\n // the raw domain, so divide by perBar) so they read in the same unit as the\n // caption. A bounded reading colours the current row by its threshold.\n const pctTone =\n model.limitUnits === undefined\n ? undefined\n : model.pct >= thresholds[1]\n ? \"text-red-500\"\n : model.pct >= thresholds[0]\n ? \"text-amber-500\"\n : \"text-emerald-500\";\n const fmt = (n: number) => `${formatUnits(n)} ${unitLabel}`;\n const hoverRows: GaugeHoverRow[] = model.hasUsage\n ? [\n { label: \"Current\", value: fmt(model.usageUnits), ...(pctTone ? { tone: pctTone } : {}) },\n ...(stats\n ? [\n { label: \"Min\", value: fmt(stats.min / perBar) },\n { label: \"Max\", value: fmt(stats.max / perBar) },\n { label: \"Avg\", value: fmt(stats.avg / perBar) },\n ]\n : []),\n ...(model.limitUnits !== undefined\n ? [{ label: \"Capacity\", value: fmt(model.limitUnits) }]\n : []),\n ]\n : [];\n\n const resolvedOrientation = orientation ?? \"vertical\";\n const isDense = model.barCount > 4;\n const valueText = isCell ? compactCaption : caption;\n const hiddenAccessibleText = !showLabel || !showValue ? titleText : undefined;\n const bars = (\n <span\n className={cn(\n \"flex shrink-0\",\n resolvedOrientation === \"vertical\"\n ? cn(\"items-end\", isCell ? \"h-4 gap-px\" : \"h-10 gap-0.5\")\n : cn(\n \"flex-col justify-center\",\n isCell ? \"h-4 w-10 gap-px\" : \"h-10 w-16 gap-0.5\",\n ),\n )}\n aria-hidden={isCell ? \"true\" : undefined}\n data-orientation={resolvedOrientation}\n data-bar-count={model.barCount}\n data-bar-density={isDense ? \"compact\" : \"default\"}\n >\n {model.bars.map((bar, i) => {\n const barPct = Math.round(bar.fill * 100);\n return (\n <span\n key={i}\n className={cn(\n \"relative overflow-hidden bg-muted\",\n resolvedOrientation === \"vertical\"\n ? cn(\n \"h-full\",\n isCell\n ? isDense\n ? \"w-[3px] rounded-[2px]\"\n : \"w-1.5 rounded-[2px]\"\n : isDense\n ? \"w-1 rounded-sm\"\n : \"w-2 rounded-sm\",\n )\n : cn(\"min-h-px w-full flex-1 rounded-[2px]\"),\n )}\n title={`${barLabel} ${i + 1}: ${barPct}%`}\n aria-label={!isCell ? `${barLabel} ${i + 1}: ${barPct}%` : undefined}\n data-fill={bar.fill}\n >\n <span\n className={cn(\n \"absolute bottom-0 left-0 transition-all duration-300\",\n tone,\n )}\n style={\n resolvedOrientation === \"vertical\"\n ? { height: `${barPct}%`, right: 0 }\n : { width: `${barPct}%`, top: 0 }\n }\n />\n </span>\n );\n })}\n </span>\n );\n const valueNode = showValue ? (\n <span\n className={cn(\n \"shrink-0 font-semibold tabular-nums text-foreground\",\n isCell ? null : \"text-xs\",\n )}\n >\n {valueText}\n </span>\n ) : null;\n const label =\n icon || showLabel ? (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1 text-xs text-muted-foreground\",\n )}\n >\n {icon ? <ProgressBarsIcon icon={icon} /> : null}\n {showLabel ? <span className=\"min-w-0 truncate\">{title}</span> : null}\n </span>\n ) : null;\n\n const useHover = hoverCard && hoverRows.length > 0;\n\n if (isCell) {\n const cell = (\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 {...(useHover ? {} : { title: titleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {label}\n {bars}\n {valueNode}\n </span>\n );\n return useHover ? (\n <GaugeHoverCard title={title} rows={hoverRows} footer={hoverFooter} trigger={cell} />\n ) : (\n cell\n );\n }\n\n const block = (\n <div\n className={cn(\"flex flex-col items-center gap-1\", className)}\n {...(useHover ? {} : { title: hiddenAccessibleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {bars}\n {valueNode}\n {label}\n </div>\n );\n return useHover ? (\n <GaugeHoverCard\n title={title}\n rows={hoverRows}\n footer={hoverFooter}\n trigger={block}\n className=\"w-full justify-center\"\n />\n ) : (\n block\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProgressBars.js","names":[],"sources":["../../src/data/ProgressBars.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { deriveProgressBars } from \"./ProgressBars.model\";\nimport { GaugeHoverCard, type GaugeHoverRow } from \"./GaugeHoverCard\";\n\nexport type ProgressBarsVariant = \"default\" | \"cell\";\nexport type ProgressBarsOrientation = \"horizontal\" | \"vertical\";\n\n/**\n * Describes what one bar represents, letting the same component render CPU cores,\n * memory gigabytes, or any other quantised capacity. Defaults model CPU cores.\n */\nexport interface ProgressBarsUnit {\n /** Raw value that fills one bar, in the domain of `usage`/`max`. Default 1000 (millicores → 1 core). */\n perBar?: number;\n /** Caption/tooltip suffix naming the unit, plural. Default \"cores\". */\n label?: string;\n /** Per-bar hover tooltip noun, singular. Default \"core\". */\n barLabel?: string;\n /** Format a bar-unit count for the caption. Default: integers as-is, else 1 decimal. */\n format?: (units: number) => string;\n}\n\n/** Summary statistics for the hover card, in the same domain as `usage`/`max`. */\nexport interface ProgressBarsStats {\n /** Smallest value over the window. */\n min: number;\n /** Largest value over the window. */\n max: number;\n /** Mean value over the window. */\n avg: number;\n}\n\nexport interface ProgressBarsProps {\n /** Usage that fills the bars, in the raw domain (e.g. CPU millicores). */\n usage: number | undefined;\n /**\n * The capacity, in the same raw domain as `usage`. Determines the number of\n * bars (one per `unit.perBar`). When omitted or 0, the bar count falls back to\n * the ceiling of the usage so an unbounded reading still renders.\n */\n max?: number;\n /** What one bar represents. Defaults to CPU cores (perBar 1000, label \"cores\"). */\n unit?: ProgressBarsUnit;\n title: string;\n /** Iconify name or static icon component shown beside the label. */\n icon?: string | StaticIconComponent;\n /**\n * Utilisation thresholds (percent of capacity) at which the fill turns amber\n * then red. Defaults to [75, 90].\n */\n thresholds?: [warning: number, danger: number];\n /** Visual density/layout. `cell` is a compact inline form for table/grid cells. */\n variant?: ProgressBarsVariant;\n /** Show the title text. Icons and values remain visible unless separately hidden. */\n showLabel?: boolean;\n /** Show the value/capacity caption. Icons and bars remain visible when false. */\n showValue?: boolean;\n /**\n * Include the capacity in the caption (\"2.3 / 4 cores\"). Defaults to false — the\n * caption shows only the current value (\"2.3 cores\") since the bars already\n * convey capacity. Set true to append the \"/ <capacity>\".\n */\n showCapacity?: boolean;\n /** Bar direction. Vertical bars fill bottom-up; horizontal bars fill left-to-right. */\n orientation?: ProgressBarsOrientation;\n /**\n * Summary stats for the hover card's Min/Max/Avg rows, in the SAME raw domain as\n * `usage`/`max` (NOT divided by perBar). Pass null to omit those rows.\n */\n stats?: ProgressBarsStats | null;\n /**\n * Wrap the bars in a hover card summarising the metric (label + current / min /\n * max / avg / capacity). Defaults to true.\n */\n hoverCard?: boolean;\n /** Footer note in the hover card, e.g. the look-back window (\"over last 1h\"). */\n hoverFooter?: ReactNode;\n /**\n * A failed read. Its message replaces the caption (in red) and the accessible\n * label's reading, and is the hover card's only row, as TimeseriesGauge shows one.\n */\n error?: Error | null;\n className?: string;\n}\n\nfunction toneClass(pct: number, [warn, danger]: [number, number]): string {\n if (pct >= danger) return \"bg-red-500\";\n if (pct >= warn) return \"bg-amber-500\";\n return \"bg-emerald-500\";\n}\n\nfunction ProgressBarsIcon({ icon }: { icon: string | StaticIconComponent }) {\n if (typeof icon === \"string\") {\n return (\n <Icon\n name={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n }\n return (\n <Icon\n icon={icon}\n width={14}\n height={14}\n className=\"text-muted-foreground\"\n />\n );\n}\n\nfunction defaultFormatUnits(units: number): string {\n return Number.isInteger(units) ? String(units) : units.toFixed(1);\n}\n\n/**\n * ProgressBars renders quantised utilisation as a row of bars — one bar per unit\n * of capacity (the ceiling of the limit) — filled left to right by the usage. The\n * bar that straddles the usage boundary is partially filled (\"blocked out\") to\n * show the fractional unit in use, and the trailing bars stay empty to show\n * headroom; the bar colour crosses warning and danger thresholds. A \"<used> /\n * <capacity>\" caption sits below with the icon+title. It is purely presentational\n * — pass plain `usage`/`max` numbers (TimeseriesCoreBars wraps it with live data).\n */\nexport function ProgressBars({\n usage,\n max,\n unit,\n title,\n icon,\n thresholds = [75, 90],\n variant = \"default\",\n showLabel = true,\n showValue = true,\n showCapacity = false,\n orientation,\n stats,\n hoverCard = true,\n hoverFooter,\n error = null,\n className,\n}: ProgressBarsProps) {\n const perBar = unit?.perBar ?? 1000;\n const unitLabel = unit?.label ?? \"cores\";\n const barLabel = unit?.barLabel ?? \"core\";\n const formatUnits = unit?.format ?? defaultFormatUnits;\n\n const model = deriveProgressBars(usage, max, perBar);\n const tone = toneClass(model.pct, thresholds);\n const usageText = formatUnits(model.usageUnits);\n const capacityText =\n model.limitUnits !== undefined ? formatUnits(model.limitUnits) : \"?\";\n const caption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText} / ${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const compactCaption = !model.hasUsage\n ? \"—\"\n : showCapacity\n ? `${usageText}/${capacityText} ${unitLabel}`\n : `${usageText} ${unitLabel}`;\n const titleText = `${title}: ${error ? error.message : compactCaption}`;\n const isCell = variant === \"cell\";\n\n // Hover card: surface current/min/max/avg/capacity in bar-units (stats are in\n // the raw domain, so divide by perBar) so they read in the same unit as the\n // caption. A bounded reading colours the current row by its threshold.\n const pctTone =\n model.limitUnits === undefined\n ? undefined\n : model.pct >= thresholds[1]\n ? \"text-red-500\"\n : model.pct >= thresholds[0]\n ? \"text-amber-500\"\n : \"text-emerald-500\";\n const fmt = (n: number) => `${formatUnits(n)} ${unitLabel}`;\n const hoverRows: GaugeHoverRow[] = error\n ? [{ label: \"Error\", value: error.message, tone: \"text-red-500\" }]\n : model.hasUsage\n ? [\n { label: \"Current\", value: fmt(model.usageUnits), ...(pctTone ? { tone: pctTone } : {}) },\n ...(stats\n ? [\n { label: \"Min\", value: fmt(stats.min / perBar) },\n { label: \"Max\", value: fmt(stats.max / perBar) },\n { label: \"Avg\", value: fmt(stats.avg / perBar) },\n ]\n : []),\n ...(model.limitUnits !== undefined\n ? [{ label: \"Capacity\", value: fmt(model.limitUnits) }]\n : []),\n ]\n : [];\n\n const resolvedOrientation = orientation ?? \"vertical\";\n const isDense = model.barCount > 4;\n const valueText = isCell ? compactCaption : caption;\n const hiddenAccessibleText = !showLabel || !showValue ? titleText : undefined;\n const bars = (\n <span\n className={cn(\n \"flex shrink-0\",\n resolvedOrientation === \"vertical\"\n ? cn(\"items-end\", isCell ? \"h-4 gap-px\" : \"h-10 gap-0.5\")\n : cn(\n \"flex-col justify-center\",\n isCell ? \"h-4 w-10 gap-px\" : \"h-10 w-16 gap-0.5\",\n ),\n )}\n aria-hidden={isCell ? \"true\" : undefined}\n data-orientation={resolvedOrientation}\n data-bar-count={model.barCount}\n data-bar-density={isDense ? \"compact\" : \"default\"}\n >\n {model.bars.map((bar, i) => {\n const barPct = Math.round(bar.fill * 100);\n return (\n <span\n key={i}\n className={cn(\n \"relative overflow-hidden bg-muted\",\n resolvedOrientation === \"vertical\"\n ? cn(\n \"h-full\",\n isCell\n ? isDense\n ? \"w-[3px] rounded-[2px]\"\n : \"w-1.5 rounded-[2px]\"\n : isDense\n ? \"w-1 rounded-sm\"\n : \"w-2 rounded-sm\",\n )\n : cn(\"min-h-px w-full flex-1 rounded-[2px]\"),\n )}\n title={`${barLabel} ${i + 1}: ${barPct}%`}\n aria-label={!isCell ? `${barLabel} ${i + 1}: ${barPct}%` : undefined}\n data-fill={bar.fill}\n >\n <span\n className={cn(\n \"absolute bottom-0 left-0 transition-all duration-300\",\n tone,\n )}\n style={\n resolvedOrientation === \"vertical\"\n ? { height: `${barPct}%`, right: 0 }\n : { width: `${barPct}%`, top: 0 }\n }\n />\n </span>\n );\n })}\n </span>\n );\n const valueNode = !showValue ? null : error ? (\n <span\n className={cn(\"min-w-0 max-w-full truncate text-red-500\", isCell ? null : \"text-xs\")}\n title={error.message}\n >\n {error.message}\n </span>\n ) : (\n <span\n className={cn(\n \"shrink-0 font-semibold tabular-nums text-foreground\",\n isCell ? null : \"text-xs\",\n )}\n >\n {valueText}\n </span>\n );\n const label =\n icon || showLabel ? (\n <span\n className={cn(\n \"inline-flex min-w-0 items-center gap-1 text-xs text-muted-foreground\",\n )}\n >\n {icon ? <ProgressBarsIcon icon={icon} /> : null}\n {showLabel ? <span className=\"min-w-0 truncate\">{title}</span> : null}\n </span>\n ) : null;\n\n const useHover = hoverCard && hoverRows.length > 0;\n\n if (isCell) {\n const cell = (\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 {...(useHover ? {} : { title: titleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {label}\n {bars}\n {valueNode}\n </span>\n );\n return useHover ? (\n <GaugeHoverCard title={title} rows={hoverRows} footer={hoverFooter} trigger={cell} />\n ) : (\n cell\n );\n }\n\n const block = (\n <div\n className={cn(\"flex flex-col items-center gap-1\", className)}\n {...(useHover ? {} : { title: hiddenAccessibleText })}\n aria-label={useHover ? titleText : hiddenAccessibleText}\n >\n {bars}\n {valueNode}\n {label}\n </div>\n );\n return useHover ? (\n <GaugeHoverCard\n title={title}\n rows={hoverRows}\n footer={hoverFooter}\n trigger={block}\n className=\"w-full justify-center\"\n />\n ) : (\n block\n );\n}\n"],"mappings":"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"}
|
package/dist/data/Properties.cjs
CHANGED
|
@@ -36,19 +36,19 @@ var DENSITY_CLASSES = {
|
|
|
36
36
|
row: "px-density-4 py-density-3",
|
|
37
37
|
label: "text-sm font-medium text-muted-foreground",
|
|
38
38
|
value: "text-base text-foreground",
|
|
39
|
-
gridTemplateColumns: "minmax(12rem, 20rem) minmax(0, 1fr)"
|
|
39
|
+
gridTemplateColumns: "minmax(min(12rem, 40%), min(20rem, 50%)) minmax(0, 1fr)"
|
|
40
40
|
},
|
|
41
41
|
comfortable: {
|
|
42
42
|
row: "px-density-3 py-density-2",
|
|
43
43
|
label: "text-xs font-medium text-muted-foreground",
|
|
44
44
|
value: "text-sm text-foreground",
|
|
45
|
-
gridTemplateColumns: "minmax(7rem, 12rem) minmax(0, 1fr)"
|
|
45
|
+
gridTemplateColumns: "minmax(min(7rem, 40%), min(12rem, 50%)) minmax(0, 1fr)"
|
|
46
46
|
},
|
|
47
47
|
compact: {
|
|
48
48
|
row: "px-density-2 py-density-1.5",
|
|
49
49
|
label: "font-mono text-[11px] text-muted-foreground",
|
|
50
50
|
value: "text-xs text-foreground",
|
|
51
|
-
gridTemplateColumns: "minmax(8rem, 14rem) minmax(0, 1fr)"
|
|
51
|
+
gridTemplateColumns: "minmax(min(8rem, 40%), min(14rem, 50%)) minmax(0, 1fr)"
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
54
|
function Properties({ items, renderLabel, renderValue, labelIcon, prefixActions, suffixActions, className, rowClassName, gridTemplateColumns, labelClassName, valueClassName, density = "comfortable", keyRef, showDensityMenu = true, emptyMessage = "No properties" }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Properties.cjs","names":["UiRows","UiListFlat","UiListDashes","useContext","PropertiesContext","useState","cn","formatPropertyLabel","Fragment","Icon","PropertyValue","DropdownMenu","IconButton","UiDotsVertical","UiCheck"],"sources":["../../src/data/Properties.tsx"],"sourcesContent":["import {\n Fragment,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from \"react\";\nimport { IconButton } from \"../components/IconButton\";\nimport {\n UiCheck,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiRows,\n} from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { DropdownMenu } from \"../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { formatPropertyLabel } from \"./properties-utils\";\nimport { PropertiesContext } from \"./properties-context\";\nimport { PropertyValue } from \"./PropertyValue\";\n\nexport type PropertiesAction<V = unknown> = {\n /** Stable action id. */\n id: string;\n /** Iconify name or imported icon component. */\n icon: string | StaticIconComponent;\n /** Accessible label and tooltip for this row action. */\n label: (key: string, value: V, item: PropertiesItem<V>) => string;\n /** Return false to hide the action for a specific row. */\n visible?: (key: string, value: V, item: PropertiesItem<V>) => boolean;\n /** Return true to disable the action for a specific row. */\n disabled?: (key: string, value: V, item: PropertiesItem<V>) => boolean;\n /** Called when the row action is clicked. */\n onClick: (key: string, value: V, item: PropertiesItem<V>) => void;\n};\n\nexport type PropertiesItem<V = unknown> = {\n /** Stable property key. Also used as the default label. */\n key: string;\n /** Property value passed to renderers and actions. */\n value: V;\n /** Optional display type; structured values otherwise render as JSON. */\n type?: \"text\" | \"json\" | \"bytes\" | \"duration\" | \"number\" | \"boolean\" | \"date\";\n /** Unit for numeric values, such as ms, s, bytes, or percent. */\n unit?: string;\n /** Secondary text shown below the label. */\n subtitle?: ReactNode;\n /** Hide this row without removing it from the item array. */\n hidden?: boolean;\n /** Enables a child area spanning both columns, with nested labels indented. */\n expandable?: boolean;\n /** Controlled expanded state. */\n expanded?: boolean;\n /** Called when an expandable row is toggled. */\n onToggle?: (next: boolean) => void;\n /** Child content rendered when the row is expanded. */\n renderChildren?: () => ReactNode;\n};\n\nexport type PropertiesDensity = \"comfortable\" | \"compact\" | \"spacious\";\n\nexport type PropertiesProps<V = unknown> = {\n /** Property rows to render. Hidden items are filtered out. */\n items: PropertiesItem<V>[];\n /** Custom label renderer. */\n renderLabel?: (key: string, value: V, item: PropertiesItem<V>) => ReactNode;\n /** Custom value renderer. */\n renderValue?: (key: string, value: V, item: PropertiesItem<V>) => ReactNode;\n /** Static icon name or function that returns an icon name per row. */\n labelIcon?:\n | string\n | ((key: string, value: V, item: PropertiesItem<V>) => string | undefined);\n /** Actions rendered before the value. */\n prefixActions?: PropertiesAction<V>[];\n /** Actions rendered after the value. */\n suffixActions?: PropertiesAction<V>[];\n /** Classes applied to the list root. */\n className?: string;\n /** Classes applied to each row. */\n rowClassName?: string;\n /** CSS grid columns applied to each row. Defaults to the selected density preset. */\n gridTemplateColumns?: string;\n /** Classes applied to each label cell. */\n labelClassName?: string;\n /** Classes applied to each value cell. */\n valueClassName?: string;\n /** Row density preset. */\n density?: PropertiesDensity;\n /** Stable reference used to persist this instance's density preference. */\n keyRef?: string;\n /** Show the display-options menu. */\n showDensityMenu?: boolean;\n /** Empty-state content when no rows are visible. */\n emptyMessage?: ReactNode;\n};\n\nconst PROPERTIES_DENSITY_STORAGE_PREFIX = \"clicky-ui-properties\";\n\nconst PROPERTIES_DENSITY_OPTIONS: Array<{\n value: PropertiesDensity;\n label: string;\n icon: StaticIconComponent;\n}> = [\n { value: \"compact\", label: \"Compact\", icon: UiRows },\n { value: \"comfortable\", label: \"Comfortable\", icon: UiListFlat },\n { value: \"spacious\", label: \"Spacious\", icon: UiListDashes },\n];\n\nconst DENSITY_CLASSES: Record<\n PropertiesDensity,\n { row: string; label: string; value: string; gridTemplateColumns: string }\n> = {\n spacious: {\n row: \"px-density-4 py-density-3\",\n label: \"text-sm font-medium text-muted-foreground\",\n value: \"text-base text-foreground\",\n gridTemplateColumns: \"minmax(12rem, 20rem) minmax(0, 1fr)\",\n },\n comfortable: {\n row: \"px-density-3 py-density-2\",\n label: \"text-xs font-medium text-muted-foreground\",\n value: \"text-sm text-foreground\",\n gridTemplateColumns: \"minmax(7rem, 12rem) minmax(0, 1fr)\",\n },\n compact: {\n row: \"px-density-2 py-density-1.5\",\n label: \"font-mono text-[11px] text-muted-foreground\",\n value: \"text-xs text-foreground\",\n gridTemplateColumns: \"minmax(8rem, 14rem) minmax(0, 1fr)\",\n },\n};\n\nexport function Properties<V = unknown>({\n items,\n renderLabel,\n renderValue,\n labelIcon,\n prefixActions,\n suffixActions,\n className,\n rowClassName,\n gridTemplateColumns,\n labelClassName,\n valueClassName,\n density = \"comfortable\",\n keyRef,\n showDensityMenu = true,\n emptyMessage = \"No properties\",\n}: PropertiesProps<V>) {\n const parent = useContext(PropertiesContext);\n const [densityOverride, setDensityOverride] = useState<PropertiesDensity>();\n useEffect(() => setDensityOverride(readStoredDensity(keyRef)), [keyRef]);\n\n const visible = items.filter((item) => !item.hidden);\n\n if (visible.length === 0) {\n return <div className=\"text-sm text-muted-foreground\">{emptyMessage}</div>;\n }\n\n const activeDensity = parent?.density ?? densityOverride ?? density;\n const styles = DENSITY_CLASSES[activeDensity];\n const columns =\n parent?.columns ?? gridTemplateColumns ?? styles.gridTemplateColumns;\n const depth = parent?.depth ?? 0;\n\n const updateDensity = (next: PropertiesDensity) => {\n setDensityOverride(next);\n writeStoredDensity(keyRef, next);\n };\n\n return (\n <dl\n className={cn(\n \"grid gap-x-density-3 divide-y divide-border rounded-md border border-border bg-muted/20\",\n parent && \"col-span-full rounded-none border-0 bg-transparent\",\n className,\n )}\n style={{ gridTemplateColumns: parent ? \"subgrid\" : columns }}\n >\n {showDensityMenu && !parent ? (\n <div className=\"col-span-full flex items-center justify-end px-density-2 py-density-1\">\n <dt className=\"sr-only\">Properties display options</dt>\n <dd>\n <PropertiesDensityMenu\n density={activeDensity}\n onChange={updateDensity}\n />\n </dd>\n </div>\n ) : null}\n {visible.map((item) => {\n const iconName =\n typeof labelIcon === \"function\"\n ? labelIcon(item.key, item.value, item)\n : labelIcon;\n const renderedLabel = renderLabel\n ? renderLabel(item.key, item.value, item)\n : formatPropertyLabel(item.key);\n const ariaLabel =\n typeof renderedLabel === \"string\" ? renderedLabel : item.key;\n\n return (\n <Fragment key={item.key}>\n <div\n className={cn(\n \"col-span-full grid min-w-0 grid-cols-subgrid gap-density-3\",\n styles.row,\n rowClassName,\n )}\n >\n <dt\n aria-label={ariaLabel}\n className={cn(\"min-w-0 truncate\", styles.label, labelClassName)}\n style={{ paddingInlineStart: depth * 16 }}\n >\n <div className=\"flex min-w-0 items-center gap-density-1\">\n {iconName ? (\n <Icon name={iconName} className=\"text-xs shrink-0\" />\n ) : null}\n <span className=\"min-w-0 truncate\">{renderedLabel}</span>\n </div>\n {item.subtitle ? (\n <div className=\"mt-0.5 text-[10px] font-normal text-muted-foreground/80\">\n {item.subtitle}\n </div>\n ) : null}\n </dt>\n <dd className={cn(\"min-w-0 space-y-density-1\", valueClassName)}>\n <div className=\"flex min-w-0 items-start gap-density-1\">\n <ActionList\n actions={prefixActions}\n item={item}\n className=\"shrink-0 pt-0.5\"\n />\n <div\n className={cn(\"min-w-0 max-w-full flex-1\", styles.value)}\n >\n {renderValue\n ? renderValue(item.key, item.value, item)\n : <PropertyValue item={item} density={activeDensity} />}\n </div>\n <ActionList\n actions={suffixActions}\n item={item}\n className=\"shrink-0 pt-0.5\"\n />\n </div>\n </dd>\n </div>\n {item.expandable && item.expanded && item.renderChildren ? (\n <div className=\"col-span-full grid grid-cols-subgrid\">\n <dt className=\"sr-only\">{ariaLabel} properties</dt>\n <dd className=\"col-span-full grid min-w-0 grid-cols-subgrid\">\n <PropertiesContext.Provider\n value={{\n depth: depth + 1,\n columns,\n density: activeDensity,\n }}\n >\n {item.renderChildren()}\n </PropertiesContext.Provider>\n </dd>\n </div>\n ) : null}\n </Fragment>\n );\n })}\n </dl>\n );\n}\n\nfunction PropertiesDensityMenu({\n density,\n onChange,\n}: {\n density: PropertiesDensity;\n onChange: (density: PropertiesDensity) => void;\n}) {\n return (\n <DropdownMenu\n align=\"right\"\n menuLabel=\"Properties options\"\n trigger={\n <IconButton\n icon={UiDotsVertical}\n label=\"Properties options\"\n className=\"h-6 w-6\"\n />\n }\n >\n {(closeMenu) => (\n <div className=\"min-w-44 py-1 text-popover-foreground\">\n <div className=\"px-2 py-1 text-xs font-medium text-muted-foreground\">\n Density\n </div>\n {PROPERTIES_DENSITY_OPTIONS.map((option) => {\n const active = density === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={densityMenuItemClassName(active)}\n onClick={() => {\n onChange(option.value);\n closeMenu();\n }}\n >\n <Icon\n icon={option.icon}\n className=\"text-sm text-muted-foreground\"\n />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n {active ? (\n <Icon icon={UiCheck} className=\"text-sm text-foreground\" />\n ) : (\n <span className=\"inline-block h-4 w-4\" aria-hidden />\n )}\n </button>\n );\n })}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\nfunction densityMenuItemClassName(active: boolean): string {\n return cn(\n \"flex w-full items-center gap-2 px-2 py-1.5 text-left text-sm\",\n \"hover:bg-accent focus:bg-accent focus:outline-none\",\n active && \"bg-accent/60\",\n );\n}\n\nfunction readStoredDensity(\n keyRef: string | undefined,\n): PropertiesDensity | undefined {\n const storageKey = propertiesDensityStorageKey(keyRef);\n if (!storageKey || typeof window === \"undefined\") return undefined;\n\n try {\n const value = window.localStorage.getItem(storageKey);\n return isPropertiesDensity(value) ? value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction writeStoredDensity(\n keyRef: string | undefined,\n density: PropertiesDensity,\n): void {\n const storageKey = propertiesDensityStorageKey(keyRef);\n if (!storageKey || typeof window === \"undefined\") return;\n\n try {\n window.localStorage.setItem(storageKey, density);\n } catch {\n // Display preferences are best-effort when browser storage is unavailable.\n }\n}\n\nfunction propertiesDensityStorageKey(\n keyRef: string | undefined,\n): string | undefined {\n const normalized = keyRef?.trim();\n return normalized\n ? `${PROPERTIES_DENSITY_STORAGE_PREFIX}:${normalized}:density`\n : undefined;\n}\n\nfunction isPropertiesDensity(value: unknown): value is PropertiesDensity {\n return value === \"compact\" || value === \"comfortable\" || value === \"spacious\";\n}\n\nfunction ActionList<V>({\n actions,\n item,\n className,\n}: {\n actions: PropertiesAction<V>[] | undefined;\n item: PropertiesItem<V>;\n className?: string;\n}) {\n if (!actions || actions.length === 0) return null;\n const rendered = actions.filter(\n (action) => !action.visible || action.visible(item.key, item.value, item),\n );\n if (rendered.length === 0) return null;\n return (\n <span className={cn(\"inline-flex items-center\", className)}>\n {rendered.map((action) => (\n <PropertiesActionButton key={action.id} action={action} item={item} />\n ))}\n </span>\n );\n}\n\nfunction PropertiesActionButton<V>({\n action,\n item,\n}: {\n action: PropertiesAction<V>;\n item: PropertiesItem<V>;\n}) {\n const label = action.label(item.key, item.value, item);\n const disabled = action.disabled?.(item.key, item.value, item) ?? false;\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n disabled={disabled}\n className={cn(\n \"inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground\",\n \"hover:bg-accent hover:text-foreground\",\n \"disabled:opacity-35 disabled:hover:bg-transparent disabled:hover:text-muted-foreground\",\n )}\n onClick={(event) => {\n event.stopPropagation();\n action.onClick(item.key, item.value, item);\n }}\n >\n <Icon\n {...(typeof action.icon === \"string\"\n ? { name: action.icon }\n : { icon: action.icon })}\n className=\"text-xs\"\n />\n </button>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAiGA,IAAM,oCAAoC;AAE1C,IAAM,6BAID;CACH;EAAE,OAAO;EAAW,OAAO;EAAW,MAAMA,eAAAA;CAAO;CACnD;EAAE,OAAO;EAAe,OAAO;EAAe,MAAMC,mBAAAA;CAAW;CAC/D;EAAE,OAAO;EAAY,OAAO;EAAY,MAAMC,qBAAAA;CAAa;AAC7D;AAEA,IAAM,kBAGF;CACF,UAAU;EACR,KAAK;EACL,OAAO;EACP,OAAO;EACP,qBAAqB;CACvB;CACA,aAAa;EACX,KAAK;EACL,OAAO;EACP,OAAO;EACP,qBAAqB;CACvB;CACA,SAAS;EACP,KAAK;EACL,OAAO;EACP,OAAO;EACP,qBAAqB;CACvB;AACF;AAEA,SAAgB,WAAwB,EACtC,OACA,aACA,aACA,WACA,eACA,eACA,WACA,cACA,qBACA,gBACA,gBACA,UAAU,eACV,QACA,kBAAkB,MAClB,eAAe,mBACM;CACrB,MAAM,UAAA,GAASC,MAAAA,WAAAA,CAAWC,2BAAAA,iBAAiB;CAC3C,MAAM,CAAC,iBAAiB,uBAAA,GAAsBC,MAAAA,SAAAA,CAA4B;CAC1E,CAAA,GAAA,MAAA,UAAA,OAAgB,mBAAmB,kBAAkB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;CAEvE,MAAM,UAAU,MAAM,QAAQ,SAAS,CAAC,KAAK,MAAM;CAEnD,IAAI,QAAQ,WAAW,GACrB,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAiC,UAAA;CAAkB,CAAA;CAG3E,MAAM,gBAAgB,QAAQ,WAAW,mBAAmB;CAC5D,MAAM,SAAS,gBAAgB;CAC/B,MAAM,UACJ,QAAQ,WAAW,uBAAuB,OAAO;CACnD,MAAM,QAAQ,QAAQ,SAAS;CAE/B,MAAM,iBAAiB,SAA4B;EACjD,mBAAmB,IAAI;EACvB,mBAAmB,QAAQ,IAAI;CACjC;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;EACE,WAAWC,cAAAA,GACT,2FACA,UAAU,sDACV,SACF;EACA,OAAO,EAAE,qBAAqB,SAAS,YAAY,QAAQ;EAN7D,UAAA,CAQG,mBAAmB,CAAC,SACnB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;IAAI,WAAU;IAAU,UAAA;GAA8B,CAAA,GACtD,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAD;IACE,SAAS;IACT,UAAU;GACX,CAAA,EACC,CAAA,CACD;EACH,CAAA,IAAA,MACH,QAAQ,KAAK,SAAS;GACrB,MAAM,WACJ,OAAO,cAAc,aACjB,UAAU,KAAK,KAAK,KAAK,OAAO,IAAI,IACpC;GACN,MAAM,gBAAgB,cAClB,YAAY,KAAK,KAAK,KAAK,OAAO,IAAI,IACtCC,yBAAAA,oBAAoB,KAAK,GAAG;GAChC,MAAM,YACJ,OAAO,kBAAkB,WAAW,gBAAgB,KAAK;GAE3D,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,MAAAA,UAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IACE,WAAWF,cAAAA,GACT,8DACA,OAAO,KACP,YACF;IALF,UAAA,CAOE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;KACE,cAAY;KACZ,WAAWA,cAAAA,GAAG,oBAAoB,OAAO,OAAO,cAAc;KAC9D,OAAO,EAAE,oBAAoB,QAAQ,GAAG;KAH1C,UAAA,CAKE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACG,WACC,iBAAA,GAAA,kBAAA,IAAA,CAACG,aAAAA,MAAD;OAAM,MAAM;OAAU,WAAU;MAAoB,CAAA,IAClD,MACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAoB,UAAA;MAAoB,CAAA,CACrD;KACJ,CAAA,GAAA,KAAK,WACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MACZ,UAAA,KAAK;KACH,CAAA,IACH,IACF;IACJ,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;KAAI,WAAWH,cAAAA,GAAG,6BAA6B,cAAc;KAC3D,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;QACE,SAAS;QACH;QACN,WAAU;OACX,CAAA;OACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;QACE,WAAWA,cAAAA,GAAG,6BAA6B,OAAO,KAAK;QAEtD,UAAA,cACG,YAAY,KAAK,KAAK,KAAK,OAAO,IAAI,IACtC,iBAAA,GAAA,kBAAA,IAAA,CAACI,sBAAAA,eAAD;SAAqB;SAAM,SAAS;QAAgB,CAAA;OACrD,CAAA;OACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;QACE,SAAS;QACH;QACN,WAAU;OACX,CAAA;MACE;;IACH,CAAA,CACD;GACJ,CAAA,GAAA,KAAK,cAAc,KAAK,YAAY,KAAK,iBACxC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;KAAI,WAAU;KAAd,UAAA,CAAyB,WAAU,aAAe;IAClD,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;KAAI,WAAU;KACZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACN,2BAAAA,kBAAkB,UAAnB;MACE,OAAO;OACL,OAAO,QAAQ;OACf;OACA,SAAS;MACX;MAEC,UAAA,KAAK,eAAe;KACK,CAAA;IAC1B,CAAA,CACD;GACH,CAAA,IAAA,IACI,EAAA,GA/DK,KAAK,GA+DV;EAEd,CAAC,CACC;;AAER;AAEA,SAAS,sBAAsB,EAC7B,SACA,YAIC;CACD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACO,qBAAAA,cAAD;EACE,OAAM;EACN,WAAU;EACV,SACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;GACE,MAAMC,uBAAAA;GACN,OAAM;GACN,WAAU;EACX,CAAA;EAGD,WAAA,cACA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAsD,UAAA;GAEhE,CAAA,GACJ,2BAA2B,KAAK,WAAW;IAC1C,MAAM,SAAS,YAAY,OAAO;IAClC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;KAEE,MAAK;KACL,MAAK;KACL,gBAAc;KACd,WAAW,yBAAyB,MAAM;KAC1C,eAAe;MACb,SAAS,OAAO,KAAK;MACrB,UAAU;KACZ;KATF,UAAA;MAWE,iBAAA,GAAA,kBAAA,IAAA,CAACJ,aAAAA,MAAD;OACE,MAAM,OAAO;OACb,WAAU;MACX,CAAA;MACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAA2B,UAAA,OAAO;MAAY,CAAA;MAC7D,SACC,iBAAA,GAAA,kBAAA,IAAA,CAACA,aAAAA,MAAD;OAAM,MAAMK,gBAAAA;OAAS,WAAU;MAA2B,CAAA,IAE1D,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAuB,eAAA;MAAa,CAAA;KAEhD;IApBD,GAAA,OAAO,KAoBN;GAEZ,CAAC,CACE;;CAEK,CAAA;AAElB;AAEA,SAAS,yBAAyB,QAAyB;CACzD,OAAOR,cAAAA,GACL,gEACA,sDACA,UAAU,cACZ;AACF;AAEA,SAAS,kBACP,QAC+B;CAC/B,MAAM,aAAa,4BAA4B,MAAM;CACrD,IAAI,CAAC,cAAc,OAAO,WAAW,aAAa,OAAO,KAAA;CAEzD,IAAI;EACF,MAAM,QAAQ,OAAO,aAAa,QAAQ,UAAU;EACpD,OAAO,oBAAoB,KAAK,IAAI,QAAQ,KAAA;CAC9C,QAAQ;EACN;CACF;AACF;AAEA,SAAS,mBACP,QACA,SACM;CACN,MAAM,aAAa,4BAA4B,MAAM;CACrD,IAAI,CAAC,cAAc,OAAO,WAAW,aAAa;CAElD,IAAI;EACF,OAAO,aAAa,QAAQ,YAAY,OAAO;CACjD,QAAQ,CAER;AACF;AAEA,SAAS,4BACP,QACoB;CACpB,MAAM,aAAa,QAAQ,KAAK;CAChC,OAAO,aACH,GAAG,kCAAkC,GAAG,WAAW,YACnD,KAAA;AACN;AAEA,SAAS,oBAAoB,OAA4C;CACvE,OAAO,UAAU,aAAa,UAAU,iBAAiB,UAAU;AACrE;AAEA,SAAS,WAAc,EACrB,SACA,MACA,aAKC;CACD,IAAI,CAAC,WAAW,QAAQ,WAAW,GAAG,OAAO;CAC7C,MAAM,WAAW,QAAQ,QACtB,WAAW,CAAC,OAAO,WAAW,OAAO,QAAQ,KAAK,KAAK,KAAK,OAAO,IAAI,CAC1E;CACA,IAAI,SAAS,WAAW,GAAG,OAAO;CAClC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAWA,cAAAA,GAAG,4BAA4B,SAAS;EACtD,UAAA,SAAS,KAAK,WACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,wBAAD;GAAgD;GAAc;EAAO,GAAxC,OAAO,EAAiC,CACtE;CACG,CAAA;AAEV;AAEA,SAAS,uBAA0B,EACjC,QACA,QAIC;CACD,MAAM,QAAQ,OAAO,MAAM,KAAK,KAAK,KAAK,OAAO,IAAI;CACrD,MAAM,WAAW,OAAO,WAAW,KAAK,KAAK,KAAK,OAAO,IAAI,KAAK;CAClE,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EACE,MAAK;EACL,cAAY;EACZ,OAAO;EACG;EACV,WAAWA,cAAAA,GACT,iFACA,yCACA,wFACF;EACA,UAAU,UAAU;GAClB,MAAM,gBAAgB;GACtB,OAAO,QAAQ,KAAK,KAAK,KAAK,OAAO,IAAI;EAC3C;EAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACG,aAAAA,MAAD;GACE,GAAK,OAAO,OAAO,SAAS,WACxB,EAAE,MAAM,OAAO,KAAK,IACpB,EAAE,MAAM,OAAO,KAAK;GACxB,WAAU;EACX,CAAA;CACK,CAAA;AAEZ"}
|
|
1
|
+
{"version":3,"file":"Properties.cjs","names":["UiRows","UiListFlat","UiListDashes","useContext","PropertiesContext","useState","cn","formatPropertyLabel","Fragment","Icon","PropertyValue","DropdownMenu","IconButton","UiDotsVertical","UiCheck"],"sources":["../../src/data/Properties.tsx"],"sourcesContent":["import {\n Fragment,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from \"react\";\nimport { IconButton } from \"../components/IconButton\";\nimport {\n UiCheck,\n UiDotsVertical,\n UiListDashes,\n UiListFlat,\n UiRows,\n} from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { DropdownMenu } from \"../overlay/DropdownMenu\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { formatPropertyLabel } from \"./properties-utils\";\nimport { PropertiesContext } from \"./properties-context\";\nimport { PropertyValue } from \"./PropertyValue\";\n\nexport type PropertiesAction<V = unknown> = {\n /** Stable action id. */\n id: string;\n /** Iconify name or imported icon component. */\n icon: string | StaticIconComponent;\n /** Accessible label and tooltip for this row action. */\n label: (key: string, value: V, item: PropertiesItem<V>) => string;\n /** Return false to hide the action for a specific row. */\n visible?: (key: string, value: V, item: PropertiesItem<V>) => boolean;\n /** Return true to disable the action for a specific row. */\n disabled?: (key: string, value: V, item: PropertiesItem<V>) => boolean;\n /** Called when the row action is clicked. */\n onClick: (key: string, value: V, item: PropertiesItem<V>) => void;\n};\n\nexport type PropertiesItem<V = unknown> = {\n /** Stable property key. Also used as the default label. */\n key: string;\n /** Property value passed to renderers and actions. */\n value: V;\n /** Optional display type; structured values otherwise render as JSON. */\n type?: \"text\" | \"json\" | \"bytes\" | \"duration\" | \"number\" | \"boolean\" | \"date\";\n /** Unit for numeric values, such as ms, s, bytes, or percent. */\n unit?: string;\n /** Secondary text shown below the label. */\n subtitle?: ReactNode;\n /** Hide this row without removing it from the item array. */\n hidden?: boolean;\n /** Enables a child area spanning both columns, with nested labels indented. */\n expandable?: boolean;\n /** Controlled expanded state. */\n expanded?: boolean;\n /** Called when an expandable row is toggled. */\n onToggle?: (next: boolean) => void;\n /** Child content rendered when the row is expanded. */\n renderChildren?: () => ReactNode;\n};\n\nexport type PropertiesDensity = \"comfortable\" | \"compact\" | \"spacious\";\n\nexport type PropertiesProps<V = unknown> = {\n /** Property rows to render. Hidden items are filtered out. */\n items: PropertiesItem<V>[];\n /** Custom label renderer. */\n renderLabel?: (key: string, value: V, item: PropertiesItem<V>) => ReactNode;\n /** Custom value renderer. */\n renderValue?: (key: string, value: V, item: PropertiesItem<V>) => ReactNode;\n /** Static icon name or function that returns an icon name per row. */\n labelIcon?:\n | string\n | ((key: string, value: V, item: PropertiesItem<V>) => string | undefined);\n /** Actions rendered before the value. */\n prefixActions?: PropertiesAction<V>[];\n /** Actions rendered after the value. */\n suffixActions?: PropertiesAction<V>[];\n /** Classes applied to the list root. */\n className?: string;\n /** Classes applied to each row. */\n rowClassName?: string;\n /** CSS grid columns applied to each row. Defaults to the selected density preset. */\n gridTemplateColumns?: string;\n /** Classes applied to each label cell. */\n labelClassName?: string;\n /** Classes applied to each value cell. */\n valueClassName?: string;\n /** Row density preset. */\n density?: PropertiesDensity;\n /** Stable reference used to persist this instance's density preference. */\n keyRef?: string;\n /** Show the display-options menu. */\n showDensityMenu?: boolean;\n /** Empty-state content when no rows are visible. */\n emptyMessage?: ReactNode;\n};\n\nconst PROPERTIES_DENSITY_STORAGE_PREFIX = \"clicky-ui-properties\";\n\nconst PROPERTIES_DENSITY_OPTIONS: Array<{\n value: PropertiesDensity;\n label: string;\n icon: StaticIconComponent;\n}> = [\n { value: \"compact\", label: \"Compact\", icon: UiRows },\n { value: \"comfortable\", label: \"Comfortable\", icon: UiListFlat },\n { value: \"spacious\", label: \"Spacious\", icon: UiListDashes },\n];\n\nconst DENSITY_CLASSES: Record<\n PropertiesDensity,\n { row: string; label: string; value: string; gridTemplateColumns: string }\n> = {\n spacious: {\n row: \"px-density-4 py-density-3\",\n label: \"text-sm font-medium text-muted-foreground\",\n value: \"text-base text-foreground\",\n gridTemplateColumns: \"minmax(min(12rem, 40%), min(20rem, 50%)) minmax(0, 1fr)\",\n },\n comfortable: {\n row: \"px-density-3 py-density-2\",\n label: \"text-xs font-medium text-muted-foreground\",\n value: \"text-sm text-foreground\",\n gridTemplateColumns: \"minmax(min(7rem, 40%), min(12rem, 50%)) minmax(0, 1fr)\",\n },\n compact: {\n row: \"px-density-2 py-density-1.5\",\n label: \"font-mono text-[11px] text-muted-foreground\",\n value: \"text-xs text-foreground\",\n gridTemplateColumns: \"minmax(min(8rem, 40%), min(14rem, 50%)) minmax(0, 1fr)\",\n },\n};\n\nexport function Properties<V = unknown>({\n items,\n renderLabel,\n renderValue,\n labelIcon,\n prefixActions,\n suffixActions,\n className,\n rowClassName,\n gridTemplateColumns,\n labelClassName,\n valueClassName,\n density = \"comfortable\",\n keyRef,\n showDensityMenu = true,\n emptyMessage = \"No properties\",\n}: PropertiesProps<V>) {\n const parent = useContext(PropertiesContext);\n const [densityOverride, setDensityOverride] = useState<PropertiesDensity>();\n useEffect(() => setDensityOverride(readStoredDensity(keyRef)), [keyRef]);\n\n const visible = items.filter((item) => !item.hidden);\n\n if (visible.length === 0) {\n return <div className=\"text-sm text-muted-foreground\">{emptyMessage}</div>;\n }\n\n const activeDensity = parent?.density ?? densityOverride ?? density;\n const styles = DENSITY_CLASSES[activeDensity];\n const columns =\n parent?.columns ?? gridTemplateColumns ?? styles.gridTemplateColumns;\n const depth = parent?.depth ?? 0;\n\n const updateDensity = (next: PropertiesDensity) => {\n setDensityOverride(next);\n writeStoredDensity(keyRef, next);\n };\n\n return (\n <dl\n className={cn(\n \"grid gap-x-density-3 divide-y divide-border rounded-md border border-border bg-muted/20\",\n parent && \"col-span-full rounded-none border-0 bg-transparent\",\n className,\n )}\n style={{ gridTemplateColumns: parent ? \"subgrid\" : columns }}\n >\n {showDensityMenu && !parent ? (\n <div className=\"col-span-full flex items-center justify-end px-density-2 py-density-1\">\n <dt className=\"sr-only\">Properties display options</dt>\n <dd>\n <PropertiesDensityMenu\n density={activeDensity}\n onChange={updateDensity}\n />\n </dd>\n </div>\n ) : null}\n {visible.map((item) => {\n const iconName =\n typeof labelIcon === \"function\"\n ? labelIcon(item.key, item.value, item)\n : labelIcon;\n const renderedLabel = renderLabel\n ? renderLabel(item.key, item.value, item)\n : formatPropertyLabel(item.key);\n const ariaLabel =\n typeof renderedLabel === \"string\" ? renderedLabel : item.key;\n\n return (\n <Fragment key={item.key}>\n <div\n className={cn(\n \"col-span-full grid min-w-0 grid-cols-subgrid gap-density-3\",\n styles.row,\n rowClassName,\n )}\n >\n <dt\n aria-label={ariaLabel}\n className={cn(\"min-w-0 truncate\", styles.label, labelClassName)}\n style={{ paddingInlineStart: depth * 16 }}\n >\n <div className=\"flex min-w-0 items-center gap-density-1\">\n {iconName ? (\n <Icon name={iconName} className=\"text-xs shrink-0\" />\n ) : null}\n <span className=\"min-w-0 truncate\">{renderedLabel}</span>\n </div>\n {item.subtitle ? (\n <div className=\"mt-0.5 text-[10px] font-normal text-muted-foreground/80\">\n {item.subtitle}\n </div>\n ) : null}\n </dt>\n <dd className={cn(\"min-w-0 space-y-density-1\", valueClassName)}>\n <div className=\"flex min-w-0 items-start gap-density-1\">\n <ActionList\n actions={prefixActions}\n item={item}\n className=\"shrink-0 pt-0.5\"\n />\n <div\n className={cn(\"min-w-0 max-w-full flex-1\", styles.value)}\n >\n {renderValue\n ? renderValue(item.key, item.value, item)\n : <PropertyValue item={item} density={activeDensity} />}\n </div>\n <ActionList\n actions={suffixActions}\n item={item}\n className=\"shrink-0 pt-0.5\"\n />\n </div>\n </dd>\n </div>\n {item.expandable && item.expanded && item.renderChildren ? (\n <div className=\"col-span-full grid grid-cols-subgrid\">\n <dt className=\"sr-only\">{ariaLabel} properties</dt>\n <dd className=\"col-span-full grid min-w-0 grid-cols-subgrid\">\n <PropertiesContext.Provider\n value={{\n depth: depth + 1,\n columns,\n density: activeDensity,\n }}\n >\n {item.renderChildren()}\n </PropertiesContext.Provider>\n </dd>\n </div>\n ) : null}\n </Fragment>\n );\n })}\n </dl>\n );\n}\n\nfunction PropertiesDensityMenu({\n density,\n onChange,\n}: {\n density: PropertiesDensity;\n onChange: (density: PropertiesDensity) => void;\n}) {\n return (\n <DropdownMenu\n align=\"right\"\n menuLabel=\"Properties options\"\n trigger={\n <IconButton\n icon={UiDotsVertical}\n label=\"Properties options\"\n className=\"h-6 w-6\"\n />\n }\n >\n {(closeMenu) => (\n <div className=\"min-w-44 py-1 text-popover-foreground\">\n <div className=\"px-2 py-1 text-xs font-medium text-muted-foreground\">\n Density\n </div>\n {PROPERTIES_DENSITY_OPTIONS.map((option) => {\n const active = density === option.value;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={densityMenuItemClassName(active)}\n onClick={() => {\n onChange(option.value);\n closeMenu();\n }}\n >\n <Icon\n icon={option.icon}\n className=\"text-sm text-muted-foreground\"\n />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n {active ? (\n <Icon icon={UiCheck} className=\"text-sm text-foreground\" />\n ) : (\n <span className=\"inline-block h-4 w-4\" aria-hidden />\n )}\n </button>\n );\n })}\n </div>\n )}\n </DropdownMenu>\n );\n}\n\nfunction densityMenuItemClassName(active: boolean): string {\n return cn(\n \"flex w-full items-center gap-2 px-2 py-1.5 text-left text-sm\",\n \"hover:bg-accent focus:bg-accent focus:outline-none\",\n active && \"bg-accent/60\",\n );\n}\n\nfunction readStoredDensity(\n keyRef: string | undefined,\n): PropertiesDensity | undefined {\n const storageKey = propertiesDensityStorageKey(keyRef);\n if (!storageKey || typeof window === \"undefined\") return undefined;\n\n try {\n const value = window.localStorage.getItem(storageKey);\n return isPropertiesDensity(value) ? value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction writeStoredDensity(\n keyRef: string | undefined,\n density: PropertiesDensity,\n): void {\n const storageKey = propertiesDensityStorageKey(keyRef);\n if (!storageKey || typeof window === \"undefined\") return;\n\n try {\n window.localStorage.setItem(storageKey, density);\n } catch {\n // Display preferences are best-effort when browser storage is unavailable.\n }\n}\n\nfunction propertiesDensityStorageKey(\n keyRef: string | undefined,\n): string | undefined {\n const normalized = keyRef?.trim();\n return normalized\n ? `${PROPERTIES_DENSITY_STORAGE_PREFIX}:${normalized}:density`\n : undefined;\n}\n\nfunction isPropertiesDensity(value: unknown): value is PropertiesDensity {\n return value === \"compact\" || value === \"comfortable\" || value === \"spacious\";\n}\n\nfunction ActionList<V>({\n actions,\n item,\n className,\n}: {\n actions: PropertiesAction<V>[] | undefined;\n item: PropertiesItem<V>;\n className?: string;\n}) {\n if (!actions || actions.length === 0) return null;\n const rendered = actions.filter(\n (action) => !action.visible || action.visible(item.key, item.value, item),\n );\n if (rendered.length === 0) return null;\n return (\n <span className={cn(\"inline-flex items-center\", className)}>\n {rendered.map((action) => (\n <PropertiesActionButton key={action.id} action={action} item={item} />\n ))}\n </span>\n );\n}\n\nfunction PropertiesActionButton<V>({\n action,\n item,\n}: {\n action: PropertiesAction<V>;\n item: PropertiesItem<V>;\n}) {\n const label = action.label(item.key, item.value, item);\n const disabled = action.disabled?.(item.key, item.value, item) ?? false;\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n disabled={disabled}\n className={cn(\n \"inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground\",\n \"hover:bg-accent hover:text-foreground\",\n \"disabled:opacity-35 disabled:hover:bg-transparent disabled:hover:text-muted-foreground\",\n )}\n onClick={(event) => {\n event.stopPropagation();\n action.onClick(item.key, item.value, item);\n }}\n >\n <Icon\n {...(typeof action.icon === \"string\"\n ? { name: action.icon }\n : { icon: action.icon })}\n className=\"text-xs\"\n />\n </button>\n );\n}\n"],"mappings":"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"}
|
package/dist/data/Properties.js
CHANGED
|
@@ -36,19 +36,19 @@ var DENSITY_CLASSES = {
|
|
|
36
36
|
row: "px-density-4 py-density-3",
|
|
37
37
|
label: "text-sm font-medium text-muted-foreground",
|
|
38
38
|
value: "text-base text-foreground",
|
|
39
|
-
gridTemplateColumns: "minmax(12rem, 20rem) minmax(0, 1fr)"
|
|
39
|
+
gridTemplateColumns: "minmax(min(12rem, 40%), min(20rem, 50%)) minmax(0, 1fr)"
|
|
40
40
|
},
|
|
41
41
|
comfortable: {
|
|
42
42
|
row: "px-density-3 py-density-2",
|
|
43
43
|
label: "text-xs font-medium text-muted-foreground",
|
|
44
44
|
value: "text-sm text-foreground",
|
|
45
|
-
gridTemplateColumns: "minmax(7rem, 12rem) minmax(0, 1fr)"
|
|
45
|
+
gridTemplateColumns: "minmax(min(7rem, 40%), min(12rem, 50%)) minmax(0, 1fr)"
|
|
46
46
|
},
|
|
47
47
|
compact: {
|
|
48
48
|
row: "px-density-2 py-density-1.5",
|
|
49
49
|
label: "font-mono text-[11px] text-muted-foreground",
|
|
50
50
|
value: "text-xs text-foreground",
|
|
51
|
-
gridTemplateColumns: "minmax(8rem, 14rem) minmax(0, 1fr)"
|
|
51
|
+
gridTemplateColumns: "minmax(min(8rem, 40%), min(14rem, 50%)) minmax(0, 1fr)"
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
54
|
function Properties({ items, renderLabel, renderValue, labelIcon, prefixActions, suffixActions, className, rowClassName, gridTemplateColumns, labelClassName, valueClassName, density = "comfortable", keyRef, showDensityMenu = true, emptyMessage = "No properties" }) {
|