@flanksource/clicky-ui 0.3.54 → 0.3.56
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/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/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 +42 -40
- package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
- package/dist/data/test-runner/MatrixMarks.d.ts +20 -4
- package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
- package/dist/data/test-runner/MatrixMarks.js +43 -42
- 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/index.d.ts +2 -2
- package/dist/data/test-runner/index.d.ts.map +1 -1
- package/dist/data/test-runner/matrix-marks.cjs +2 -11
- package/dist/data/test-runner/matrix-marks.cjs.map +1 -1
- package/dist/data/test-runner/matrix-marks.d.ts +2 -4
- package/dist/data/test-runner/matrix-marks.d.ts.map +1 -1
- package/dist/data/test-runner/matrix-marks.js +3 -11
- package/dist/data/test-runner/matrix-marks.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 +1 -1
- package/dist/data/traces/index.d.ts.map +1 -1
- 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 +58 -7
- package/dist/data.d.ts +9 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +29 -12
- 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 +76 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -14
- 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 +2 -2
- package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
- package/dist/profiles/editor/profileEditorSections.js +2 -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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkloadCard.cjs","names":["K8SService","K8SIngress","K8SDeployment","K8SStatefulset","K8SPod","Icon","formatReplicaCounts","_Fragment","Timestamp","useState","workloadTypeLabel","workloadStatusLabel","UiBox","useMemo","UiChip","UiMemoryStick","UiHardDrive","cn","Badge","workloadStatusTone","UiFullscreen","TimeseriesCoreBars","TimeseriesGauge","Modal","TimeseriesPanel"],"sources":["../../src/data/WorkloadCard.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport {\n K8SDeployment,\n K8SIngress,\n K8SPod,\n K8SService,\n K8SStatefulset,\n} from \"@flanksource/icons/mi\";\nimport { cn } from \"../lib/utils\";\nimport { Modal } from \"../overlay/Modal\";\nimport { Badge } from \"./Badge\";\nimport { Timestamp } from \"./cells/Timestamp\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { TimeseriesCoreBars } from \"./TimeseriesCoreBars\";\nimport { TimeseriesGauge } from \"./TimeseriesGauge\";\nimport {\n TimeseriesPanel,\n type TimeseriesReferenceLine,\n type TimeseriesResponse,\n type TimeseriesSeries,\n} from \"./TimeseriesPanel\";\nimport {\n UiBox,\n UiChip,\n UiFullscreen,\n UiHardDrive,\n UiMemoryStick,\n} from \"../icons\";\nimport {\n formatReplicaCounts,\n workloadStatusLabel,\n workloadStatusTone,\n workloadTypeLabel,\n type WorkloadCardIcon,\n type WorkloadCardKind,\n type WorkloadCardMetrics,\n type WorkloadCardResourceMetric,\n type WorkloadCardWorkload,\n} from \"./WorkloadCard.model\";\n\nexport interface WorkloadCardProps {\n workload: WorkloadCardWorkload;\n /**\n * CPU/memory/disk series. Each is requested as `baseUrl + id` via `fetcher`,\n * or loaded by its own `load` function (then `id` is the cache key and must\n * be unique per data source).\n */\n metrics: WorkloadCardMetrics;\n baseUrl?: string;\n range?: string;\n refreshMs?: number;\n expandable?: boolean;\n /** Controls rendered beside status and history, owned by the host domain. */\n headerActions?: ReactNode;\n size?: WorkloadCardSize;\n variant?: WorkloadCardVariant;\n fetcher?: (url: string) => Promise<TimeseriesResponse>;\n className?: string;\n}\n\nexport type WorkloadCardSize = \"sm\" | \"md\" | \"lg\";\nexport type WorkloadCardVariant =\n | \"default\"\n | \"outline\"\n | \"subtle\"\n | \"elevated\"\n | \"ghost\";\n\ntype MetricKey = keyof WorkloadCardMetrics;\n\ntype PanelMetric = {\n key: MetricKey;\n title: string;\n unit?: string;\n icon: WorkloadCardIcon;\n metric: WorkloadCardResourceMetric;\n};\n\nconst KIND_ICONS: Record<WorkloadCardKind, StaticIconComponent> = {\n service: K8SService,\n ingress: K8SIngress,\n deployment: K8SDeployment,\n statefulset: K8SStatefulset,\n pod: K8SPod,\n};\n\ntype WorkloadCardSizeClasses = {\n root: string;\n header: string;\n titleGap: string;\n icon: string;\n name: string;\n meta: string;\n statusSize: \"xxs\" | \"xs\" | \"sm\";\n action: string;\n actionIcon: number;\n metricGrid: string;\n metricVariant: \"default\" | \"cell\";\n empty: string;\n};\n\nconst SIZE_CLASSES: Record<WorkloadCardSize, WorkloadCardSizeClasses> = {\n sm: {\n root: \"p-2\",\n header: \"mb-2 gap-2\",\n titleGap: \"gap-1\",\n icon: \"h-3.5 w-3.5\",\n name: \"text-xs\",\n meta: \"mt-0.5 gap-x-1.5 gap-y-0.5 text-[11px] leading-4\",\n statusSize: \"xxs\",\n action: \"h-5 w-5\",\n actionIcon: 12,\n metricGrid: \"grid-cols-1 gap-1.5\",\n metricVariant: \"cell\",\n empty: \"px-2 py-3 text-[11px]\",\n },\n md: {\n root: \"p-3\",\n header: \"mb-3 gap-2\",\n titleGap: \"gap-1.5\",\n icon: \"h-4 w-4\",\n name: \"text-sm\",\n meta: \"mt-0.5 gap-x-2 gap-y-0.5 text-xs\",\n statusSize: \"xs\",\n action: \"h-6 w-6\",\n actionIcon: 14,\n metricGrid: \"gap-3\",\n metricVariant: \"default\",\n empty: \"px-3 py-4 text-xs\",\n },\n lg: {\n root: \"p-4\",\n header: \"mb-4 gap-3\",\n titleGap: \"gap-2\",\n icon: \"h-5 w-5\",\n name: \"text-base\",\n meta: \"mt-1 gap-x-2 gap-y-1 text-xs\",\n statusSize: \"sm\",\n action: \"h-7 w-7\",\n actionIcon: 16,\n metricGrid: \"gap-4\",\n metricVariant: \"default\",\n empty: \"px-4 py-6 text-sm\",\n },\n};\n\nconst VARIANT_CLASSES: Record<WorkloadCardVariant, string> = {\n default: \"border-border bg-card text-card-foreground\",\n outline: \"border-border bg-background text-foreground\",\n subtle: \"border-transparent bg-muted/35 text-foreground\",\n elevated: \"border-border/70 bg-card text-card-foreground shadow-sm\",\n ghost: \"border-transparent bg-transparent text-foreground\",\n};\n\nfunction metricGridClass(count: number): string {\n if (count <= 1) return \"grid-cols-1\";\n if (count === 2) return \"grid-cols-2\";\n return \"grid-cols-3\";\n}\n\n// Memory renders as cores-style bars at one bar per gibibyte, matching CPU; bytes\n// are fed raw and TimeseriesCoreBars divides by perBar so captions read \"x GiB\".\nconst MEMORY_BAR_UNIT = { perBar: 1024 ** 3, label: \"GiB\", barLabel: \"GiB\" };\n\nfunction WorkloadIcon({\n icon,\n title,\n className,\n}: {\n icon: WorkloadCardIcon;\n title: string;\n className?: string;\n}) {\n if (typeof icon === \"string\") {\n return (\n <Icon name={icon} title={title} {...(className ? { className } : {})} />\n );\n }\n return (\n <Icon icon={icon} title={title} {...(className ? { className } : {})} />\n );\n}\n\nfunction metricSeries(metric: WorkloadCardResourceMetric): TimeseriesSeries[] {\n const series: TimeseriesSeries[] = [\n { ...metric.value, label: metric.valueLabel ?? \"usage\" },\n ];\n if (typeof metric.max === \"object\") {\n series.push({ ...metric.max, label: metric.maxLabel ?? \"limit\" });\n }\n return series;\n}\n\n// A fixed numeric max has no series to plot, so the history chart draws it as\n// a flat capacity line instead.\nfunction metricReferenceLines(\n metric: WorkloadCardResourceMetric,\n): TimeseriesReferenceLine[] {\n if (typeof metric.max !== \"number\") return [];\n return [{ value: metric.max, label: metric.maxLabel ?? \"capacity\" }];\n}\n\nfunction hasMetric(metrics: WorkloadCardMetrics): boolean {\n return Boolean(metrics.cpu || metrics.memory || metrics.disk);\n}\n\ntype HeaderMetaItem = { key: string; content: ReactNode; title?: string };\n\nfunction HeaderMeta({\n separator,\n title,\n children,\n}: {\n separator: boolean;\n title?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <span className=\"inline-flex min-w-0 items-center gap-1\" title={title}>\n {separator ? (\n <span\n className=\"h-1 w-1 shrink-0 rounded-full bg-muted-foreground/40\"\n aria-hidden\n />\n ) : null}\n <span className=\"min-w-0 truncate\">{children}</span>\n </span>\n );\n}\n\nfunction headerMetaItems(\n workload: WorkloadCardWorkload,\n typeLabel: string | undefined,\n): HeaderMetaItem[] {\n const items: HeaderMetaItem[] = [];\n if (typeLabel) items.push({ key: \"type\", content: typeLabel });\n if (workload.namespace) {\n items.push({ key: \"namespace\", content: workload.namespace });\n }\n if (workload.role) items.push({ key: \"role\", content: workload.role });\n const replicaText = formatReplicaCounts(workload.replicas);\n if (replicaText) items.push({ key: \"replicas\", content: replicaText });\n if (workload.createdAt !== undefined) {\n items.push({\n key: \"age\",\n content: (\n <>\n age <Timestamp value={workload.createdAt} format=\"relative\" />\n </>\n ),\n });\n }\n workload.metadata?.forEach((item, i) => {\n const plain =\n typeof item.value === \"string\" || typeof item.value === \"number\";\n items.push({\n key: `meta-${i}`,\n content: (\n <>\n <span className=\"text-muted-foreground/70\">{item.label}</span>{\" \"}\n {item.value}\n </>\n ),\n title: plain ? `${item.label}: ${item.value}` : item.label,\n });\n });\n return items;\n}\n\n/**\n * WorkloadCard is a compact resource card for a workload: a Kubernetes\n * resource (`kind`) or anything else (a free-form `type`, `icon` and\n * `metadata`). It shows identity, status, subtitle metadata, and\n * CPU/memory/disk utilization backed by the existing time-series primitives:\n * CPU and memory as core-style bars (memory at one bar per GiB) and disk as a\n * linear progress bar. Callers own the metric series (URL ids or `load`\n * functions); the card only composes them.\n *\n * Like the timeseries widgets it renders, it needs a react-query\n * `QueryClientProvider` above it.\n */\nexport function WorkloadCard({\n workload,\n metrics,\n baseUrl,\n range = \"1h\",\n refreshMs = 5000,\n expandable = true,\n headerActions,\n size = \"md\",\n variant = \"default\",\n fetcher,\n className,\n}: WorkloadCardProps) {\n const [expanded, setExpanded] = useState(false);\n const typeLabel = workloadTypeLabel(workload);\n const statusLabel = workloadStatusLabel(workload.status);\n const metaItems = headerMetaItems(workload, typeLabel);\n const workloadIcon =\n workload.icon ?? (workload.kind ? KIND_ICONS[workload.kind] : UiBox);\n const sizeClasses = SIZE_CLASSES[size];\n\n const panelMetrics = useMemo(() => {\n const list: PanelMetric[] = [];\n if (metrics.cpu) {\n list.push({\n key: \"cpu\",\n title: metrics.cpu.title ?? \"CPU\",\n unit: metrics.cpu.unit ?? \"short\",\n icon: metrics.cpu.icon ?? UiChip,\n metric: metrics.cpu,\n });\n }\n if (metrics.memory) {\n list.push({\n key: \"memory\",\n title: metrics.memory.title ?? \"Memory\",\n unit: metrics.memory.unit ?? \"bytes\",\n icon: metrics.memory.icon ?? UiMemoryStick,\n metric: metrics.memory,\n });\n }\n if (metrics.disk) {\n list.push({\n key: \"disk\",\n title: metrics.disk.title ?? \"Disk\",\n unit: metrics.disk.unit ?? \"bytes\",\n icon: metrics.disk.icon ?? UiHardDrive,\n metric: metrics.disk,\n });\n }\n return list;\n }, [metrics]);\n\n const metricProps = {\n ...(baseUrl !== undefined ? { baseUrl } : {}),\n range,\n refreshMs,\n ...(fetcher !== undefined ? { fetcher } : {}),\n };\n const canExpand = expandable && hasMetric(metrics);\n\n return (\n <div\n className={cn(\n \"w-full rounded-md border\",\n VARIANT_CLASSES[variant],\n sizeClasses.root,\n className,\n )}\n data-size={size}\n data-variant={variant}\n >\n <div\n className={cn(\"flex items-start justify-between\", sizeClasses.header)}\n >\n <div className=\"min-w-0\">\n <div\n className={cn(\"flex min-w-0 items-center\", sizeClasses.titleGap)}\n >\n <WorkloadIcon\n icon={workloadIcon}\n title={typeLabel ?? workload.name}\n className={cn(\"shrink-0 text-muted-foreground\", sizeClasses.icon)}\n />\n <span\n className={cn(\"min-w-0 truncate font-medium\", sizeClasses.name)}\n title={workload.name}\n >\n {workload.name}\n </span>\n </div>\n {metaItems.length > 0 ? (\n <div\n className={cn(\n \"flex flex-wrap items-center text-muted-foreground\",\n sizeClasses.meta,\n )}\n >\n {metaItems.map((item, i) => (\n <HeaderMeta\n key={item.key}\n separator={i > 0}\n title={item.title}\n >\n {item.content}\n </HeaderMeta>\n ))}\n </div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {statusLabel ? (\n <span title={workload.status?.message}>\n <Badge\n tone={workloadStatusTone(workload.status)}\n variant=\"soft\"\n size={sizeClasses.statusSize}\n >\n {statusLabel}\n </Badge>\n </span>\n ) : null}\n {headerActions}\n {canExpand ? (\n <button\n type=\"button\"\n aria-label={`Open ${workload.name} history`}\n title=\"History\"\n onClick={() => setExpanded(true)}\n className={cn(\n \"inline-flex items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\",\n sizeClasses.action,\n )}\n >\n <Icon\n icon={UiFullscreen}\n width={sizeClasses.actionIcon}\n height={sizeClasses.actionIcon}\n />\n </button>\n ) : null}\n </div>\n </div>\n\n {hasMetric(metrics) ? (\n <div\n className={cn(\n \"grid items-start gap-3\",\n sizeClasses.metricVariant === \"cell\"\n ? sizeClasses.metricGrid\n : cn(\n metricGridClass(panelMetrics.length),\n sizeClasses.metricGrid,\n ),\n )}\n >\n {metrics.cpu ? (\n <TimeseriesCoreBars\n title={metrics.cpu.title ?? \"CPU\"}\n icon={metrics.cpu.icon ?? UiChip}\n value={metrics.cpu.value}\n {...(metrics.cpu.max !== undefined\n ? { max: metrics.cpu.max }\n : {})}\n {...(metrics.cpu.thresholds\n ? { thresholds: metrics.cpu.thresholds }\n : {})}\n {...(metrics.cpu.orientation\n ? { orientation: metrics.cpu.orientation }\n : {})}\n {...(metrics.cpu.showValue !== undefined\n ? { showValue: metrics.cpu.showValue }\n : {})}\n variant={sizeClasses.metricVariant}\n {...metricProps}\n />\n ) : null}\n {metrics.memory ? (\n <TimeseriesCoreBars\n title={metrics.memory.title ?? \"Memory\"}\n icon={metrics.memory.icon ?? UiMemoryStick}\n value={metrics.memory.value}\n unit={MEMORY_BAR_UNIT}\n variant={sizeClasses.metricVariant}\n {...(metrics.memory.max !== undefined\n ? { max: metrics.memory.max }\n : {})}\n {...(metrics.memory.thresholds\n ? { thresholds: metrics.memory.thresholds }\n : {})}\n {...metricProps}\n />\n ) : null}\n {metrics.disk ? (\n <TimeseriesGauge\n title={metrics.disk.title ?? \"Disk\"}\n icon={metrics.disk.icon ?? UiHardDrive}\n value={metrics.disk.value}\n unit={metrics.disk.unit ?? \"bytes\"}\n shape=\"linear\"\n expandable={false}\n centerDisplay={metrics.disk.centerDisplay ?? \"value\"}\n variant={sizeClasses.metricVariant}\n {...(metrics.disk.max !== undefined\n ? { max: metrics.disk.max }\n : {})}\n {...(metrics.disk.thresholds\n ? { thresholds: metrics.disk.thresholds }\n : {})}\n {...metricProps}\n />\n ) : null}\n </div>\n ) : (\n <div\n className={cn(\n \"rounded-md border border-dashed border-border text-center text-muted-foreground\",\n sizeClasses.empty,\n )}\n >\n No metrics configured\n </div>\n )}\n\n <Modal\n open={expanded}\n onClose={() => setExpanded(false)}\n title={`${workload.name} history`}\n size=\"xl\"\n >\n <div className=\"flex flex-col gap-3\">\n {panelMetrics.map(({ key, title, unit, icon, metric }) => (\n <TimeseriesPanel\n key={key}\n title={title}\n icon={icon}\n series={metricSeries(metric)}\n referenceLines={metricReferenceLines(metric)}\n {...(unit ? { unit } : {})}\n {...metricProps}\n expandable={false}\n />\n ))}\n </div>\n </Modal>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkloadCard.cjs","names":["K8SService","K8SIngress","K8SDeployment","K8SStatefulset","K8SPod","Icon","formatReplicaCounts","_Fragment","Timestamp","useState","workloadTypeLabel","workloadStatusLabel","UiBox","useMemo","UiChip","UiMemoryStick","UiHardDrive","cn","Badge","workloadStatusTone","UiFullscreen","TimeseriesCoreBars","TimeseriesGauge","Modal","TimeseriesPanel"],"sources":["../../src/data/WorkloadCard.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport {\n K8SDeployment,\n K8SIngress,\n K8SPod,\n K8SService,\n K8SStatefulset,\n} from \"@flanksource/icons/mi\";\nimport { cn } from \"../lib/utils\";\nimport { Modal } from \"../overlay/Modal\";\nimport { Badge } from \"./Badge\";\nimport { Timestamp } from \"./cells/Timestamp\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { TimeseriesCoreBars } from \"./TimeseriesCoreBars\";\nimport { TimeseriesGauge } from \"./TimeseriesGauge\";\nimport {\n TimeseriesPanel,\n type TimeseriesReferenceLine,\n type TimeseriesResponse,\n type TimeseriesSeries,\n} from \"./TimeseriesPanel\";\nimport {\n UiBox,\n UiChip,\n UiFullscreen,\n UiHardDrive,\n UiMemoryStick,\n} from \"../icons\";\nimport {\n formatReplicaCounts,\n workloadStatusLabel,\n workloadStatusTone,\n workloadTypeLabel,\n type WorkloadCardIcon,\n type WorkloadCardKind,\n type WorkloadCardMetrics,\n type WorkloadCardResourceMetric,\n type WorkloadCardWorkload,\n} from \"./WorkloadCard.model\";\n\nexport interface WorkloadCardProps {\n /** Caller-owned metric body, e.g. statistical snapshots instead of time series. */\n children?: ReactNode;\n workload: WorkloadCardWorkload;\n /**\n * CPU/memory/disk series. Each is requested as `baseUrl + id` via `fetcher`,\n * or loaded by its own `load` function (then `id` is the cache key and must\n * be unique per data source).\n */\n metrics: WorkloadCardMetrics;\n baseUrl?: string;\n range?: string;\n refreshMs?: number;\n expandable?: boolean;\n /** Controls rendered beside status and history, owned by the host domain. */\n headerActions?: ReactNode;\n size?: WorkloadCardSize;\n variant?: WorkloadCardVariant;\n fetcher?: (url: string) => Promise<TimeseriesResponse>;\n className?: string;\n}\n\nexport type WorkloadCardSize = \"sm\" | \"md\" | \"lg\";\nexport type WorkloadCardVariant =\n | \"default\"\n | \"outline\"\n | \"subtle\"\n | \"elevated\"\n | \"ghost\";\n\ntype MetricKey = keyof WorkloadCardMetrics;\n\ntype PanelMetric = {\n key: MetricKey;\n title: string;\n unit?: string;\n icon: WorkloadCardIcon;\n metric: WorkloadCardResourceMetric;\n};\n\nconst KIND_ICONS: Record<WorkloadCardKind, StaticIconComponent> = {\n service: K8SService,\n ingress: K8SIngress,\n deployment: K8SDeployment,\n statefulset: K8SStatefulset,\n pod: K8SPod,\n};\n\ntype WorkloadCardSizeClasses = {\n root: string;\n header: string;\n titleGap: string;\n icon: string;\n name: string;\n meta: string;\n statusSize: \"xxs\" | \"xs\" | \"sm\";\n action: string;\n actionIcon: number;\n metricGrid: string;\n metricVariant: \"default\" | \"cell\";\n empty: string;\n};\n\nconst SIZE_CLASSES: Record<WorkloadCardSize, WorkloadCardSizeClasses> = {\n sm: {\n root: \"p-2\",\n header: \"mb-2 gap-2\",\n titleGap: \"gap-1\",\n icon: \"h-3.5 w-3.5\",\n name: \"text-xs\",\n meta: \"mt-0.5 gap-x-1.5 gap-y-0.5 text-[11px] leading-4\",\n statusSize: \"xxs\",\n action: \"h-5 w-5\",\n actionIcon: 12,\n metricGrid: \"grid-cols-1 gap-1.5\",\n metricVariant: \"cell\",\n empty: \"px-2 py-3 text-[11px]\",\n },\n md: {\n root: \"p-3\",\n header: \"mb-3 gap-2\",\n titleGap: \"gap-1.5\",\n icon: \"h-4 w-4\",\n name: \"text-sm\",\n meta: \"mt-0.5 gap-x-2 gap-y-0.5 text-xs\",\n statusSize: \"xs\",\n action: \"h-6 w-6\",\n actionIcon: 14,\n metricGrid: \"gap-3\",\n metricVariant: \"default\",\n empty: \"px-3 py-4 text-xs\",\n },\n lg: {\n root: \"p-4\",\n header: \"mb-4 gap-3\",\n titleGap: \"gap-2\",\n icon: \"h-5 w-5\",\n name: \"text-base\",\n meta: \"mt-1 gap-x-2 gap-y-1 text-xs\",\n statusSize: \"sm\",\n action: \"h-7 w-7\",\n actionIcon: 16,\n metricGrid: \"gap-4\",\n metricVariant: \"default\",\n empty: \"px-4 py-6 text-sm\",\n },\n};\n\nconst VARIANT_CLASSES: Record<WorkloadCardVariant, string> = {\n default: \"border-border bg-card text-card-foreground\",\n outline: \"border-border bg-background text-foreground\",\n subtle: \"border-transparent bg-muted/35 text-foreground\",\n elevated: \"border-border/70 bg-card text-card-foreground shadow-sm\",\n ghost: \"border-transparent bg-transparent text-foreground\",\n};\n\nfunction metricGridClass(count: number): string {\n if (count <= 1) return \"grid-cols-1\";\n if (count === 2) return \"grid-cols-2\";\n return \"grid-cols-3\";\n}\n\n// Memory renders as cores-style bars at one bar per gibibyte, matching CPU; bytes\n// are fed raw and TimeseriesCoreBars divides by perBar so captions read \"x GiB\".\nconst MEMORY_BAR_UNIT = { perBar: 1024 ** 3, label: \"GiB\", barLabel: \"GiB\" };\n\nfunction WorkloadIcon({\n icon,\n title,\n className,\n}: {\n icon: WorkloadCardIcon;\n title: string;\n className?: string;\n}) {\n if (typeof icon === \"string\") {\n return (\n <Icon name={icon} title={title} {...(className ? { className } : {})} />\n );\n }\n return (\n <Icon icon={icon} title={title} {...(className ? { className } : {})} />\n );\n}\n\nfunction metricSeries(metric: WorkloadCardResourceMetric): TimeseriesSeries[] {\n const series: TimeseriesSeries[] = [\n { ...metric.value, label: metric.valueLabel ?? \"usage\" },\n ];\n if (typeof metric.max === \"object\") {\n series.push({ ...metric.max, label: metric.maxLabel ?? \"limit\" });\n }\n return series;\n}\n\n// A fixed numeric max has no series to plot, so the history chart draws it as\n// a flat capacity line instead.\nfunction metricReferenceLines(\n metric: WorkloadCardResourceMetric,\n): TimeseriesReferenceLine[] {\n if (typeof metric.max !== \"number\") return [];\n return [{ value: metric.max, label: metric.maxLabel ?? \"capacity\" }];\n}\n\nfunction hasMetric(metrics: WorkloadCardMetrics): boolean {\n return Boolean(metrics.cpu || metrics.memory || metrics.disk);\n}\n\ntype HeaderMetaItem = { key: string; content: ReactNode; title?: string };\n\nfunction HeaderMeta({\n separator,\n title,\n children,\n}: {\n separator: boolean;\n title?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <span className=\"inline-flex min-w-0 items-center gap-1\" title={title}>\n {separator ? (\n <span\n className=\"h-1 w-1 shrink-0 rounded-full bg-muted-foreground/40\"\n aria-hidden\n />\n ) : null}\n <span className=\"min-w-0 truncate\">{children}</span>\n </span>\n );\n}\n\nfunction headerMetaItems(\n workload: WorkloadCardWorkload,\n typeLabel: string | undefined,\n): HeaderMetaItem[] {\n const items: HeaderMetaItem[] = [];\n if (typeLabel) items.push({ key: \"type\", content: typeLabel });\n if (workload.namespace) {\n items.push({ key: \"namespace\", content: workload.namespace });\n }\n if (workload.role) items.push({ key: \"role\", content: workload.role });\n const replicaText = formatReplicaCounts(workload.replicas);\n if (replicaText) items.push({ key: \"replicas\", content: replicaText });\n if (workload.createdAt !== undefined) {\n items.push({\n key: \"age\",\n content: (\n <>\n age <Timestamp value={workload.createdAt} format=\"relative\" />\n </>\n ),\n });\n }\n workload.metadata?.forEach((item, i) => {\n const plain =\n typeof item.value === \"string\" || typeof item.value === \"number\";\n items.push({\n key: `meta-${i}`,\n content: (\n <>\n {item.icon ? (\n <WorkloadIcon\n icon={item.icon}\n title={item.label}\n className=\"h-3.5 w-auto shrink-0\"\n />\n ) : (\n <span className=\"text-muted-foreground/70\">{item.label}</span>\n )}{\" \"}\n {item.value}\n </>\n ),\n title: plain ? `${item.label}: ${item.value}` : item.label,\n });\n });\n return items;\n}\n\n/**\n * WorkloadCard is a compact resource card for a workload: a Kubernetes\n * resource (`kind`) or anything else (a free-form `type`, `icon` and\n * `metadata`). It shows identity, status, subtitle metadata, and\n * CPU/memory/disk utilization backed by the existing time-series primitives:\n * CPU and memory as core-style bars (memory at one bar per GiB) and disk as a\n * linear progress bar. Callers own the metric series (URL ids or `load`\n * functions); the card only composes them.\n *\n * Like the timeseries widgets it renders, it needs a react-query\n * `QueryClientProvider` above it.\n */\nexport function WorkloadCard({\n children,\n workload,\n metrics,\n baseUrl,\n range = \"1h\",\n refreshMs = 5000,\n expandable = true,\n headerActions,\n size = \"md\",\n variant = \"default\",\n fetcher,\n className,\n}: WorkloadCardProps) {\n const [expanded, setExpanded] = useState(false);\n const typeLabel = workloadTypeLabel(workload);\n const statusLabel = workloadStatusLabel(workload.status);\n const metaItems = headerMetaItems(workload, typeLabel);\n const workloadIcon =\n workload.icon ?? (workload.kind ? KIND_ICONS[workload.kind] : UiBox);\n const sizeClasses = SIZE_CLASSES[size];\n\n const panelMetrics = useMemo(() => {\n const list: PanelMetric[] = [];\n if (metrics.cpu) {\n list.push({\n key: \"cpu\",\n title: metrics.cpu.title ?? \"CPU\",\n unit: metrics.cpu.unit ?? \"short\",\n icon: metrics.cpu.icon ?? UiChip,\n metric: metrics.cpu,\n });\n }\n if (metrics.memory) {\n list.push({\n key: \"memory\",\n title: metrics.memory.title ?? \"Memory\",\n unit: metrics.memory.unit ?? \"bytes\",\n icon: metrics.memory.icon ?? UiMemoryStick,\n metric: metrics.memory,\n });\n }\n if (metrics.disk) {\n list.push({\n key: \"disk\",\n title: metrics.disk.title ?? \"Disk\",\n unit: metrics.disk.unit ?? \"bytes\",\n icon: metrics.disk.icon ?? UiHardDrive,\n metric: metrics.disk,\n });\n }\n return list;\n }, [metrics]);\n\n const metricProps = {\n ...(baseUrl !== undefined ? { baseUrl } : {}),\n range,\n refreshMs,\n ...(fetcher !== undefined ? { fetcher } : {}),\n };\n const canExpand = expandable && hasMetric(metrics);\n\n return (\n <div\n className={cn(\n \"w-full rounded-md border\",\n VARIANT_CLASSES[variant],\n sizeClasses.root,\n className,\n )}\n data-size={size}\n data-variant={variant}\n >\n <div\n className={cn(\"flex items-start justify-between\", sizeClasses.header)}\n >\n <div className=\"min-w-0\">\n <div\n className={cn(\"flex min-w-0 items-center\", sizeClasses.titleGap)}\n >\n <WorkloadIcon\n icon={workloadIcon}\n title={typeLabel ?? workload.name}\n className={cn(\"shrink-0 text-muted-foreground\", sizeClasses.icon)}\n />\n <span\n className={cn(\"min-w-0 truncate font-medium\", sizeClasses.name)}\n title={workload.name}\n >\n {workload.name}\n </span>\n </div>\n {metaItems.length > 0 ? (\n <div\n className={cn(\n \"flex flex-wrap items-center text-muted-foreground\",\n sizeClasses.meta,\n )}\n >\n {metaItems.map((item, i) => (\n <HeaderMeta\n key={item.key}\n separator={i > 0}\n title={item.title}\n >\n {item.content}\n </HeaderMeta>\n ))}\n </div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {statusLabel ? (\n <span title={workload.status?.message}>\n <Badge\n tone={workloadStatusTone(workload.status)}\n variant=\"soft\"\n size={sizeClasses.statusSize}\n >\n {statusLabel}\n </Badge>\n </span>\n ) : null}\n {headerActions}\n {canExpand ? (\n <button\n type=\"button\"\n aria-label={`Open ${workload.name} history`}\n title=\"History\"\n onClick={() => setExpanded(true)}\n className={cn(\n \"inline-flex items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\",\n sizeClasses.action,\n )}\n >\n <Icon\n icon={UiFullscreen}\n width={sizeClasses.actionIcon}\n height={sizeClasses.actionIcon}\n />\n </button>\n ) : null}\n </div>\n </div>\n\n {children !== undefined ? children : hasMetric(metrics) ? (\n <div\n className={cn(\n \"grid items-start gap-3\",\n sizeClasses.metricVariant === \"cell\"\n ? sizeClasses.metricGrid\n : cn(\n metricGridClass(panelMetrics.length),\n sizeClasses.metricGrid,\n ),\n )}\n >\n {metrics.cpu ? (\n <TimeseriesCoreBars\n title={metrics.cpu.title ?? \"CPU\"}\n icon={metrics.cpu.icon ?? UiChip}\n value={metrics.cpu.value}\n {...(metrics.cpu.max !== undefined\n ? { max: metrics.cpu.max }\n : {})}\n {...(metrics.cpu.thresholds\n ? { thresholds: metrics.cpu.thresholds }\n : {})}\n {...(metrics.cpu.orientation\n ? { orientation: metrics.cpu.orientation }\n : {})}\n {...(metrics.cpu.showValue !== undefined\n ? { showValue: metrics.cpu.showValue }\n : {})}\n variant={sizeClasses.metricVariant}\n {...metricProps}\n />\n ) : null}\n {metrics.memory ? (\n <TimeseriesCoreBars\n title={metrics.memory.title ?? \"Memory\"}\n icon={metrics.memory.icon ?? UiMemoryStick}\n value={metrics.memory.value}\n unit={MEMORY_BAR_UNIT}\n variant={sizeClasses.metricVariant}\n {...(metrics.memory.max !== undefined\n ? { max: metrics.memory.max }\n : {})}\n {...(metrics.memory.thresholds\n ? { thresholds: metrics.memory.thresholds }\n : {})}\n {...metricProps}\n />\n ) : null}\n {metrics.disk ? (\n <TimeseriesGauge\n title={metrics.disk.title ?? \"Disk\"}\n icon={metrics.disk.icon ?? UiHardDrive}\n value={metrics.disk.value}\n unit={metrics.disk.unit ?? \"bytes\"}\n shape=\"linear\"\n expandable={false}\n centerDisplay={metrics.disk.centerDisplay ?? \"value\"}\n variant={sizeClasses.metricVariant}\n {...(metrics.disk.max !== undefined\n ? { max: metrics.disk.max }\n : {})}\n {...(metrics.disk.thresholds\n ? { thresholds: metrics.disk.thresholds }\n : {})}\n {...metricProps}\n />\n ) : null}\n </div>\n ) : (\n <div\n className={cn(\n \"rounded-md border border-dashed border-border text-center text-muted-foreground\",\n sizeClasses.empty,\n )}\n >\n No metrics configured\n </div>\n )}\n\n <Modal\n open={expanded}\n onClose={() => setExpanded(false)}\n title={`${workload.name} history`}\n size=\"xl\"\n >\n <div className=\"flex flex-col gap-3\">\n {panelMetrics.map(({ key, title, unit, icon, metric }) => (\n <TimeseriesPanel\n key={key}\n title={title}\n icon={icon}\n series={metricSeries(metric)}\n referenceLines={metricReferenceLines(metric)}\n {...(unit ? { unit } : {})}\n {...metricProps}\n expandable={false}\n />\n ))}\n </div>\n </Modal>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import { TimeseriesResponse } from './TimeseriesPanel.js';
|
|
3
3
|
import { WorkloadCardMetrics, WorkloadCardWorkload } from './WorkloadCard.model.js';
|
|
4
4
|
export interface WorkloadCardProps {
|
|
5
|
+
/** Caller-owned metric body, e.g. statistical snapshots instead of time series. */
|
|
6
|
+
children?: ReactNode;
|
|
5
7
|
workload: WorkloadCardWorkload;
|
|
6
8
|
/**
|
|
7
9
|
* CPU/memory/disk series. Each is requested as `baseUrl + id` via `fetcher`,
|
|
@@ -34,5 +36,5 @@ export type WorkloadCardVariant = "default" | "outline" | "subtle" | "elevated"
|
|
|
34
36
|
* Like the timeseries widgets it renders, it needs a react-query
|
|
35
37
|
* `QueryClientProvider` above it.
|
|
36
38
|
*/
|
|
37
|
-
export declare function WorkloadCard({ workload, metrics, baseUrl, range, refreshMs, expandable, headerActions, size, variant, fetcher, className, }: WorkloadCardProps): import("react").JSX.Element;
|
|
39
|
+
export declare function WorkloadCard({ children, workload, metrics, baseUrl, range, refreshMs, expandable, headerActions, size, variant, fetcher, className, }: WorkloadCardProps): import("react").JSX.Element;
|
|
38
40
|
//# sourceMappingURL=WorkloadCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkloadCard.d.ts","sourceRoot":"","sources":["../../src/data/WorkloadCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAe1D,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAOL,KAAK,mBAAmB,EAExB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B;;;;OAIG;IACH,OAAO,EAAE,mBAAmB,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAClD,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,SAAS,GACT,QAAQ,GACR,UAAU,GACV,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkloadCard.d.ts","sourceRoot":"","sources":["../../src/data/WorkloadCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAe1D,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAOL,KAAK,mBAAmB,EAExB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B;;;;OAIG;IACH,OAAO,EAAE,mBAAmB,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAClD,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,SAAS,GACT,QAAQ,GACR,UAAU,GACV,OAAO,CAAC;AAmNZ;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,OAAO,EACP,KAAY,EACZ,SAAgB,EAChB,UAAiB,EACjB,aAAa,EACb,IAAW,EACX,OAAmB,EACnB,OAAO,EACP,SAAS,GACV,EAAE,iBAAiB,+BA2OnB"}
|
|
@@ -161,7 +161,11 @@ function headerMetaItems(workload, typeLabel) {
|
|
|
161
161
|
items.push({
|
|
162
162
|
key: `meta-${i}`,
|
|
163
163
|
content: /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
164
|
-
/* @__PURE__ */ jsx(
|
|
164
|
+
item.icon ? /* @__PURE__ */ jsx(WorkloadIcon, {
|
|
165
|
+
icon: item.icon,
|
|
166
|
+
title: item.label,
|
|
167
|
+
className: "h-3.5 w-auto shrink-0"
|
|
168
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
165
169
|
className: "text-muted-foreground/70",
|
|
166
170
|
children: item.label
|
|
167
171
|
}),
|
|
@@ -185,7 +189,7 @@ function headerMetaItems(workload, typeLabel) {
|
|
|
185
189
|
* Like the timeseries widgets it renders, it needs a react-query
|
|
186
190
|
* `QueryClientProvider` above it.
|
|
187
191
|
*/
|
|
188
|
-
function WorkloadCard({ workload, metrics, baseUrl, range = "1h", refreshMs = 5e3, expandable = true, headerActions, size = "md", variant = "default", fetcher, className }) {
|
|
192
|
+
function WorkloadCard({ children, workload, metrics, baseUrl, range = "1h", refreshMs = 5e3, expandable = true, headerActions, size = "md", variant = "default", fetcher, className }) {
|
|
189
193
|
const [expanded, setExpanded] = useState(false);
|
|
190
194
|
const typeLabel = workloadTypeLabel(workload);
|
|
191
195
|
const statusLabel = workloadStatusLabel(workload.status);
|
|
@@ -280,7 +284,7 @@ function WorkloadCard({ workload, metrics, baseUrl, range = "1h", refreshMs = 5e
|
|
|
280
284
|
]
|
|
281
285
|
})]
|
|
282
286
|
}),
|
|
283
|
-
hasMetric(metrics) ? /* @__PURE__ */ jsxs("div", {
|
|
287
|
+
children !== void 0 ? children : hasMetric(metrics) ? /* @__PURE__ */ jsxs("div", {
|
|
284
288
|
className: cn("grid items-start gap-3", sizeClasses.metricVariant === "cell" ? sizeClasses.metricGrid : cn(metricGridClass(panelMetrics.length), sizeClasses.metricGrid)),
|
|
285
289
|
children: [
|
|
286
290
|
metrics.cpu ? /* @__PURE__ */ jsx(TimeseriesCoreBars, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkloadCard.js","names":["_Fragment"],"sources":["../../src/data/WorkloadCard.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport {\n K8SDeployment,\n K8SIngress,\n K8SPod,\n K8SService,\n K8SStatefulset,\n} from \"@flanksource/icons/mi\";\nimport { cn } from \"../lib/utils\";\nimport { Modal } from \"../overlay/Modal\";\nimport { Badge } from \"./Badge\";\nimport { Timestamp } from \"./cells/Timestamp\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { TimeseriesCoreBars } from \"./TimeseriesCoreBars\";\nimport { TimeseriesGauge } from \"./TimeseriesGauge\";\nimport {\n TimeseriesPanel,\n type TimeseriesReferenceLine,\n type TimeseriesResponse,\n type TimeseriesSeries,\n} from \"./TimeseriesPanel\";\nimport {\n UiBox,\n UiChip,\n UiFullscreen,\n UiHardDrive,\n UiMemoryStick,\n} from \"../icons\";\nimport {\n formatReplicaCounts,\n workloadStatusLabel,\n workloadStatusTone,\n workloadTypeLabel,\n type WorkloadCardIcon,\n type WorkloadCardKind,\n type WorkloadCardMetrics,\n type WorkloadCardResourceMetric,\n type WorkloadCardWorkload,\n} from \"./WorkloadCard.model\";\n\nexport interface WorkloadCardProps {\n workload: WorkloadCardWorkload;\n /**\n * CPU/memory/disk series. Each is requested as `baseUrl + id` via `fetcher`,\n * or loaded by its own `load` function (then `id` is the cache key and must\n * be unique per data source).\n */\n metrics: WorkloadCardMetrics;\n baseUrl?: string;\n range?: string;\n refreshMs?: number;\n expandable?: boolean;\n /** Controls rendered beside status and history, owned by the host domain. */\n headerActions?: ReactNode;\n size?: WorkloadCardSize;\n variant?: WorkloadCardVariant;\n fetcher?: (url: string) => Promise<TimeseriesResponse>;\n className?: string;\n}\n\nexport type WorkloadCardSize = \"sm\" | \"md\" | \"lg\";\nexport type WorkloadCardVariant =\n | \"default\"\n | \"outline\"\n | \"subtle\"\n | \"elevated\"\n | \"ghost\";\n\ntype MetricKey = keyof WorkloadCardMetrics;\n\ntype PanelMetric = {\n key: MetricKey;\n title: string;\n unit?: string;\n icon: WorkloadCardIcon;\n metric: WorkloadCardResourceMetric;\n};\n\nconst KIND_ICONS: Record<WorkloadCardKind, StaticIconComponent> = {\n service: K8SService,\n ingress: K8SIngress,\n deployment: K8SDeployment,\n statefulset: K8SStatefulset,\n pod: K8SPod,\n};\n\ntype WorkloadCardSizeClasses = {\n root: string;\n header: string;\n titleGap: string;\n icon: string;\n name: string;\n meta: string;\n statusSize: \"xxs\" | \"xs\" | \"sm\";\n action: string;\n actionIcon: number;\n metricGrid: string;\n metricVariant: \"default\" | \"cell\";\n empty: string;\n};\n\nconst SIZE_CLASSES: Record<WorkloadCardSize, WorkloadCardSizeClasses> = {\n sm: {\n root: \"p-2\",\n header: \"mb-2 gap-2\",\n titleGap: \"gap-1\",\n icon: \"h-3.5 w-3.5\",\n name: \"text-xs\",\n meta: \"mt-0.5 gap-x-1.5 gap-y-0.5 text-[11px] leading-4\",\n statusSize: \"xxs\",\n action: \"h-5 w-5\",\n actionIcon: 12,\n metricGrid: \"grid-cols-1 gap-1.5\",\n metricVariant: \"cell\",\n empty: \"px-2 py-3 text-[11px]\",\n },\n md: {\n root: \"p-3\",\n header: \"mb-3 gap-2\",\n titleGap: \"gap-1.5\",\n icon: \"h-4 w-4\",\n name: \"text-sm\",\n meta: \"mt-0.5 gap-x-2 gap-y-0.5 text-xs\",\n statusSize: \"xs\",\n action: \"h-6 w-6\",\n actionIcon: 14,\n metricGrid: \"gap-3\",\n metricVariant: \"default\",\n empty: \"px-3 py-4 text-xs\",\n },\n lg: {\n root: \"p-4\",\n header: \"mb-4 gap-3\",\n titleGap: \"gap-2\",\n icon: \"h-5 w-5\",\n name: \"text-base\",\n meta: \"mt-1 gap-x-2 gap-y-1 text-xs\",\n statusSize: \"sm\",\n action: \"h-7 w-7\",\n actionIcon: 16,\n metricGrid: \"gap-4\",\n metricVariant: \"default\",\n empty: \"px-4 py-6 text-sm\",\n },\n};\n\nconst VARIANT_CLASSES: Record<WorkloadCardVariant, string> = {\n default: \"border-border bg-card text-card-foreground\",\n outline: \"border-border bg-background text-foreground\",\n subtle: \"border-transparent bg-muted/35 text-foreground\",\n elevated: \"border-border/70 bg-card text-card-foreground shadow-sm\",\n ghost: \"border-transparent bg-transparent text-foreground\",\n};\n\nfunction metricGridClass(count: number): string {\n if (count <= 1) return \"grid-cols-1\";\n if (count === 2) return \"grid-cols-2\";\n return \"grid-cols-3\";\n}\n\n// Memory renders as cores-style bars at one bar per gibibyte, matching CPU; bytes\n// are fed raw and TimeseriesCoreBars divides by perBar so captions read \"x GiB\".\nconst MEMORY_BAR_UNIT = { perBar: 1024 ** 3, label: \"GiB\", barLabel: \"GiB\" };\n\nfunction WorkloadIcon({\n icon,\n title,\n className,\n}: {\n icon: WorkloadCardIcon;\n title: string;\n className?: string;\n}) {\n if (typeof icon === \"string\") {\n return (\n <Icon name={icon} title={title} {...(className ? { className } : {})} />\n );\n }\n return (\n <Icon icon={icon} title={title} {...(className ? { className } : {})} />\n );\n}\n\nfunction metricSeries(metric: WorkloadCardResourceMetric): TimeseriesSeries[] {\n const series: TimeseriesSeries[] = [\n { ...metric.value, label: metric.valueLabel ?? \"usage\" },\n ];\n if (typeof metric.max === \"object\") {\n series.push({ ...metric.max, label: metric.maxLabel ?? \"limit\" });\n }\n return series;\n}\n\n// A fixed numeric max has no series to plot, so the history chart draws it as\n// a flat capacity line instead.\nfunction metricReferenceLines(\n metric: WorkloadCardResourceMetric,\n): TimeseriesReferenceLine[] {\n if (typeof metric.max !== \"number\") return [];\n return [{ value: metric.max, label: metric.maxLabel ?? \"capacity\" }];\n}\n\nfunction hasMetric(metrics: WorkloadCardMetrics): boolean {\n return Boolean(metrics.cpu || metrics.memory || metrics.disk);\n}\n\ntype HeaderMetaItem = { key: string; content: ReactNode; title?: string };\n\nfunction HeaderMeta({\n separator,\n title,\n children,\n}: {\n separator: boolean;\n title?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <span className=\"inline-flex min-w-0 items-center gap-1\" title={title}>\n {separator ? (\n <span\n className=\"h-1 w-1 shrink-0 rounded-full bg-muted-foreground/40\"\n aria-hidden\n />\n ) : null}\n <span className=\"min-w-0 truncate\">{children}</span>\n </span>\n );\n}\n\nfunction headerMetaItems(\n workload: WorkloadCardWorkload,\n typeLabel: string | undefined,\n): HeaderMetaItem[] {\n const items: HeaderMetaItem[] = [];\n if (typeLabel) items.push({ key: \"type\", content: typeLabel });\n if (workload.namespace) {\n items.push({ key: \"namespace\", content: workload.namespace });\n }\n if (workload.role) items.push({ key: \"role\", content: workload.role });\n const replicaText = formatReplicaCounts(workload.replicas);\n if (replicaText) items.push({ key: \"replicas\", content: replicaText });\n if (workload.createdAt !== undefined) {\n items.push({\n key: \"age\",\n content: (\n <>\n age <Timestamp value={workload.createdAt} format=\"relative\" />\n </>\n ),\n });\n }\n workload.metadata?.forEach((item, i) => {\n const plain =\n typeof item.value === \"string\" || typeof item.value === \"number\";\n items.push({\n key: `meta-${i}`,\n content: (\n <>\n <span className=\"text-muted-foreground/70\">{item.label}</span>{\" \"}\n {item.value}\n </>\n ),\n title: plain ? `${item.label}: ${item.value}` : item.label,\n });\n });\n return items;\n}\n\n/**\n * WorkloadCard is a compact resource card for a workload: a Kubernetes\n * resource (`kind`) or anything else (a free-form `type`, `icon` and\n * `metadata`). It shows identity, status, subtitle metadata, and\n * CPU/memory/disk utilization backed by the existing time-series primitives:\n * CPU and memory as core-style bars (memory at one bar per GiB) and disk as a\n * linear progress bar. Callers own the metric series (URL ids or `load`\n * functions); the card only composes them.\n *\n * Like the timeseries widgets it renders, it needs a react-query\n * `QueryClientProvider` above it.\n */\nexport function WorkloadCard({\n workload,\n metrics,\n baseUrl,\n range = \"1h\",\n refreshMs = 5000,\n expandable = true,\n headerActions,\n size = \"md\",\n variant = \"default\",\n fetcher,\n className,\n}: WorkloadCardProps) {\n const [expanded, setExpanded] = useState(false);\n const typeLabel = workloadTypeLabel(workload);\n const statusLabel = workloadStatusLabel(workload.status);\n const metaItems = headerMetaItems(workload, typeLabel);\n const workloadIcon =\n workload.icon ?? (workload.kind ? KIND_ICONS[workload.kind] : UiBox);\n const sizeClasses = SIZE_CLASSES[size];\n\n const panelMetrics = useMemo(() => {\n const list: PanelMetric[] = [];\n if (metrics.cpu) {\n list.push({\n key: \"cpu\",\n title: metrics.cpu.title ?? \"CPU\",\n unit: metrics.cpu.unit ?? \"short\",\n icon: metrics.cpu.icon ?? UiChip,\n metric: metrics.cpu,\n });\n }\n if (metrics.memory) {\n list.push({\n key: \"memory\",\n title: metrics.memory.title ?? \"Memory\",\n unit: metrics.memory.unit ?? \"bytes\",\n icon: metrics.memory.icon ?? UiMemoryStick,\n metric: metrics.memory,\n });\n }\n if (metrics.disk) {\n list.push({\n key: \"disk\",\n title: metrics.disk.title ?? \"Disk\",\n unit: metrics.disk.unit ?? \"bytes\",\n icon: metrics.disk.icon ?? UiHardDrive,\n metric: metrics.disk,\n });\n }\n return list;\n }, [metrics]);\n\n const metricProps = {\n ...(baseUrl !== undefined ? { baseUrl } : {}),\n range,\n refreshMs,\n ...(fetcher !== undefined ? { fetcher } : {}),\n };\n const canExpand = expandable && hasMetric(metrics);\n\n return (\n <div\n className={cn(\n \"w-full rounded-md border\",\n VARIANT_CLASSES[variant],\n sizeClasses.root,\n className,\n )}\n data-size={size}\n data-variant={variant}\n >\n <div\n className={cn(\"flex items-start justify-between\", sizeClasses.header)}\n >\n <div className=\"min-w-0\">\n <div\n className={cn(\"flex min-w-0 items-center\", sizeClasses.titleGap)}\n >\n <WorkloadIcon\n icon={workloadIcon}\n title={typeLabel ?? workload.name}\n className={cn(\"shrink-0 text-muted-foreground\", sizeClasses.icon)}\n />\n <span\n className={cn(\"min-w-0 truncate font-medium\", sizeClasses.name)}\n title={workload.name}\n >\n {workload.name}\n </span>\n </div>\n {metaItems.length > 0 ? (\n <div\n className={cn(\n \"flex flex-wrap items-center text-muted-foreground\",\n sizeClasses.meta,\n )}\n >\n {metaItems.map((item, i) => (\n <HeaderMeta\n key={item.key}\n separator={i > 0}\n title={item.title}\n >\n {item.content}\n </HeaderMeta>\n ))}\n </div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {statusLabel ? (\n <span title={workload.status?.message}>\n <Badge\n tone={workloadStatusTone(workload.status)}\n variant=\"soft\"\n size={sizeClasses.statusSize}\n >\n {statusLabel}\n </Badge>\n </span>\n ) : null}\n {headerActions}\n {canExpand ? (\n <button\n type=\"button\"\n aria-label={`Open ${workload.name} history`}\n title=\"History\"\n onClick={() => setExpanded(true)}\n className={cn(\n \"inline-flex items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\",\n sizeClasses.action,\n )}\n >\n <Icon\n icon={UiFullscreen}\n width={sizeClasses.actionIcon}\n height={sizeClasses.actionIcon}\n />\n </button>\n ) : null}\n </div>\n </div>\n\n {hasMetric(metrics) ? (\n <div\n className={cn(\n \"grid items-start gap-3\",\n sizeClasses.metricVariant === \"cell\"\n ? sizeClasses.metricGrid\n : cn(\n metricGridClass(panelMetrics.length),\n sizeClasses.metricGrid,\n ),\n )}\n >\n {metrics.cpu ? (\n <TimeseriesCoreBars\n title={metrics.cpu.title ?? \"CPU\"}\n icon={metrics.cpu.icon ?? UiChip}\n value={metrics.cpu.value}\n {...(metrics.cpu.max !== undefined\n ? { max: metrics.cpu.max }\n : {})}\n {...(metrics.cpu.thresholds\n ? { thresholds: metrics.cpu.thresholds }\n : {})}\n {...(metrics.cpu.orientation\n ? { orientation: metrics.cpu.orientation }\n : {})}\n {...(metrics.cpu.showValue !== undefined\n ? { showValue: metrics.cpu.showValue }\n : {})}\n variant={sizeClasses.metricVariant}\n {...metricProps}\n />\n ) : null}\n {metrics.memory ? (\n <TimeseriesCoreBars\n title={metrics.memory.title ?? \"Memory\"}\n icon={metrics.memory.icon ?? UiMemoryStick}\n value={metrics.memory.value}\n unit={MEMORY_BAR_UNIT}\n variant={sizeClasses.metricVariant}\n {...(metrics.memory.max !== undefined\n ? { max: metrics.memory.max }\n : {})}\n {...(metrics.memory.thresholds\n ? { thresholds: metrics.memory.thresholds }\n : {})}\n {...metricProps}\n />\n ) : null}\n {metrics.disk ? (\n <TimeseriesGauge\n title={metrics.disk.title ?? \"Disk\"}\n icon={metrics.disk.icon ?? UiHardDrive}\n value={metrics.disk.value}\n unit={metrics.disk.unit ?? \"bytes\"}\n shape=\"linear\"\n expandable={false}\n centerDisplay={metrics.disk.centerDisplay ?? \"value\"}\n variant={sizeClasses.metricVariant}\n {...(metrics.disk.max !== undefined\n ? { max: metrics.disk.max }\n : {})}\n {...(metrics.disk.thresholds\n ? { thresholds: metrics.disk.thresholds }\n : {})}\n {...metricProps}\n />\n ) : null}\n </div>\n ) : (\n <div\n className={cn(\n \"rounded-md border border-dashed border-border text-center text-muted-foreground\",\n sizeClasses.empty,\n )}\n >\n No metrics configured\n </div>\n )}\n\n <Modal\n open={expanded}\n onClose={() => setExpanded(false)}\n title={`${workload.name} history`}\n size=\"xl\"\n >\n <div className=\"flex flex-col gap-3\">\n {panelMetrics.map(({ key, title, unit, icon, metric }) => (\n <TimeseriesPanel\n key={key}\n title={title}\n icon={icon}\n series={metricSeries(metric)}\n referenceLines={metricReferenceLines(metric)}\n {...(unit ? { unit } : {})}\n {...metricProps}\n expandable={false}\n />\n ))}\n </div>\n </Modal>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkloadCard.js","names":["_Fragment"],"sources":["../../src/data/WorkloadCard.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport {\n K8SDeployment,\n K8SIngress,\n K8SPod,\n K8SService,\n K8SStatefulset,\n} from \"@flanksource/icons/mi\";\nimport { cn } from \"../lib/utils\";\nimport { Modal } from \"../overlay/Modal\";\nimport { Badge } from \"./Badge\";\nimport { Timestamp } from \"./cells/Timestamp\";\nimport { Icon, type StaticIconComponent } from \"./Icon\";\nimport { TimeseriesCoreBars } from \"./TimeseriesCoreBars\";\nimport { TimeseriesGauge } from \"./TimeseriesGauge\";\nimport {\n TimeseriesPanel,\n type TimeseriesReferenceLine,\n type TimeseriesResponse,\n type TimeseriesSeries,\n} from \"./TimeseriesPanel\";\nimport {\n UiBox,\n UiChip,\n UiFullscreen,\n UiHardDrive,\n UiMemoryStick,\n} from \"../icons\";\nimport {\n formatReplicaCounts,\n workloadStatusLabel,\n workloadStatusTone,\n workloadTypeLabel,\n type WorkloadCardIcon,\n type WorkloadCardKind,\n type WorkloadCardMetrics,\n type WorkloadCardResourceMetric,\n type WorkloadCardWorkload,\n} from \"./WorkloadCard.model\";\n\nexport interface WorkloadCardProps {\n /** Caller-owned metric body, e.g. statistical snapshots instead of time series. */\n children?: ReactNode;\n workload: WorkloadCardWorkload;\n /**\n * CPU/memory/disk series. Each is requested as `baseUrl + id` via `fetcher`,\n * or loaded by its own `load` function (then `id` is the cache key and must\n * be unique per data source).\n */\n metrics: WorkloadCardMetrics;\n baseUrl?: string;\n range?: string;\n refreshMs?: number;\n expandable?: boolean;\n /** Controls rendered beside status and history, owned by the host domain. */\n headerActions?: ReactNode;\n size?: WorkloadCardSize;\n variant?: WorkloadCardVariant;\n fetcher?: (url: string) => Promise<TimeseriesResponse>;\n className?: string;\n}\n\nexport type WorkloadCardSize = \"sm\" | \"md\" | \"lg\";\nexport type WorkloadCardVariant =\n | \"default\"\n | \"outline\"\n | \"subtle\"\n | \"elevated\"\n | \"ghost\";\n\ntype MetricKey = keyof WorkloadCardMetrics;\n\ntype PanelMetric = {\n key: MetricKey;\n title: string;\n unit?: string;\n icon: WorkloadCardIcon;\n metric: WorkloadCardResourceMetric;\n};\n\nconst KIND_ICONS: Record<WorkloadCardKind, StaticIconComponent> = {\n service: K8SService,\n ingress: K8SIngress,\n deployment: K8SDeployment,\n statefulset: K8SStatefulset,\n pod: K8SPod,\n};\n\ntype WorkloadCardSizeClasses = {\n root: string;\n header: string;\n titleGap: string;\n icon: string;\n name: string;\n meta: string;\n statusSize: \"xxs\" | \"xs\" | \"sm\";\n action: string;\n actionIcon: number;\n metricGrid: string;\n metricVariant: \"default\" | \"cell\";\n empty: string;\n};\n\nconst SIZE_CLASSES: Record<WorkloadCardSize, WorkloadCardSizeClasses> = {\n sm: {\n root: \"p-2\",\n header: \"mb-2 gap-2\",\n titleGap: \"gap-1\",\n icon: \"h-3.5 w-3.5\",\n name: \"text-xs\",\n meta: \"mt-0.5 gap-x-1.5 gap-y-0.5 text-[11px] leading-4\",\n statusSize: \"xxs\",\n action: \"h-5 w-5\",\n actionIcon: 12,\n metricGrid: \"grid-cols-1 gap-1.5\",\n metricVariant: \"cell\",\n empty: \"px-2 py-3 text-[11px]\",\n },\n md: {\n root: \"p-3\",\n header: \"mb-3 gap-2\",\n titleGap: \"gap-1.5\",\n icon: \"h-4 w-4\",\n name: \"text-sm\",\n meta: \"mt-0.5 gap-x-2 gap-y-0.5 text-xs\",\n statusSize: \"xs\",\n action: \"h-6 w-6\",\n actionIcon: 14,\n metricGrid: \"gap-3\",\n metricVariant: \"default\",\n empty: \"px-3 py-4 text-xs\",\n },\n lg: {\n root: \"p-4\",\n header: \"mb-4 gap-3\",\n titleGap: \"gap-2\",\n icon: \"h-5 w-5\",\n name: \"text-base\",\n meta: \"mt-1 gap-x-2 gap-y-1 text-xs\",\n statusSize: \"sm\",\n action: \"h-7 w-7\",\n actionIcon: 16,\n metricGrid: \"gap-4\",\n metricVariant: \"default\",\n empty: \"px-4 py-6 text-sm\",\n },\n};\n\nconst VARIANT_CLASSES: Record<WorkloadCardVariant, string> = {\n default: \"border-border bg-card text-card-foreground\",\n outline: \"border-border bg-background text-foreground\",\n subtle: \"border-transparent bg-muted/35 text-foreground\",\n elevated: \"border-border/70 bg-card text-card-foreground shadow-sm\",\n ghost: \"border-transparent bg-transparent text-foreground\",\n};\n\nfunction metricGridClass(count: number): string {\n if (count <= 1) return \"grid-cols-1\";\n if (count === 2) return \"grid-cols-2\";\n return \"grid-cols-3\";\n}\n\n// Memory renders as cores-style bars at one bar per gibibyte, matching CPU; bytes\n// are fed raw and TimeseriesCoreBars divides by perBar so captions read \"x GiB\".\nconst MEMORY_BAR_UNIT = { perBar: 1024 ** 3, label: \"GiB\", barLabel: \"GiB\" };\n\nfunction WorkloadIcon({\n icon,\n title,\n className,\n}: {\n icon: WorkloadCardIcon;\n title: string;\n className?: string;\n}) {\n if (typeof icon === \"string\") {\n return (\n <Icon name={icon} title={title} {...(className ? { className } : {})} />\n );\n }\n return (\n <Icon icon={icon} title={title} {...(className ? { className } : {})} />\n );\n}\n\nfunction metricSeries(metric: WorkloadCardResourceMetric): TimeseriesSeries[] {\n const series: TimeseriesSeries[] = [\n { ...metric.value, label: metric.valueLabel ?? \"usage\" },\n ];\n if (typeof metric.max === \"object\") {\n series.push({ ...metric.max, label: metric.maxLabel ?? \"limit\" });\n }\n return series;\n}\n\n// A fixed numeric max has no series to plot, so the history chart draws it as\n// a flat capacity line instead.\nfunction metricReferenceLines(\n metric: WorkloadCardResourceMetric,\n): TimeseriesReferenceLine[] {\n if (typeof metric.max !== \"number\") return [];\n return [{ value: metric.max, label: metric.maxLabel ?? \"capacity\" }];\n}\n\nfunction hasMetric(metrics: WorkloadCardMetrics): boolean {\n return Boolean(metrics.cpu || metrics.memory || metrics.disk);\n}\n\ntype HeaderMetaItem = { key: string; content: ReactNode; title?: string };\n\nfunction HeaderMeta({\n separator,\n title,\n children,\n}: {\n separator: boolean;\n title?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <span className=\"inline-flex min-w-0 items-center gap-1\" title={title}>\n {separator ? (\n <span\n className=\"h-1 w-1 shrink-0 rounded-full bg-muted-foreground/40\"\n aria-hidden\n />\n ) : null}\n <span className=\"min-w-0 truncate\">{children}</span>\n </span>\n );\n}\n\nfunction headerMetaItems(\n workload: WorkloadCardWorkload,\n typeLabel: string | undefined,\n): HeaderMetaItem[] {\n const items: HeaderMetaItem[] = [];\n if (typeLabel) items.push({ key: \"type\", content: typeLabel });\n if (workload.namespace) {\n items.push({ key: \"namespace\", content: workload.namespace });\n }\n if (workload.role) items.push({ key: \"role\", content: workload.role });\n const replicaText = formatReplicaCounts(workload.replicas);\n if (replicaText) items.push({ key: \"replicas\", content: replicaText });\n if (workload.createdAt !== undefined) {\n items.push({\n key: \"age\",\n content: (\n <>\n age <Timestamp value={workload.createdAt} format=\"relative\" />\n </>\n ),\n });\n }\n workload.metadata?.forEach((item, i) => {\n const plain =\n typeof item.value === \"string\" || typeof item.value === \"number\";\n items.push({\n key: `meta-${i}`,\n content: (\n <>\n {item.icon ? (\n <WorkloadIcon\n icon={item.icon}\n title={item.label}\n className=\"h-3.5 w-auto shrink-0\"\n />\n ) : (\n <span className=\"text-muted-foreground/70\">{item.label}</span>\n )}{\" \"}\n {item.value}\n </>\n ),\n title: plain ? `${item.label}: ${item.value}` : item.label,\n });\n });\n return items;\n}\n\n/**\n * WorkloadCard is a compact resource card for a workload: a Kubernetes\n * resource (`kind`) or anything else (a free-form `type`, `icon` and\n * `metadata`). It shows identity, status, subtitle metadata, and\n * CPU/memory/disk utilization backed by the existing time-series primitives:\n * CPU and memory as core-style bars (memory at one bar per GiB) and disk as a\n * linear progress bar. Callers own the metric series (URL ids or `load`\n * functions); the card only composes them.\n *\n * Like the timeseries widgets it renders, it needs a react-query\n * `QueryClientProvider` above it.\n */\nexport function WorkloadCard({\n children,\n workload,\n metrics,\n baseUrl,\n range = \"1h\",\n refreshMs = 5000,\n expandable = true,\n headerActions,\n size = \"md\",\n variant = \"default\",\n fetcher,\n className,\n}: WorkloadCardProps) {\n const [expanded, setExpanded] = useState(false);\n const typeLabel = workloadTypeLabel(workload);\n const statusLabel = workloadStatusLabel(workload.status);\n const metaItems = headerMetaItems(workload, typeLabel);\n const workloadIcon =\n workload.icon ?? (workload.kind ? KIND_ICONS[workload.kind] : UiBox);\n const sizeClasses = SIZE_CLASSES[size];\n\n const panelMetrics = useMemo(() => {\n const list: PanelMetric[] = [];\n if (metrics.cpu) {\n list.push({\n key: \"cpu\",\n title: metrics.cpu.title ?? \"CPU\",\n unit: metrics.cpu.unit ?? \"short\",\n icon: metrics.cpu.icon ?? UiChip,\n metric: metrics.cpu,\n });\n }\n if (metrics.memory) {\n list.push({\n key: \"memory\",\n title: metrics.memory.title ?? \"Memory\",\n unit: metrics.memory.unit ?? \"bytes\",\n icon: metrics.memory.icon ?? UiMemoryStick,\n metric: metrics.memory,\n });\n }\n if (metrics.disk) {\n list.push({\n key: \"disk\",\n title: metrics.disk.title ?? \"Disk\",\n unit: metrics.disk.unit ?? \"bytes\",\n icon: metrics.disk.icon ?? UiHardDrive,\n metric: metrics.disk,\n });\n }\n return list;\n }, [metrics]);\n\n const metricProps = {\n ...(baseUrl !== undefined ? { baseUrl } : {}),\n range,\n refreshMs,\n ...(fetcher !== undefined ? { fetcher } : {}),\n };\n const canExpand = expandable && hasMetric(metrics);\n\n return (\n <div\n className={cn(\n \"w-full rounded-md border\",\n VARIANT_CLASSES[variant],\n sizeClasses.root,\n className,\n )}\n data-size={size}\n data-variant={variant}\n >\n <div\n className={cn(\"flex items-start justify-between\", sizeClasses.header)}\n >\n <div className=\"min-w-0\">\n <div\n className={cn(\"flex min-w-0 items-center\", sizeClasses.titleGap)}\n >\n <WorkloadIcon\n icon={workloadIcon}\n title={typeLabel ?? workload.name}\n className={cn(\"shrink-0 text-muted-foreground\", sizeClasses.icon)}\n />\n <span\n className={cn(\"min-w-0 truncate font-medium\", sizeClasses.name)}\n title={workload.name}\n >\n {workload.name}\n </span>\n </div>\n {metaItems.length > 0 ? (\n <div\n className={cn(\n \"flex flex-wrap items-center text-muted-foreground\",\n sizeClasses.meta,\n )}\n >\n {metaItems.map((item, i) => (\n <HeaderMeta\n key={item.key}\n separator={i > 0}\n title={item.title}\n >\n {item.content}\n </HeaderMeta>\n ))}\n </div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {statusLabel ? (\n <span title={workload.status?.message}>\n <Badge\n tone={workloadStatusTone(workload.status)}\n variant=\"soft\"\n size={sizeClasses.statusSize}\n >\n {statusLabel}\n </Badge>\n </span>\n ) : null}\n {headerActions}\n {canExpand ? (\n <button\n type=\"button\"\n aria-label={`Open ${workload.name} history`}\n title=\"History\"\n onClick={() => setExpanded(true)}\n className={cn(\n \"inline-flex items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\",\n sizeClasses.action,\n )}\n >\n <Icon\n icon={UiFullscreen}\n width={sizeClasses.actionIcon}\n height={sizeClasses.actionIcon}\n />\n </button>\n ) : null}\n </div>\n </div>\n\n {children !== undefined ? children : hasMetric(metrics) ? (\n <div\n className={cn(\n \"grid items-start gap-3\",\n sizeClasses.metricVariant === \"cell\"\n ? sizeClasses.metricGrid\n : cn(\n metricGridClass(panelMetrics.length),\n sizeClasses.metricGrid,\n ),\n )}\n >\n {metrics.cpu ? (\n <TimeseriesCoreBars\n title={metrics.cpu.title ?? \"CPU\"}\n icon={metrics.cpu.icon ?? UiChip}\n value={metrics.cpu.value}\n {...(metrics.cpu.max !== undefined\n ? { max: metrics.cpu.max }\n : {})}\n {...(metrics.cpu.thresholds\n ? { thresholds: metrics.cpu.thresholds }\n : {})}\n {...(metrics.cpu.orientation\n ? { orientation: metrics.cpu.orientation }\n : {})}\n {...(metrics.cpu.showValue !== undefined\n ? { showValue: metrics.cpu.showValue }\n : {})}\n variant={sizeClasses.metricVariant}\n {...metricProps}\n />\n ) : null}\n {metrics.memory ? (\n <TimeseriesCoreBars\n title={metrics.memory.title ?? \"Memory\"}\n icon={metrics.memory.icon ?? UiMemoryStick}\n value={metrics.memory.value}\n unit={MEMORY_BAR_UNIT}\n variant={sizeClasses.metricVariant}\n {...(metrics.memory.max !== undefined\n ? { max: metrics.memory.max }\n : {})}\n {...(metrics.memory.thresholds\n ? { thresholds: metrics.memory.thresholds }\n : {})}\n {...metricProps}\n />\n ) : null}\n {metrics.disk ? (\n <TimeseriesGauge\n title={metrics.disk.title ?? \"Disk\"}\n icon={metrics.disk.icon ?? UiHardDrive}\n value={metrics.disk.value}\n unit={metrics.disk.unit ?? \"bytes\"}\n shape=\"linear\"\n expandable={false}\n centerDisplay={metrics.disk.centerDisplay ?? \"value\"}\n variant={sizeClasses.metricVariant}\n {...(metrics.disk.max !== undefined\n ? { max: metrics.disk.max }\n : {})}\n {...(metrics.disk.thresholds\n ? { thresholds: metrics.disk.thresholds }\n : {})}\n {...metricProps}\n />\n ) : null}\n </div>\n ) : (\n <div\n className={cn(\n \"rounded-md border border-dashed border-border text-center text-muted-foreground\",\n sizeClasses.empty,\n )}\n >\n No metrics configured\n </div>\n )}\n\n <Modal\n open={expanded}\n onClose={() => setExpanded(false)}\n title={`${workload.name} history`}\n size=\"xl\"\n >\n <div className=\"flex flex-col gap-3\">\n {panelMetrics.map(({ key, title, unit, icon, metric }) => (\n <TimeseriesPanel\n key={key}\n title={title}\n icon={icon}\n series={metricSeries(metric)}\n referenceLines={metricReferenceLines(metric)}\n {...(unit ? { unit } : {})}\n {...metricProps}\n expandable={false}\n />\n ))}\n </div>\n </Modal>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgFA,IAAM,aAA4D;CAChE,SAAS;CACT,SAAS;CACT,YAAY;CACZ,aAAa;CACb,KAAK;AACP;AAiBA,IAAM,eAAkE;CACtE,IAAI;EACF,MAAM;EACN,QAAQ;EACR,UAAU;EACV,MAAM;EACN,MAAM;EACN,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,YAAY;EACZ,YAAY;EACZ,eAAe;EACf,OAAO;CACT;CACA,IAAI;EACF,MAAM;EACN,QAAQ;EACR,UAAU;EACV,MAAM;EACN,MAAM;EACN,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,YAAY;EACZ,YAAY;EACZ,eAAe;EACf,OAAO;CACT;CACA,IAAI;EACF,MAAM;EACN,QAAQ;EACR,UAAU;EACV,MAAM;EACN,MAAM;EACN,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,YAAY;EACZ,YAAY;EACZ,eAAe;EACf,OAAO;CACT;AACF;AAEA,IAAM,kBAAuD;CAC3D,SAAS;CACT,SAAS;CACT,QAAQ;CACR,UAAU;CACV,OAAO;AACT;AAEA,SAAS,gBAAgB,OAAuB;CAC9C,IAAI,SAAS,GAAG,OAAO;CACvB,IAAI,UAAU,GAAG,OAAO;CACxB,OAAO;AACT;AAIA,IAAM,kBAAkB;CAAE,QAAQ,QAAQ;CAAG,OAAO;CAAO,UAAU;AAAM;AAE3E,SAAS,aAAa,EACpB,MACA,OACA,aAKC;CACD,IAAI,OAAO,SAAS,UAClB,OACE,oBAAC,MAAD;EAAM,MAAM;EAAa;EAAO,GAAK,YAAY,EAAE,UAAU,IAAI,CAAC;CAAK,CAAA;CAG3E,OACE,oBAAC,MAAD;EAAY;EAAa;EAAO,GAAK,YAAY,EAAE,UAAU,IAAI,CAAC;CAAK,CAAA;AAE3E;AAEA,SAAS,aAAa,QAAwD;CAC5E,MAAM,SAA6B,CACjC;EAAE,GAAG,OAAO;EAAO,OAAO,OAAO,cAAc;CAAQ,CACzD;CACA,IAAI,OAAO,OAAO,QAAQ,UACxB,OAAO,KAAK;EAAE,GAAG,OAAO;EAAK,OAAO,OAAO,YAAY;CAAQ,CAAC;CAElE,OAAO;AACT;AAIA,SAAS,qBACP,QAC2B;CAC3B,IAAI,OAAO,OAAO,QAAQ,UAAU,OAAO,CAAC;CAC5C,OAAO,CAAC;EAAE,OAAO,OAAO;EAAK,OAAO,OAAO,YAAY;CAAW,CAAC;AACrE;AAEA,SAAS,UAAU,SAAuC;CACxD,OAAO,QAAQ,QAAQ,OAAO,QAAQ,UAAU,QAAQ,IAAI;AAC9D;AAIA,SAAS,WAAW,EAClB,WACA,OACA,YAKC;CACD,OACE,qBAAC,QAAD;EAAM,WAAU;EAAgD;EAAhE,UAAA,CACG,YACC,oBAAC,QAAD;GACE,WAAU;GACV,eAAA;EACD,CAAA,IACC,MACJ,oBAAC,QAAD;GAAM,WAAU;GAAoB;EAAe,CAAA,CAC/C;;AAEV;AAEA,SAAS,gBACP,UACA,WACkB;CAClB,MAAM,QAA0B,CAAC;CACjC,IAAI,WAAW,MAAM,KAAK;EAAE,KAAK;EAAQ,SAAS;CAAU,CAAC;CAC7D,IAAI,SAAS,WACX,MAAM,KAAK;EAAE,KAAK;EAAa,SAAS,SAAS;CAAU,CAAC;CAE9D,IAAI,SAAS,MAAM,MAAM,KAAK;EAAE,KAAK;EAAQ,SAAS,SAAS;CAAK,CAAC;CACrE,MAAM,cAAc,oBAAoB,SAAS,QAAQ;CACzD,IAAI,aAAa,MAAM,KAAK;EAAE,KAAK;EAAY,SAAS;CAAY,CAAC;CACrE,IAAI,SAAS,cAAc,KAAA,GACzB,MAAM,KAAK;EACT,KAAK;EACL,SACE,qBAAAA,YAAA,EAAA,UAAA,CAAE,QACI,oBAAC,WAAD;GAAW,OAAO,SAAS;GAAW,QAAO;EAAY,CAAA,CAC7D,EAAA,CAAA;CAEN,CAAC;CAEH,SAAS,UAAU,SAAS,MAAM,MAAM;EACtC,MAAM,QACJ,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU;EAC1D,MAAM,KAAK;GACT,KAAK,QAAQ;GACb,SACE,qBAAAA,YAAA,EAAA,UAAA;IACG,KAAK,OACJ,oBAAC,cAAD;KACE,MAAM,KAAK;KACX,OAAO,KAAK;KACZ,WAAU;IACX,CAAA,IAED,oBAAC,QAAD;KAAM,WAAU;KAA4B,UAAA,KAAK;IAAY,CAAA;IAC5D;IACF,KAAK;GACN,EAAA,CAAA;GAEJ,OAAO,QAAQ,GAAG,KAAK,MAAM,IAAI,KAAK,UAAU,KAAK;EACvD,CAAC;CACH,CAAC;CACD,OAAO;AACT;;;;;;;;;;;;;AAcA,SAAgB,aAAa,EAC3B,UACA,UACA,SACA,SACA,QAAQ,MACR,YAAY,KACZ,aAAa,MACb,eACA,OAAO,MACP,UAAU,WACV,SACA,aACoB;CACpB,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAC9C,MAAM,YAAY,kBAAkB,QAAQ;CAC5C,MAAM,cAAc,oBAAoB,SAAS,MAAM;CACvD,MAAM,YAAY,gBAAgB,UAAU,SAAS;CACrD,MAAM,eACJ,SAAS,SAAS,SAAS,OAAO,WAAW,SAAS,QAAQ;CAChE,MAAM,cAAc,aAAa;CAEjC,MAAM,eAAe,cAAc;EACjC,MAAM,OAAsB,CAAC;EAC7B,IAAI,QAAQ,KACV,KAAK,KAAK;GACR,KAAK;GACL,OAAO,QAAQ,IAAI,SAAS;GAC5B,MAAM,QAAQ,IAAI,QAAQ;GAC1B,MAAM,QAAQ,IAAI,QAAQ;GAC1B,QAAQ,QAAQ;EAClB,CAAC;EAEH,IAAI,QAAQ,QACV,KAAK,KAAK;GACR,KAAK;GACL,OAAO,QAAQ,OAAO,SAAS;GAC/B,MAAM,QAAQ,OAAO,QAAQ;GAC7B,MAAM,QAAQ,OAAO,QAAQ;GAC7B,QAAQ,QAAQ;EAClB,CAAC;EAEH,IAAI,QAAQ,MACV,KAAK,KAAK;GACR,KAAK;GACL,OAAO,QAAQ,KAAK,SAAS;GAC7B,MAAM,QAAQ,KAAK,QAAQ;GAC3B,MAAM,QAAQ,KAAK,QAAQ;GAC3B,QAAQ,QAAQ;EAClB,CAAC;EAEH,OAAO;CACT,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,cAAc;EAClB,GAAI,YAAY,KAAA,IAAY,EAAE,QAAQ,IAAI,CAAC;EAC3C;EACA;EACA,GAAI,YAAY,KAAA,IAAY,EAAE,QAAQ,IAAI,CAAC;CAC7C;CACA,MAAM,YAAY,cAAc,UAAU,OAAO;CAEjD,OACE,qBAAC,OAAD;EACE,WAAW,GACT,4BACA,gBAAgB,UAChB,YAAY,MACZ,SACF;EACA,aAAW;EACX,gBAAc;EARhB,UAAA;GAUE,qBAAC,OAAD;IACE,WAAW,GAAG,oCAAoC,YAAY,MAAM;IADtE,UAAA,CAGE,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,qBAAC,OAAD;MACE,WAAW,GAAG,6BAA6B,YAAY,QAAQ;MADjE,UAAA,CAGE,oBAAC,cAAD;OACE,MAAM;OACN,OAAO,aAAa,SAAS;OAC7B,WAAW,GAAG,kCAAkC,YAAY,IAAI;MACjE,CAAA,GACD,oBAAC,QAAD;OACE,WAAW,GAAG,gCAAgC,YAAY,IAAI;OAC9D,OAAO,SAAS;OAEf,UAAA,SAAS;MACN,CAAA,CACH;KACJ,CAAA,GAAA,UAAU,SAAS,IAClB,oBAAC,OAAD;MACE,WAAW,GACT,qDACA,YAAY,IACd;MAEC,UAAA,UAAU,KAAK,MAAM,MACpB,oBAAC,YAAD;OAEE,WAAW,IAAI;OACf,OAAO,KAAK;OAEX,UAAA,KAAK;MACI,GALL,KAAK,GAKA,CACb;KACE,CAAA,IACH,IACD;IACL,CAAA,GAAA,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACG,cACC,oBAAC,QAAD;OAAM,OAAO,SAAS,QAAQ;OAC5B,UAAA,oBAAC,OAAD;QACE,MAAM,mBAAmB,SAAS,MAAM;QACxC,SAAQ;QACR,MAAM,YAAY;QAEjB,UAAA;OACI,CAAA;MACH,CAAA,IACJ;MACH;MACA,YACC,oBAAC,UAAD;OACE,MAAK;OACL,cAAY,QAAQ,SAAS,KAAK;OAClC,OAAM;OACN,eAAe,YAAY,IAAI;OAC/B,WAAW,GACT,mIACA,YAAY,MACd;OAEA,UAAA,oBAAC,MAAD;QACE,MAAM;QACN,OAAO,YAAY;QACnB,QAAQ,YAAY;OACrB,CAAA;MACK,CAAA,IACN;KACD;IACF,CAAA,CAAA;;GAEJ,aAAa,KAAA,IAAY,WAAW,UAAU,OAAO,IACpD,qBAAC,OAAD;IACE,WAAW,GACT,0BACA,YAAY,kBAAkB,SAC1B,YAAY,aACZ,GACE,gBAAgB,aAAa,MAAM,GACnC,YAAY,UACd,CACN;IATF,UAAA;KAWG,QAAQ,MACP,oBAAC,oBAAD;MACE,OAAO,QAAQ,IAAI,SAAS;MAC5B,MAAM,QAAQ,IAAI,QAAQ;MAC1B,OAAO,QAAQ,IAAI;MACnB,GAAK,QAAQ,IAAI,QAAQ,KAAA,IACrB,EAAE,KAAK,QAAQ,IAAI,IAAI,IACvB,CAAC;MACL,GAAK,QAAQ,IAAI,aACb,EAAE,YAAY,QAAQ,IAAI,WAAW,IACrC,CAAC;MACL,GAAK,QAAQ,IAAI,cACb,EAAE,aAAa,QAAQ,IAAI,YAAY,IACvC,CAAC;MACL,GAAK,QAAQ,IAAI,cAAc,KAAA,IAC3B,EAAE,WAAW,QAAQ,IAAI,UAAU,IACnC,CAAC;MACL,SAAS,YAAY;MACrB,GAAI;KACL,CAAA,IACC;KACH,QAAQ,SACP,oBAAC,oBAAD;MACE,OAAO,QAAQ,OAAO,SAAS;MAC/B,MAAM,QAAQ,OAAO,QAAQ;MAC7B,OAAO,QAAQ,OAAO;MACtB,MAAM;MACN,SAAS,YAAY;MACrB,GAAK,QAAQ,OAAO,QAAQ,KAAA,IACxB,EAAE,KAAK,QAAQ,OAAO,IAAI,IAC1B,CAAC;MACL,GAAK,QAAQ,OAAO,aAChB,EAAE,YAAY,QAAQ,OAAO,WAAW,IACxC,CAAC;MACL,GAAI;KACL,CAAA,IACC;KACH,QAAQ,OACP,oBAAC,iBAAD;MACE,OAAO,QAAQ,KAAK,SAAS;MAC7B,MAAM,QAAQ,KAAK,QAAQ;MAC3B,OAAO,QAAQ,KAAK;MACpB,MAAM,QAAQ,KAAK,QAAQ;MAC3B,OAAM;MACN,YAAY;MACZ,eAAe,QAAQ,KAAK,iBAAiB;MAC7C,SAAS,YAAY;MACrB,GAAK,QAAQ,KAAK,QAAQ,KAAA,IACtB,EAAE,KAAK,QAAQ,KAAK,IAAI,IACxB,CAAC;MACL,GAAK,QAAQ,KAAK,aACd,EAAE,YAAY,QAAQ,KAAK,WAAW,IACtC,CAAC;MACL,GAAI;KACL,CAAA,IACC;IACD;GAEL,CAAA,IAAA,oBAAC,OAAD;IACE,WAAW,GACT,mFACA,YAAY,KACd;IACD,UAAA;GAEI,CAAA;GAGP,oBAAC,OAAD;IACE,MAAM;IACN,eAAe,YAAY,KAAK;IAChC,OAAO,GAAG,SAAS,KAAK;IACxB,MAAK;IAEL,UAAA,oBAAC,OAAD;KAAK,WAAU;KACZ,UAAA,aAAa,KAAK,EAAE,KAAK,OAAO,MAAM,MAAM,aAC3C,oBAAC,iBAAD;MAES;MACD;MACN,QAAQ,aAAa,MAAM;MAC3B,gBAAgB,qBAAqB,MAAM;MAC3C,GAAK,OAAO,EAAE,KAAK,IAAI,CAAC;MACxB,GAAI;MACJ,YAAY;KACb,GARM,GAQN,CACF;IACE,CAAA;GACA,CAAA;EACJ;;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkloadCard.model.cjs","names":[],"sources":["../../src/data/WorkloadCard.model.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { BadgeTone } from \"./Badge\";\nimport type { StaticIconComponent } from \"./Icon\";\nimport type { ProgressBarsOrientation } from \"./ProgressBars\";\nimport type { GaugeSeries } from \"./TimeseriesGauge\";\n\nexport type WorkloadCardKind =\n | \"service\"\n | \"ingress\"\n | \"deployment\"\n | \"statefulset\"\n | \"pod\";\n\nexport type WorkloadCardIcon = string | StaticIconComponent;\n\nexport interface WorkloadCardReplicas {\n ready?: number;\n desired?: number;\n available?: number;\n}\n\nexport interface WorkloadCardStatus {\n /** Badge text; falls back to `code`, then `health`. Never affects the tone. */\n label?: string;\n code?: string;\n /** Drives the tone: healthy → success, warning → warning, unhealthy → danger. */\n health?: string;\n /** Hover text for the status badge. */\n message?: string;\n /** Explicit badge tone; overrides the `health` mapping. */\n tone?: BadgeTone;\n}\n\n/** One caller-defined fact shown in the card's subtitle row, e.g. a region. */\nexport interface WorkloadCardMetadataItem {\n label: string;\n value: ReactNode;\n}\n\n/**\n * The workload a card describes. Kubernetes workloads set `kind` (which picks\n * the icon and type label); anything else sets a free-form `type` label and\n * its own `icon`, and describes itself through `metadata`.\n */\nexport interface WorkloadCardWorkload {\n /** Kubernetes kind; picks the default icon and type label. */\n kind?: WorkloadCardKind;\n /** Display label for the workload type, e.g. \"EC2 instance\". Overrides the kind label. */\n type?: string;\n name: string;\n namespace?: string;\n role?: string;\n createdAt?: string | number | Date;\n replicas?: WorkloadCardReplicas;\n status?: WorkloadCardStatus;\n icon?: WorkloadCardIcon;\n /** Extra label/value facts rendered after the built-ins in the subtitle row. */\n metadata?: ReadonlyArray<WorkloadCardMetadataItem>;\n}\n\nexport interface WorkloadCardResourceMetric {\n title?: string;\n value: GaugeSeries;\n max?: GaugeSeries | number;\n valueLabel?: string;\n maxLabel?: string;\n unit?: string;\n icon?: WorkloadCardIcon;\n thresholds?: [warning: number, danger: number];\n centerDisplay?: \"value\" | \"percent\";\n}\n\nexport interface WorkloadCardCpuMetric extends WorkloadCardResourceMetric {\n orientation?: ProgressBarsOrientation;\n showValue?: boolean;\n}\n\nexport interface WorkloadCardMetrics {\n cpu?: WorkloadCardCpuMetric;\n memory?: WorkloadCardResourceMetric;\n disk?: WorkloadCardResourceMetric;\n}\n\nexport function workloadKindLabel(kind: WorkloadCardKind): string {\n switch (kind) {\n case \"statefulset\":\n return \"StatefulSet\";\n case \"deployment\":\n return \"Deployment\";\n case \"service\":\n return \"Service\";\n case \"ingress\":\n return \"Ingress\";\n case \"pod\":\n return \"Pod\";\n }\n}\n\n/** The type label shown in the subtitle: `type`, else the kind's label. */\nexport function workloadTypeLabel(\n workload: Pick<WorkloadCardWorkload, \"kind\" | \"type\">,\n): string | undefined {\n if (workload.type) return workload.type;\n return workload.kind ? workloadKindLabel(workload.kind) : undefined;\n}\n\nexport function workloadStatusLabel(\n status: WorkloadCardStatus | undefined,\n): string | undefined {\n return status?.label ?? status?.code ?? status?.health;\n}\n\n/**\n * The status badge tone: an explicit `tone`, else a fixed mapping of `health`\n * (healthy → success, warning → warning, unhealthy → danger, anything else →\n * neutral). Free-text `label`/`code` never affect the tone — substring guesses\n * misfire (\"NotReady\" contains \"ready\", \"Broken\" contains \"ok\").\n */\nexport function workloadStatusTone(\n status: WorkloadCardStatus | undefined,\n): BadgeTone {\n if (status?.tone) return status.tone;\n switch (status?.health?.trim().toLowerCase()) {\n case \"healthy\":\n return \"success\";\n case \"warning\":\n return \"warning\";\n case \"unhealthy\":\n return \"danger\";\n default:\n return \"neutral\";\n }\n}\n\nexport function formatReplicaCounts(\n replicas: WorkloadCardReplicas | undefined,\n): string | undefined {\n if (!replicas) return undefined;\n if (replicas.ready !== undefined && replicas.desired !== undefined) {\n return `${replicas.ready}/${replicas.desired} ready`;\n }\n if (replicas.available !== undefined && replicas.desired !== undefined) {\n return `${replicas.available}/${replicas.desired} available`;\n }\n if (replicas.ready !== undefined) return `${replicas.ready} ready`;\n if (replicas.desired !== undefined) return `${replicas.desired} desired`;\n if (replicas.available !== undefined)\n return `${replicas.available} available`;\n return undefined;\n}\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"WorkloadCard.model.cjs","names":[],"sources":["../../src/data/WorkloadCard.model.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { BadgeTone } from \"./Badge\";\nimport type { StaticIconComponent } from \"./Icon\";\nimport type { ProgressBarsOrientation } from \"./ProgressBars\";\nimport type { GaugeSeries } from \"./TimeseriesGauge\";\n\nexport type WorkloadCardKind =\n | \"service\"\n | \"ingress\"\n | \"deployment\"\n | \"statefulset\"\n | \"pod\";\n\nexport type WorkloadCardIcon = string | StaticIconComponent;\n\nexport interface WorkloadCardReplicas {\n ready?: number;\n desired?: number;\n available?: number;\n}\n\nexport interface WorkloadCardStatus {\n /** Badge text; falls back to `code`, then `health`. Never affects the tone. */\n label?: string;\n code?: string;\n /** Drives the tone: healthy → success, warning → warning, unhealthy → danger. */\n health?: string;\n /** Hover text for the status badge. */\n message?: string;\n /** Explicit badge tone; overrides the `health` mapping. */\n tone?: BadgeTone;\n}\n\n/** One caller-defined fact shown in the card's subtitle row, e.g. a region. */\nexport interface WorkloadCardMetadataItem {\n label: string;\n value: ReactNode;\n /** Shown instead of the label text; the label moves to the hover title. */\n icon?: WorkloadCardIcon;\n}\n\n/**\n * The workload a card describes. Kubernetes workloads set `kind` (which picks\n * the icon and type label); anything else sets a free-form `type` label and\n * its own `icon`, and describes itself through `metadata`.\n */\nexport interface WorkloadCardWorkload {\n /** Kubernetes kind; picks the default icon and type label. */\n kind?: WorkloadCardKind;\n /** Display label for the workload type, e.g. \"EC2 instance\". Overrides the kind label. */\n type?: string;\n name: string;\n namespace?: string;\n role?: string;\n createdAt?: string | number | Date;\n replicas?: WorkloadCardReplicas;\n status?: WorkloadCardStatus;\n icon?: WorkloadCardIcon;\n /** Extra label/value facts rendered after the built-ins in the subtitle row. */\n metadata?: ReadonlyArray<WorkloadCardMetadataItem>;\n}\n\nexport interface WorkloadCardResourceMetric {\n title?: string;\n value: GaugeSeries;\n max?: GaugeSeries | number;\n valueLabel?: string;\n maxLabel?: string;\n unit?: string;\n icon?: WorkloadCardIcon;\n thresholds?: [warning: number, danger: number];\n centerDisplay?: \"value\" | \"percent\";\n}\n\nexport interface WorkloadCardCpuMetric extends WorkloadCardResourceMetric {\n orientation?: ProgressBarsOrientation;\n showValue?: boolean;\n}\n\nexport interface WorkloadCardMetrics {\n cpu?: WorkloadCardCpuMetric;\n memory?: WorkloadCardResourceMetric;\n disk?: WorkloadCardResourceMetric;\n}\n\nexport function workloadKindLabel(kind: WorkloadCardKind): string {\n switch (kind) {\n case \"statefulset\":\n return \"StatefulSet\";\n case \"deployment\":\n return \"Deployment\";\n case \"service\":\n return \"Service\";\n case \"ingress\":\n return \"Ingress\";\n case \"pod\":\n return \"Pod\";\n }\n}\n\n/** The type label shown in the subtitle: `type`, else the kind's label. */\nexport function workloadTypeLabel(\n workload: Pick<WorkloadCardWorkload, \"kind\" | \"type\">,\n): string | undefined {\n if (workload.type) return workload.type;\n return workload.kind ? workloadKindLabel(workload.kind) : undefined;\n}\n\nexport function workloadStatusLabel(\n status: WorkloadCardStatus | undefined,\n): string | undefined {\n return status?.label ?? status?.code ?? status?.health;\n}\n\n/**\n * The status badge tone: an explicit `tone`, else a fixed mapping of `health`\n * (healthy → success, warning → warning, unhealthy → danger, anything else →\n * neutral). Free-text `label`/`code` never affect the tone — substring guesses\n * misfire (\"NotReady\" contains \"ready\", \"Broken\" contains \"ok\").\n */\nexport function workloadStatusTone(\n status: WorkloadCardStatus | undefined,\n): BadgeTone {\n if (status?.tone) return status.tone;\n switch (status?.health?.trim().toLowerCase()) {\n case \"healthy\":\n return \"success\";\n case \"warning\":\n return \"warning\";\n case \"unhealthy\":\n return \"danger\";\n default:\n return \"neutral\";\n }\n}\n\nexport function formatReplicaCounts(\n replicas: WorkloadCardReplicas | undefined,\n): string | undefined {\n if (!replicas) return undefined;\n if (replicas.ready !== undefined && replicas.desired !== undefined) {\n return `${replicas.ready}/${replicas.desired} ready`;\n }\n if (replicas.available !== undefined && replicas.desired !== undefined) {\n return `${replicas.available}/${replicas.desired} available`;\n }\n if (replicas.ready !== undefined) return `${replicas.ready} ready`;\n if (replicas.desired !== undefined) return `${replicas.desired} desired`;\n if (replicas.available !== undefined)\n return `${replicas.available} available`;\n return undefined;\n}\n"],"mappings":";AAqFA,SAAgB,kBAAkB,MAAgC;CAChE,QAAQ,MAAR;EACE,KAAK,eACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,OACH,OAAO;CACX;AACF;;AAGA,SAAgB,kBACd,UACoB;CACpB,IAAI,SAAS,MAAM,OAAO,SAAS;CACnC,OAAO,SAAS,OAAO,kBAAkB,SAAS,IAAI,IAAI,KAAA;AAC5D;AAEA,SAAgB,oBACd,QACoB;CACpB,OAAO,QAAQ,SAAS,QAAQ,QAAQ,QAAQ;AAClD;;;;;;;AAQA,SAAgB,mBACd,QACW;CACX,IAAI,QAAQ,MAAM,OAAO,OAAO;CAChC,QAAQ,QAAQ,QAAQ,KAAK,CAAC,CAAC,YAAY,GAA3C;EACE,KAAK,WACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAgB,oBACd,UACoB;CACpB,IAAI,CAAC,UAAU,OAAO,KAAA;CACtB,IAAI,SAAS,UAAU,KAAA,KAAa,SAAS,YAAY,KAAA,GACvD,OAAO,GAAG,SAAS,MAAM,GAAG,SAAS,QAAQ;CAE/C,IAAI,SAAS,cAAc,KAAA,KAAa,SAAS,YAAY,KAAA,GAC3D,OAAO,GAAG,SAAS,UAAU,GAAG,SAAS,QAAQ;CAEnD,IAAI,SAAS,UAAU,KAAA,GAAW,OAAO,GAAG,SAAS,MAAM;CAC3D,IAAI,SAAS,YAAY,KAAA,GAAW,OAAO,GAAG,SAAS,QAAQ;CAC/D,IAAI,SAAS,cAAc,KAAA,GACzB,OAAO,GAAG,SAAS,UAAU;AAEjC"}
|
|
@@ -25,6 +25,8 @@ export interface WorkloadCardStatus {
|
|
|
25
25
|
export interface WorkloadCardMetadataItem {
|
|
26
26
|
label: string;
|
|
27
27
|
value: ReactNode;
|
|
28
|
+
/** Shown instead of the label text; the label moves to the hover title. */
|
|
29
|
+
icon?: WorkloadCardIcon;
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
30
32
|
* The workload a card describes. Kubernetes workloads set `kind` (which picks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkloadCard.model.d.ts","sourceRoot":"","sources":["../../src/data/WorkloadCard.model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,aAAa,GACb,KAAK,CAAC;AAEV,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,+EAA+E;AAC/E,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkloadCard.model.d.ts","sourceRoot":"","sources":["../../src/data/WorkloadCard.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkloadCard.model.js","names":[],"sources":["../../src/data/WorkloadCard.model.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { BadgeTone } from \"./Badge\";\nimport type { StaticIconComponent } from \"./Icon\";\nimport type { ProgressBarsOrientation } from \"./ProgressBars\";\nimport type { GaugeSeries } from \"./TimeseriesGauge\";\n\nexport type WorkloadCardKind =\n | \"service\"\n | \"ingress\"\n | \"deployment\"\n | \"statefulset\"\n | \"pod\";\n\nexport type WorkloadCardIcon = string | StaticIconComponent;\n\nexport interface WorkloadCardReplicas {\n ready?: number;\n desired?: number;\n available?: number;\n}\n\nexport interface WorkloadCardStatus {\n /** Badge text; falls back to `code`, then `health`. Never affects the tone. */\n label?: string;\n code?: string;\n /** Drives the tone: healthy → success, warning → warning, unhealthy → danger. */\n health?: string;\n /** Hover text for the status badge. */\n message?: string;\n /** Explicit badge tone; overrides the `health` mapping. */\n tone?: BadgeTone;\n}\n\n/** One caller-defined fact shown in the card's subtitle row, e.g. a region. */\nexport interface WorkloadCardMetadataItem {\n label: string;\n value: ReactNode;\n}\n\n/**\n * The workload a card describes. Kubernetes workloads set `kind` (which picks\n * the icon and type label); anything else sets a free-form `type` label and\n * its own `icon`, and describes itself through `metadata`.\n */\nexport interface WorkloadCardWorkload {\n /** Kubernetes kind; picks the default icon and type label. */\n kind?: WorkloadCardKind;\n /** Display label for the workload type, e.g. \"EC2 instance\". Overrides the kind label. */\n type?: string;\n name: string;\n namespace?: string;\n role?: string;\n createdAt?: string | number | Date;\n replicas?: WorkloadCardReplicas;\n status?: WorkloadCardStatus;\n icon?: WorkloadCardIcon;\n /** Extra label/value facts rendered after the built-ins in the subtitle row. */\n metadata?: ReadonlyArray<WorkloadCardMetadataItem>;\n}\n\nexport interface WorkloadCardResourceMetric {\n title?: string;\n value: GaugeSeries;\n max?: GaugeSeries | number;\n valueLabel?: string;\n maxLabel?: string;\n unit?: string;\n icon?: WorkloadCardIcon;\n thresholds?: [warning: number, danger: number];\n centerDisplay?: \"value\" | \"percent\";\n}\n\nexport interface WorkloadCardCpuMetric extends WorkloadCardResourceMetric {\n orientation?: ProgressBarsOrientation;\n showValue?: boolean;\n}\n\nexport interface WorkloadCardMetrics {\n cpu?: WorkloadCardCpuMetric;\n memory?: WorkloadCardResourceMetric;\n disk?: WorkloadCardResourceMetric;\n}\n\nexport function workloadKindLabel(kind: WorkloadCardKind): string {\n switch (kind) {\n case \"statefulset\":\n return \"StatefulSet\";\n case \"deployment\":\n return \"Deployment\";\n case \"service\":\n return \"Service\";\n case \"ingress\":\n return \"Ingress\";\n case \"pod\":\n return \"Pod\";\n }\n}\n\n/** The type label shown in the subtitle: `type`, else the kind's label. */\nexport function workloadTypeLabel(\n workload: Pick<WorkloadCardWorkload, \"kind\" | \"type\">,\n): string | undefined {\n if (workload.type) return workload.type;\n return workload.kind ? workloadKindLabel(workload.kind) : undefined;\n}\n\nexport function workloadStatusLabel(\n status: WorkloadCardStatus | undefined,\n): string | undefined {\n return status?.label ?? status?.code ?? status?.health;\n}\n\n/**\n * The status badge tone: an explicit `tone`, else a fixed mapping of `health`\n * (healthy → success, warning → warning, unhealthy → danger, anything else →\n * neutral). Free-text `label`/`code` never affect the tone — substring guesses\n * misfire (\"NotReady\" contains \"ready\", \"Broken\" contains \"ok\").\n */\nexport function workloadStatusTone(\n status: WorkloadCardStatus | undefined,\n): BadgeTone {\n if (status?.tone) return status.tone;\n switch (status?.health?.trim().toLowerCase()) {\n case \"healthy\":\n return \"success\";\n case \"warning\":\n return \"warning\";\n case \"unhealthy\":\n return \"danger\";\n default:\n return \"neutral\";\n }\n}\n\nexport function formatReplicaCounts(\n replicas: WorkloadCardReplicas | undefined,\n): string | undefined {\n if (!replicas) return undefined;\n if (replicas.ready !== undefined && replicas.desired !== undefined) {\n return `${replicas.ready}/${replicas.desired} ready`;\n }\n if (replicas.available !== undefined && replicas.desired !== undefined) {\n return `${replicas.available}/${replicas.desired} available`;\n }\n if (replicas.ready !== undefined) return `${replicas.ready} ready`;\n if (replicas.desired !== undefined) return `${replicas.desired} desired`;\n if (replicas.available !== undefined)\n return `${replicas.available} available`;\n return undefined;\n}\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"WorkloadCard.model.js","names":[],"sources":["../../src/data/WorkloadCard.model.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { BadgeTone } from \"./Badge\";\nimport type { StaticIconComponent } from \"./Icon\";\nimport type { ProgressBarsOrientation } from \"./ProgressBars\";\nimport type { GaugeSeries } from \"./TimeseriesGauge\";\n\nexport type WorkloadCardKind =\n | \"service\"\n | \"ingress\"\n | \"deployment\"\n | \"statefulset\"\n | \"pod\";\n\nexport type WorkloadCardIcon = string | StaticIconComponent;\n\nexport interface WorkloadCardReplicas {\n ready?: number;\n desired?: number;\n available?: number;\n}\n\nexport interface WorkloadCardStatus {\n /** Badge text; falls back to `code`, then `health`. Never affects the tone. */\n label?: string;\n code?: string;\n /** Drives the tone: healthy → success, warning → warning, unhealthy → danger. */\n health?: string;\n /** Hover text for the status badge. */\n message?: string;\n /** Explicit badge tone; overrides the `health` mapping. */\n tone?: BadgeTone;\n}\n\n/** One caller-defined fact shown in the card's subtitle row, e.g. a region. */\nexport interface WorkloadCardMetadataItem {\n label: string;\n value: ReactNode;\n /** Shown instead of the label text; the label moves to the hover title. */\n icon?: WorkloadCardIcon;\n}\n\n/**\n * The workload a card describes. Kubernetes workloads set `kind` (which picks\n * the icon and type label); anything else sets a free-form `type` label and\n * its own `icon`, and describes itself through `metadata`.\n */\nexport interface WorkloadCardWorkload {\n /** Kubernetes kind; picks the default icon and type label. */\n kind?: WorkloadCardKind;\n /** Display label for the workload type, e.g. \"EC2 instance\". Overrides the kind label. */\n type?: string;\n name: string;\n namespace?: string;\n role?: string;\n createdAt?: string | number | Date;\n replicas?: WorkloadCardReplicas;\n status?: WorkloadCardStatus;\n icon?: WorkloadCardIcon;\n /** Extra label/value facts rendered after the built-ins in the subtitle row. */\n metadata?: ReadonlyArray<WorkloadCardMetadataItem>;\n}\n\nexport interface WorkloadCardResourceMetric {\n title?: string;\n value: GaugeSeries;\n max?: GaugeSeries | number;\n valueLabel?: string;\n maxLabel?: string;\n unit?: string;\n icon?: WorkloadCardIcon;\n thresholds?: [warning: number, danger: number];\n centerDisplay?: \"value\" | \"percent\";\n}\n\nexport interface WorkloadCardCpuMetric extends WorkloadCardResourceMetric {\n orientation?: ProgressBarsOrientation;\n showValue?: boolean;\n}\n\nexport interface WorkloadCardMetrics {\n cpu?: WorkloadCardCpuMetric;\n memory?: WorkloadCardResourceMetric;\n disk?: WorkloadCardResourceMetric;\n}\n\nexport function workloadKindLabel(kind: WorkloadCardKind): string {\n switch (kind) {\n case \"statefulset\":\n return \"StatefulSet\";\n case \"deployment\":\n return \"Deployment\";\n case \"service\":\n return \"Service\";\n case \"ingress\":\n return \"Ingress\";\n case \"pod\":\n return \"Pod\";\n }\n}\n\n/** The type label shown in the subtitle: `type`, else the kind's label. */\nexport function workloadTypeLabel(\n workload: Pick<WorkloadCardWorkload, \"kind\" | \"type\">,\n): string | undefined {\n if (workload.type) return workload.type;\n return workload.kind ? workloadKindLabel(workload.kind) : undefined;\n}\n\nexport function workloadStatusLabel(\n status: WorkloadCardStatus | undefined,\n): string | undefined {\n return status?.label ?? status?.code ?? status?.health;\n}\n\n/**\n * The status badge tone: an explicit `tone`, else a fixed mapping of `health`\n * (healthy → success, warning → warning, unhealthy → danger, anything else →\n * neutral). Free-text `label`/`code` never affect the tone — substring guesses\n * misfire (\"NotReady\" contains \"ready\", \"Broken\" contains \"ok\").\n */\nexport function workloadStatusTone(\n status: WorkloadCardStatus | undefined,\n): BadgeTone {\n if (status?.tone) return status.tone;\n switch (status?.health?.trim().toLowerCase()) {\n case \"healthy\":\n return \"success\";\n case \"warning\":\n return \"warning\";\n case \"unhealthy\":\n return \"danger\";\n default:\n return \"neutral\";\n }\n}\n\nexport function formatReplicaCounts(\n replicas: WorkloadCardReplicas | undefined,\n): string | undefined {\n if (!replicas) return undefined;\n if (replicas.ready !== undefined && replicas.desired !== undefined) {\n return `${replicas.ready}/${replicas.desired} ready`;\n }\n if (replicas.available !== undefined && replicas.desired !== undefined) {\n return `${replicas.available}/${replicas.desired} available`;\n }\n if (replicas.ready !== undefined) return `${replicas.ready} ready`;\n if (replicas.desired !== undefined) return `${replicas.desired} desired`;\n if (replicas.available !== undefined)\n return `${replicas.available} available`;\n return undefined;\n}\n"],"mappings":";AAqFA,SAAgB,kBAAkB,MAAgC;CAChE,QAAQ,MAAR;EACE,KAAK,eACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,OACH,OAAO;CACX;AACF;;AAGA,SAAgB,kBACd,UACoB;CACpB,IAAI,SAAS,MAAM,OAAO,SAAS;CACnC,OAAO,SAAS,OAAO,kBAAkB,SAAS,IAAI,IAAI,KAAA;AAC5D;AAEA,SAAgB,oBACd,QACoB;CACpB,OAAO,QAAQ,SAAS,QAAQ,QAAQ,QAAQ;AAClD;;;;;;;AAQA,SAAgB,mBACd,QACW;CACX,IAAI,QAAQ,MAAM,OAAO,OAAO;CAChC,QAAQ,QAAQ,QAAQ,KAAK,CAAC,CAAC,YAAY,GAA3C;EACE,KAAK,WACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAgB,oBACd,UACoB;CACpB,IAAI,CAAC,UAAU,OAAO,KAAA;CACtB,IAAI,SAAS,UAAU,KAAA,KAAa,SAAS,YAAY,KAAA,GACvD,OAAO,GAAG,SAAS,MAAM,GAAG,SAAS,QAAQ;CAE/C,IAAI,SAAS,cAAc,KAAA,KAAa,SAAS,YAAY,KAAA,GAC3D,OAAO,GAAG,SAAS,UAAU,GAAG,SAAS,QAAQ;CAEnD,IAAI,SAAS,UAAU,KAAA,GAAW,OAAO,GAAG,SAAS,MAAM;CAC3D,IAAI,SAAS,YAAY,KAAA,GAAW,OAAO,GAAG,SAAS,QAAQ;CAC/D,IAAI,SAAS,cAAc,KAAA,GACzB,OAAO,GAAG,SAAS,UAAU;AAEjC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
const require_utils = require("../../lib/utils.cjs");
|
|
2
|
+
const require_breakpoints = require("../../lib/breakpoints.cjs");
|
|
2
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
3
4
|
// src/data/ai/ChatWindow.placement.tsx
|
|
4
5
|
/** The small-screen query the chat window switches to a full-screen sheet at.
|
|
5
6
|
* Matches AppShell's md breakpoint (its mobile drawer is md:hidden); export so hosts can align
|
|
6
7
|
* their own chrome (e.g. hide a bottom bar) with it. */
|
|
7
|
-
var CHAT_WINDOW_MOBILE_QUERY = "
|
|
8
|
+
var CHAT_WINDOW_MOBILE_QUERY = require_breakpoints.belowBreakpoint("md");
|
|
8
9
|
var MAXIMIZE_CSS = `
|
|
9
10
|
.chat-maximized .react-draggable {
|
|
10
11
|
transform: none !important;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.placement.cjs","names":["cn"],"sources":["../../../src/data/ai/ChatWindow.placement.tsx"],"sourcesContent":["import type { ComponentType, CSSProperties, ReactNode } from \"react\";\nimport type { Props as RndProps } from \"react-rnd\";\nimport { cn } from \"../../lib/utils\";\nimport type { ChatWindowState } from \"./chat-window-context\";\n\n/** The small-screen query the chat window switches to a full-screen sheet at.\n * Matches AppShell's md breakpoint (its mobile drawer is md:hidden); export so hosts can align\n * their own chrome (e.g. hide a bottom bar) with it. */\nexport const CHAT_WINDOW_MOBILE_QUERY = \"
|
|
1
|
+
{"version":3,"file":"ChatWindow.placement.cjs","names":["belowBreakpoint","cn"],"sources":["../../../src/data/ai/ChatWindow.placement.tsx"],"sourcesContent":["import type { ComponentType, CSSProperties, ReactNode } from \"react\";\nimport type { Props as RndProps } from \"react-rnd\";\nimport { cn } from \"../../lib/utils\";\nimport { belowBreakpoint } from \"../../lib/breakpoints\";\nimport type { ChatWindowState } from \"./chat-window-context\";\n\n/** The small-screen query the chat window switches to a full-screen sheet at.\n * Matches AppShell's md breakpoint (its mobile drawer is md:hidden); export so hosts can align\n * their own chrome (e.g. hide a bottom bar) with it. */\nexport const CHAT_WINDOW_MOBILE_QUERY = belowBreakpoint(\"md\");\n\nconst MAXIMIZE_CSS = `\n.chat-maximized .react-draggable {\n transform: none !important;\n width: auto !important;\n height: auto !important;\n inset: 0 !important;\n position: absolute !important;\n}`;\n\n/** The window on a phone: fixed to the dynamic viewport (`h-dvh`, so a URL-bar\n * or on-screen-keyboard resize never pushes the prompt off-screen), clipped so\n * the document cannot scroll, padded by the top and side safe areas (the\n * prompt bar pads its own bottom), never draggable or resizable. `hidden`\n * keeps a non-front window mounted (its stream and draft survive) without\n * painting it. */\nexport function ChatWindowSheet({\n layerStyle,\n hidden,\n children,\n}: {\n /** Stacking style of the window layer, built by the host (ChatWindow). */\n layerStyle: CSSProperties;\n hidden: boolean;\n children: ReactNode;\n}) {\n return (\n <div hidden={hidden}>\n <div\n data-testid=\"chat-window-sheet\"\n className={cn(\n \"fixed inset-x-0 top-0 flex h-dvh flex-col overflow-hidden bg-background\",\n \"pt-[env(safe-area-inset-top)]\",\n \"pl-[env(safe-area-inset-left)] pr-[env(safe-area-inset-right)]\",\n )}\n style={layerStyle}\n >\n {children}\n </div>\n </div>\n );\n}\n\n/** The window on a larger screen: a draggable/resizable react-rnd box. Until\n * react-rnd loads (and as a graceful fallback if it never does) the window is\n * statically positioned — still usable, just not draggable. */\nexport function ChatWindowFloating({\n panel,\n layerStyle,\n Rnd,\n onDragStart,\n onGeometryChange,\n children,\n}: {\n panel: ChatWindowState;\n /** Stacking style of the window layer, built by the host (ChatWindow). */\n layerStyle: CSSProperties;\n Rnd: ComponentType<RndProps> | null;\n onDragStart: () => void;\n onGeometryChange: (\n partial: Pick<Partial<ChatWindowState>, \"x\" | \"y\" | \"width\" | \"height\">,\n ) => void;\n children: ReactNode;\n}) {\n const outerClass = cn(\n \"fixed pointer-events-none\",\n panel.maximized ? \"inset-4 chat-maximized\" : \"inset-0\",\n );\n\n if (!Rnd) {\n return (\n <div className={outerClass} style={layerStyle}>\n <div\n className=\"pointer-events-auto h-full\"\n style={\n panel.maximized\n ? { position: \"relative\", width: \"100%\", height: \"100%\" }\n : {\n position: \"absolute\",\n left: panel.x,\n top: panel.y,\n width: panel.width,\n height: panel.height,\n }\n }\n >\n {children}\n </div>\n </div>\n );\n }\n\n return (\n <div className={outerClass} style={layerStyle}>\n <style>{MAXIMIZE_CSS}</style>\n <Rnd\n default={{\n x: panel.x,\n y: panel.y,\n width: panel.width,\n height: panel.height,\n }}\n style={{ pointerEvents: \"auto\" }}\n minWidth={Math.min(360, Math.max(1, window.innerWidth - 32))}\n minHeight={Math.min(400, Math.max(1, window.innerHeight - 32))}\n bounds=\"parent\"\n dragHandleClassName=\"chat-drag-handle\"\n disableDragging={panel.maximized}\n enableResizing={!panel.maximized}\n onDragStart={onDragStart}\n onDragStop={(_e, d) => onGeometryChange({ x: d.x, y: d.y })}\n onResizeStop={(_e, _dir, ref, _delta, pos) =>\n onGeometryChange({\n width: ref.offsetWidth,\n height: ref.offsetHeight,\n x: pos.x,\n y: pos.y,\n })\n }\n >\n {children}\n </Rnd>\n </div>\n );\n}\n"],"mappings":";;;;;;;AASA,IAAa,2BAA2BA,oBAAAA,gBAAgB,IAAI;AAE5D,IAAM,eAAe;;;;;;;;;;;;;;AAerB,SAAgB,gBAAgB,EAC9B,YACA,QACA,YAMC;CACD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAa;EACX,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GACE,eAAY;GACZ,WAAWC,cAAAA,GACT,2EACA,iCACA,gEACF;GACA,OAAO;GAEN;EACE,CAAA;CACF,CAAA;AAET;;;;AAKA,SAAgB,mBAAmB,EACjC,OACA,YACA,KACA,aACA,kBACA,YAWC;CACD,MAAM,aAAaA,cAAAA,GACjB,6BACA,MAAM,YAAY,2BAA2B,SAC/C;CAEA,IAAI,CAAC,KACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAW;EAAY,OAAO;EACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GACE,WAAU;GACV,OACE,MAAM,YACF;IAAE,UAAU;IAAY,OAAO;IAAQ,QAAQ;GAAO,IACtD;IACE,UAAU;IACV,MAAM,MAAM;IACZ,KAAK,MAAM;IACX,OAAO,MAAM;IACb,QAAQ,MAAM;GAChB;GAGL;EACE,CAAA;CACF,CAAA;CAIT,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAW;EAAY,OAAO;EAAnC,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UAAQ,aAAoB,CAAA,GAC5B,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;GACE,SAAS;IACP,GAAG,MAAM;IACT,GAAG,MAAM;IACT,OAAO,MAAM;IACb,QAAQ,MAAM;GAChB;GACA,OAAO,EAAE,eAAe,OAAO;GAC/B,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,OAAO,aAAa,EAAE,CAAC;GAC3D,WAAW,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE,CAAC;GAC7D,QAAO;GACP,qBAAoB;GACpB,iBAAiB,MAAM;GACvB,gBAAgB,CAAC,MAAM;GACV;GACb,aAAa,IAAI,MAAM,iBAAiB;IAAE,GAAG,EAAE;IAAG,GAAG,EAAE;GAAE,CAAC;GAC1D,eAAe,IAAI,MAAM,KAAK,QAAQ,QACpC,iBAAiB;IACf,OAAO,IAAI;IACX,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,GAAG,IAAI;GACT,CAAC;GAGF;EACE,CAAA,CACF;;AAET"}
|
|
@@ -4,7 +4,7 @@ import { ChatWindowState } from './chat-window-context.js';
|
|
|
4
4
|
/** The small-screen query the chat window switches to a full-screen sheet at.
|
|
5
5
|
* Matches AppShell's md breakpoint (its mobile drawer is md:hidden); export so hosts can align
|
|
6
6
|
* their own chrome (e.g. hide a bottom bar) with it. */
|
|
7
|
-
export declare const CHAT_WINDOW_MOBILE_QUERY
|
|
7
|
+
export declare const CHAT_WINDOW_MOBILE_QUERY: string;
|
|
8
8
|
/** The window on a phone: fixed to the dynamic viewport (`h-dvh`, so a URL-bar
|
|
9
9
|
* or on-screen-keyboard resize never pushes the prompt off-screen), clipped so
|
|
10
10
|
* the document cannot scroll, padded by the top and side safe areas (the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.placement.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindow.placement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatWindow.placement.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ChatWindow.placement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;yDAEyD;AACzD,eAAO,MAAM,wBAAwB,QAAwB,CAAC;AAW9D;;;;;mBAKmB;AACnB,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,MAAM,EACN,QAAQ,GACT,EAAE;IACD,0EAA0E;IAC1E,UAAU,EAAE,aAAa,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAgBA;AAED;;gEAEgE;AAChE,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,UAAU,EACV,GAAG,EACH,WAAW,EACX,gBAAgB,EAChB,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,eAAe,CAAC;IACvB,0EAA0E;IAC1E,UAAU,EAAE,aAAa,CAAC;IAC1B,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,gBAAgB,EAAE,CAChB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,QAAQ,CAAC,KACpE,IAAI,CAAC;IACV,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA6DA"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { cn } from "../../lib/utils.js";
|
|
2
|
+
import { belowBreakpoint } from "../../lib/breakpoints.js";
|
|
2
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
4
|
// src/data/ai/ChatWindow.placement.tsx
|
|
4
5
|
/** The small-screen query the chat window switches to a full-screen sheet at.
|
|
5
6
|
* Matches AppShell's md breakpoint (its mobile drawer is md:hidden); export so hosts can align
|
|
6
7
|
* their own chrome (e.g. hide a bottom bar) with it. */
|
|
7
|
-
var CHAT_WINDOW_MOBILE_QUERY = "
|
|
8
|
+
var CHAT_WINDOW_MOBILE_QUERY = belowBreakpoint("md");
|
|
8
9
|
var MAXIMIZE_CSS = `
|
|
9
10
|
.chat-maximized .react-draggable {
|
|
10
11
|
transform: none !important;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.placement.js","names":[],"sources":["../../../src/data/ai/ChatWindow.placement.tsx"],"sourcesContent":["import type { ComponentType, CSSProperties, ReactNode } from \"react\";\nimport type { Props as RndProps } from \"react-rnd\";\nimport { cn } from \"../../lib/utils\";\nimport type { ChatWindowState } from \"./chat-window-context\";\n\n/** The small-screen query the chat window switches to a full-screen sheet at.\n * Matches AppShell's md breakpoint (its mobile drawer is md:hidden); export so hosts can align\n * their own chrome (e.g. hide a bottom bar) with it. */\nexport const CHAT_WINDOW_MOBILE_QUERY = \"
|
|
1
|
+
{"version":3,"file":"ChatWindow.placement.js","names":[],"sources":["../../../src/data/ai/ChatWindow.placement.tsx"],"sourcesContent":["import type { ComponentType, CSSProperties, ReactNode } from \"react\";\nimport type { Props as RndProps } from \"react-rnd\";\nimport { cn } from \"../../lib/utils\";\nimport { belowBreakpoint } from \"../../lib/breakpoints\";\nimport type { ChatWindowState } from \"./chat-window-context\";\n\n/** The small-screen query the chat window switches to a full-screen sheet at.\n * Matches AppShell's md breakpoint (its mobile drawer is md:hidden); export so hosts can align\n * their own chrome (e.g. hide a bottom bar) with it. */\nexport const CHAT_WINDOW_MOBILE_QUERY = belowBreakpoint(\"md\");\n\nconst MAXIMIZE_CSS = `\n.chat-maximized .react-draggable {\n transform: none !important;\n width: auto !important;\n height: auto !important;\n inset: 0 !important;\n position: absolute !important;\n}`;\n\n/** The window on a phone: fixed to the dynamic viewport (`h-dvh`, so a URL-bar\n * or on-screen-keyboard resize never pushes the prompt off-screen), clipped so\n * the document cannot scroll, padded by the top and side safe areas (the\n * prompt bar pads its own bottom), never draggable or resizable. `hidden`\n * keeps a non-front window mounted (its stream and draft survive) without\n * painting it. */\nexport function ChatWindowSheet({\n layerStyle,\n hidden,\n children,\n}: {\n /** Stacking style of the window layer, built by the host (ChatWindow). */\n layerStyle: CSSProperties;\n hidden: boolean;\n children: ReactNode;\n}) {\n return (\n <div hidden={hidden}>\n <div\n data-testid=\"chat-window-sheet\"\n className={cn(\n \"fixed inset-x-0 top-0 flex h-dvh flex-col overflow-hidden bg-background\",\n \"pt-[env(safe-area-inset-top)]\",\n \"pl-[env(safe-area-inset-left)] pr-[env(safe-area-inset-right)]\",\n )}\n style={layerStyle}\n >\n {children}\n </div>\n </div>\n );\n}\n\n/** The window on a larger screen: a draggable/resizable react-rnd box. Until\n * react-rnd loads (and as a graceful fallback if it never does) the window is\n * statically positioned — still usable, just not draggable. */\nexport function ChatWindowFloating({\n panel,\n layerStyle,\n Rnd,\n onDragStart,\n onGeometryChange,\n children,\n}: {\n panel: ChatWindowState;\n /** Stacking style of the window layer, built by the host (ChatWindow). */\n layerStyle: CSSProperties;\n Rnd: ComponentType<RndProps> | null;\n onDragStart: () => void;\n onGeometryChange: (\n partial: Pick<Partial<ChatWindowState>, \"x\" | \"y\" | \"width\" | \"height\">,\n ) => void;\n children: ReactNode;\n}) {\n const outerClass = cn(\n \"fixed pointer-events-none\",\n panel.maximized ? \"inset-4 chat-maximized\" : \"inset-0\",\n );\n\n if (!Rnd) {\n return (\n <div className={outerClass} style={layerStyle}>\n <div\n className=\"pointer-events-auto h-full\"\n style={\n panel.maximized\n ? { position: \"relative\", width: \"100%\", height: \"100%\" }\n : {\n position: \"absolute\",\n left: panel.x,\n top: panel.y,\n width: panel.width,\n height: panel.height,\n }\n }\n >\n {children}\n </div>\n </div>\n );\n }\n\n return (\n <div className={outerClass} style={layerStyle}>\n <style>{MAXIMIZE_CSS}</style>\n <Rnd\n default={{\n x: panel.x,\n y: panel.y,\n width: panel.width,\n height: panel.height,\n }}\n style={{ pointerEvents: \"auto\" }}\n minWidth={Math.min(360, Math.max(1, window.innerWidth - 32))}\n minHeight={Math.min(400, Math.max(1, window.innerHeight - 32))}\n bounds=\"parent\"\n dragHandleClassName=\"chat-drag-handle\"\n disableDragging={panel.maximized}\n enableResizing={!panel.maximized}\n onDragStart={onDragStart}\n onDragStop={(_e, d) => onGeometryChange({ x: d.x, y: d.y })}\n onResizeStop={(_e, _dir, ref, _delta, pos) =>\n onGeometryChange({\n width: ref.offsetWidth,\n height: ref.offsetHeight,\n x: pos.x,\n y: pos.y,\n })\n }\n >\n {children}\n </Rnd>\n </div>\n );\n}\n"],"mappings":";;;;;;;AASA,IAAa,2BAA2B,gBAAgB,IAAI;AAE5D,IAAM,eAAe;;;;;;;;;;;;;;AAerB,SAAgB,gBAAgB,EAC9B,YACA,QACA,YAMC;CACD,OACE,oBAAC,OAAD;EAAa;EACX,UAAA,oBAAC,OAAD;GACE,eAAY;GACZ,WAAW,GACT,2EACA,iCACA,gEACF;GACA,OAAO;GAEN;EACE,CAAA;CACF,CAAA;AAET;;;;AAKA,SAAgB,mBAAmB,EACjC,OACA,YACA,KACA,aACA,kBACA,YAWC;CACD,MAAM,aAAa,GACjB,6BACA,MAAM,YAAY,2BAA2B,SAC/C;CAEA,IAAI,CAAC,KACH,OACE,oBAAC,OAAD;EAAK,WAAW;EAAY,OAAO;EACjC,UAAA,oBAAC,OAAD;GACE,WAAU;GACV,OACE,MAAM,YACF;IAAE,UAAU;IAAY,OAAO;IAAQ,QAAQ;GAAO,IACtD;IACE,UAAU;IACV,MAAM,MAAM;IACZ,KAAK,MAAM;IACX,OAAO,MAAM;IACb,QAAQ,MAAM;GAChB;GAGL;EACE,CAAA;CACF,CAAA;CAIT,OACE,qBAAC,OAAD;EAAK,WAAW;EAAY,OAAO;EAAnC,UAAA,CACE,oBAAC,SAAD,EAAA,UAAQ,aAAoB,CAAA,GAC5B,oBAAC,KAAD;GACE,SAAS;IACP,GAAG,MAAM;IACT,GAAG,MAAM;IACT,OAAO,MAAM;IACb,QAAQ,MAAM;GAChB;GACA,OAAO,EAAE,eAAe,OAAO;GAC/B,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,OAAO,aAAa,EAAE,CAAC;GAC3D,WAAW,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE,CAAC;GAC7D,QAAO;GACP,qBAAoB;GACpB,iBAAiB,MAAM;GACvB,gBAAgB,CAAC,MAAM;GACV;GACb,aAAa,IAAI,MAAM,iBAAiB;IAAE,GAAG,EAAE;IAAG,GAAG,EAAE;GAAE,CAAC;GAC1D,eAAe,IAAI,MAAM,KAAK,QAAQ,QACpC,iBAAiB;IACf,OAAO,IAAI;IACX,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,GAAG,IAAI;GACT,CAAC;GAGF;EACE,CAAA,CACF;;AAET"}
|
|
@@ -5,7 +5,7 @@ const require_runtime_field_support = require("../runtime/runtime-field-support.
|
|
|
5
5
|
const require_runtime_spec_fields = require("./runtime-spec-fields.cjs");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
// src/data/ai/SpecRuntimeBar.tsx
|
|
8
|
-
function SpecRuntimeBar({ value, onChange, models = [], families: catalog, effectiveMode, effectiveModel, reasoningEfforts, ariaLabel = "Runtime", className, readOnly = false, variant = "run", sections, inheritedCommits }) {
|
|
8
|
+
function SpecRuntimeBar({ value, onChange, models = [], families: catalog, effectiveMode, effectiveModel, reasoningEfforts, ariaLabel = "Runtime", className, readOnly = false, variant = "run", sections, inheritedCommits, fields: hostFields = [] }) {
|
|
9
9
|
const families = catalog?.length ? catalog : require_runtime_mode.SPEC_RUNTIME_FAMILIES;
|
|
10
10
|
const family = require_runtime_family.familyForModel(families, models, value.model || effectiveModel);
|
|
11
11
|
const mode = value.mode?.trim() || require_runtime_family.runtimeModeFromModel(value.model) || effectiveMode || require_runtime_mode.firstMode(families[0] ?? require_runtime_mode.SPEC_RUNTIME_FAMILIES[0]).id;
|
|
@@ -38,7 +38,7 @@ function SpecRuntimeBar({ value, onChange, models = [], families: catalog, effec
|
|
|
38
38
|
showEffort: supports("effort"),
|
|
39
39
|
showCost: supports("budget.cost"),
|
|
40
40
|
showTimeout: supports("budget.timeout"),
|
|
41
|
-
actions: { fields },
|
|
41
|
+
actions: { fields: [...fields, ...hostFields] },
|
|
42
42
|
ariaLabel,
|
|
43
43
|
className
|
|
44
44
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpecRuntimeBar.cjs","names":["SPEC_RUNTIME_FAMILIES","familyForModel","runtimeModeFromModel","firstMode","runtimeModelError","runtimeModeError","SUPPORT_ALL_RUNTIME_FIELDS","runtimeFieldSupport","runtimeSpecFields","RuntimeBar"],"sources":["../../../src/data/ai/SpecRuntimeBar.tsx"],"sourcesContent":["import { RuntimeBar, type RuntimeBarProps } from \"../runtime/RuntimeBar\";\nimport {\n runtimeFieldSupport,\n SUPPORT_ALL_RUNTIME_FIELDS,\n} from \"../runtime/runtime-field-support\";\nimport {\n familyForModel,\n firstMode,\n runtimeModeError,\n runtimeModeFromModel,\n runtimeModelError,\n SPEC_RUNTIME_FAMILIES,\n} from \"../runtime/runtime-mode\";\nimport { runtimeSpecFields } from \"./runtime-spec-fields\";\nimport type {\n AISpecRuntimeCommit,\n AISpecRuntimeValue,\n} from \"./SpecRuntimeEditor.model\";\nimport type { SpecSectionId } from \"./SpecRuntimeEditor/types\";\n\nexport type SpecRuntimeBarProps = Pick<\n RuntimeBarProps<AISpecRuntimeValue>,\n | \"value\"\n | \"onChange\"\n | \"models\"\n | \"families\"\n | \"effectiveMode\"\n | \"effectiveModel\"\n | \"reasoningEfforts\"\n | \"ariaLabel\"\n | \"className\"\n> & {\n readOnly?: boolean | undefined;\n variant?: \"run\" | \"preset\" | undefined;\n sections?: readonly SpecSectionId[] | undefined;\n inheritedCommits?: AISpecRuntimeCommit[] | undefined;\n};\n\nexport function SpecRuntimeBar({\n value,\n onChange,\n models = [],\n families: catalog,\n effectiveMode,\n effectiveModel,\n reasoningEfforts,\n ariaLabel = \"Runtime\",\n className,\n readOnly = false,\n variant = \"run\",\n sections,\n inheritedCommits,\n}: SpecRuntimeBarProps) {\n const families = catalog?.length ? catalog : SPEC_RUNTIME_FAMILIES;\n const family = familyForModel(\n families,\n models,\n value.model || effectiveModel,\n );\n const mode =\n value.mode?.trim() ||\n runtimeModeFromModel(value.model) ||\n effectiveMode ||\n firstMode(families[0] ?? SPEC_RUNTIME_FAMILIES[0]!).id;\n const error =\n runtimeModelError(value.model || effectiveModel) ??\n runtimeModeError(families, mode, family?.id);\n const supports = error\n ? SUPPORT_ALL_RUNTIME_FIELDS\n : runtimeFieldSupport(families, mode, family?.id);\n const change = (next: AISpecRuntimeValue) => {\n if (!readOnly) onChange(next);\n };\n const fields = runtimeSpecFields({\n value,\n onChange: change,\n models,\n families,\n effectiveMode,\n effectiveModel,\n variant,\n inheritedCommits,\n }).filter(\n (field) =>\n !sections ||\n sections.includes(\n field.id === \"permissions.mode\"\n ? \"permissions\"\n : field.id === \"workflow.commits\"\n ? \"commit\"\n : \"workspace\",\n ),\n );\n return (\n <fieldset\n disabled={readOnly}\n className=\"m-0 min-w-0 border-0 p-0 disabled:opacity-50\"\n >\n <RuntimeBar\n value={value}\n onChange={change}\n models={models}\n families={families}\n effectiveMode={effectiveMode}\n effectiveModel={effectiveModel}\n reasoningEfforts={reasoningEfforts}\n showModel={supports(\"model\")}\n showEffort={supports(\"effort\")}\n showCost={supports(\"budget.cost\")}\n showTimeout={supports(\"budget.timeout\")}\n actions={{ fields }}\n ariaLabel={ariaLabel}\n className={className}\n />\n </fieldset>\n );\n}\n"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"SpecRuntimeBar.cjs","names":["SPEC_RUNTIME_FAMILIES","familyForModel","runtimeModeFromModel","firstMode","runtimeModelError","runtimeModeError","SUPPORT_ALL_RUNTIME_FIELDS","runtimeFieldSupport","runtimeSpecFields","RuntimeBar"],"sources":["../../../src/data/ai/SpecRuntimeBar.tsx"],"sourcesContent":["import { RuntimeBar, type RuntimeBarProps } from \"../runtime/RuntimeBar\";\nimport type { RuntimeBarAction } from \"../runtime/RuntimeBarActions\";\nimport {\n runtimeFieldSupport,\n SUPPORT_ALL_RUNTIME_FIELDS,\n} from \"../runtime/runtime-field-support\";\nimport {\n familyForModel,\n firstMode,\n runtimeModeError,\n runtimeModeFromModel,\n runtimeModelError,\n SPEC_RUNTIME_FAMILIES,\n} from \"../runtime/runtime-mode\";\nimport { runtimeSpecFields } from \"./runtime-spec-fields\";\nimport type {\n AISpecRuntimeCommit,\n AISpecRuntimeValue,\n} from \"./SpecRuntimeEditor.model\";\nimport type { SpecSectionId } from \"./SpecRuntimeEditor/types\";\n\nexport type SpecRuntimeBarProps = Pick<\n RuntimeBarProps<AISpecRuntimeValue>,\n | \"value\"\n | \"onChange\"\n | \"models\"\n | \"families\"\n | \"effectiveMode\"\n | \"effectiveModel\"\n | \"reasoningEfforts\"\n | \"ariaLabel\"\n | \"className\"\n> & {\n readOnly?: boolean | undefined;\n variant?: \"run\" | \"preset\" | undefined;\n sections?: readonly SpecSectionId[] | undefined;\n inheritedCommits?: AISpecRuntimeCommit[] | undefined;\n /** Host settings appended after the spec's own fields, e.g. run presets. */\n fields?: RuntimeBarAction[] | undefined;\n};\n\nexport function SpecRuntimeBar({\n value,\n onChange,\n models = [],\n families: catalog,\n effectiveMode,\n effectiveModel,\n reasoningEfforts,\n ariaLabel = \"Runtime\",\n className,\n readOnly = false,\n variant = \"run\",\n sections,\n inheritedCommits,\n fields: hostFields = [],\n}: SpecRuntimeBarProps) {\n const families = catalog?.length ? catalog : SPEC_RUNTIME_FAMILIES;\n const family = familyForModel(\n families,\n models,\n value.model || effectiveModel,\n );\n const mode =\n value.mode?.trim() ||\n runtimeModeFromModel(value.model) ||\n effectiveMode ||\n firstMode(families[0] ?? SPEC_RUNTIME_FAMILIES[0]!).id;\n const error =\n runtimeModelError(value.model || effectiveModel) ??\n runtimeModeError(families, mode, family?.id);\n const supports = error\n ? SUPPORT_ALL_RUNTIME_FIELDS\n : runtimeFieldSupport(families, mode, family?.id);\n const change = (next: AISpecRuntimeValue) => {\n if (!readOnly) onChange(next);\n };\n const fields = runtimeSpecFields({\n value,\n onChange: change,\n models,\n families,\n effectiveMode,\n effectiveModel,\n variant,\n inheritedCommits,\n }).filter(\n (field) =>\n !sections ||\n sections.includes(\n field.id === \"permissions.mode\"\n ? \"permissions\"\n : field.id === \"workflow.commits\"\n ? \"commit\"\n : \"workspace\",\n ),\n );\n return (\n <fieldset\n disabled={readOnly}\n className=\"m-0 min-w-0 border-0 p-0 disabled:opacity-50\"\n >\n <RuntimeBar\n value={value}\n onChange={change}\n models={models}\n families={families}\n effectiveMode={effectiveMode}\n effectiveModel={effectiveModel}\n reasoningEfforts={reasoningEfforts}\n showModel={supports(\"model\")}\n showEffort={supports(\"effort\")}\n showCost={supports(\"budget.cost\")}\n showTimeout={supports(\"budget.timeout\")}\n actions={{ fields: [...fields, ...hostFields] }}\n ariaLabel={ariaLabel}\n className={className}\n />\n </fieldset>\n );\n}\n"],"mappings":";;;;;;;AAyCA,SAAgB,eAAe,EAC7B,OACA,UACA,SAAS,CAAC,GACV,UAAU,SACV,eACA,gBACA,kBACA,YAAY,WACZ,WACA,WAAW,OACX,UAAU,OACV,UACA,kBACA,QAAQ,aAAa,CAAC,KACA;CACtB,MAAM,WAAW,SAAS,SAAS,UAAUA,qBAAAA;CAC7C,MAAM,SAASC,uBAAAA,eACb,UACA,QACA,MAAM,SAAS,cACjB;CACA,MAAM,OACJ,MAAM,MAAM,KAAK,KACjBC,uBAAAA,qBAAqB,MAAM,KAAK,KAChC,iBACAC,qBAAAA,UAAU,SAAS,MAAMH,qBAAAA,sBAAsB,EAAG,CAAC,CAAC;CAItD,MAAM,WAFJI,qBAAAA,kBAAkB,MAAM,SAAS,cAAc,KAC/CC,qBAAAA,iBAAiB,UAAU,MAAM,QAAQ,EAAE,IAEzCC,8BAAAA,6BACAC,8BAAAA,oBAAoB,UAAU,MAAM,QAAQ,EAAE;CAClD,MAAM,UAAU,SAA6B;EAC3C,IAAI,CAAC,UAAU,SAAS,IAAI;CAC9B;CACA,MAAM,SAASC,4BAAAA,kBAAkB;EAC/B;EACA,UAAU;EACV;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,CAAC,CAAC,QACA,UACC,CAAC,YACD,SAAS,SACP,MAAM,OAAO,qBACT,gBACA,MAAM,OAAO,qBACX,WACA,WACR,CACJ;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;EACE,UAAU;EACV,WAAU;EAEV,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;GACS;GACP,UAAU;GACF;GACE;GACK;GACC;GACE;GAClB,WAAW,SAAS,OAAO;GAC3B,YAAY,SAAS,QAAQ;GAC7B,UAAU,SAAS,aAAa;GAChC,aAAa,SAAS,gBAAgB;GACtC,SAAS,EAAE,QAAQ,CAAC,GAAG,QAAQ,GAAG,UAAU,EAAE;GACnC;GACA;EACZ,CAAA;CACO,CAAA;AAEd"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RuntimeBarProps } from '../runtime/RuntimeBar.js';
|
|
2
|
+
import { RuntimeBarAction } from '../runtime/RuntimeBarActions.js';
|
|
2
3
|
import { AISpecRuntimeCommit, AISpecRuntimeValue } from './SpecRuntimeEditor.model.js';
|
|
3
4
|
import { SpecSectionId } from './SpecRuntimeEditor/types.js';
|
|
4
5
|
export type SpecRuntimeBarProps = Pick<RuntimeBarProps<AISpecRuntimeValue>, "value" | "onChange" | "models" | "families" | "effectiveMode" | "effectiveModel" | "reasoningEfforts" | "ariaLabel" | "className"> & {
|
|
@@ -6,6 +7,8 @@ export type SpecRuntimeBarProps = Pick<RuntimeBarProps<AISpecRuntimeValue>, "val
|
|
|
6
7
|
variant?: "run" | "preset" | undefined;
|
|
7
8
|
sections?: readonly SpecSectionId[] | undefined;
|
|
8
9
|
inheritedCommits?: AISpecRuntimeCommit[] | undefined;
|
|
10
|
+
/** Host settings appended after the spec's own fields, e.g. run presets. */
|
|
11
|
+
fields?: RuntimeBarAction[] | undefined;
|
|
9
12
|
};
|
|
10
|
-
export declare function SpecRuntimeBar({ value, onChange, models, families: catalog, effectiveMode, effectiveModel, reasoningEfforts, ariaLabel, className, readOnly, variant, sections, inheritedCommits, }: SpecRuntimeBarProps): import("react").JSX.Element;
|
|
13
|
+
export declare function SpecRuntimeBar({ value, onChange, models, families: catalog, effectiveMode, effectiveModel, reasoningEfforts, ariaLabel, className, readOnly, variant, sections, inheritedCommits, fields: hostFields, }: SpecRuntimeBarProps): import("react").JSX.Element;
|
|
11
14
|
//# sourceMappingURL=SpecRuntimeBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpecRuntimeBar.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SpecRuntimeBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"SpecRuntimeBar.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SpecRuntimeBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAcrE,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,eAAe,CAAC,kBAAkB,CAAC,EACjC,OAAO,GACP,UAAU,GACV,QAAQ,GACR,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,kBAAkB,GAClB,WAAW,GACX,WAAW,CACd,GAAG;IACF,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,CAAC;IAChD,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAC;IACrD,4EAA4E;IAC5E,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;CACzC,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,MAAW,EACX,QAAQ,EAAE,OAAO,EACjB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,SAAqB,EACrB,SAAS,EACT,QAAgB,EAChB,OAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,MAAM,EAAE,UAAe,GACxB,EAAE,mBAAmB,+BAgErB"}
|