@flanksource/clicky-ui 0.3.55 → 0.3.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +6 -0
- package/dist/ai.cjs +6 -0
- package/dist/ai.js +3 -1
- package/dist/chat.cjs +2 -0
- package/dist/chat.d.ts +1 -0
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +2 -1
- package/dist/comments/CommentCard.cjs +37 -7
- package/dist/comments/CommentCard.cjs.map +1 -1
- package/dist/comments/CommentCard.d.ts +11 -1
- package/dist/comments/CommentCard.d.ts.map +1 -1
- package/dist/comments/CommentCard.js +37 -7
- package/dist/comments/CommentCard.js.map +1 -1
- package/dist/comments/CommentCardParts.cjs +9 -4
- package/dist/comments/CommentCardParts.cjs.map +1 -1
- package/dist/comments/CommentCardParts.d.ts.map +1 -1
- package/dist/comments/CommentCardParts.js +9 -4
- package/dist/comments/CommentCardParts.js.map +1 -1
- package/dist/comments/CommentComposer.cjs +8 -8
- package/dist/comments/CommentComposer.cjs.map +1 -1
- package/dist/comments/CommentComposer.d.ts.map +1 -1
- package/dist/comments/CommentComposer.js +8 -8
- package/dist/comments/CommentComposer.js.map +1 -1
- package/dist/comments/CommentProvider.cjs +5 -1
- package/dist/comments/CommentProvider.cjs.map +1 -1
- package/dist/comments/CommentProvider.d.ts +1 -1
- package/dist/comments/CommentProvider.d.ts.map +1 -1
- package/dist/comments/CommentProvider.js +5 -1
- package/dist/comments/CommentProvider.js.map +1 -1
- package/dist/comments/CommentSidePanel.cjs +17 -11
- package/dist/comments/CommentSidePanel.cjs.map +1 -1
- package/dist/comments/CommentSidePanel.d.ts +6 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -1
- package/dist/comments/CommentSidePanel.js +17 -11
- package/dist/comments/CommentSidePanel.js.map +1 -1
- package/dist/comments/CommentThread.cjs +4 -1
- package/dist/comments/CommentThread.cjs.map +1 -1
- package/dist/comments/CommentThread.d.ts +4 -1
- package/dist/comments/CommentThread.d.ts.map +1 -1
- package/dist/comments/CommentThread.js +4 -1
- package/dist/comments/CommentThread.js.map +1 -1
- package/dist/comments/CommentThreadList.cjs +6 -3
- package/dist/comments/CommentThreadList.cjs.map +1 -1
- package/dist/comments/CommentThreadList.d.ts +7 -2
- package/dist/comments/CommentThreadList.d.ts.map +1 -1
- package/dist/comments/CommentThreadList.js +6 -3
- package/dist/comments/CommentThreadList.js.map +1 -1
- package/dist/comments/MentionTextarea.cjs +1 -1
- package/dist/comments/MentionTextarea.cjs.map +1 -1
- package/dist/comments/MentionTextarea.d.ts.map +1 -1
- package/dist/comments/MentionTextarea.js +1 -1
- package/dist/comments/MentionTextarea.js.map +1 -1
- package/dist/comments/comment-assign.cjs +68 -0
- package/dist/comments/comment-assign.cjs.map +1 -0
- package/dist/comments/comment-assign.d.ts +31 -0
- package/dist/comments/comment-assign.d.ts.map +1 -0
- package/dist/comments/comment-assign.js +67 -0
- package/dist/comments/comment-assign.js.map +1 -0
- package/dist/comments/comment-types.cjs.map +1 -1
- package/dist/comments/comment-types.d.ts +39 -0
- package/dist/comments/comment-types.d.ts.map +1 -1
- package/dist/comments/comment-types.js.map +1 -1
- package/dist/comments/comment-utils.cjs +2 -0
- package/dist/comments/comment-utils.cjs.map +1 -1
- package/dist/comments/comment-utils.d.ts +2 -0
- package/dist/comments/comment-utils.d.ts.map +1 -1
- package/dist/comments/comment-utils.js +2 -0
- package/dist/comments/comment-utils.js.map +1 -1
- package/dist/comments.cjs +3 -0
- package/dist/comments.d.ts +1 -0
- package/dist/comments.d.ts.map +1 -1
- package/dist/comments.js +2 -1
- package/dist/components/ComboboxMenu.cjs +23 -13
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +23 -13
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/ErrorWrapper.cjs +15 -4
- package/dist/components/ErrorWrapper.cjs.map +1 -1
- package/dist/components/ErrorWrapper.d.ts +7 -0
- package/dist/components/ErrorWrapper.d.ts.map +1 -1
- package/dist/components/ErrorWrapper.js +15 -4
- package/dist/components/ErrorWrapper.js.map +1 -1
- package/dist/components/FilterBar.cjs +29 -6
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +3 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +29 -6
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/ItemActions.cjs +1 -1
- package/dist/components/ItemActions.cjs.map +1 -1
- package/dist/components/ItemActions.js +1 -1
- package/dist/components/ItemActions.js.map +1 -1
- package/dist/components/ListMenu.cjs +33 -3
- package/dist/components/ListMenu.cjs.map +1 -1
- package/dist/components/ListMenu.d.ts +4 -1
- package/dist/components/ListMenu.d.ts.map +1 -1
- package/dist/components/ListMenu.js +33 -3
- package/dist/components/ListMenu.js.map +1 -1
- package/dist/components/ListMenuItems.cjs +80 -0
- package/dist/components/ListMenuItems.cjs.map +1 -0
- package/dist/components/ListMenuItems.d.ts +8 -0
- package/dist/components/ListMenuItems.d.ts.map +1 -0
- package/dist/components/ListMenuItems.js +80 -0
- package/dist/components/ListMenuItems.js.map +1 -0
- package/dist/components/LocalPathPicker.cjs +182 -0
- package/dist/components/LocalPathPicker.cjs.map +1 -0
- package/dist/components/LocalPathPicker.d.ts +11 -0
- package/dist/components/LocalPathPicker.d.ts.map +1 -0
- package/dist/components/LocalPathPicker.js +182 -0
- package/dist/components/LocalPathPicker.js.map +1 -0
- package/dist/components/LocalPathTree.cjs +89 -0
- package/dist/components/LocalPathTree.cjs.map +1 -0
- package/dist/components/LocalPathTree.d.ts +9 -0
- package/dist/components/LocalPathTree.d.ts.map +1 -0
- package/dist/components/LocalPathTree.js +89 -0
- package/dist/components/LocalPathTree.js.map +1 -0
- package/dist/components/RangeSlider.cjs +10 -30
- package/dist/components/RangeSlider.cjs.map +1 -1
- package/dist/components/RangeSlider.d.ts.map +1 -1
- package/dist/components/RangeSlider.js +4 -24
- package/dist/components/RangeSlider.js.map +1 -1
- package/dist/components/Slider.cjs +79 -0
- package/dist/components/Slider.cjs.map +1 -0
- package/dist/components/Slider.d.ts +23 -0
- package/dist/components/Slider.d.ts.map +1 -0
- package/dist/components/Slider.js +79 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/combobox-types.d.ts +4 -1
- package/dist/components/combobox-types.d.ts.map +1 -1
- package/dist/components/filter-bar-field-utils.cjs +3 -5
- package/dist/components/filter-bar-field-utils.cjs.map +1 -1
- package/dist/components/filter-bar-field-utils.d.ts.map +1 -1
- package/dist/components/filter-bar-field-utils.js +3 -5
- package/dist/components/filter-bar-field-utils.js.map +1 -1
- package/dist/components/filter-bar-tree-model.cjs +22 -0
- package/dist/components/filter-bar-tree-model.cjs.map +1 -0
- package/dist/components/filter-bar-tree-model.d.ts +33 -0
- package/dist/components/filter-bar-tree-model.d.ts.map +1 -0
- package/dist/components/filter-bar-tree-model.js +21 -0
- package/dist/components/filter-bar-tree-model.js.map +1 -0
- package/dist/components/filter-bar-tree.cjs +84 -0
- package/dist/components/filter-bar-tree.cjs.map +1 -0
- package/dist/components/filter-bar-tree.d.ts +7 -0
- package/dist/components/filter-bar-tree.d.ts.map +1 -0
- package/dist/components/filter-bar-tree.js +84 -0
- package/dist/components/filter-bar-tree.js.map +1 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs +2 -0
- package/dist/components/json-schema-form-debug-glyph-map.cjs.map +1 -1
- package/dist/components/json-schema-form-debug-glyph-map.d.ts.map +1 -1
- package/dist/components/json-schema-form-debug-glyph-map.js +2 -0
- package/dist/components/json-schema-form-debug-glyph-map.js.map +1 -1
- package/dist/components/json-schema-form-help-links.cjs +18 -0
- package/dist/components/json-schema-form-help-links.cjs.map +1 -0
- package/dist/components/json-schema-form-help-links.d.ts +5 -0
- package/dist/components/json-schema-form-help-links.d.ts.map +1 -0
- package/dist/components/json-schema-form-help-links.js +18 -0
- package/dist/components/json-schema-form-help-links.js.map +1 -0
- package/dist/components/json-schema-form-help-model.cjs +7 -0
- package/dist/components/json-schema-form-help-model.cjs.map +1 -0
- package/dist/components/json-schema-form-help-model.d.ts +3 -0
- package/dist/components/json-schema-form-help-model.d.ts.map +1 -0
- package/dist/components/json-schema-form-help-model.js +7 -0
- package/dist/components/json-schema-form-help-model.js.map +1 -0
- package/dist/components/json-schema-form-json.cjs +48 -0
- package/dist/components/json-schema-form-json.cjs.map +1 -0
- package/dist/components/json-schema-form-json.d.ts +7 -0
- package/dist/components/json-schema-form-json.d.ts.map +1 -0
- package/dist/components/json-schema-form-json.js +48 -0
- package/dist/components/json-schema-form-json.js.map +1 -0
- package/dist/components/json-schema-form-layout.cjs +7 -5
- package/dist/components/json-schema-form-layout.cjs.map +1 -1
- package/dist/components/json-schema-form-layout.d.ts +2 -2
- package/dist/components/json-schema-form-layout.d.ts.map +1 -1
- package/dist/components/json-schema-form-layout.js +7 -5
- package/dist/components/json-schema-form-layout.js.map +1 -1
- package/dist/components/json-schema-form-object.cjs +2 -13
- package/dist/components/json-schema-form-object.cjs.map +1 -1
- package/dist/components/json-schema-form-object.d.ts.map +1 -1
- package/dist/components/json-schema-form-object.js +2 -13
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-refs.cjs +1 -1
- package/dist/components/json-schema-form-refs.cjs.map +1 -1
- package/dist/components/json-schema-form-refs.d.ts.map +1 -1
- package/dist/components/json-schema-form-refs.js +1 -1
- package/dist/components/json-schema-form-refs.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +20 -6
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +20 -6
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +22 -2
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +22 -2
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +5 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-union-model.cjs +46 -0
- package/dist/components/json-schema-form-union-model.cjs.map +1 -0
- package/dist/components/json-schema-form-union-model.d.ts +6 -0
- package/dist/components/json-schema-form-union-model.d.ts.map +1 -0
- package/dist/components/json-schema-form-union-model.js +43 -0
- package/dist/components/json-schema-form-union-model.js.map +1 -0
- package/dist/components/json-schema-form-union.cjs +52 -0
- package/dist/components/json-schema-form-union.cjs.map +1 -0
- package/dist/components/json-schema-form-union.d.ts +7 -0
- package/dist/components/json-schema-form-union.d.ts.map +1 -0
- package/dist/components/json-schema-form-union.js +52 -0
- package/dist/components/json-schema-form-union.js.map +1 -0
- package/dist/components/list-menu-virtual.cjs +5 -0
- package/dist/components/list-menu-virtual.cjs.map +1 -0
- package/dist/components/list-menu-virtual.d.ts +12 -0
- package/dist/components/list-menu-virtual.d.ts.map +1 -0
- package/dist/components/list-menu-virtual.js +6 -0
- package/dist/components/list-menu-virtual.js.map +1 -0
- package/dist/components/local-path.cjs +12 -0
- package/dist/components/local-path.cjs.map +1 -0
- package/dist/components/local-path.d.ts +14 -0
- package/dist/components/local-path.d.ts.map +1 -0
- package/dist/components/local-path.js +12 -0
- package/dist/components/local-path.js.map +1 -0
- package/dist/components/slider-shared.cjs +32 -0
- package/dist/components/slider-shared.cjs.map +1 -0
- package/dist/components/slider-shared.d.ts +18 -0
- package/dist/components/slider-shared.d.ts.map +1 -0
- package/dist/components/slider-shared.js +27 -0
- package/dist/components/slider-shared.js.map +1 -0
- package/dist/components.cjs +8 -0
- package/dist/components.d.ts +6 -1
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +5 -1
- package/dist/connections/ConnectionsPage.cjs +51 -19
- package/dist/connections/ConnectionsPage.cjs.map +1 -1
- package/dist/connections/ConnectionsPage.d.ts +9 -1
- package/dist/connections/ConnectionsPage.d.ts.map +1 -1
- package/dist/connections/ConnectionsPage.js +52 -20
- package/dist/connections/ConnectionsPage.js.map +1 -1
- package/dist/connections/connectionDashboard.cjs +13 -8
- package/dist/connections/connectionDashboard.cjs.map +1 -1
- package/dist/connections/connectionDashboard.d.ts +8 -3
- package/dist/connections/connectionDashboard.d.ts.map +1 -1
- package/dist/connections/connectionDashboard.js +14 -9
- package/dist/connections/connectionDashboard.js.map +1 -1
- package/dist/connections/connectionDashboardModel.cjs.map +1 -1
- package/dist/connections/connectionDashboardModel.d.ts +4 -0
- package/dist/connections/connectionDashboardModel.d.ts.map +1 -1
- package/dist/connections/connectionDashboardModel.js.map +1 -1
- package/dist/connections/connectionDashboardRow.cjs +75 -55
- package/dist/connections/connectionDashboardRow.cjs.map +1 -1
- package/dist/connections/connectionDashboardRow.d.ts +3 -2
- package/dist/connections/connectionDashboardRow.d.ts.map +1 -1
- package/dist/connections/connectionDashboardRow.js +75 -55
- package/dist/connections/connectionDashboardRow.js.map +1 -1
- package/dist/connections/connectionNamespaceField.cjs +17 -0
- package/dist/connections/connectionNamespaceField.cjs.map +1 -0
- package/dist/connections/connectionNamespaceField.d.ts +10 -0
- package/dist/connections/connectionNamespaceField.d.ts.map +1 -0
- package/dist/connections/connectionNamespaceField.js +17 -0
- package/dist/connections/connectionNamespaceField.js.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.cjs +98 -0
- package/dist/connections/connectionSchemaFormExtensions.cjs.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.d.ts +41 -0
- package/dist/connections/connectionSchemaFormExtensions.d.ts.map +1 -0
- package/dist/connections/connectionSchemaFormExtensions.js +96 -0
- package/dist/connections/connectionSchemaFormExtensions.js.map +1 -0
- package/dist/connections/connectionsPageModel.cjs +11 -0
- package/dist/connections/connectionsPageModel.cjs.map +1 -1
- package/dist/connections/connectionsPageModel.d.ts +5 -0
- package/dist/connections/connectionsPageModel.d.ts.map +1 -1
- package/dist/connections/connectionsPageModel.js +11 -1
- package/dist/connections/connectionsPageModel.js.map +1 -1
- package/dist/connections.cjs +5 -0
- package/dist/connections.d.ts +2 -1
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +3 -2
- package/dist/data/AvatarBadge.cjs +3 -3
- package/dist/data/AvatarBadge.cjs.map +1 -1
- package/dist/data/AvatarBadge.js +3 -3
- package/dist/data/AvatarBadge.js.map +1 -1
- package/dist/data/CodeDiff.cjs +2 -0
- package/dist/data/CodeDiff.cjs.map +1 -1
- package/dist/data/CodeDiff.js +2 -0
- package/dist/data/CodeDiff.js.map +1 -1
- package/dist/data/DataTable.cjs +3 -2
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +3 -2
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/Gauge.cjs +1 -1
- package/dist/data/Gauge.cjs.map +1 -1
- package/dist/data/Gauge.js +1 -1
- package/dist/data/Gauge.js.map +1 -1
- package/dist/data/HighlightedTokens.cjs +2 -10
- package/dist/data/HighlightedTokens.cjs.map +1 -1
- package/dist/data/HighlightedTokens.d.ts.map +1 -1
- package/dist/data/HighlightedTokens.js +1 -9
- package/dist/data/HighlightedTokens.js.map +1 -1
- package/dist/data/Markdown.cjs +38 -11
- package/dist/data/Markdown.cjs.map +1 -1
- package/dist/data/Markdown.d.ts +9 -1
- package/dist/data/Markdown.d.ts.map +1 -1
- package/dist/data/Markdown.js +39 -12
- package/dist/data/Markdown.js.map +1 -1
- package/dist/data/MultiGaugeBar.cjs +157 -0
- package/dist/data/MultiGaugeBar.cjs.map +1 -0
- package/dist/data/MultiGaugeBar.d.ts +29 -0
- package/dist/data/MultiGaugeBar.d.ts.map +1 -0
- package/dist/data/MultiGaugeBar.js +157 -0
- package/dist/data/MultiGaugeBar.js.map +1 -0
- package/dist/data/OpenInFilesLink.cjs +27 -0
- package/dist/data/OpenInFilesLink.cjs.map +1 -0
- package/dist/data/OpenInFilesLink.d.ts +15 -0
- package/dist/data/OpenInFilesLink.d.ts.map +1 -0
- package/dist/data/OpenInFilesLink.js +27 -0
- package/dist/data/OpenInFilesLink.js.map +1 -0
- package/dist/data/ProgressBar.cjs +5 -3
- package/dist/data/ProgressBar.cjs.map +1 -1
- package/dist/data/ProgressBar.d.ts +5 -1
- package/dist/data/ProgressBar.d.ts.map +1 -1
- package/dist/data/ProgressBar.js +5 -3
- package/dist/data/ProgressBar.js.map +1 -1
- package/dist/data/ProgressBars.cjs +13 -5
- package/dist/data/ProgressBars.cjs.map +1 -1
- package/dist/data/ProgressBars.d.ts +6 -1
- package/dist/data/ProgressBars.d.ts.map +1 -1
- package/dist/data/ProgressBars.js +13 -5
- package/dist/data/ProgressBars.js.map +1 -1
- package/dist/data/Properties.cjs +3 -3
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.js +3 -3
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/TaskProgress.cjs +14 -6
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +3 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +14 -6
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskPrompts.cjs +96 -0
- package/dist/data/TaskPrompts.cjs.map +1 -0
- package/dist/data/TaskPrompts.d.ts +6 -0
- package/dist/data/TaskPrompts.d.ts.map +1 -0
- package/dist/data/TaskPrompts.js +96 -0
- package/dist/data/TaskPrompts.js.map +1 -0
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +3 -0
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.cjs +7 -3
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +8 -4
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/TimeseriesGauge.cjs +12 -5
- package/dist/data/TimeseriesGauge.cjs.map +1 -1
- package/dist/data/TimeseriesGauge.d.ts.map +1 -1
- package/dist/data/TimeseriesGauge.js +13 -6
- package/dist/data/TimeseriesGauge.js.map +1 -1
- package/dist/data/TimeseriesPanel.cjs +10 -9
- package/dist/data/TimeseriesPanel.cjs.map +1 -1
- package/dist/data/TimeseriesPanel.d.ts +1 -1
- package/dist/data/TimeseriesPanel.d.ts.map +1 -1
- package/dist/data/TimeseriesPanel.js +11 -10
- package/dist/data/TimeseriesPanel.js.map +1 -1
- package/dist/data/TimeseriesPanel.model.cjs +62 -10
- package/dist/data/TimeseriesPanel.model.cjs.map +1 -1
- package/dist/data/TimeseriesPanel.model.d.ts +40 -1
- package/dist/data/TimeseriesPanel.model.d.ts.map +1 -1
- package/dist/data/TimeseriesPanel.model.js +62 -11
- package/dist/data/TimeseriesPanel.model.js.map +1 -1
- package/dist/data/WorkloadCard.cjs +7 -3
- package/dist/data/WorkloadCard.cjs.map +1 -1
- package/dist/data/WorkloadCard.d.ts +3 -1
- package/dist/data/WorkloadCard.d.ts.map +1 -1
- package/dist/data/WorkloadCard.js +7 -3
- package/dist/data/WorkloadCard.js.map +1 -1
- package/dist/data/WorkloadCard.model.cjs.map +1 -1
- package/dist/data/WorkloadCard.model.d.ts +2 -0
- package/dist/data/WorkloadCard.model.d.ts.map +1 -1
- package/dist/data/WorkloadCard.model.js.map +1 -1
- package/dist/data/ai/ChatWindow.placement.cjs +2 -1
- package/dist/data/ai/ChatWindow.placement.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.placement.d.ts +1 -1
- package/dist/data/ai/ChatWindow.placement.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.placement.js +2 -1
- package/dist/data/ai/ChatWindow.placement.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs +6 -3
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js +6 -3
- package/dist/data/ai/PromptCatalog/PromptLayerStrip.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPage.cjs +2 -1
- package/dist/data/ai/PromptCatalog/PromptPage.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPage.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPage.js +2 -1
- package/dist/data/ai/PromptCatalog/PromptPage.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs +9 -6
- package/dist/data/ai/PromptCatalog/PromptPageHeader.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js +9 -6
- package/dist/data/ai/PromptCatalog/PromptPageHeader.js.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs +3 -3
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts +2 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js +3 -3
- package/dist/data/ai/PromptCatalog/PromptPageSaveBar.js.map +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs +4 -3
- package/dist/data/ai/PromptCatalog/prompt-page-model.cjs.map +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.d.ts.map +1 -1
- package/dist/data/ai/PromptCatalog/prompt-page-model.js +4 -3
- package/dist/data/ai/PromptCatalog/prompt-page-model.js.map +1 -1
- package/dist/data/ai/PromptCatalog/types.d.ts +1 -0
- package/dist/data/ai/PromptCatalog/types.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.cjs +2 -2
- package/dist/data/ai/SpecRuntimeBar.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.d.ts +4 -1
- package/dist/data/ai/SpecRuntimeBar.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeBar.js +2 -2
- package/dist/data/ai/SpecRuntimeBar.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js +1 -1
- package/dist/data/ai/SpecRuntimeEditor/PromptSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.cjs +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor.model.js +2 -2
- package/dist/data/ai/SpecRuntimeEditor.model.js.map +1 -1
- package/dist/data/ai/ThreadPicker.cjs +2 -2
- package/dist/data/ai/ThreadPicker.cjs.map +1 -1
- package/dist/data/ai/ThreadPicker.js +2 -2
- package/dist/data/ai/ThreadPicker.js.map +1 -1
- package/dist/data/ai/index.d.ts +2 -0
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/use-prompt-run-stream.cjs +126 -0
- package/dist/data/ai/use-prompt-run-stream.cjs.map +1 -0
- package/dist/data/ai/use-prompt-run-stream.d.ts +52 -0
- package/dist/data/ai/use-prompt-run-stream.d.ts.map +1 -0
- package/dist/data/ai/use-prompt-run-stream.js +126 -0
- package/dist/data/ai/use-prompt-run-stream.js.map +1 -0
- package/dist/data/cache-browser/CacheBrowser.cjs +1 -0
- package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -1
- package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -1
- package/dist/data/cache-browser/CacheBrowser.js +1 -0
- package/dist/data/cache-browser/CacheBrowser.js.map +1 -1
- package/dist/data/charts/BarChart.cjs +194 -0
- package/dist/data/charts/BarChart.cjs.map +1 -0
- package/dist/data/charts/BarChart.d.ts +19 -0
- package/dist/data/charts/BarChart.d.ts.map +1 -0
- package/dist/data/charts/BarChart.js +194 -0
- package/dist/data/charts/BarChart.js.map +1 -0
- package/dist/data/charts/ChartLegend.cjs +54 -0
- package/dist/data/charts/ChartLegend.cjs.map +1 -0
- package/dist/data/charts/ChartLegend.d.ts +17 -0
- package/dist/data/charts/ChartLegend.d.ts.map +1 -0
- package/dist/data/charts/ChartLegend.js +54 -0
- package/dist/data/charts/ChartLegend.js.map +1 -0
- package/dist/data/charts/Sparkline.cjs +56 -0
- package/dist/data/charts/Sparkline.cjs.map +1 -0
- package/dist/data/charts/Sparkline.d.ts +15 -0
- package/dist/data/charts/Sparkline.d.ts.map +1 -0
- package/dist/data/charts/Sparkline.js +56 -0
- package/dist/data/charts/Sparkline.js.map +1 -0
- package/dist/data/charts/StackedBarChart.cjs +241 -0
- package/dist/data/charts/StackedBarChart.cjs.map +1 -0
- package/dist/data/charts/StackedBarChart.d.ts +20 -0
- package/dist/data/charts/StackedBarChart.d.ts.map +1 -0
- package/dist/data/charts/StackedBarChart.js +241 -0
- package/dist/data/charts/StackedBarChart.js.map +1 -0
- package/dist/data/charts/TrendChart.cjs +157 -0
- package/dist/data/charts/TrendChart.cjs.map +1 -0
- package/dist/data/charts/TrendChart.d.ts +20 -0
- package/dist/data/charts/TrendChart.d.ts.map +1 -0
- package/dist/data/charts/TrendChart.js +157 -0
- package/dist/data/charts/TrendChart.js.map +1 -0
- package/dist/data/charts/chart-marks.cjs +115 -0
- package/dist/data/charts/chart-marks.cjs.map +1 -0
- package/dist/data/charts/chart-marks.d.ts +39 -0
- package/dist/data/charts/chart-marks.d.ts.map +1 -0
- package/dist/data/charts/chart-marks.js +112 -0
- package/dist/data/charts/chart-marks.js.map +1 -0
- package/dist/data/charts/chart-palette.cjs +74 -0
- package/dist/data/charts/chart-palette.cjs.map +1 -0
- package/dist/data/charts/chart-palette.d.ts +58 -0
- package/dist/data/charts/chart-palette.d.ts.map +1 -0
- package/dist/data/charts/chart-palette.js +72 -0
- package/dist/data/charts/chart-palette.js.map +1 -0
- package/dist/data/charts/chart-scale.cjs +115 -0
- package/dist/data/charts/chart-scale.cjs.map +1 -0
- package/dist/data/charts/chart-scale.d.ts +41 -0
- package/dist/data/charts/chart-scale.d.ts.map +1 -0
- package/dist/data/charts/chart-scale.js +104 -0
- package/dist/data/charts/chart-scale.js.map +1 -0
- package/dist/data/charts/chart.test-utils.d.ts +7 -0
- package/dist/data/charts/chart.test-utils.d.ts.map +1 -0
- package/dist/data/charts/index.d.ts +7 -0
- package/dist/data/charts/index.d.ts.map +1 -0
- package/dist/data/chat/MessageActions.cjs +1 -1
- package/dist/data/chat/MessageActions.cjs.map +1 -1
- package/dist/data/chat/MessageActions.js +1 -1
- package/dist/data/chat/MessageActions.js.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.js +1 -1
- package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.cjs +9 -2
- package/dist/data/diagnostics/FrameSourceWindow.cjs.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.d.ts.map +1 -1
- package/dist/data/diagnostics/FrameSourceWindow.js +9 -2
- package/dist/data/diagnostics/FrameSourceWindow.js.map +1 -1
- package/dist/data/diagnostics/ProblemActions.cjs +37 -0
- package/dist/data/diagnostics/ProblemActions.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemActions.d.ts +6 -0
- package/dist/data/diagnostics/ProblemActions.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemActions.js +37 -0
- package/dist/data/diagnostics/ProblemActions.js.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.cjs +33 -0
- package/dist/data/diagnostics/ProblemFacet.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.d.ts +9 -0
- package/dist/data/diagnostics/ProblemFacet.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemFacet.js +33 -0
- package/dist/data/diagnostics/ProblemFacet.js.map +1 -0
- package/dist/data/diagnostics/ProblemRow.cjs +62 -0
- package/dist/data/diagnostics/ProblemRow.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemRow.d.ts +14 -0
- package/dist/data/diagnostics/ProblemRow.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemRow.js +62 -0
- package/dist/data/diagnostics/ProblemRow.js.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.cjs +18 -0
- package/dist/data/diagnostics/ProblemViewOptions.cjs.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.d.ts +6 -0
- package/dist/data/diagnostics/ProblemViewOptions.d.ts.map +1 -0
- package/dist/data/diagnostics/ProblemViewOptions.js +18 -0
- package/dist/data/diagnostics/ProblemViewOptions.js.map +1 -0
- package/dist/data/diagnostics/StackFrameRow.cjs +1 -1
- package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
- package/dist/data/diagnostics/StackFrameRow.js +1 -1
- package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
- package/dist/data/diagnostics/diagnostic-identity.cjs +14 -0
- package/dist/data/diagnostics/diagnostic-identity.cjs.map +1 -0
- package/dist/data/diagnostics/diagnostic-identity.d.ts +3 -0
- package/dist/data/diagnostics/diagnostic-identity.d.ts.map +1 -0
- package/dist/data/diagnostics/diagnostic-identity.js +14 -0
- package/dist/data/diagnostics/diagnostic-identity.js.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.cjs +16 -0
- package/dist/data/diagnostics/use-problem-expansion.cjs.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.d.ts +3 -0
- package/dist/data/diagnostics/use-problem-expansion.d.ts.map +1 -0
- package/dist/data/diagnostics/use-problem-expansion.js +16 -0
- package/dist/data/diagnostics/use-problem-expansion.js.map +1 -0
- package/dist/data/git/GitChangeList.cjs +9 -6
- package/dist/data/git/GitChangeList.cjs.map +1 -1
- package/dist/data/git/GitChangeList.d.ts +6 -0
- package/dist/data/git/GitChangeList.d.ts.map +1 -1
- package/dist/data/git/GitChangeList.js +9 -6
- package/dist/data/git/GitChangeList.js.map +1 -1
- package/dist/data/git/pickers/GitPickersDemo.d.ts.map +1 -1
- package/dist/data/git/pickers/ReferencePicker.cjs +1 -0
- package/dist/data/git/pickers/ReferencePicker.cjs.map +1 -1
- package/dist/data/git/pickers/ReferencePicker.js +1 -0
- package/dist/data/git/pickers/ReferencePicker.js.map +1 -1
- package/dist/data/lint/LintDetail.cjs +230 -189
- package/dist/data/lint/LintDetail.cjs.map +1 -1
- package/dist/data/lint/LintDetail.d.ts +25 -3
- package/dist/data/lint/LintDetail.d.ts.map +1 -1
- package/dist/data/lint/LintDetail.js +231 -192
- package/dist/data/lint/LintDetail.js.map +1 -1
- package/dist/data/lint/LintFilterBar.cjs +78 -83
- package/dist/data/lint/LintFilterBar.cjs.map +1 -1
- package/dist/data/lint/LintFilterBar.d.ts +23 -6
- package/dist/data/lint/LintFilterBar.d.ts.map +1 -1
- package/dist/data/lint/LintFilterBar.js +78 -85
- package/dist/data/lint/LintFilterBar.js.map +1 -1
- package/dist/data/lint/LintIgnoreMenu.cjs +59 -0
- package/dist/data/lint/LintIgnoreMenu.cjs.map +1 -0
- package/dist/data/lint/LintIgnoreMenu.d.ts +20 -0
- package/dist/data/lint/LintIgnoreMenu.d.ts.map +1 -0
- package/dist/data/lint/LintIgnoreMenu.js +58 -0
- package/dist/data/lint/LintIgnoreMenu.js.map +1 -0
- package/dist/data/lint/LintResults.cjs +59 -14
- package/dist/data/lint/LintResults.cjs.map +1 -1
- package/dist/data/lint/LintResults.d.ts +25 -1
- package/dist/data/lint/LintResults.d.ts.map +1 -1
- package/dist/data/lint/LintResults.fixtures.d.ts +19 -0
- package/dist/data/lint/LintResults.fixtures.d.ts.map +1 -1
- package/dist/data/lint/LintResults.js +60 -15
- package/dist/data/lint/LintResults.js.map +1 -1
- package/dist/data/lint/LintTable.cjs +156 -0
- package/dist/data/lint/LintTable.cjs.map +1 -0
- package/dist/data/lint/LintTable.d.ts +13 -0
- package/dist/data/lint/LintTable.d.ts.map +1 -0
- package/dist/data/lint/LintTable.js +156 -0
- package/dist/data/lint/LintTable.js.map +1 -0
- package/dist/data/lint/LintTreeNode.cjs +42 -19
- package/dist/data/lint/LintTreeNode.cjs.map +1 -1
- package/dist/data/lint/LintTreeNode.d.ts +7 -2
- package/dist/data/lint/LintTreeNode.d.ts.map +1 -1
- package/dist/data/lint/LintTreeNode.js +44 -21
- package/dist/data/lint/LintTreeNode.js.map +1 -1
- package/dist/data/lint/ViolationSnippet.cjs +113 -0
- package/dist/data/lint/ViolationSnippet.cjs.map +1 -0
- package/dist/data/lint/ViolationSnippet.d.ts +20 -0
- package/dist/data/lint/ViolationSnippet.d.ts.map +1 -0
- package/dist/data/lint/ViolationSnippet.js +112 -0
- package/dist/data/lint/ViolationSnippet.js.map +1 -0
- package/dist/data/lint/actions.cjs +44 -16
- package/dist/data/lint/actions.cjs.map +1 -1
- package/dist/data/lint/actions.d.ts +7 -3
- package/dist/data/lint/actions.d.ts.map +1 -1
- package/dist/data/lint/actions.js +44 -16
- package/dist/data/lint/actions.js.map +1 -1
- package/dist/data/lint/grouping.cjs +105 -8
- package/dist/data/lint/grouping.cjs.map +1 -1
- package/dist/data/lint/grouping.d.ts +21 -1
- package/dist/data/lint/grouping.d.ts.map +1 -1
- package/dist/data/lint/grouping.js +105 -10
- package/dist/data/lint/grouping.js.map +1 -1
- package/dist/data/lint/ignore-menu-items.cjs +18 -0
- package/dist/data/lint/ignore-menu-items.cjs.map +1 -0
- package/dist/data/lint/ignore-menu-items.d.ts +6 -0
- package/dist/data/lint/ignore-menu-items.d.ts.map +1 -0
- package/dist/data/lint/ignore-menu-items.js +17 -0
- package/dist/data/lint/ignore-menu-items.js.map +1 -0
- package/dist/data/lint/index.d.ts +7 -5
- package/dist/data/lint/index.d.ts.map +1 -1
- package/dist/data/lint/stats.cjs +19 -4
- package/dist/data/lint/stats.cjs.map +1 -1
- package/dist/data/lint/stats.d.ts +13 -3
- package/dist/data/lint/stats.d.ts.map +1 -1
- package/dist/data/lint/stats.js +17 -5
- package/dist/data/lint/stats.js.map +1 -1
- package/dist/data/lint/types.cjs +8 -0
- package/dist/data/lint/types.cjs.map +1 -1
- package/dist/data/lint/types.d.ts +47 -0
- package/dist/data/lint/types.d.ts.map +1 -1
- package/dist/data/lint/types.js +8 -1
- package/dist/data/lint/types.js.map +1 -1
- package/dist/data/lint/violation-menu-items.cjs +31 -0
- package/dist/data/lint/violation-menu-items.cjs.map +1 -0
- package/dist/data/lint/violation-menu-items.d.ts +12 -0
- package/dist/data/lint/violation-menu-items.d.ts.map +1 -0
- package/dist/data/lint/violation-menu-items.js +31 -0
- package/dist/data/lint/violation-menu-items.js.map +1 -0
- package/dist/data/markdown-source-blocks.cjs +38 -0
- package/dist/data/markdown-source-blocks.cjs.map +1 -0
- package/dist/data/markdown-source-blocks.d.ts +32 -0
- package/dist/data/markdown-source-blocks.d.ts.map +1 -0
- package/dist/data/markdown-source-blocks.js +35 -0
- package/dist/data/markdown-source-blocks.js.map +1 -0
- package/dist/data/test-runner/FilterFacet.cjs +52 -0
- package/dist/data/test-runner/FilterFacet.cjs.map +1 -0
- package/dist/data/test-runner/FilterFacet.d.ts +13 -0
- package/dist/data/test-runner/FilterFacet.d.ts.map +1 -0
- package/dist/data/test-runner/FilterFacet.js +52 -0
- package/dist/data/test-runner/FilterFacet.js.map +1 -0
- package/dist/data/test-runner/MatrixMarks.cjs +19 -29
- package/dist/data/test-runner/MatrixMarks.cjs.map +1 -1
- package/dist/data/test-runner/MatrixMarks.d.ts +4 -4
- package/dist/data/test-runner/MatrixMarks.d.ts.map +1 -1
- package/dist/data/test-runner/MatrixMarks.js +19 -29
- package/dist/data/test-runner/MatrixMarks.js.map +1 -1
- package/dist/data/test-runner/TestAttemptDetail.cjs +1 -1
- package/dist/data/test-runner/TestAttemptDetail.js +1 -1
- package/dist/data/test-runner/TestDetailPanel.cjs +11 -0
- package/dist/data/test-runner/TestDetailPanel.cjs.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.d.ts.map +1 -1
- package/dist/data/test-runner/TestDetailPanel.js +11 -0
- package/dist/data/test-runner/TestDetailPanel.js.map +1 -1
- package/dist/data/test-runner/TestFilterBar.cjs +3 -44
- package/dist/data/test-runner/TestFilterBar.cjs.map +1 -1
- package/dist/data/test-runner/TestFilterBar.d.ts.map +1 -1
- package/dist/data/test-runner/TestFilterBar.js +3 -44
- package/dist/data/test-runner/TestFilterBar.js.map +1 -1
- package/dist/data/test-runner/TestRunner.cjs +3 -1
- package/dist/data/test-runner/TestRunner.cjs.map +1 -1
- package/dist/data/test-runner/TestRunner.d.ts +7 -1
- package/dist/data/test-runner/TestRunner.d.ts.map +1 -1
- package/dist/data/test-runner/TestRunner.js +3 -1
- package/dist/data/test-runner/TestRunner.js.map +1 -1
- package/dist/data/test-runner/context.cjs.map +1 -1
- package/dist/data/test-runner/context.d.ts +3 -0
- package/dist/data/test-runner/context.d.ts.map +1 -1
- package/dist/data/test-runner/context.js.map +1 -1
- package/dist/data/test-runner/types.d.ts +2 -0
- package/dist/data/test-runner/types.d.ts.map +1 -1
- package/dist/data/timeseries-query.cjs +98 -2
- package/dist/data/timeseries-query.cjs.map +1 -1
- package/dist/data/timeseries-query.d.ts +31 -5
- package/dist/data/timeseries-query.d.ts.map +1 -1
- package/dist/data/timeseries-query.js +98 -3
- package/dist/data/timeseries-query.js.map +1 -1
- package/dist/data/timeseries-stream-provider.cjs +38 -0
- package/dist/data/timeseries-stream-provider.cjs.map +1 -0
- package/dist/data/timeseries-stream-provider.d.ts +26 -0
- package/dist/data/timeseries-stream-provider.d.ts.map +1 -0
- package/dist/data/timeseries-stream-provider.js +38 -0
- package/dist/data/timeseries-stream-provider.js.map +1 -0
- package/dist/data/timeseries-stream.cjs +304 -0
- package/dist/data/timeseries-stream.cjs.map +1 -0
- package/dist/data/timeseries-stream.d.ts +81 -0
- package/dist/data/timeseries-stream.d.ts.map +1 -0
- package/dist/data/timeseries-stream.fixtures.d.ts +36 -0
- package/dist/data/timeseries-stream.fixtures.d.ts.map +1 -0
- package/dist/data/timeseries-stream.js +296 -0
- package/dist/data/timeseries-stream.js.map +1 -0
- package/dist/data/token-style.cjs +13 -0
- package/dist/data/token-style.cjs.map +1 -0
- package/dist/data/token-style.d.ts +4 -0
- package/dist/data/token-style.d.ts.map +1 -0
- package/dist/data/token-style.js +13 -0
- package/dist/data/token-style.js.map +1 -0
- package/dist/data/traces/ProcessTraceDetail.cjs +1 -1
- package/dist/data/traces/ProcessTraceDetail.js +1 -1
- package/dist/data/traces/index.d.ts +8 -1
- package/dist/data/traces/index.d.ts.map +1 -1
- package/dist/data/traces/otel/OperationList.cjs +64 -0
- package/dist/data/traces/otel/OperationList.cjs.map +1 -0
- package/dist/data/traces/otel/OperationList.d.ts +10 -0
- package/dist/data/traces/otel/OperationList.d.ts.map +1 -0
- package/dist/data/traces/otel/OperationList.js +64 -0
- package/dist/data/traces/otel/OperationList.js.map +1 -0
- package/dist/data/traces/otel/OtelTraceDetail.cjs +781 -0
- package/dist/data/traces/otel/OtelTraceDetail.cjs.map +1 -0
- package/dist/data/traces/otel/OtelTraceDetail.d.ts +7 -0
- package/dist/data/traces/otel/OtelTraceDetail.d.ts.map +1 -0
- package/dist/data/traces/otel/OtelTraceDetail.js +781 -0
- package/dist/data/traces/otel/OtelTraceDetail.js.map +1 -0
- package/dist/data/traces/otel/OtelTraceSearch.cjs +145 -0
- package/dist/data/traces/otel/OtelTraceSearch.cjs.map +1 -0
- package/dist/data/traces/otel/OtelTraceSearch.d.ts +16 -0
- package/dist/data/traces/otel/OtelTraceSearch.d.ts.map +1 -0
- package/dist/data/traces/otel/OtelTraceSearch.js +145 -0
- package/dist/data/traces/otel/OtelTraceSearch.js.map +1 -0
- package/dist/data/traces/otel/OtelTraceTable.cjs +47 -0
- package/dist/data/traces/otel/OtelTraceTable.cjs.map +1 -0
- package/dist/data/traces/otel/OtelTraceTable.d.ts +12 -0
- package/dist/data/traces/otel/OtelTraceTable.d.ts.map +1 -0
- package/dist/data/traces/otel/OtelTraceTable.js +47 -0
- package/dist/data/traces/otel/OtelTraceTable.js.map +1 -0
- package/dist/data/traces/otel/QueryBar.cjs +158 -0
- package/dist/data/traces/otel/QueryBar.cjs.map +1 -0
- package/dist/data/traces/otel/QueryBar.d.ts +12 -0
- package/dist/data/traces/otel/QueryBar.d.ts.map +1 -0
- package/dist/data/traces/otel/QueryBar.js +158 -0
- package/dist/data/traces/otel/QueryBar.js.map +1 -0
- package/dist/data/traces/otel/SpanCards.cjs +264 -0
- package/dist/data/traces/otel/SpanCards.cjs.map +1 -0
- package/dist/data/traces/otel/SpanCards.d.ts +17 -0
- package/dist/data/traces/otel/SpanCards.d.ts.map +1 -0
- package/dist/data/traces/otel/SpanCards.js +261 -0
- package/dist/data/traces/otel/SpanCards.js.map +1 -0
- package/dist/data/traces/otel/SpanCategory.cjs +18 -0
- package/dist/data/traces/otel/SpanCategory.cjs.map +1 -0
- package/dist/data/traces/otel/SpanCategory.d.ts +7 -0
- package/dist/data/traces/otel/SpanCategory.d.ts.map +1 -0
- package/dist/data/traces/otel/SpanCategory.js +18 -0
- package/dist/data/traces/otel/SpanCategory.js.map +1 -0
- package/dist/data/traces/otel/TraceResults.cjs +195 -0
- package/dist/data/traces/otel/TraceResults.cjs.map +1 -0
- package/dist/data/traces/otel/TraceResults.d.ts +19 -0
- package/dist/data/traces/otel/TraceResults.d.ts.map +1 -0
- package/dist/data/traces/otel/TraceResults.js +193 -0
- package/dist/data/traces/otel/TraceResults.js.map +1 -0
- package/dist/data/traces/otel/api.cjs +36 -0
- package/dist/data/traces/otel/api.cjs.map +1 -0
- package/dist/data/traces/otel/api.d.ts +87 -0
- package/dist/data/traces/otel/api.d.ts.map +1 -0
- package/dist/data/traces/otel/api.js +33 -0
- package/dist/data/traces/otel/api.js.map +1 -0
- package/dist/data/traces/otel/fixtures.d.ts +4 -0
- package/dist/data/traces/otel/fixtures.d.ts.map +1 -0
- package/dist/data/traces/otel/metrics.cjs +7 -0
- package/dist/data/traces/otel/metrics.cjs.map +1 -0
- package/dist/data/traces/otel/metrics.d.ts +2 -0
- package/dist/data/traces/otel/metrics.d.ts.map +1 -0
- package/dist/data/traces/otel/metrics.js +7 -0
- package/dist/data/traces/otel/metrics.js.map +1 -0
- package/dist/data/traces/otel/model.cjs +167 -0
- package/dist/data/traces/otel/model.cjs.map +1 -0
- package/dist/data/traces/otel/model.d.ts +81 -0
- package/dist/data/traces/otel/model.d.ts.map +1 -0
- package/dist/data/traces/otel/model.js +154 -0
- package/dist/data/traces/otel/model.js.map +1 -0
- package/dist/data/traces/otel/query.cjs +90 -0
- package/dist/data/traces/otel/query.cjs.map +1 -0
- package/dist/data/traces/otel/query.d.ts +20 -0
- package/dist/data/traces/otel/query.d.ts.map +1 -0
- package/dist/data/traces/otel/query.js +86 -0
- package/dist/data/traces/otel/query.js.map +1 -0
- package/dist/data/traces/otel/result-model.cjs +25 -0
- package/dist/data/traces/otel/result-model.cjs.map +1 -0
- package/dist/data/traces/otel/result-model.d.ts +5 -0
- package/dist/data/traces/otel/result-model.d.ts.map +1 -0
- package/dist/data/traces/otel/result-model.js +24 -0
- package/dist/data/traces/otel/result-model.js.map +1 -0
- package/dist/data/traces/otel/source.cjs +11 -0
- package/dist/data/traces/otel/source.cjs.map +1 -0
- package/dist/data/traces/otel/source.d.ts +5 -0
- package/dist/data/traces/otel/source.d.ts.map +1 -0
- package/dist/data/traces/otel/source.js +10 -0
- package/dist/data/traces/otel/source.js.map +1 -0
- package/dist/data/traces/otel/span-traces.cjs +39 -0
- package/dist/data/traces/otel/span-traces.cjs.map +1 -0
- package/dist/data/traces/otel/span-traces.d.ts +3 -0
- package/dist/data/traces/otel/span-traces.d.ts.map +1 -0
- package/dist/data/traces/otel/span-traces.js +39 -0
- package/dist/data/traces/otel/span-traces.js.map +1 -0
- package/dist/data/use-data-table-virtual.d.ts +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data/workload-panel/MemoryStack.cjs +49 -0
- package/dist/data/workload-panel/MemoryStack.cjs.map +1 -0
- package/dist/data/workload-panel/MemoryStack.d.ts +11 -0
- package/dist/data/workload-panel/MemoryStack.d.ts.map +1 -0
- package/dist/data/workload-panel/MemoryStack.js +48 -0
- package/dist/data/workload-panel/MemoryStack.js.map +1 -0
- package/dist/data/workload-panel/Metrics.cjs +197 -0
- package/dist/data/workload-panel/Metrics.cjs.map +1 -0
- package/dist/data/workload-panel/Metrics.d.ts +11 -0
- package/dist/data/workload-panel/Metrics.d.ts.map +1 -0
- package/dist/data/workload-panel/Metrics.js +196 -0
- package/dist/data/workload-panel/Metrics.js.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.cjs +66 -0
- package/dist/data/workload-panel/WorkloadPanel.cjs.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.d.ts +3 -0
- package/dist/data/workload-panel/WorkloadPanel.d.ts.map +1 -0
- package/dist/data/workload-panel/WorkloadPanel.js +66 -0
- package/dist/data/workload-panel/WorkloadPanel.js.map +1 -0
- package/dist/data/workload-panel/fixtures.d.ts +60 -0
- package/dist/data/workload-panel/fixtures.d.ts.map +1 -0
- package/dist/data/workload-panel/model.cjs +137 -0
- package/dist/data/workload-panel/model.cjs.map +1 -0
- package/dist/data/workload-panel/model.d.ts +53 -0
- package/dist/data/workload-panel/model.d.ts.map +1 -0
- package/dist/data/workload-panel/model.js +133 -0
- package/dist/data/workload-panel/model.js.map +1 -0
- package/dist/data/workload-panel/types.d.ts +56 -0
- package/dist/data/workload-panel/types.d.ts.map +1 -0
- package/dist/data.cjs +68 -6
- package/dist/data.d.ts +9 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +32 -10
- package/dist/file-findings/AnnotatedCode.cjs +243 -0
- package/dist/file-findings/AnnotatedCode.cjs.map +1 -0
- package/dist/file-findings/AnnotatedCode.d.ts +30 -0
- package/dist/file-findings/AnnotatedCode.d.ts.map +1 -0
- package/dist/file-findings/AnnotatedCode.js +243 -0
- package/dist/file-findings/AnnotatedCode.js.map +1 -0
- package/dist/file-findings/FileFindingsView.cjs +213 -0
- package/dist/file-findings/FileFindingsView.cjs.map +1 -0
- package/dist/file-findings/FileFindingsView.d.ts +35 -0
- package/dist/file-findings/FileFindingsView.d.ts.map +1 -0
- package/dist/file-findings/FileFindingsView.js +213 -0
- package/dist/file-findings/FileFindingsView.js.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.cjs +22 -0
- package/dist/file-findings/LazyAnnotatedCode.cjs.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.d.ts +5 -0
- package/dist/file-findings/LazyAnnotatedCode.d.ts.map +1 -0
- package/dist/file-findings/LazyAnnotatedCode.js +22 -0
- package/dist/file-findings/LazyAnnotatedCode.js.map +1 -0
- package/dist/file-findings/adapters.cjs +155 -0
- package/dist/file-findings/adapters.cjs.map +1 -0
- package/dist/file-findings/adapters.d.ts +24 -0
- package/dist/file-findings/adapters.d.ts.map +1 -0
- package/dist/file-findings/adapters.js +153 -0
- package/dist/file-findings/adapters.js.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.cjs +97 -0
- package/dist/file-findings/file-review/CommentDraft.cjs.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.d.ts +25 -0
- package/dist/file-findings/file-review/CommentDraft.d.ts.map +1 -0
- package/dist/file-findings/file-review/CommentDraft.js +97 -0
- package/dist/file-findings/file-review/CommentDraft.js.map +1 -0
- package/dist/file-findings/file-review/FileReview.cjs +863 -0
- package/dist/file-findings/file-review/FileReview.cjs.map +1 -0
- package/dist/file-findings/file-review/FileReview.d.ts +79 -0
- package/dist/file-findings/file-review/FileReview.d.ts.map +1 -0
- package/dist/file-findings/file-review/FileReview.fixtures.d.ts +25 -0
- package/dist/file-findings/file-review/FileReview.fixtures.d.ts.map +1 -0
- package/dist/file-findings/file-review/FileReview.js +863 -0
- package/dist/file-findings/file-review/FileReview.js.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.cjs +77 -0
- package/dist/file-findings/file-review/InlineAuthors.cjs.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.d.ts +9 -0
- package/dist/file-findings/file-review/InlineAuthors.d.ts.map +1 -0
- package/dist/file-findings/file-review/InlineAuthors.js +77 -0
- package/dist/file-findings/file-review/InlineAuthors.js.map +1 -0
- package/dist/file-findings/file-review/InlineThread.cjs +77 -0
- package/dist/file-findings/file-review/InlineThread.cjs.map +1 -0
- package/dist/file-findings/file-review/InlineThread.d.ts +27 -0
- package/dist/file-findings/file-review/InlineThread.d.ts.map +1 -0
- package/dist/file-findings/file-review/InlineThread.js +77 -0
- package/dist/file-findings/file-review/InlineThread.js.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.cjs +164 -0
- package/dist/file-findings/file-review/ProblemsList.cjs.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.d.ts +15 -0
- package/dist/file-findings/file-review/ProblemsList.d.ts.map +1 -0
- package/dist/file-findings/file-review/ProblemsList.js +164 -0
- package/dist/file-findings/file-review/ProblemsList.js.map +1 -0
- package/dist/file-findings/file-review/SourceView.cjs +179 -0
- package/dist/file-findings/file-review/SourceView.cjs.map +1 -0
- package/dist/file-findings/file-review/SourceView.d.ts +29 -0
- package/dist/file-findings/file-review/SourceView.d.ts.map +1 -0
- package/dist/file-findings/file-review/SourceView.js +179 -0
- package/dist/file-findings/file-review/SourceView.js.map +1 -0
- package/dist/file-findings/file-review/blame.cjs +35 -0
- package/dist/file-findings/file-review/blame.cjs.map +1 -0
- package/dist/file-findings/file-review/blame.d.ts +28 -0
- package/dist/file-findings/file-review/blame.d.ts.map +1 -0
- package/dist/file-findings/file-review/blame.js +33 -0
- package/dist/file-findings/file-review/blame.js.map +1 -0
- package/dist/file-findings/file-review/geometry.cjs +101 -0
- package/dist/file-findings/file-review/geometry.cjs.map +1 -0
- package/dist/file-findings/file-review/geometry.d.ts +45 -0
- package/dist/file-findings/file-review/geometry.d.ts.map +1 -0
- package/dist/file-findings/file-review/geometry.js +98 -0
- package/dist/file-findings/file-review/geometry.js.map +1 -0
- package/dist/file-findings/file-review/hooks.cjs +101 -0
- package/dist/file-findings/file-review/hooks.cjs.map +1 -0
- package/dist/file-findings/file-review/hooks.d.ts +22 -0
- package/dist/file-findings/file-review/hooks.d.ts.map +1 -0
- package/dist/file-findings/file-review/hooks.js +99 -0
- package/dist/file-findings/file-review/hooks.js.map +1 -0
- package/dist/file-findings/file-review/marks.cjs +52 -0
- package/dist/file-findings/file-review/marks.cjs.map +1 -0
- package/dist/file-findings/file-review/marks.d.ts +23 -0
- package/dist/file-findings/file-review/marks.d.ts.map +1 -0
- package/dist/file-findings/file-review/marks.js +47 -0
- package/dist/file-findings/file-review/marks.js.map +1 -0
- package/dist/file-findings/file-review/problem-filters.cjs +14 -0
- package/dist/file-findings/file-review/problem-filters.cjs.map +1 -0
- package/dist/file-findings/file-review/problem-filters.d.ts +10 -0
- package/dist/file-findings/file-review/problem-filters.d.ts.map +1 -0
- package/dist/file-findings/file-review/problem-filters.js +13 -0
- package/dist/file-findings/file-review/problem-filters.js.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.cjs +234 -0
- package/dist/file-findings/file-review/quote-anchor.cjs.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.d.ts +54 -0
- package/dist/file-findings/file-review/quote-anchor.d.ts.map +1 -0
- package/dist/file-findings/file-review/quote-anchor.js +226 -0
- package/dist/file-findings/file-review/quote-anchor.js.map +1 -0
- package/dist/file-findings/file-review/source-anchor.cjs +104 -0
- package/dist/file-findings/file-review/source-anchor.cjs.map +1 -0
- package/dist/file-findings/file-review/source-anchor.d.ts +27 -0
- package/dist/file-findings/file-review/source-anchor.d.ts.map +1 -0
- package/dist/file-findings/file-review/source-anchor.js +99 -0
- package/dist/file-findings/file-review/source-anchor.js.map +1 -0
- package/dist/file-findings/file-review/source-marks.cjs +71 -0
- package/dist/file-findings/file-review/source-marks.cjs.map +1 -0
- package/dist/file-findings/file-review/source-marks.d.ts +27 -0
- package/dist/file-findings/file-review/source-marks.d.ts.map +1 -0
- package/dist/file-findings/file-review/source-marks.js +68 -0
- package/dist/file-findings/file-review/source-marks.js.map +1 -0
- package/dist/file-findings/findings-comments.cjs +136 -0
- package/dist/file-findings/findings-comments.cjs.map +1 -0
- package/dist/file-findings/findings-comments.d.ts +28 -0
- package/dist/file-findings/findings-comments.d.ts.map +1 -0
- package/dist/file-findings/findings-comments.js +131 -0
- package/dist/file-findings/findings-comments.js.map +1 -0
- package/dist/file-findings/findings-languages.cjs +53 -0
- package/dist/file-findings/findings-languages.cjs.map +1 -0
- package/dist/file-findings/findings-languages.d.ts +11 -0
- package/dist/file-findings/findings-languages.d.ts.map +1 -0
- package/dist/file-findings/findings-languages.js +53 -0
- package/dist/file-findings/findings-languages.js.map +1 -0
- package/dist/file-findings/mdx-source.cjs +48 -0
- package/dist/file-findings/mdx-source.cjs.map +1 -0
- package/dist/file-findings/mdx-source.d.ts +7 -0
- package/dist/file-findings/mdx-source.d.ts.map +1 -0
- package/dist/file-findings/mdx-source.js +48 -0
- package/dist/file-findings/mdx-source.js.map +1 -0
- package/dist/file-findings/monaco-language.cjs +73 -0
- package/dist/file-findings/monaco-language.cjs.map +1 -0
- package/dist/file-findings/monaco-language.d.ts +11 -0
- package/dist/file-findings/monaco-language.d.ts.map +1 -0
- package/dist/file-findings/monaco-language.js +72 -0
- package/dist/file-findings/monaco-language.js.map +1 -0
- package/dist/file-findings/severity-counts.cjs +20 -0
- package/dist/file-findings/severity-counts.cjs.map +1 -0
- package/dist/file-findings/severity-counts.d.ts +5 -0
- package/dist/file-findings/severity-counts.d.ts.map +1 -0
- package/dist/file-findings/severity-counts.js +19 -0
- package/dist/file-findings/severity-counts.js.map +1 -0
- package/dist/file-findings/types.cjs +12 -0
- package/dist/file-findings/types.cjs.map +1 -0
- package/dist/file-findings/types.d.ts +43 -0
- package/dist/file-findings/types.d.ts.map +1 -0
- package/dist/file-findings/types.js +11 -0
- package/dist/file-findings/types.js.map +1 -0
- package/dist/file-findings.cjs +47 -0
- package/dist/file-findings.d.ts +15 -0
- package/dist/file-findings.d.ts.map +1 -0
- package/dist/file-findings.js +15 -0
- package/dist/hooks/event-hub.cjs +22 -8
- package/dist/hooks/event-hub.cjs.map +1 -1
- package/dist/hooks/event-hub.d.ts.map +1 -1
- package/dist/hooks/event-hub.js +22 -8
- package/dist/hooks/event-hub.js.map +1 -1
- package/dist/icons/components/UiBrowser.cjs +51 -0
- package/dist/icons/components/UiBrowser.cjs.map +1 -0
- package/dist/icons/components/UiBrowser.d.ts +15 -0
- package/dist/icons/components/UiBrowser.d.ts.map +1 -0
- package/dist/icons/components/UiBrowser.js +48 -0
- package/dist/icons/components/UiBrowser.js.map +1 -0
- package/dist/icons/components/UiCreditCard.cjs +51 -0
- package/dist/icons/components/UiCreditCard.cjs.map +1 -0
- package/dist/icons/components/UiCreditCard.d.ts +15 -0
- package/dist/icons/components/UiCreditCard.d.ts.map +1 -0
- package/dist/icons/components/UiCreditCard.js +48 -0
- package/dist/icons/components/UiCreditCard.js.map +1 -0
- package/dist/icons/components/UiShoppingCart.cjs +51 -0
- package/dist/icons/components/UiShoppingCart.cjs.map +1 -0
- package/dist/icons/components/UiShoppingCart.d.ts +15 -0
- package/dist/icons/components/UiShoppingCart.d.ts.map +1 -0
- package/dist/icons/components/UiShoppingCart.js +48 -0
- package/dist/icons/components/UiShoppingCart.js.map +1 -0
- package/dist/icons/index.d.ts +6 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +6 -0
- package/dist/icons/registry.cjs.map +1 -1
- package/dist/icons/registry.d.ts.map +1 -1
- package/dist/icons/registry.js +6 -0
- package/dist/icons/registry.js.map +1 -1
- package/dist/icons.cjs +9 -0
- package/dist/icons.js +4 -1
- package/dist/index.cjs +86 -7
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -12
- package/dist/layout/AppShell.cjs +37 -21
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +13 -2
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +37 -21
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +7 -6
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +7 -6
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/layout/SplitPane.cjs +16 -6
- package/dist/layout/SplitPane.cjs.map +1 -1
- package/dist/layout/SplitPane.d.ts +12 -2
- package/dist/layout/SplitPane.d.ts.map +1 -1
- package/dist/layout/SplitPane.js +16 -6
- package/dist/layout/SplitPane.js.map +1 -1
- package/dist/layout/Workspace.cjs +37 -33
- package/dist/layout/Workspace.cjs.map +1 -1
- package/dist/layout/Workspace.d.ts.map +1 -1
- package/dist/layout/Workspace.js +37 -33
- package/dist/layout/Workspace.js.map +1 -1
- package/dist/layout/Workspace.regions.cjs +3 -3
- package/dist/layout/Workspace.regions.cjs.map +1 -1
- package/dist/layout/Workspace.regions.js +3 -3
- package/dist/layout/Workspace.regions.js.map +1 -1
- package/dist/lib/breakpoints.cjs +102 -0
- package/dist/lib/breakpoints.cjs.map +1 -0
- package/dist/lib/breakpoints.d.ts +36 -0
- package/dist/lib/breakpoints.d.ts.map +1 -0
- package/dist/lib/breakpoints.js +99 -0
- package/dist/lib/breakpoints.js.map +1 -0
- package/dist/lib/combobox.cjs +2 -1
- package/dist/lib/combobox.cjs.map +1 -1
- package/dist/lib/combobox.d.ts +1 -1
- package/dist/lib/combobox.d.ts.map +1 -1
- package/dist/lib/combobox.js +2 -1
- package/dist/lib/combobox.js.map +1 -1
- package/dist/lib/path-tree.cjs +21 -0
- package/dist/lib/path-tree.cjs.map +1 -1
- package/dist/lib/path-tree.d.ts +15 -0
- package/dist/lib/path-tree.d.ts.map +1 -1
- package/dist/lib/path-tree.js +21 -1
- package/dist/lib/path-tree.js.map +1 -1
- package/dist/overlay/Modal.cjs +2 -1
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +2 -1
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/dropdownMenuContext.d.ts +1 -1
- package/dist/profiles/editor/profileEditor.cjs +1 -1
- package/dist/profiles/editor/profileEditor.cjs.map +1 -1
- package/dist/profiles/editor/profileEditor.js +1 -1
- package/dist/profiles/editor/profileEditor.js.map +1 -1
- package/dist/profiles/editor/profileEditorSections.cjs +6 -2
- package/dist/profiles/editor/profileEditorSections.cjs.map +1 -1
- package/dist/profiles/editor/profileEditorSections.d.ts.map +1 -1
- package/dist/profiles/editor/profileEditorSections.js +6 -2
- package/dist/profiles/editor/profileEditorSections.js.map +1 -1
- package/dist/profiles/query/prometheusResults.cjs +24 -36
- package/dist/profiles/query/prometheusResults.cjs.map +1 -1
- package/dist/profiles/query/prometheusResults.d.ts.map +1 -1
- package/dist/profiles/query/prometheusResults.js +24 -36
- package/dist/profiles/query/prometheusResults.js.map +1 -1
- package/dist/rpc/CommandForm.cjs +1 -1
- package/dist/rpc/CommandForm.cjs.map +1 -1
- package/dist/rpc/CommandForm.js +1 -1
- package/dist/rpc/CommandForm.js.map +1 -1
- package/dist/rpc/classify.cjs +1 -1
- package/dist/rpc/classify.cjs.map +1 -1
- package/dist/rpc/classify.d.ts.map +1 -1
- package/dist/rpc/classify.js +1 -1
- package/dist/rpc/classify.js.map +1 -1
- package/dist/rpc/useOperations.d.ts +24 -24
- package/dist/rpc.cjs +0 -2
- package/dist/rpc.d.ts +0 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +1 -2
- package/dist/styles.css +1 -1
- package/dist/utils.cjs +6 -0
- package/dist/utils.d.ts +2 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +3 -2
- package/package.json +9 -3
- package/schemas/json-schema-form.schema.json +9 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profileEditorSections.js","names":[],"sources":["../../../src/profiles/editor/profileEditorSections.tsx"],"sourcesContent":["import { JsonSchemaForm } from \"../../components/JsonSchemaForm\";\nimport type {\n FormLayout,\n LookupFetcher,\n PostExtension,\n PreExtension,\n} from \"../../components/json-schema-form-types\";\nimport { Icon } from \"../../data/Icon\";\nimport type { ReactNode } from \"react\";\nimport {\n mergeProfileProjection,\n providerConnectionSchema,\n profileSchemaProjection,\n providerOptionsSchema,\n providerTypes,\n} from \"./profileEditorModel\";\nimport { profileFormExtensions } from \"../profileApi\";\nimport {\n ProfileWizardQueryStep,\n type ProfileSample,\n} from \"../wizard/profileWizardQueryStep\";\nimport {\n profileConnectionID,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"../wizard/profileWizardModel\";\n\nconst inputClassName =\n \"w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\";\n\nexport function ProfileGeneralSection({ draft, onChange }: EditorSectionProps) {\n return (\n <SectionCard\n title=\"Profile identity\"\n description=\"Name the profile and choose its default presentation. Renaming updates dependent imports when you save.\"\n >\n <div className=\"grid gap-5 md:grid-cols-2\">\n <EditorField label=\"Profile name\" required>\n <input\n value={draft.profile ?? \"\"}\n className={inputClassName}\n onChange={(event) =>\n onChange({ ...draft, profile: event.target.value })\n }\n />\n </EditorField>\n <EditorField label=\"Namespace\">\n <input\n value={draft.namespace ?? \"\"}\n className={inputClassName}\n placeholder=\"Default namespace\"\n onChange={(event) =>\n onChange({ ...draft, namespace: event.target.value })\n }\n />\n </EditorField>\n <EditorField label=\"Render mode\">\n <select\n value={typeof draft.render === \"string\" ? draft.render : \"\"}\n className={inputClassName}\n onChange={(event) =>\n onChange({ ...draft, render: event.target.value || undefined })\n }\n >\n <option value=\"\">Table (default)</option>\n <option value=\"table\">Table</option>\n <option value=\"logs\">Logs</option>\n </select>\n </EditorField>\n <EditorField label=\"Icon\">\n <div className=\"flex items-center gap-2\">\n <input\n value={typeof draft.icon === \"string\" ? draft.icon : \"\"}\n className={inputClassName}\n // Empty is the norm: the provider type already supplies a mark.\n // This is for the profile whose subject is not its backend.\n placeholder=\"Provider default\"\n onChange={(event) =>\n onChange({ ...draft, icon: event.target.value || undefined })\n }\n />\n {typeof draft.icon === \"string\" && draft.icon !== \"\" ? (\n // Shows what the name actually resolves to — an unresolvable name\n // renders nothing anywhere, which is invisible without a preview.\n <Icon name={draft.icon} className=\"size-5 shrink-0\" />\n ) : null}\n </div>\n </EditorField>\n </div>\n </SectionCard>\n );\n}\n\nexport function ProfileSourceSection({\n draft,\n discovered,\n sampleStale,\n lookupFetcher,\n onChange,\n onSample,\n}: EditorSectionProps & {\n discovered: ProfileColumn[];\n sampleStale: boolean;\n lookupFetcher?: LookupFetcher;\n onSample: (sample: ProfileSample) => void;\n}) {\n const connectionID = profileConnectionID(draft.provider?.connection ?? \"\");\n const providerType = draft.provider?.type ?? \"\";\n return (\n <div className=\"grid h-full min-h-0 gap-4\">\n <SectionCard\n title=\"Source\"\n description=\"Select the provider and saved connection. Connection credentials remain server-side.\"\n >\n <div className=\"grid gap-4 md:grid-cols-2\">\n <EditorField label=\"Provider type\" required>\n <select\n value={providerType}\n className={inputClassName}\n onChange={(event) =>\n onChange({\n ...draft,\n provider: { ...draft.provider, type: event.target.value },\n })\n }\n >\n <option value=\"\">Choose a provider</option>\n {providerTypes().map((type) => (\n <option key={type} value={type}>\n {type}\n </option>\n ))}\n </select>\n </EditorField>\n <JsonSchemaForm\n idPrefix=\"profile-source-connection\"\n schema={providerConnectionSchema()}\n value={{\n connection: draft.provider?.connection ?? \"\",\n provider: draft.provider ?? {},\n }}\n onChange={(next) => {\n if (typeof next.connection !== \"string\") {\n throw new Error(\"provider.connection must be a string\");\n }\n onChange({\n ...draft,\n provider: { ...draft.provider, connection: next.connection },\n });\n }}\n showPreferencesMenu={false}\n {...(lookupFetcher ? { lookupFetcher } : {})}\n />\n </div>\n {sampleStale ? (\n <p className=\"mt-4 rounded-lg border border-warning/40 bg-warning/10 px-4 py-3 text-sm text-warning-foreground\">\n Source or query settings changed after the latest sample. You can\n save, but sampling again will verify the current field shape.\n </p>\n ) : null}\n </SectionCard>\n {connectionID ? (\n <ProfileWizardQueryStep\n key={connectionID}\n connectionID={connectionID}\n draft={draft}\n discovered={discovered}\n onDraftChange={onChange}\n onSample={onSample}\n />\n ) : (\n <SectionCard\n title=\"Query and provider options\"\n description=\"Inline sources use the provider schema for options while keeping the query workspace explicit.\"\n >\n <EditorField label=\"Query\">\n <textarea\n rows={10}\n value={draft.query ?? \"\"}\n className={`${inputClassName} resize-y font-mono text-xs`}\n onChange={(event) =>\n onChange({ ...draft, query: event.target.value })\n }\n />\n </EditorField>\n <div className=\"mt-5\">\n {/* The provider option schemas carry host widgets of their own —\n secret and workload-url selectors, the structured search builder —\n so this form needs the host's extensions as much as the sections\n built from the profile schema do. */}\n <JsonSchemaForm\n idPrefix=\"profile-provider-options\"\n schema={providerOptionsSchema(providerType)}\n value={draft.provider?.options ?? {}}\n onChange={(options) =>\n onChange({\n ...draft,\n provider: { ...draft.provider, options },\n })\n }\n showPreferencesMenu={false}\n pre={profileFormExtensions().pre}\n post={profileFormExtensions().post}\n />\n </div>\n </SectionCard>\n )}\n </div>\n );\n}\n\nexport function ProfileSchemaSection({\n draft,\n keys,\n title,\n description,\n idPrefix,\n layout,\n lookupFetcher,\n pre,\n post,\n onChange,\n}: EditorSectionProps & {\n keys: string[];\n title: string;\n description: string;\n idPrefix: string;\n // Presentation is the call site's, not this component's — profile schema\n // sections can choose a dense layout or keep the plain stacked defaults.\n layout?: FormLayout;\n // JsonSchemaForm always installs its own lookup provider, so an outer one is\n // shadowed rather than inherited: without this, x-clicky-lookup fields (the\n // imports and reconcile.dest profile pickers) render with no options at all.\n lookupFetcher?: LookupFetcher;\n // Overrides the host's configured extensions for this section only. Passing an\n // empty array is meaningful — it renders the built-in controls — so these are\n // distinguished by being undefined, not by being empty.\n pre?: PreExtension[];\n post?: PostExtension[];\n}) {\n const configured = profileFormExtensions();\n const fullRootPre = (pre ?? configured.pre).map<PreExtension>(\n (extension) => (field, context) =>\n extension(field, {\n ...context,\n rootValue: draft,\n onRootChange: onChange,\n }),\n );\n const fullRootPost = (post ?? configured.post).map<PostExtension>(\n (extension) => (field, nodes, context) =>\n extension(field, nodes, {\n ...context,\n rootValue: draft,\n onRootChange: onChange,\n }),\n );\n return (\n <SectionCard title={title} description={description}>\n <JsonSchemaForm\n idPrefix={idPrefix}\n schema={profileSchemaProjection(keys)}\n value={Object.fromEntries(\n keys.flatMap((key) =>\n Object.prototype.hasOwnProperty.call(draft, key)\n ? [[key, draft[key]]]\n : [],\n ),\n )}\n onChange={(next) => onChange(mergeProfileProjection(draft, keys, next))}\n showPreferencesMenu={false}\n pre={fullRootPre}\n post={fullRootPost}\n {...(layout ? { layout } : {})}\n {...(lookupFetcher ? { lookupFetcher } : {})}\n />\n </SectionCard>\n );\n}\n\ntype EditorSectionProps = {\n draft: ProfileWizardDraft;\n onChange: (draft: ProfileWizardDraft) => void;\n};\n\nfunction SectionCard({\n title,\n description,\n children,\n}: {\n title: string;\n description: string;\n children: ReactNode;\n}) {\n return (\n <section className=\"rounded-xl border bg-card p-5\">\n <h2 className=\"text-lg font-semibold\">{title}</h2>\n <p className=\"mb-5 mt-1 text-sm text-muted-foreground\">{description}</p>\n {children}\n </section>\n );\n}\n\nfunction EditorField({\n label,\n required,\n children,\n}: {\n label: string;\n required?: boolean;\n children: ReactNode;\n}) {\n return (\n <label className=\"grid gap-1.5 text-sm font-medium\">\n <span>\n {label}\n {required ? <span className=\"text-destructive\"> *</span> : null}\n </span>\n {children}\n </label>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"profileEditorSections.js","names":[],"sources":["../../../src/profiles/editor/profileEditorSections.tsx"],"sourcesContent":["import { JsonSchemaForm } from \"../../components/JsonSchemaForm\";\nimport type {\n FormLayout,\n LookupFetcher,\n PostExtension,\n PreExtension,\n} from \"../../components/json-schema-form-types\";\nimport { Icon } from \"../../data/Icon\";\nimport type { ReactNode } from \"react\";\nimport {\n mergeProfileProjection,\n providerConnectionSchema,\n profileSchemaProjection,\n providerOptionsSchema,\n providerTypes,\n} from \"./profileEditorModel\";\nimport { profileFormExtensions } from \"../profileApi\";\nimport {\n ProfileWizardQueryStep,\n type ProfileSample,\n} from \"../wizard/profileWizardQueryStep\";\nimport {\n profileConnectionID,\n type ProfileColumn,\n type ProfileWizardDraft,\n} from \"../wizard/profileWizardModel\";\n\nconst inputClassName =\n \"w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none focus:border-primary focus:ring-2 focus:ring-primary/15\";\n\nexport function ProfileGeneralSection({ draft, onChange }: EditorSectionProps) {\n return (\n <SectionCard\n title=\"Profile identity\"\n description=\"Name the profile and choose its default presentation. Renaming updates dependent imports when you save.\"\n >\n <div className=\"grid gap-5 @xl:grid-cols-2\">\n <EditorField label=\"Profile name\" required>\n <input\n value={draft.profile ?? \"\"}\n className={inputClassName}\n onChange={(event) =>\n onChange({ ...draft, profile: event.target.value })\n }\n />\n </EditorField>\n <EditorField label=\"Namespace\">\n <input\n value={draft.namespace ?? \"\"}\n className={inputClassName}\n placeholder=\"Default namespace\"\n onChange={(event) =>\n onChange({ ...draft, namespace: event.target.value })\n }\n />\n </EditorField>\n <EditorField label=\"Render mode\">\n <select\n value={typeof draft.render === \"string\" ? draft.render : \"\"}\n className={inputClassName}\n onChange={(event) =>\n onChange({ ...draft, render: event.target.value || undefined })\n }\n >\n <option value=\"\">Table (default)</option>\n <option value=\"table\">Table</option>\n <option value=\"logs\">Logs</option>\n <option value=\"traces\">Traces</option>\n </select>\n </EditorField>\n <EditorField label=\"Icon\">\n <div className=\"flex items-center gap-2\">\n <input\n value={typeof draft.icon === \"string\" ? draft.icon : \"\"}\n className={inputClassName}\n // Empty is the norm: the provider type already supplies a mark.\n // This is for the profile whose subject is not its backend.\n placeholder=\"Provider default\"\n onChange={(event) =>\n onChange({ ...draft, icon: event.target.value || undefined })\n }\n />\n {typeof draft.icon === \"string\" && draft.icon !== \"\" ? (\n // Shows what the name actually resolves to — an unresolvable name\n // renders nothing anywhere, which is invisible without a preview.\n <Icon name={draft.icon} className=\"size-5 shrink-0\" />\n ) : null}\n </div>\n </EditorField>\n </div>\n </SectionCard>\n );\n}\n\nexport function ProfileSourceSection({\n draft,\n discovered,\n sampleStale,\n lookupFetcher,\n onChange,\n onSample,\n}: EditorSectionProps & {\n discovered: ProfileColumn[];\n sampleStale: boolean;\n lookupFetcher?: LookupFetcher;\n onSample: (sample: ProfileSample) => void;\n}) {\n const connectionID = profileConnectionID(draft.provider?.connection ?? \"\");\n const providerType = draft.provider?.type ?? \"\";\n return (\n <div className=\"grid h-full min-h-0 gap-4\">\n <SectionCard\n title=\"Source\"\n description=\"Select the provider and saved connection. Connection credentials remain server-side.\"\n >\n <div className=\"grid gap-4 @xl:grid-cols-2\">\n <EditorField label=\"Provider type\" required>\n <select\n value={providerType}\n className={inputClassName}\n onChange={(event) =>\n onChange({\n ...draft,\n provider: { ...draft.provider, type: event.target.value },\n })\n }\n >\n <option value=\"\">Choose a provider</option>\n {providerTypes().map((type) => (\n <option key={type} value={type}>\n {type}\n </option>\n ))}\n </select>\n </EditorField>\n <JsonSchemaForm\n idPrefix=\"profile-source-connection\"\n schema={providerConnectionSchema()}\n value={{\n connection: draft.provider?.connection ?? \"\",\n provider: draft.provider ?? {},\n }}\n onChange={(next) => {\n if (typeof next.connection !== \"string\") {\n throw new Error(\"provider.connection must be a string\");\n }\n onChange({\n ...draft,\n provider: { ...draft.provider, connection: next.connection },\n });\n }}\n showPreferencesMenu={false}\n {...(lookupFetcher ? { lookupFetcher } : {})}\n />\n </div>\n {sampleStale ? (\n <p className=\"mt-4 rounded-lg border border-warning/40 bg-warning/10 px-4 py-3 text-sm text-warning-foreground\">\n Source or query settings changed after the latest sample. You can\n save, but sampling again will verify the current field shape.\n </p>\n ) : null}\n </SectionCard>\n {connectionID ? (\n <ProfileWizardQueryStep\n key={connectionID}\n connectionID={connectionID}\n draft={draft}\n discovered={discovered}\n onDraftChange={onChange}\n onSample={onSample}\n />\n ) : (\n <SectionCard\n title=\"Query and provider options\"\n description=\"Inline sources use the provider schema for options while keeping the query workspace explicit.\"\n >\n <EditorField label=\"Query\">\n <textarea\n rows={10}\n value={draft.query ?? \"\"}\n className={`${inputClassName} resize-y font-mono text-xs`}\n onChange={(event) =>\n onChange({ ...draft, query: event.target.value })\n }\n />\n </EditorField>\n <div className=\"mt-5\">\n {/* The provider option schemas carry host widgets of their own —\n secret and workload-url selectors, the structured search builder —\n so this form needs the host's extensions as much as the sections\n built from the profile schema do. */}\n <JsonSchemaForm\n idPrefix=\"profile-provider-options\"\n schema={providerOptionsSchema(providerType)}\n value={draft.provider?.options ?? {}}\n onChange={(options) =>\n onChange({\n ...draft,\n provider: { ...draft.provider, options },\n })\n }\n showPreferencesMenu={false}\n pre={profileFormExtensions().pre}\n post={profileFormExtensions().post}\n />\n </div>\n </SectionCard>\n )}\n </div>\n );\n}\n\nexport function ProfileSchemaSection({\n draft,\n keys,\n title,\n description,\n idPrefix,\n layout,\n lookupFetcher,\n pre,\n post,\n onChange,\n}: EditorSectionProps & {\n keys: string[];\n title: string;\n description: string;\n idPrefix: string;\n // Presentation is the call site's, not this component's — profile schema\n // sections can choose a dense layout or keep the plain stacked defaults.\n layout?: FormLayout;\n // JsonSchemaForm always installs its own lookup provider, so an outer one is\n // shadowed rather than inherited: without this, x-clicky-lookup fields (the\n // imports and reconcile.dest profile pickers) render with no options at all.\n lookupFetcher?: LookupFetcher;\n // Overrides the host's configured extensions for this section only. Passing an\n // empty array is meaningful — it renders the built-in controls — so these are\n // distinguished by being undefined, not by being empty.\n pre?: PreExtension[];\n post?: PostExtension[];\n}) {\n const configured = profileFormExtensions();\n const fullRootPre = (pre ?? configured.pre).map<PreExtension>(\n (extension) => (field, context) =>\n extension(field, {\n ...context,\n rootValue: draft,\n onRootChange: onChange,\n }),\n );\n const fullRootPost = (post ?? configured.post).map<PostExtension>(\n (extension) => (field, nodes, context) =>\n extension(field, nodes, {\n ...context,\n rootValue: draft,\n onRootChange: onChange,\n }),\n );\n return (\n <SectionCard title={title} description={description}>\n <JsonSchemaForm\n idPrefix={idPrefix}\n schema={profileSchemaProjection(keys)}\n value={Object.fromEntries(\n keys.flatMap((key) =>\n Object.prototype.hasOwnProperty.call(draft, key)\n ? [[key, draft[key]]]\n : [],\n ),\n )}\n onChange={(next) => onChange(mergeProfileProjection(draft, keys, next))}\n showPreferencesMenu={false}\n pre={fullRootPre}\n post={fullRootPost}\n {...(layout ? { layout } : {})}\n {...(lookupFetcher ? { lookupFetcher } : {})}\n />\n </SectionCard>\n );\n}\n\ntype EditorSectionProps = {\n draft: ProfileWizardDraft;\n onChange: (draft: ProfileWizardDraft) => void;\n};\n\nfunction SectionCard({\n title,\n description,\n children,\n}: {\n title: string;\n description: string;\n children: ReactNode;\n}) {\n return (\n <section className=\"rounded-xl border bg-card p-5\">\n <h2 className=\"text-lg font-semibold\">{title}</h2>\n <p className=\"mb-5 mt-1 text-sm text-muted-foreground\">{description}</p>\n {children}\n </section>\n );\n}\n\nfunction EditorField({\n label,\n required,\n children,\n}: {\n label: string;\n required?: boolean;\n children: ReactNode;\n}) {\n return (\n <label className=\"grid gap-1.5 text-sm font-medium\">\n <span>\n {label}\n {required ? <span className=\"text-destructive\"> *</span> : null}\n </span>\n {children}\n </label>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,60 +2,48 @@ const require_TimeseriesPanel = require("../../data/TimeseriesPanel.cjs");
|
|
|
2
2
|
let react = require("react");
|
|
3
3
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
4
|
// src/profiles/query/prometheusResults.tsx
|
|
5
|
+
var resultSeq = 0;
|
|
5
6
|
function PrometheusResults({ result, fallback }) {
|
|
6
|
-
const
|
|
7
|
-
if (!
|
|
7
|
+
const series = (0, react.useMemo)(() => prometheusSeries(result.rows ?? [], `prometheus-${++resultSeq}`), [result.rows]);
|
|
8
|
+
if (!series) return fallback;
|
|
8
9
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
9
10
|
className: "space-y-3",
|
|
10
11
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_TimeseriesPanel.TimeseriesPanel, {
|
|
11
12
|
title: "Prometheus query",
|
|
12
|
-
|
|
13
|
-
series: chart.series,
|
|
13
|
+
series,
|
|
14
14
|
refreshMs: 0,
|
|
15
|
-
height: 240
|
|
16
|
-
fetcher: async (url) => {
|
|
17
|
-
const id = url.split("?")[0]?.split("/").filter(Boolean).pop() ?? "";
|
|
18
|
-
return chart.responses[id] ?? {
|
|
19
|
-
id,
|
|
20
|
-
points: []
|
|
21
|
-
};
|
|
22
|
-
}
|
|
15
|
+
height: 240
|
|
23
16
|
}), fallback]
|
|
24
17
|
});
|
|
25
18
|
}
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
var TIME_COLUMNS = ["time", "timestamp"];
|
|
20
|
+
function rowTime(row) {
|
|
21
|
+
return row.time ?? row.timestamp;
|
|
22
|
+
}
|
|
23
|
+
function prometheusSeries(rows, prefix) {
|
|
24
|
+
const withTime = rows.filter((row) => rowTime(row) != null && typeof row.value === "number");
|
|
28
25
|
if (withTime.length < 2) return null;
|
|
29
26
|
const groups = /* @__PURE__ */ new Map();
|
|
30
27
|
for (const row of withTime) {
|
|
31
|
-
const label = Object.entries(row).filter(([key]) => key !== "
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
};
|
|
36
|
-
group.points.push({
|
|
37
|
-
at: new Date(String(row.timestamp)).toISOString(),
|
|
28
|
+
const label = Object.entries(row).filter(([key]) => key !== "value" && !TIME_COLUMNS.includes(key)).sort(([a], [b]) => a.localeCompare(b)).map(([key, value]) => `${key}=${String(value)}`).join(", ") || "value";
|
|
29
|
+
const points = groups.get(label) ?? [];
|
|
30
|
+
points.push({
|
|
31
|
+
at: new Date(String(rowTime(row))).toISOString(),
|
|
38
32
|
value: Number(row.value)
|
|
39
33
|
});
|
|
40
|
-
groups.set(label,
|
|
34
|
+
groups.set(label, points);
|
|
41
35
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const id = `series-${index}`;
|
|
46
|
-
series.push({
|
|
36
|
+
return [...groups].map(([label, points], index) => {
|
|
37
|
+
const id = `${prefix}-${index}`;
|
|
38
|
+
return {
|
|
47
39
|
id,
|
|
48
|
-
label
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
40
|
+
label,
|
|
41
|
+
load: async () => ({
|
|
42
|
+
id,
|
|
43
|
+
points
|
|
44
|
+
})
|
|
53
45
|
};
|
|
54
46
|
});
|
|
55
|
-
return {
|
|
56
|
-
series,
|
|
57
|
-
responses
|
|
58
|
-
};
|
|
59
47
|
}
|
|
60
48
|
exports.PrometheusResults = PrometheusResults;
|
|
61
49
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prometheusResults.cjs","names":["useMemo","TimeseriesPanel"],"sources":["../../../src/profiles/query/prometheusResults.tsx"],"sourcesContent":["import { TimeseriesPanel } from \"../../data/TimeseriesPanel\";\nimport type {
|
|
1
|
+
{"version":3,"file":"prometheusResults.cjs","names":["useMemo","TimeseriesPanel"],"sources":["../../../src/profiles/query/prometheusResults.tsx"],"sourcesContent":["import { TimeseriesPanel } from \"../../data/TimeseriesPanel\";\nimport type { TimeseriesPoint, TimeseriesSeries } from \"../../data/TimeseriesPanel.model\";\nimport type { QueryBrowserResult } from \"../../data/query-browser/QueryBrowser.types\";\nimport { useMemo, type ReactNode } from \"react\";\n\n// Each result's series load from its own rows, so the loader cache key\n// (`[\"timeseries\", \"load\", id, range]`) must not repeat across results.\nlet resultSeq = 0;\n\nexport function PrometheusResults({\n result,\n fallback,\n}: {\n result: QueryBrowserResult;\n fallback: ReactNode;\n}) {\n const series = useMemo(\n () => prometheusSeries(result.rows ?? [], `prometheus-${++resultSeq}`),\n [result.rows],\n );\n if (!series) return fallback;\n return (\n <div className=\"space-y-3\">\n <TimeseriesPanel title=\"Prometheus query\" series={series} refreshMs={0} height={240} />\n {fallback}\n </div>\n );\n}\n\n// Prometheus range rows carry `timestamp`; commons-db metric SQL rows carry\n// `time`. A row with both is read by `time`.\nconst TIME_COLUMNS = [\"time\", \"timestamp\"] as const;\n\nfunction rowTime(row: Record<string, unknown>): unknown {\n return row.time ?? row.timestamp;\n}\n\nfunction prometheusSeries(rows: Record<string, unknown>[], prefix: string): TimeseriesSeries[] | null {\n const withTime = rows.filter((row) => rowTime(row) != null && typeof row.value === \"number\");\n if (withTime.length < 2) return null;\n const groups = new Map<string, TimeseriesPoint[]>();\n for (const row of withTime) {\n const labels = Object.entries(row)\n .filter(([key]) => key !== \"value\" && !(TIME_COLUMNS as readonly string[]).includes(key))\n .sort(([a], [b]) => a.localeCompare(b));\n const label = labels.map(([key, value]) => `${key}=${String(value)}`).join(\", \") || \"value\";\n const points = groups.get(label) ?? [];\n points.push({ at: new Date(String(rowTime(row))).toISOString(), value: Number(row.value) });\n groups.set(label, points);\n }\n return [...groups].map(([label, points], index) => {\n const id = `${prefix}-${index}`;\n return { id, label, load: async () => ({ id, points }) };\n });\n}\n"],"mappings":";;;;AAOA,IAAI,YAAY;AAEhB,SAAgB,kBAAkB,EAChC,QACA,YAIC;CACD,MAAM,UAAA,GAASA,MAAAA,QAAAA,OACP,iBAAiB,OAAO,QAAQ,CAAC,GAAG,cAAc,EAAE,WAAW,GACrE,CAAC,OAAO,IAAI,CACd;CACA,IAAI,CAAC,QAAQ,OAAO;CACpB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,wBAAAA,iBAAD;GAAiB,OAAM;GAA2B;GAAQ,WAAW;GAAG,QAAQ;EAAM,CAAA,GACrF,QACE;;AAET;AAIA,IAAM,eAAe,CAAC,QAAQ,WAAW;AAEzC,SAAS,QAAQ,KAAuC;CACtD,OAAO,IAAI,QAAQ,IAAI;AACzB;AAEA,SAAS,iBAAiB,MAAiC,QAA2C;CACpG,MAAM,WAAW,KAAK,QAAQ,QAAQ,QAAQ,GAAG,KAAK,QAAQ,OAAO,IAAI,UAAU,QAAQ;CAC3F,IAAI,SAAS,SAAS,GAAG,OAAO;CAChC,MAAM,yBAAS,IAAI,IAA+B;CAClD,KAAK,MAAM,OAAO,UAAU;EAI1B,MAAM,QAHS,OAAO,QAAQ,GAAG,CAAC,CAC/B,QAAQ,CAAC,SAAS,QAAQ,WAAW,CAAE,aAAmC,SAAS,GAAG,CAAC,CAAC,CACxF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CACzB,CAAA,CAAO,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK;EACpF,MAAM,SAAS,OAAO,IAAI,KAAK,KAAK,CAAC;EACrC,OAAO,KAAK;GAAE,IAAI,IAAI,KAAK,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY;GAAG,OAAO,OAAO,IAAI,KAAK;EAAE,CAAC;EAC1F,OAAO,IAAI,OAAO,MAAM;CAC1B;CACA,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,UAAU;EACjD,MAAM,KAAK,GAAG,OAAO,GAAG;EACxB,OAAO;GAAE;GAAI;GAAO,MAAM,aAAa;IAAE;IAAI;GAAO;EAAG;CACzD,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prometheusResults.d.ts","sourceRoot":"","sources":["../../../src/profiles/query/prometheusResults.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"prometheusResults.d.ts","sourceRoot":"","sources":["../../../src/profiles/query/prometheusResults.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMhD,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACrB,+TAYA"}
|
|
@@ -2,60 +2,48 @@ import { TimeseriesPanel } from "../../data/TimeseriesPanel.js";
|
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
// src/profiles/query/prometheusResults.tsx
|
|
5
|
+
var resultSeq = 0;
|
|
5
6
|
function PrometheusResults({ result, fallback }) {
|
|
6
|
-
const
|
|
7
|
-
if (!
|
|
7
|
+
const series = useMemo(() => prometheusSeries(result.rows ?? [], `prometheus-${++resultSeq}`), [result.rows]);
|
|
8
|
+
if (!series) return fallback;
|
|
8
9
|
return /* @__PURE__ */ jsxs("div", {
|
|
9
10
|
className: "space-y-3",
|
|
10
11
|
children: [/* @__PURE__ */ jsx(TimeseriesPanel, {
|
|
11
12
|
title: "Prometheus query",
|
|
12
|
-
|
|
13
|
-
series: chart.series,
|
|
13
|
+
series,
|
|
14
14
|
refreshMs: 0,
|
|
15
|
-
height: 240
|
|
16
|
-
fetcher: async (url) => {
|
|
17
|
-
const id = url.split("?")[0]?.split("/").filter(Boolean).pop() ?? "";
|
|
18
|
-
return chart.responses[id] ?? {
|
|
19
|
-
id,
|
|
20
|
-
points: []
|
|
21
|
-
};
|
|
22
|
-
}
|
|
15
|
+
height: 240
|
|
23
16
|
}), fallback]
|
|
24
17
|
});
|
|
25
18
|
}
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
var TIME_COLUMNS = ["time", "timestamp"];
|
|
20
|
+
function rowTime(row) {
|
|
21
|
+
return row.time ?? row.timestamp;
|
|
22
|
+
}
|
|
23
|
+
function prometheusSeries(rows, prefix) {
|
|
24
|
+
const withTime = rows.filter((row) => rowTime(row) != null && typeof row.value === "number");
|
|
28
25
|
if (withTime.length < 2) return null;
|
|
29
26
|
const groups = /* @__PURE__ */ new Map();
|
|
30
27
|
for (const row of withTime) {
|
|
31
|
-
const label = Object.entries(row).filter(([key]) => key !== "
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
};
|
|
36
|
-
group.points.push({
|
|
37
|
-
at: new Date(String(row.timestamp)).toISOString(),
|
|
28
|
+
const label = Object.entries(row).filter(([key]) => key !== "value" && !TIME_COLUMNS.includes(key)).sort(([a], [b]) => a.localeCompare(b)).map(([key, value]) => `${key}=${String(value)}`).join(", ") || "value";
|
|
29
|
+
const points = groups.get(label) ?? [];
|
|
30
|
+
points.push({
|
|
31
|
+
at: new Date(String(rowTime(row))).toISOString(),
|
|
38
32
|
value: Number(row.value)
|
|
39
33
|
});
|
|
40
|
-
groups.set(label,
|
|
34
|
+
groups.set(label, points);
|
|
41
35
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const id = `series-${index}`;
|
|
46
|
-
series.push({
|
|
36
|
+
return [...groups].map(([label, points], index) => {
|
|
37
|
+
const id = `${prefix}-${index}`;
|
|
38
|
+
return {
|
|
47
39
|
id,
|
|
48
|
-
label
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
40
|
+
label,
|
|
41
|
+
load: async () => ({
|
|
42
|
+
id,
|
|
43
|
+
points
|
|
44
|
+
})
|
|
53
45
|
};
|
|
54
46
|
});
|
|
55
|
-
return {
|
|
56
|
-
series,
|
|
57
|
-
responses
|
|
58
|
-
};
|
|
59
47
|
}
|
|
60
48
|
export { PrometheusResults };
|
|
61
49
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prometheusResults.js","names":[],"sources":["../../../src/profiles/query/prometheusResults.tsx"],"sourcesContent":["import { TimeseriesPanel } from \"../../data/TimeseriesPanel\";\nimport type {
|
|
1
|
+
{"version":3,"file":"prometheusResults.js","names":[],"sources":["../../../src/profiles/query/prometheusResults.tsx"],"sourcesContent":["import { TimeseriesPanel } from \"../../data/TimeseriesPanel\";\nimport type { TimeseriesPoint, TimeseriesSeries } from \"../../data/TimeseriesPanel.model\";\nimport type { QueryBrowserResult } from \"../../data/query-browser/QueryBrowser.types\";\nimport { useMemo, type ReactNode } from \"react\";\n\n// Each result's series load from its own rows, so the loader cache key\n// (`[\"timeseries\", \"load\", id, range]`) must not repeat across results.\nlet resultSeq = 0;\n\nexport function PrometheusResults({\n result,\n fallback,\n}: {\n result: QueryBrowserResult;\n fallback: ReactNode;\n}) {\n const series = useMemo(\n () => prometheusSeries(result.rows ?? [], `prometheus-${++resultSeq}`),\n [result.rows],\n );\n if (!series) return fallback;\n return (\n <div className=\"space-y-3\">\n <TimeseriesPanel title=\"Prometheus query\" series={series} refreshMs={0} height={240} />\n {fallback}\n </div>\n );\n}\n\n// Prometheus range rows carry `timestamp`; commons-db metric SQL rows carry\n// `time`. A row with both is read by `time`.\nconst TIME_COLUMNS = [\"time\", \"timestamp\"] as const;\n\nfunction rowTime(row: Record<string, unknown>): unknown {\n return row.time ?? row.timestamp;\n}\n\nfunction prometheusSeries(rows: Record<string, unknown>[], prefix: string): TimeseriesSeries[] | null {\n const withTime = rows.filter((row) => rowTime(row) != null && typeof row.value === \"number\");\n if (withTime.length < 2) return null;\n const groups = new Map<string, TimeseriesPoint[]>();\n for (const row of withTime) {\n const labels = Object.entries(row)\n .filter(([key]) => key !== \"value\" && !(TIME_COLUMNS as readonly string[]).includes(key))\n .sort(([a], [b]) => a.localeCompare(b));\n const label = labels.map(([key, value]) => `${key}=${String(value)}`).join(\", \") || \"value\";\n const points = groups.get(label) ?? [];\n points.push({ at: new Date(String(rowTime(row))).toISOString(), value: Number(row.value) });\n groups.set(label, points);\n }\n return [...groups].map(([label, points], index) => {\n const id = `${prefix}-${index}`;\n return { id, label, load: async () => ({ id, points }) };\n });\n}\n"],"mappings":";;;;AAOA,IAAI,YAAY;AAEhB,SAAgB,kBAAkB,EAChC,QACA,YAIC;CACD,MAAM,SAAS,cACP,iBAAiB,OAAO,QAAQ,CAAC,GAAG,cAAc,EAAE,WAAW,GACrE,CAAC,OAAO,IAAI,CACd;CACA,IAAI,CAAC,QAAQ,OAAO;CACpB,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,oBAAC,iBAAD;GAAiB,OAAM;GAA2B;GAAQ,WAAW;GAAG,QAAQ;EAAM,CAAA,GACrF,QACE;;AAET;AAIA,IAAM,eAAe,CAAC,QAAQ,WAAW;AAEzC,SAAS,QAAQ,KAAuC;CACtD,OAAO,IAAI,QAAQ,IAAI;AACzB;AAEA,SAAS,iBAAiB,MAAiC,QAA2C;CACpG,MAAM,WAAW,KAAK,QAAQ,QAAQ,QAAQ,GAAG,KAAK,QAAQ,OAAO,IAAI,UAAU,QAAQ;CAC3F,IAAI,SAAS,SAAS,GAAG,OAAO;CAChC,MAAM,yBAAS,IAAI,IAA+B;CAClD,KAAK,MAAM,OAAO,UAAU;EAI1B,MAAM,QAHS,OAAO,QAAQ,GAAG,CAAC,CAC/B,QAAQ,CAAC,SAAS,QAAQ,WAAW,CAAE,aAAmC,SAAS,GAAG,CAAC,CAAC,CACxF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CACzB,CAAA,CAAO,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK;EACpF,MAAM,SAAS,OAAO,IAAI,KAAK,KAAK,CAAC;EACrC,OAAO,KAAK;GAAE,IAAI,IAAI,KAAK,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY;GAAG,OAAO,OAAO,IAAI,KAAK;EAAE,CAAC;EAC1F,OAAO,IAAI,OAAO,MAAM;CAC1B;CACA,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,UAAU;EACjD,MAAM,KAAK,GAAG,OAAO,GAAG;EACxB,OAAO;GAAE;GAAI;GAAO,MAAM,aAAa;IAAE;IAAI;GAAO;EAAG;CACzD,CAAC;AACH"}
|
package/dist/rpc/CommandForm.cjs
CHANGED
|
@@ -205,7 +205,7 @@ function TagInput({ id, value, placeholder, onChange }) {
|
|
|
205
205
|
})]
|
|
206
206
|
}, `${tag}-${index}`)), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
207
207
|
id,
|
|
208
|
-
className: "min-w-
|
|
208
|
+
className: "min-w-0 flex-1 basis-32 bg-transparent px-1 py-1 text-sm outline-none",
|
|
209
209
|
placeholder: tags.length === 0 ? placeholder : "",
|
|
210
210
|
onKeyDown: handleKeyDown,
|
|
211
211
|
onBlur: (event) => commit(event.currentTarget.value, event.currentTarget)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandForm.cjs","names":["useReducer","normalizeParameters","submitValue","packParameterValues","Button","parameterPlaceholder","Icon","UiClose","pathParamNames"],"sources":["../../src/rpc/CommandForm.tsx"],"sourcesContent":["import { useReducer, type FormEvent, type KeyboardEvent, type ReactNode } from \"react\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiClose } from \"../icons\";\nimport { parameterPlaceholder, type OpenAPIParameter, type OperationRequestValues } from \"./types\";\nimport { normalizeParameters, pathParamNames, submitValue } from \"./command-form-utils\";\nimport { packParameterValues, type ParameterValues } from \"./formMetadata\";\n\nexport type CommandFormSubmission = {\n values: ParameterValues;\n request: OperationRequestValues;\n headers: Record<string, string>;\n};\n\nexport type CommandFormProps = {\n parameters: OpenAPIParameter[];\n onExecute: (submission: CommandFormSubmission) => void;\n isPending: boolean;\n method: string;\n path: string;\n accept: string;\n initialValues?: Record<string, string>;\n};\n\ntype FormState = Record<string, string>;\ntype FormAction = { name: string; value: string };\n\nfunction formReducer(state: FormState, action: FormAction): FormState {\n return { ...state, [action.name]: action.value };\n}\n\nexport function CommandForm({\n parameters,\n onExecute,\n isPending,\n method: _method,\n path,\n accept,\n initialValues,\n}: CommandFormProps) {\n const [values, dispatch] = useReducer(\n formReducer,\n { parameters, path, initialValues },\n ({ parameters: params, path: formPath, initialValues: overrides }) =>\n buildInitialState(normalizeParameters(params, formPath), formPath, overrides),\n );\n\n const formParameters = normalizeParameters(parameters, path);\n const visibleParams = formParameters.filter((p) => !(p.in === \"path\" && initialValues?.[p.name]));\n const inlineLayout = visibleParams.length >= INLINE_LAYOUT_THRESHOLD;\n\n function handleSubmit(event: FormEvent) {\n event.preventDefault();\n const submittedValues: ParameterValues = {};\n for (const param of formParameters) {\n const value = submitValue(param, values[param.name]);\n if (value == null) continue;\n submittedValues[param.name] = value;\n }\n onExecute({\n values: submittedValues,\n request: packParameterValues(submittedValues, formParameters),\n headers: { Accept: accept },\n });\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {visibleParams.length > 0 && (\n <div className={inlineLayout ? \"grid gap-2\" : \"grid gap-4\"}>\n {visibleParams.map((param) => (\n <ParameterField\n key={param.name}\n param={param}\n value={values[param.name] || \"\"}\n inline={inlineLayout}\n onChange={(value) => dispatch({ name: param.name, value })}\n />\n ))}\n </div>\n )}\n\n <div\n className={\n inlineLayout\n ? \"sticky bottom-0 z-10 -mx-2 flex justify-end border-t border-border bg-background/95 px-2 py-3 backdrop-blur-sm\"\n : \"flex justify-end\"\n }\n >\n <Button type=\"submit\" disabled={isPending}>\n {isPending ? \"Executing...\" : \"Execute\"}\n </Button>\n </div>\n </form>\n );\n}\n\nconst INLINE_LAYOUT_THRESHOLD = 6;\n\nfunction ParameterField({\n param,\n value,\n inline,\n onChange,\n}: {\n param: OpenAPIParameter;\n value: string;\n inline: boolean;\n onChange: (value: string) => void;\n}) {\n const schema = param.schema;\n const fieldId = `param-${param.name}`;\n\n if (isMultiValueParam(param)) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <TagInput\n id={fieldId}\n value={value}\n placeholder={parameterPlaceholder(param) || param.name}\n onChange={onChange}\n />\n </FieldWrapper>\n );\n }\n\n if (schema?.enum) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <select\n id={fieldId}\n value={value}\n className={inputClassName}\n onChange={(event) => onChange(event.target.value)}\n >\n <option value=\"\">Select {param.name}</option>\n {schema.enum.map((v) => (\n <option key={String(v)} value={String(v)}>\n {String(v)}\n </option>\n ))}\n </select>\n </FieldWrapper>\n );\n }\n\n if (schema?.type === \"boolean\") {\n const checkbox = (\n <input\n id={fieldId}\n type=\"checkbox\"\n className=\"h-4 w-4 accent-primary\"\n checked={value === \"true\"}\n onChange={(event) => onChange(event.target.checked ? \"true\" : \"false\")}\n />\n );\n if (inline) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline>\n <div className=\"flex h-9 items-center\">{checkbox}</div>\n </FieldWrapper>\n );\n }\n return (\n <div className=\"flex items-center gap-2\">\n {checkbox}\n <label htmlFor={fieldId} className=\"text-sm font-medium\">\n {param.name}\n {param.required && <span className=\"text-destructive\"> *</span>}\n </label>\n {param.description && (\n <span className=\"text-xs text-muted-foreground\">{param.description}</span>\n )}\n </div>\n );\n }\n\n if (isDateParam(param)) {\n const dateTime = schema?.format === \"date-time\";\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <div className=\"flex gap-2\">\n <input\n id={fieldId}\n type={dateTime ? \"datetime-local\" : \"date\"}\n value={dateInputValue(value, dateTime)}\n className={inputClassName}\n onChange={(event) => onChange(dateOutputValue(event.target.value, dateTime))}\n />\n {value && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`Clear ${param.name}`}\n onClick={() => onChange(\"\")}\n >\n <Icon icon={UiClose} />\n </Button>\n )}\n </div>\n </FieldWrapper>\n );\n }\n\n const inputType = schema?.type === \"integer\" || schema?.type === \"number\" ? \"number\" : \"text\";\n\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <input\n id={fieldId}\n type={inputType}\n value={value}\n className={inputClassName}\n onChange={(event) => onChange(event.target.value)}\n placeholder={\n schema?.default != null\n ? String(schema.default)\n : parameterPlaceholder(param) || param.name\n }\n />\n </FieldWrapper>\n );\n}\n\nfunction TagInput({\n id,\n value,\n placeholder,\n onChange,\n}: {\n id: string;\n value: string;\n placeholder: string;\n onChange: (value: string) => void;\n}) {\n const tags = parseTags(value);\n\n function commit(raw: string, input: HTMLInputElement) {\n const next = raw\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (next.length === 0) return;\n onChange(serializeTags([...tags, ...next]));\n input.value = \"\";\n }\n\n function remove(index: number) {\n onChange(serializeTags(tags.filter((_, i) => i !== index)));\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n const input = event.currentTarget;\n if (event.key === \"Enter\" || event.key === \",\") {\n event.preventDefault();\n commit(input.value, input);\n return;\n }\n if (event.key === \"Backspace\" && input.value === \"\" && tags.length > 0) {\n remove(tags.length - 1);\n }\n }\n\n return (\n <div className=\"flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent px-2 py-1 shadow-sm\">\n {tags.map((tag, index) => (\n <span\n key={`${tag}-${index}`}\n className=\"inline-flex h-6 max-w-full items-center gap-1 rounded-md bg-muted px-2 text-xs\"\n >\n <span className=\"truncate\">{tag}</span>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground\"\n aria-label={`Remove ${tag}`}\n onClick={() => remove(index)}\n >\n <Icon icon={UiClose} />\n </button>\n </span>\n ))}\n <input\n id={id}\n className=\"min-w-32 flex-1 bg-transparent px-1 py-1 text-sm outline-none\"\n placeholder={tags.length === 0 ? placeholder : \"\"}\n onKeyDown={handleKeyDown}\n onBlur={(event) => commit(event.currentTarget.value, event.currentTarget)}\n />\n </div>\n );\n}\n\nfunction FieldWrapper({\n param,\n fieldId,\n inline,\n children,\n}: {\n param: OpenAPIParameter;\n fieldId: string;\n inline?: boolean;\n children: ReactNode;\n}) {\n const label = (\n <label htmlFor={fieldId} className=\"text-sm font-medium\">\n {param.name}\n {param.required && <span className=\"text-destructive\"> *</span>}\n </label>\n );\n\n if (inline) {\n return (\n <div className=\"grid grid-cols-[10rem_1fr] items-start gap-x-3 gap-y-0.5\">\n <div className=\"flex h-9 items-center\">{label}</div>\n <div className=\"min-w-0\">{children}</div>\n {param.description && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{param.description}</p>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-1.5\">\n {label}\n {children}\n {param.description && <p className=\"text-xs text-muted-foreground\">{param.description}</p>}\n </div>\n );\n}\n\nfunction buildInitialState(\n parameters: OpenAPIParameter[],\n path: string,\n overrides?: Record<string, string>,\n): FormState {\n const state: FormState = {};\n for (const p of parameters) {\n state[p.name] = initialParamValue(p, overrides?.[p.name]);\n }\n for (const name of pathParamNames(path)) {\n if (state[name] == null) {\n state[name] = overrides?.[name] ?? \"\";\n }\n }\n return state;\n}\n\nfunction initialParamValue(param: OpenAPIParameter, override: string | undefined): string {\n if (override != null) return sanitizeInitialValue(param, override);\n const value = param.schema?.default;\n if (value == null) return \"\";\n return sanitizeInitialValue(param, String(value));\n}\n\nfunction sanitizeInitialValue(param: OpenAPIParameter, value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"[]\" || trimmed === \"null\") return \"\";\n if (isDateParam(param) && isZeroDate(trimmed)) return \"\";\n return value;\n}\n\nfunction isMultiValueParam(param: OpenAPIParameter): boolean {\n const text = `${param.name} ${param.description ?? \"\"}`.toLowerCase();\n return (\n param.schema?.type === \"array\" ||\n String(param.schema?.default ?? \"\") === \"[]\" ||\n text.includes(\"repeatable\")\n );\n}\n\nfunction parseTags(value: string): string[] {\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"[]\" || trimmed === \"null\") return [];\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed)) return parsed.map(String).filter(Boolean);\n } catch {\n // Fall back to comma-delimited tags below.\n }\n return trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction serializeTags(tags: string[]): string {\n return tags.join(\",\");\n}\n\nfunction isDateParam(param: OpenAPIParameter): boolean {\n const format = param.schema?.format?.toLowerCase();\n const text = `${param.name} ${param.description ?? \"\"}`.toLowerCase();\n return format === \"date\" || format === \"date-time\" || text.includes(\"date\");\n}\n\nfunction isZeroDate(value: string): boolean {\n return value.startsWith(\"0001-01-01\") || value === \"0001-01-01\";\n}\n\nfunction dateInputValue(value: string, dateTime: boolean): string {\n if (!value || value.startsWith(\"0001-01-01\")) return \"\";\n if (!dateTime) return value.slice(0, 10);\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return value.slice(0, 16);\n const offset = parsed.getTimezoneOffset() * 60_000;\n return new Date(parsed.getTime() - offset).toISOString().slice(0, 16);\n}\n\nfunction dateOutputValue(value: string, dateTime: boolean): string {\n if (!value) return \"\";\n if (!dateTime) return value;\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return value;\n return parsed.toISOString();\n}\n\nconst inputClassName =\n \"h-9 w-full min-w-0 rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CommandForm.cjs","names":["useReducer","normalizeParameters","submitValue","packParameterValues","Button","parameterPlaceholder","Icon","UiClose","pathParamNames"],"sources":["../../src/rpc/CommandForm.tsx"],"sourcesContent":["import { useReducer, type FormEvent, type KeyboardEvent, type ReactNode } from \"react\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiClose } from \"../icons\";\nimport { parameterPlaceholder, type OpenAPIParameter, type OperationRequestValues } from \"./types\";\nimport { normalizeParameters, pathParamNames, submitValue } from \"./command-form-utils\";\nimport { packParameterValues, type ParameterValues } from \"./formMetadata\";\n\nexport type CommandFormSubmission = {\n values: ParameterValues;\n request: OperationRequestValues;\n headers: Record<string, string>;\n};\n\nexport type CommandFormProps = {\n parameters: OpenAPIParameter[];\n onExecute: (submission: CommandFormSubmission) => void;\n isPending: boolean;\n method: string;\n path: string;\n accept: string;\n initialValues?: Record<string, string>;\n};\n\ntype FormState = Record<string, string>;\ntype FormAction = { name: string; value: string };\n\nfunction formReducer(state: FormState, action: FormAction): FormState {\n return { ...state, [action.name]: action.value };\n}\n\nexport function CommandForm({\n parameters,\n onExecute,\n isPending,\n method: _method,\n path,\n accept,\n initialValues,\n}: CommandFormProps) {\n const [values, dispatch] = useReducer(\n formReducer,\n { parameters, path, initialValues },\n ({ parameters: params, path: formPath, initialValues: overrides }) =>\n buildInitialState(normalizeParameters(params, formPath), formPath, overrides),\n );\n\n const formParameters = normalizeParameters(parameters, path);\n const visibleParams = formParameters.filter((p) => !(p.in === \"path\" && initialValues?.[p.name]));\n const inlineLayout = visibleParams.length >= INLINE_LAYOUT_THRESHOLD;\n\n function handleSubmit(event: FormEvent) {\n event.preventDefault();\n const submittedValues: ParameterValues = {};\n for (const param of formParameters) {\n const value = submitValue(param, values[param.name]);\n if (value == null) continue;\n submittedValues[param.name] = value;\n }\n onExecute({\n values: submittedValues,\n request: packParameterValues(submittedValues, formParameters),\n headers: { Accept: accept },\n });\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {visibleParams.length > 0 && (\n <div className={inlineLayout ? \"grid gap-2\" : \"grid gap-4\"}>\n {visibleParams.map((param) => (\n <ParameterField\n key={param.name}\n param={param}\n value={values[param.name] || \"\"}\n inline={inlineLayout}\n onChange={(value) => dispatch({ name: param.name, value })}\n />\n ))}\n </div>\n )}\n\n <div\n className={\n inlineLayout\n ? \"sticky bottom-0 z-10 -mx-2 flex justify-end border-t border-border bg-background/95 px-2 py-3 backdrop-blur-sm\"\n : \"flex justify-end\"\n }\n >\n <Button type=\"submit\" disabled={isPending}>\n {isPending ? \"Executing...\" : \"Execute\"}\n </Button>\n </div>\n </form>\n );\n}\n\nconst INLINE_LAYOUT_THRESHOLD = 6;\n\nfunction ParameterField({\n param,\n value,\n inline,\n onChange,\n}: {\n param: OpenAPIParameter;\n value: string;\n inline: boolean;\n onChange: (value: string) => void;\n}) {\n const schema = param.schema;\n const fieldId = `param-${param.name}`;\n\n if (isMultiValueParam(param)) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <TagInput\n id={fieldId}\n value={value}\n placeholder={parameterPlaceholder(param) || param.name}\n onChange={onChange}\n />\n </FieldWrapper>\n );\n }\n\n if (schema?.enum) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <select\n id={fieldId}\n value={value}\n className={inputClassName}\n onChange={(event) => onChange(event.target.value)}\n >\n <option value=\"\">Select {param.name}</option>\n {schema.enum.map((v) => (\n <option key={String(v)} value={String(v)}>\n {String(v)}\n </option>\n ))}\n </select>\n </FieldWrapper>\n );\n }\n\n if (schema?.type === \"boolean\") {\n const checkbox = (\n <input\n id={fieldId}\n type=\"checkbox\"\n className=\"h-4 w-4 accent-primary\"\n checked={value === \"true\"}\n onChange={(event) => onChange(event.target.checked ? \"true\" : \"false\")}\n />\n );\n if (inline) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline>\n <div className=\"flex h-9 items-center\">{checkbox}</div>\n </FieldWrapper>\n );\n }\n return (\n <div className=\"flex items-center gap-2\">\n {checkbox}\n <label htmlFor={fieldId} className=\"text-sm font-medium\">\n {param.name}\n {param.required && <span className=\"text-destructive\"> *</span>}\n </label>\n {param.description && (\n <span className=\"text-xs text-muted-foreground\">{param.description}</span>\n )}\n </div>\n );\n }\n\n if (isDateParam(param)) {\n const dateTime = schema?.format === \"date-time\";\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <div className=\"flex gap-2\">\n <input\n id={fieldId}\n type={dateTime ? \"datetime-local\" : \"date\"}\n value={dateInputValue(value, dateTime)}\n className={inputClassName}\n onChange={(event) => onChange(dateOutputValue(event.target.value, dateTime))}\n />\n {value && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`Clear ${param.name}`}\n onClick={() => onChange(\"\")}\n >\n <Icon icon={UiClose} />\n </Button>\n )}\n </div>\n </FieldWrapper>\n );\n }\n\n const inputType = schema?.type === \"integer\" || schema?.type === \"number\" ? \"number\" : \"text\";\n\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <input\n id={fieldId}\n type={inputType}\n value={value}\n className={inputClassName}\n onChange={(event) => onChange(event.target.value)}\n placeholder={\n schema?.default != null\n ? String(schema.default)\n : parameterPlaceholder(param) || param.name\n }\n />\n </FieldWrapper>\n );\n}\n\nfunction TagInput({\n id,\n value,\n placeholder,\n onChange,\n}: {\n id: string;\n value: string;\n placeholder: string;\n onChange: (value: string) => void;\n}) {\n const tags = parseTags(value);\n\n function commit(raw: string, input: HTMLInputElement) {\n const next = raw\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (next.length === 0) return;\n onChange(serializeTags([...tags, ...next]));\n input.value = \"\";\n }\n\n function remove(index: number) {\n onChange(serializeTags(tags.filter((_, i) => i !== index)));\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n const input = event.currentTarget;\n if (event.key === \"Enter\" || event.key === \",\") {\n event.preventDefault();\n commit(input.value, input);\n return;\n }\n if (event.key === \"Backspace\" && input.value === \"\" && tags.length > 0) {\n remove(tags.length - 1);\n }\n }\n\n return (\n <div className=\"flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent px-2 py-1 shadow-sm\">\n {tags.map((tag, index) => (\n <span\n key={`${tag}-${index}`}\n className=\"inline-flex h-6 max-w-full items-center gap-1 rounded-md bg-muted px-2 text-xs\"\n >\n <span className=\"truncate\">{tag}</span>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground\"\n aria-label={`Remove ${tag}`}\n onClick={() => remove(index)}\n >\n <Icon icon={UiClose} />\n </button>\n </span>\n ))}\n <input\n id={id}\n className=\"min-w-0 flex-1 basis-32 bg-transparent px-1 py-1 text-sm outline-none\"\n placeholder={tags.length === 0 ? placeholder : \"\"}\n onKeyDown={handleKeyDown}\n onBlur={(event) => commit(event.currentTarget.value, event.currentTarget)}\n />\n </div>\n );\n}\n\nfunction FieldWrapper({\n param,\n fieldId,\n inline,\n children,\n}: {\n param: OpenAPIParameter;\n fieldId: string;\n inline?: boolean;\n children: ReactNode;\n}) {\n const label = (\n <label htmlFor={fieldId} className=\"text-sm font-medium\">\n {param.name}\n {param.required && <span className=\"text-destructive\"> *</span>}\n </label>\n );\n\n if (inline) {\n return (\n <div className=\"grid grid-cols-[10rem_1fr] items-start gap-x-3 gap-y-0.5\">\n <div className=\"flex h-9 items-center\">{label}</div>\n <div className=\"min-w-0\">{children}</div>\n {param.description && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{param.description}</p>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-1.5\">\n {label}\n {children}\n {param.description && <p className=\"text-xs text-muted-foreground\">{param.description}</p>}\n </div>\n );\n}\n\nfunction buildInitialState(\n parameters: OpenAPIParameter[],\n path: string,\n overrides?: Record<string, string>,\n): FormState {\n const state: FormState = {};\n for (const p of parameters) {\n state[p.name] = initialParamValue(p, overrides?.[p.name]);\n }\n for (const name of pathParamNames(path)) {\n if (state[name] == null) {\n state[name] = overrides?.[name] ?? \"\";\n }\n }\n return state;\n}\n\nfunction initialParamValue(param: OpenAPIParameter, override: string | undefined): string {\n if (override != null) return sanitizeInitialValue(param, override);\n const value = param.schema?.default;\n if (value == null) return \"\";\n return sanitizeInitialValue(param, String(value));\n}\n\nfunction sanitizeInitialValue(param: OpenAPIParameter, value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"[]\" || trimmed === \"null\") return \"\";\n if (isDateParam(param) && isZeroDate(trimmed)) return \"\";\n return value;\n}\n\nfunction isMultiValueParam(param: OpenAPIParameter): boolean {\n const text = `${param.name} ${param.description ?? \"\"}`.toLowerCase();\n return (\n param.schema?.type === \"array\" ||\n String(param.schema?.default ?? \"\") === \"[]\" ||\n text.includes(\"repeatable\")\n );\n}\n\nfunction parseTags(value: string): string[] {\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"[]\" || trimmed === \"null\") return [];\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed)) return parsed.map(String).filter(Boolean);\n } catch {\n // Fall back to comma-delimited tags below.\n }\n return trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction serializeTags(tags: string[]): string {\n return tags.join(\",\");\n}\n\nfunction isDateParam(param: OpenAPIParameter): boolean {\n const format = param.schema?.format?.toLowerCase();\n const text = `${param.name} ${param.description ?? \"\"}`.toLowerCase();\n return format === \"date\" || format === \"date-time\" || text.includes(\"date\");\n}\n\nfunction isZeroDate(value: string): boolean {\n return value.startsWith(\"0001-01-01\") || value === \"0001-01-01\";\n}\n\nfunction dateInputValue(value: string, dateTime: boolean): string {\n if (!value || value.startsWith(\"0001-01-01\")) return \"\";\n if (!dateTime) return value.slice(0, 10);\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return value.slice(0, 16);\n const offset = parsed.getTimezoneOffset() * 60_000;\n return new Date(parsed.getTime() - offset).toISOString().slice(0, 16);\n}\n\nfunction dateOutputValue(value: string, dateTime: boolean): string {\n if (!value) return \"\";\n if (!dateTime) return value;\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return value;\n return parsed.toISOString();\n}\n\nconst inputClassName =\n \"h-9 w-full min-w-0 rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n"],"mappings":"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"}
|
package/dist/rpc/CommandForm.js
CHANGED
|
@@ -205,7 +205,7 @@ function TagInput({ id, value, placeholder, onChange }) {
|
|
|
205
205
|
})]
|
|
206
206
|
}, `${tag}-${index}`)), /* @__PURE__ */ jsx("input", {
|
|
207
207
|
id,
|
|
208
|
-
className: "min-w-
|
|
208
|
+
className: "min-w-0 flex-1 basis-32 bg-transparent px-1 py-1 text-sm outline-none",
|
|
209
209
|
placeholder: tags.length === 0 ? placeholder : "",
|
|
210
210
|
onKeyDown: handleKeyDown,
|
|
211
211
|
onBlur: (event) => commit(event.currentTarget.value, event.currentTarget)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandForm.js","names":[],"sources":["../../src/rpc/CommandForm.tsx"],"sourcesContent":["import { useReducer, type FormEvent, type KeyboardEvent, type ReactNode } from \"react\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiClose } from \"../icons\";\nimport { parameterPlaceholder, type OpenAPIParameter, type OperationRequestValues } from \"./types\";\nimport { normalizeParameters, pathParamNames, submitValue } from \"./command-form-utils\";\nimport { packParameterValues, type ParameterValues } from \"./formMetadata\";\n\nexport type CommandFormSubmission = {\n values: ParameterValues;\n request: OperationRequestValues;\n headers: Record<string, string>;\n};\n\nexport type CommandFormProps = {\n parameters: OpenAPIParameter[];\n onExecute: (submission: CommandFormSubmission) => void;\n isPending: boolean;\n method: string;\n path: string;\n accept: string;\n initialValues?: Record<string, string>;\n};\n\ntype FormState = Record<string, string>;\ntype FormAction = { name: string; value: string };\n\nfunction formReducer(state: FormState, action: FormAction): FormState {\n return { ...state, [action.name]: action.value };\n}\n\nexport function CommandForm({\n parameters,\n onExecute,\n isPending,\n method: _method,\n path,\n accept,\n initialValues,\n}: CommandFormProps) {\n const [values, dispatch] = useReducer(\n formReducer,\n { parameters, path, initialValues },\n ({ parameters: params, path: formPath, initialValues: overrides }) =>\n buildInitialState(normalizeParameters(params, formPath), formPath, overrides),\n );\n\n const formParameters = normalizeParameters(parameters, path);\n const visibleParams = formParameters.filter((p) => !(p.in === \"path\" && initialValues?.[p.name]));\n const inlineLayout = visibleParams.length >= INLINE_LAYOUT_THRESHOLD;\n\n function handleSubmit(event: FormEvent) {\n event.preventDefault();\n const submittedValues: ParameterValues = {};\n for (const param of formParameters) {\n const value = submitValue(param, values[param.name]);\n if (value == null) continue;\n submittedValues[param.name] = value;\n }\n onExecute({\n values: submittedValues,\n request: packParameterValues(submittedValues, formParameters),\n headers: { Accept: accept },\n });\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {visibleParams.length > 0 && (\n <div className={inlineLayout ? \"grid gap-2\" : \"grid gap-4\"}>\n {visibleParams.map((param) => (\n <ParameterField\n key={param.name}\n param={param}\n value={values[param.name] || \"\"}\n inline={inlineLayout}\n onChange={(value) => dispatch({ name: param.name, value })}\n />\n ))}\n </div>\n )}\n\n <div\n className={\n inlineLayout\n ? \"sticky bottom-0 z-10 -mx-2 flex justify-end border-t border-border bg-background/95 px-2 py-3 backdrop-blur-sm\"\n : \"flex justify-end\"\n }\n >\n <Button type=\"submit\" disabled={isPending}>\n {isPending ? \"Executing...\" : \"Execute\"}\n </Button>\n </div>\n </form>\n );\n}\n\nconst INLINE_LAYOUT_THRESHOLD = 6;\n\nfunction ParameterField({\n param,\n value,\n inline,\n onChange,\n}: {\n param: OpenAPIParameter;\n value: string;\n inline: boolean;\n onChange: (value: string) => void;\n}) {\n const schema = param.schema;\n const fieldId = `param-${param.name}`;\n\n if (isMultiValueParam(param)) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <TagInput\n id={fieldId}\n value={value}\n placeholder={parameterPlaceholder(param) || param.name}\n onChange={onChange}\n />\n </FieldWrapper>\n );\n }\n\n if (schema?.enum) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <select\n id={fieldId}\n value={value}\n className={inputClassName}\n onChange={(event) => onChange(event.target.value)}\n >\n <option value=\"\">Select {param.name}</option>\n {schema.enum.map((v) => (\n <option key={String(v)} value={String(v)}>\n {String(v)}\n </option>\n ))}\n </select>\n </FieldWrapper>\n );\n }\n\n if (schema?.type === \"boolean\") {\n const checkbox = (\n <input\n id={fieldId}\n type=\"checkbox\"\n className=\"h-4 w-4 accent-primary\"\n checked={value === \"true\"}\n onChange={(event) => onChange(event.target.checked ? \"true\" : \"false\")}\n />\n );\n if (inline) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline>\n <div className=\"flex h-9 items-center\">{checkbox}</div>\n </FieldWrapper>\n );\n }\n return (\n <div className=\"flex items-center gap-2\">\n {checkbox}\n <label htmlFor={fieldId} className=\"text-sm font-medium\">\n {param.name}\n {param.required && <span className=\"text-destructive\"> *</span>}\n </label>\n {param.description && (\n <span className=\"text-xs text-muted-foreground\">{param.description}</span>\n )}\n </div>\n );\n }\n\n if (isDateParam(param)) {\n const dateTime = schema?.format === \"date-time\";\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <div className=\"flex gap-2\">\n <input\n id={fieldId}\n type={dateTime ? \"datetime-local\" : \"date\"}\n value={dateInputValue(value, dateTime)}\n className={inputClassName}\n onChange={(event) => onChange(dateOutputValue(event.target.value, dateTime))}\n />\n {value && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`Clear ${param.name}`}\n onClick={() => onChange(\"\")}\n >\n <Icon icon={UiClose} />\n </Button>\n )}\n </div>\n </FieldWrapper>\n );\n }\n\n const inputType = schema?.type === \"integer\" || schema?.type === \"number\" ? \"number\" : \"text\";\n\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <input\n id={fieldId}\n type={inputType}\n value={value}\n className={inputClassName}\n onChange={(event) => onChange(event.target.value)}\n placeholder={\n schema?.default != null\n ? String(schema.default)\n : parameterPlaceholder(param) || param.name\n }\n />\n </FieldWrapper>\n );\n}\n\nfunction TagInput({\n id,\n value,\n placeholder,\n onChange,\n}: {\n id: string;\n value: string;\n placeholder: string;\n onChange: (value: string) => void;\n}) {\n const tags = parseTags(value);\n\n function commit(raw: string, input: HTMLInputElement) {\n const next = raw\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (next.length === 0) return;\n onChange(serializeTags([...tags, ...next]));\n input.value = \"\";\n }\n\n function remove(index: number) {\n onChange(serializeTags(tags.filter((_, i) => i !== index)));\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n const input = event.currentTarget;\n if (event.key === \"Enter\" || event.key === \",\") {\n event.preventDefault();\n commit(input.value, input);\n return;\n }\n if (event.key === \"Backspace\" && input.value === \"\" && tags.length > 0) {\n remove(tags.length - 1);\n }\n }\n\n return (\n <div className=\"flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent px-2 py-1 shadow-sm\">\n {tags.map((tag, index) => (\n <span\n key={`${tag}-${index}`}\n className=\"inline-flex h-6 max-w-full items-center gap-1 rounded-md bg-muted px-2 text-xs\"\n >\n <span className=\"truncate\">{tag}</span>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground\"\n aria-label={`Remove ${tag}`}\n onClick={() => remove(index)}\n >\n <Icon icon={UiClose} />\n </button>\n </span>\n ))}\n <input\n id={id}\n className=\"min-w-32 flex-1 bg-transparent px-1 py-1 text-sm outline-none\"\n placeholder={tags.length === 0 ? placeholder : \"\"}\n onKeyDown={handleKeyDown}\n onBlur={(event) => commit(event.currentTarget.value, event.currentTarget)}\n />\n </div>\n );\n}\n\nfunction FieldWrapper({\n param,\n fieldId,\n inline,\n children,\n}: {\n param: OpenAPIParameter;\n fieldId: string;\n inline?: boolean;\n children: ReactNode;\n}) {\n const label = (\n <label htmlFor={fieldId} className=\"text-sm font-medium\">\n {param.name}\n {param.required && <span className=\"text-destructive\"> *</span>}\n </label>\n );\n\n if (inline) {\n return (\n <div className=\"grid grid-cols-[10rem_1fr] items-start gap-x-3 gap-y-0.5\">\n <div className=\"flex h-9 items-center\">{label}</div>\n <div className=\"min-w-0\">{children}</div>\n {param.description && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{param.description}</p>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-1.5\">\n {label}\n {children}\n {param.description && <p className=\"text-xs text-muted-foreground\">{param.description}</p>}\n </div>\n );\n}\n\nfunction buildInitialState(\n parameters: OpenAPIParameter[],\n path: string,\n overrides?: Record<string, string>,\n): FormState {\n const state: FormState = {};\n for (const p of parameters) {\n state[p.name] = initialParamValue(p, overrides?.[p.name]);\n }\n for (const name of pathParamNames(path)) {\n if (state[name] == null) {\n state[name] = overrides?.[name] ?? \"\";\n }\n }\n return state;\n}\n\nfunction initialParamValue(param: OpenAPIParameter, override: string | undefined): string {\n if (override != null) return sanitizeInitialValue(param, override);\n const value = param.schema?.default;\n if (value == null) return \"\";\n return sanitizeInitialValue(param, String(value));\n}\n\nfunction sanitizeInitialValue(param: OpenAPIParameter, value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"[]\" || trimmed === \"null\") return \"\";\n if (isDateParam(param) && isZeroDate(trimmed)) return \"\";\n return value;\n}\n\nfunction isMultiValueParam(param: OpenAPIParameter): boolean {\n const text = `${param.name} ${param.description ?? \"\"}`.toLowerCase();\n return (\n param.schema?.type === \"array\" ||\n String(param.schema?.default ?? \"\") === \"[]\" ||\n text.includes(\"repeatable\")\n );\n}\n\nfunction parseTags(value: string): string[] {\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"[]\" || trimmed === \"null\") return [];\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed)) return parsed.map(String).filter(Boolean);\n } catch {\n // Fall back to comma-delimited tags below.\n }\n return trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction serializeTags(tags: string[]): string {\n return tags.join(\",\");\n}\n\nfunction isDateParam(param: OpenAPIParameter): boolean {\n const format = param.schema?.format?.toLowerCase();\n const text = `${param.name} ${param.description ?? \"\"}`.toLowerCase();\n return format === \"date\" || format === \"date-time\" || text.includes(\"date\");\n}\n\nfunction isZeroDate(value: string): boolean {\n return value.startsWith(\"0001-01-01\") || value === \"0001-01-01\";\n}\n\nfunction dateInputValue(value: string, dateTime: boolean): string {\n if (!value || value.startsWith(\"0001-01-01\")) return \"\";\n if (!dateTime) return value.slice(0, 10);\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return value.slice(0, 16);\n const offset = parsed.getTimezoneOffset() * 60_000;\n return new Date(parsed.getTime() - offset).toISOString().slice(0, 16);\n}\n\nfunction dateOutputValue(value: string, dateTime: boolean): string {\n if (!value) return \"\";\n if (!dateTime) return value;\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return value;\n return parsed.toISOString();\n}\n\nconst inputClassName =\n \"h-9 w-full min-w-0 rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CommandForm.js","names":[],"sources":["../../src/rpc/CommandForm.tsx"],"sourcesContent":["import { useReducer, type FormEvent, type KeyboardEvent, type ReactNode } from \"react\";\nimport { Button } from \"../components/button\";\nimport { Icon } from \"../data/Icon\";\nimport { UiClose } from \"../icons\";\nimport { parameterPlaceholder, type OpenAPIParameter, type OperationRequestValues } from \"./types\";\nimport { normalizeParameters, pathParamNames, submitValue } from \"./command-form-utils\";\nimport { packParameterValues, type ParameterValues } from \"./formMetadata\";\n\nexport type CommandFormSubmission = {\n values: ParameterValues;\n request: OperationRequestValues;\n headers: Record<string, string>;\n};\n\nexport type CommandFormProps = {\n parameters: OpenAPIParameter[];\n onExecute: (submission: CommandFormSubmission) => void;\n isPending: boolean;\n method: string;\n path: string;\n accept: string;\n initialValues?: Record<string, string>;\n};\n\ntype FormState = Record<string, string>;\ntype FormAction = { name: string; value: string };\n\nfunction formReducer(state: FormState, action: FormAction): FormState {\n return { ...state, [action.name]: action.value };\n}\n\nexport function CommandForm({\n parameters,\n onExecute,\n isPending,\n method: _method,\n path,\n accept,\n initialValues,\n}: CommandFormProps) {\n const [values, dispatch] = useReducer(\n formReducer,\n { parameters, path, initialValues },\n ({ parameters: params, path: formPath, initialValues: overrides }) =>\n buildInitialState(normalizeParameters(params, formPath), formPath, overrides),\n );\n\n const formParameters = normalizeParameters(parameters, path);\n const visibleParams = formParameters.filter((p) => !(p.in === \"path\" && initialValues?.[p.name]));\n const inlineLayout = visibleParams.length >= INLINE_LAYOUT_THRESHOLD;\n\n function handleSubmit(event: FormEvent) {\n event.preventDefault();\n const submittedValues: ParameterValues = {};\n for (const param of formParameters) {\n const value = submitValue(param, values[param.name]);\n if (value == null) continue;\n submittedValues[param.name] = value;\n }\n onExecute({\n values: submittedValues,\n request: packParameterValues(submittedValues, formParameters),\n headers: { Accept: accept },\n });\n }\n\n return (\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {visibleParams.length > 0 && (\n <div className={inlineLayout ? \"grid gap-2\" : \"grid gap-4\"}>\n {visibleParams.map((param) => (\n <ParameterField\n key={param.name}\n param={param}\n value={values[param.name] || \"\"}\n inline={inlineLayout}\n onChange={(value) => dispatch({ name: param.name, value })}\n />\n ))}\n </div>\n )}\n\n <div\n className={\n inlineLayout\n ? \"sticky bottom-0 z-10 -mx-2 flex justify-end border-t border-border bg-background/95 px-2 py-3 backdrop-blur-sm\"\n : \"flex justify-end\"\n }\n >\n <Button type=\"submit\" disabled={isPending}>\n {isPending ? \"Executing...\" : \"Execute\"}\n </Button>\n </div>\n </form>\n );\n}\n\nconst INLINE_LAYOUT_THRESHOLD = 6;\n\nfunction ParameterField({\n param,\n value,\n inline,\n onChange,\n}: {\n param: OpenAPIParameter;\n value: string;\n inline: boolean;\n onChange: (value: string) => void;\n}) {\n const schema = param.schema;\n const fieldId = `param-${param.name}`;\n\n if (isMultiValueParam(param)) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <TagInput\n id={fieldId}\n value={value}\n placeholder={parameterPlaceholder(param) || param.name}\n onChange={onChange}\n />\n </FieldWrapper>\n );\n }\n\n if (schema?.enum) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <select\n id={fieldId}\n value={value}\n className={inputClassName}\n onChange={(event) => onChange(event.target.value)}\n >\n <option value=\"\">Select {param.name}</option>\n {schema.enum.map((v) => (\n <option key={String(v)} value={String(v)}>\n {String(v)}\n </option>\n ))}\n </select>\n </FieldWrapper>\n );\n }\n\n if (schema?.type === \"boolean\") {\n const checkbox = (\n <input\n id={fieldId}\n type=\"checkbox\"\n className=\"h-4 w-4 accent-primary\"\n checked={value === \"true\"}\n onChange={(event) => onChange(event.target.checked ? \"true\" : \"false\")}\n />\n );\n if (inline) {\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline>\n <div className=\"flex h-9 items-center\">{checkbox}</div>\n </FieldWrapper>\n );\n }\n return (\n <div className=\"flex items-center gap-2\">\n {checkbox}\n <label htmlFor={fieldId} className=\"text-sm font-medium\">\n {param.name}\n {param.required && <span className=\"text-destructive\"> *</span>}\n </label>\n {param.description && (\n <span className=\"text-xs text-muted-foreground\">{param.description}</span>\n )}\n </div>\n );\n }\n\n if (isDateParam(param)) {\n const dateTime = schema?.format === \"date-time\";\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <div className=\"flex gap-2\">\n <input\n id={fieldId}\n type={dateTime ? \"datetime-local\" : \"date\"}\n value={dateInputValue(value, dateTime)}\n className={inputClassName}\n onChange={(event) => onChange(dateOutputValue(event.target.value, dateTime))}\n />\n {value && (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`Clear ${param.name}`}\n onClick={() => onChange(\"\")}\n >\n <Icon icon={UiClose} />\n </Button>\n )}\n </div>\n </FieldWrapper>\n );\n }\n\n const inputType = schema?.type === \"integer\" || schema?.type === \"number\" ? \"number\" : \"text\";\n\n return (\n <FieldWrapper param={param} fieldId={fieldId} inline={inline}>\n <input\n id={fieldId}\n type={inputType}\n value={value}\n className={inputClassName}\n onChange={(event) => onChange(event.target.value)}\n placeholder={\n schema?.default != null\n ? String(schema.default)\n : parameterPlaceholder(param) || param.name\n }\n />\n </FieldWrapper>\n );\n}\n\nfunction TagInput({\n id,\n value,\n placeholder,\n onChange,\n}: {\n id: string;\n value: string;\n placeholder: string;\n onChange: (value: string) => void;\n}) {\n const tags = parseTags(value);\n\n function commit(raw: string, input: HTMLInputElement) {\n const next = raw\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (next.length === 0) return;\n onChange(serializeTags([...tags, ...next]));\n input.value = \"\";\n }\n\n function remove(index: number) {\n onChange(serializeTags(tags.filter((_, i) => i !== index)));\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n const input = event.currentTarget;\n if (event.key === \"Enter\" || event.key === \",\") {\n event.preventDefault();\n commit(input.value, input);\n return;\n }\n if (event.key === \"Backspace\" && input.value === \"\" && tags.length > 0) {\n remove(tags.length - 1);\n }\n }\n\n return (\n <div className=\"flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-input bg-transparent px-2 py-1 shadow-sm\">\n {tags.map((tag, index) => (\n <span\n key={`${tag}-${index}`}\n className=\"inline-flex h-6 max-w-full items-center gap-1 rounded-md bg-muted px-2 text-xs\"\n >\n <span className=\"truncate\">{tag}</span>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground\"\n aria-label={`Remove ${tag}`}\n onClick={() => remove(index)}\n >\n <Icon icon={UiClose} />\n </button>\n </span>\n ))}\n <input\n id={id}\n className=\"min-w-0 flex-1 basis-32 bg-transparent px-1 py-1 text-sm outline-none\"\n placeholder={tags.length === 0 ? placeholder : \"\"}\n onKeyDown={handleKeyDown}\n onBlur={(event) => commit(event.currentTarget.value, event.currentTarget)}\n />\n </div>\n );\n}\n\nfunction FieldWrapper({\n param,\n fieldId,\n inline,\n children,\n}: {\n param: OpenAPIParameter;\n fieldId: string;\n inline?: boolean;\n children: ReactNode;\n}) {\n const label = (\n <label htmlFor={fieldId} className=\"text-sm font-medium\">\n {param.name}\n {param.required && <span className=\"text-destructive\"> *</span>}\n </label>\n );\n\n if (inline) {\n return (\n <div className=\"grid grid-cols-[10rem_1fr] items-start gap-x-3 gap-y-0.5\">\n <div className=\"flex h-9 items-center\">{label}</div>\n <div className=\"min-w-0\">{children}</div>\n {param.description && (\n <p className=\"col-start-2 text-xs text-muted-foreground\">{param.description}</p>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"space-y-1.5\">\n {label}\n {children}\n {param.description && <p className=\"text-xs text-muted-foreground\">{param.description}</p>}\n </div>\n );\n}\n\nfunction buildInitialState(\n parameters: OpenAPIParameter[],\n path: string,\n overrides?: Record<string, string>,\n): FormState {\n const state: FormState = {};\n for (const p of parameters) {\n state[p.name] = initialParamValue(p, overrides?.[p.name]);\n }\n for (const name of pathParamNames(path)) {\n if (state[name] == null) {\n state[name] = overrides?.[name] ?? \"\";\n }\n }\n return state;\n}\n\nfunction initialParamValue(param: OpenAPIParameter, override: string | undefined): string {\n if (override != null) return sanitizeInitialValue(param, override);\n const value = param.schema?.default;\n if (value == null) return \"\";\n return sanitizeInitialValue(param, String(value));\n}\n\nfunction sanitizeInitialValue(param: OpenAPIParameter, value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"[]\" || trimmed === \"null\") return \"\";\n if (isDateParam(param) && isZeroDate(trimmed)) return \"\";\n return value;\n}\n\nfunction isMultiValueParam(param: OpenAPIParameter): boolean {\n const text = `${param.name} ${param.description ?? \"\"}`.toLowerCase();\n return (\n param.schema?.type === \"array\" ||\n String(param.schema?.default ?? \"\") === \"[]\" ||\n text.includes(\"repeatable\")\n );\n}\n\nfunction parseTags(value: string): string[] {\n const trimmed = value.trim();\n if (!trimmed || trimmed === \"[]\" || trimmed === \"null\") return [];\n try {\n const parsed = JSON.parse(trimmed);\n if (Array.isArray(parsed)) return parsed.map(String).filter(Boolean);\n } catch {\n // Fall back to comma-delimited tags below.\n }\n return trimmed\n .split(\",\")\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\nfunction serializeTags(tags: string[]): string {\n return tags.join(\",\");\n}\n\nfunction isDateParam(param: OpenAPIParameter): boolean {\n const format = param.schema?.format?.toLowerCase();\n const text = `${param.name} ${param.description ?? \"\"}`.toLowerCase();\n return format === \"date\" || format === \"date-time\" || text.includes(\"date\");\n}\n\nfunction isZeroDate(value: string): boolean {\n return value.startsWith(\"0001-01-01\") || value === \"0001-01-01\";\n}\n\nfunction dateInputValue(value: string, dateTime: boolean): string {\n if (!value || value.startsWith(\"0001-01-01\")) return \"\";\n if (!dateTime) return value.slice(0, 10);\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return value.slice(0, 16);\n const offset = parsed.getTimezoneOffset() * 60_000;\n return new Date(parsed.getTime() - offset).toISOString().slice(0, 16);\n}\n\nfunction dateOutputValue(value: string, dateTime: boolean): string {\n if (!value) return \"\";\n if (!dateTime) return value;\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) return value;\n return parsed.toISOString();\n}\n\nconst inputClassName =\n \"h-9 w-full min-w-0 rounded-md border border-input bg-background px-2 text-sm text-foreground outline-none placeholder:text-placeholder disabled:cursor-not-allowed disabled:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring\";\n"],"mappings":"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"}
|
package/dist/rpc/classify.cjs
CHANGED
|
@@ -17,7 +17,7 @@ function splitPath(path) {
|
|
|
17
17
|
function findDetailEndpointForList(operations, listEndpoint) {
|
|
18
18
|
if (!listEndpoint) return findDetailEndpoint(operations);
|
|
19
19
|
const baseSegments = splitPath(listEndpoint.path);
|
|
20
|
-
const candidates = operations.filter((op) => op.method === "get" && op.path !== listEndpoint.path && op.operation.parameters?.some((p) => p.in === "path" || require_types.isPositionalParam(p)));
|
|
20
|
+
const candidates = operations.filter((op) => op.method === "get" && op.path !== listEndpoint.path && op.operation["x-clicky"]?.scope !== "collection" && op.operation.parameters?.some((p) => p.in === "path" || require_types.isPositionalParam(p)));
|
|
21
21
|
const exactChild = candidates.find((op) => {
|
|
22
22
|
const segments = splitPath(op.path);
|
|
23
23
|
if (segments.length !== baseSegments.length + 1) return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify.cjs","names":["isPositionalParam"],"sources":["../../src/rpc/classify.ts"],"sourcesContent":["import { isPositionalParam, type ExecutionResponse, type ResolvedOperation } from \"./types\";\n\n// findListEndpoint picks the canonical list operation for a set of\n// entities. Clicky-rpc auto-registers `<entity> list` commands and mints\n// operationIds of the form `<entity>_list`. Matching exactly on that form\n// keeps the default table view deterministic — a non-list GET never gets\n// promoted to list by accident.\n//\n// When a `<entity> list` command is promoted onto the bare entity-root\n// (clicky's promoteListToEntityRoot), the collection is exposed instead as\n// `GET /api/v1/<entity>` with operationId `<entity>` and no `_list` suffix.\n// Fall back to that promoted root when no explicit `<entity>_list` exists.\n// A path/positional parameter disqualifies it, so a `<entity>/{id}` detail\n// GET can never be mistaken for the listing.\nexport function findListEndpoint(\n operations: ResolvedOperation[],\n entities: string[],\n): ResolvedOperation | undefined {\n if (entities.length === 0) return undefined;\n const listIds = new Set(entities.map((e) => `${e}_list`));\n const explicit = operations.find(\n (op) =>\n op.method === \"get\" && !!op.operation.operationId && listIds.has(op.operation.operationId),\n );\n if (explicit) return explicit;\n\n const rootIds = new Set(entities);\n return operations.find(\n (op) =>\n op.method === \"get\" &&\n rootIds.has(op.operation.operationId ?? \"\") &&\n !op.operation.parameters?.some((p) => p.in === \"path\" || isPositionalParam(p)),\n );\n}\n\nexport function findDetailEndpoint(operations: ResolvedOperation[]): ResolvedOperation | undefined {\n return operations.find(\n (op) =>\n op.method === \"get\" &&\n op.operation.parameters?.some((p) => p.in === \"path\" || isPositionalParam(p)),\n );\n}\n\nfunction splitPath(path: string) {\n return path.split(\"/\").filter(Boolean);\n}\n\n// findDetailEndpointForList prefers the detail GET that belongs to the\n// resolved list route. This keeps sibling surfaces that share tags\n// (for example `stack_*` and `admin_stack_*`) from cross-contaminating\n// default entity-detail routing.\nexport function findDetailEndpointForList(\n operations: ResolvedOperation[],\n listEndpoint: ResolvedOperation | undefined,\n): ResolvedOperation | undefined {\n if (!listEndpoint) {\n return findDetailEndpoint(operations);\n }\n\n const baseSegments = splitPath(listEndpoint.path);\n const candidates = operations.filter(\n (op) =>\n op.method === \"get\" &&\n op.path !== listEndpoint.path &&\n op.operation.parameters?.some((p) => p.in === \"path\" || isPositionalParam(p)),\n );\n\n const exactChild = candidates.find((op) => {\n const segments = splitPath(op.path);\n if (segments.length !== baseSegments.length + 1) {\n return false;\n }\n return baseSegments.every((segment, index) => segments[index] === segment);\n });\n\n if (exactChild) {\n return exactChild;\n }\n\n const descendant = candidates.find((op) => op.path.startsWith(`${listEndpoint.path}/`));\n return descendant ?? findDetailEndpoint(operations);\n}\n\nexport function parseJsonBody(response: ExecutionResponse | undefined): unknown {\n if (!response) return null;\n const text = response.stdout || response.output || \"\";\n if (!text.trim()) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nexport function normalizeRows(data: unknown): Record<string, unknown>[] {\n if (Array.isArray(data)) return data as Record<string, unknown>[];\n if (data && typeof data === \"object\") {\n for (const value of Object.values(data)) {\n if (Array.isArray(value)) return value as Record<string, unknown>[];\n }\n }\n return [];\n}\n\n// filterOperationsByDomain returns operations whose OpenAPI `tags` intersect\n// the given entity list. Clicky-rpc's converter stamps the parent command\n// name into `op.tags`, so passing the entities that belong to a domain\n// yields that domain's operations.\nexport function filterOperationsByDomain(\n operations: ResolvedOperation[],\n entities: string[],\n): ResolvedOperation[] {\n if (entities.length === 0) return [];\n const wanted = new Set(entities);\n return operations.filter((op) => {\n if ((op.operation.tags ?? []).some((tag) => wanted.has(tag))) return true;\n // clicky promotes a collection to a bare entity-root GET (operationId\n // `<entity>`, no tag). Include it so the catalog can resolve the listing.\n return op.method === \"get\" && wanted.has(op.operation.operationId ?? \"\");\n });\n}\n"],"mappings":";;AAcA,SAAgB,iBACd,YACA,UAC+B;CAC/B,IAAI,SAAS,WAAW,GAAG,OAAO,KAAA;CAClC,MAAM,UAAU,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,EAAE,MAAM,CAAC;CACxD,MAAM,WAAW,WAAW,MACzB,OACC,GAAG,WAAW,SAAS,CAAC,CAAC,GAAG,UAAU,eAAe,QAAQ,IAAI,GAAG,UAAU,WAAW,CAC7F;CACA,IAAI,UAAU,OAAO;CAErB,MAAM,UAAU,IAAI,IAAI,QAAQ;CAChC,OAAO,WAAW,MACf,OACC,GAAG,WAAW,SACd,QAAQ,IAAI,GAAG,UAAU,eAAe,EAAE,KAC1C,CAAC,GAAG,UAAU,YAAY,MAAM,MAAM,EAAE,OAAO,UAAUA,cAAAA,kBAAkB,CAAC,CAAC,CACjF;AACF;AAEA,SAAgB,mBAAmB,YAAgE;CACjG,OAAO,WAAW,MACf,OACC,GAAG,WAAW,SACd,GAAG,UAAU,YAAY,MAAM,MAAM,EAAE,OAAO,UAAUA,cAAAA,kBAAkB,CAAC,CAAC,CAChF;AACF;AAEA,SAAS,UAAU,MAAc;CAC/B,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;AACvC;AAMA,SAAgB,0BACd,YACA,cAC+B;CAC/B,IAAI,CAAC,cACH,OAAO,mBAAmB,UAAU;CAGtC,MAAM,eAAe,UAAU,aAAa,IAAI;
|
|
1
|
+
{"version":3,"file":"classify.cjs","names":["isPositionalParam"],"sources":["../../src/rpc/classify.ts"],"sourcesContent":["import { isPositionalParam, type ExecutionResponse, type ResolvedOperation } from \"./types\";\n\n// findListEndpoint picks the canonical list operation for a set of\n// entities. Clicky-rpc auto-registers `<entity> list` commands and mints\n// operationIds of the form `<entity>_list`. Matching exactly on that form\n// keeps the default table view deterministic — a non-list GET never gets\n// promoted to list by accident.\n//\n// When a `<entity> list` command is promoted onto the bare entity-root\n// (clicky's promoteListToEntityRoot), the collection is exposed instead as\n// `GET /api/v1/<entity>` with operationId `<entity>` and no `_list` suffix.\n// Fall back to that promoted root when no explicit `<entity>_list` exists.\n// A path/positional parameter disqualifies it, so a `<entity>/{id}` detail\n// GET can never be mistaken for the listing.\nexport function findListEndpoint(\n operations: ResolvedOperation[],\n entities: string[],\n): ResolvedOperation | undefined {\n if (entities.length === 0) return undefined;\n const listIds = new Set(entities.map((e) => `${e}_list`));\n const explicit = operations.find(\n (op) =>\n op.method === \"get\" && !!op.operation.operationId && listIds.has(op.operation.operationId),\n );\n if (explicit) return explicit;\n\n const rootIds = new Set(entities);\n return operations.find(\n (op) =>\n op.method === \"get\" &&\n rootIds.has(op.operation.operationId ?? \"\") &&\n !op.operation.parameters?.some((p) => p.in === \"path\" || isPositionalParam(p)),\n );\n}\n\nexport function findDetailEndpoint(operations: ResolvedOperation[]): ResolvedOperation | undefined {\n return operations.find(\n (op) =>\n op.method === \"get\" &&\n op.operation.parameters?.some((p) => p.in === \"path\" || isPositionalParam(p)),\n );\n}\n\nfunction splitPath(path: string) {\n return path.split(\"/\").filter(Boolean);\n}\n\n// findDetailEndpointForList prefers the detail GET that belongs to the\n// resolved list route. This keeps sibling surfaces that share tags\n// (for example `stack_*` and `admin_stack_*`) from cross-contaminating\n// default entity-detail routing.\nexport function findDetailEndpointForList(\n operations: ResolvedOperation[],\n listEndpoint: ResolvedOperation | undefined,\n): ResolvedOperation | undefined {\n if (!listEndpoint) {\n return findDetailEndpoint(operations);\n }\n\n const baseSegments = splitPath(listEndpoint.path);\n // A collection action (an optional-id one carries a positional `id` query\n // parameter) is never a detail endpoint, however its path sorts.\n const candidates = operations.filter(\n (op) =>\n op.method === \"get\" &&\n op.path !== listEndpoint.path &&\n op.operation[\"x-clicky\"]?.scope !== \"collection\" &&\n op.operation.parameters?.some((p) => p.in === \"path\" || isPositionalParam(p)),\n );\n\n const exactChild = candidates.find((op) => {\n const segments = splitPath(op.path);\n if (segments.length !== baseSegments.length + 1) {\n return false;\n }\n return baseSegments.every((segment, index) => segments[index] === segment);\n });\n\n if (exactChild) {\n return exactChild;\n }\n\n const descendant = candidates.find((op) => op.path.startsWith(`${listEndpoint.path}/`));\n return descendant ?? findDetailEndpoint(operations);\n}\n\nexport function parseJsonBody(response: ExecutionResponse | undefined): unknown {\n if (!response) return null;\n const text = response.stdout || response.output || \"\";\n if (!text.trim()) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n\nexport function normalizeRows(data: unknown): Record<string, unknown>[] {\n if (Array.isArray(data)) return data as Record<string, unknown>[];\n if (data && typeof data === \"object\") {\n for (const value of Object.values(data)) {\n if (Array.isArray(value)) return value as Record<string, unknown>[];\n }\n }\n return [];\n}\n\n// filterOperationsByDomain returns operations whose OpenAPI `tags` intersect\n// the given entity list. Clicky-rpc's converter stamps the parent command\n// name into `op.tags`, so passing the entities that belong to a domain\n// yields that domain's operations.\nexport function filterOperationsByDomain(\n operations: ResolvedOperation[],\n entities: string[],\n): ResolvedOperation[] {\n if (entities.length === 0) return [];\n const wanted = new Set(entities);\n return operations.filter((op) => {\n if ((op.operation.tags ?? []).some((tag) => wanted.has(tag))) return true;\n // clicky promotes a collection to a bare entity-root GET (operationId\n // `<entity>`, no tag). Include it so the catalog can resolve the listing.\n return op.method === \"get\" && wanted.has(op.operation.operationId ?? \"\");\n });\n}\n"],"mappings":";;AAcA,SAAgB,iBACd,YACA,UAC+B;CAC/B,IAAI,SAAS,WAAW,GAAG,OAAO,KAAA;CAClC,MAAM,UAAU,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,EAAE,MAAM,CAAC;CACxD,MAAM,WAAW,WAAW,MACzB,OACC,GAAG,WAAW,SAAS,CAAC,CAAC,GAAG,UAAU,eAAe,QAAQ,IAAI,GAAG,UAAU,WAAW,CAC7F;CACA,IAAI,UAAU,OAAO;CAErB,MAAM,UAAU,IAAI,IAAI,QAAQ;CAChC,OAAO,WAAW,MACf,OACC,GAAG,WAAW,SACd,QAAQ,IAAI,GAAG,UAAU,eAAe,EAAE,KAC1C,CAAC,GAAG,UAAU,YAAY,MAAM,MAAM,EAAE,OAAO,UAAUA,cAAAA,kBAAkB,CAAC,CAAC,CACjF;AACF;AAEA,SAAgB,mBAAmB,YAAgE;CACjG,OAAO,WAAW,MACf,OACC,GAAG,WAAW,SACd,GAAG,UAAU,YAAY,MAAM,MAAM,EAAE,OAAO,UAAUA,cAAAA,kBAAkB,CAAC,CAAC,CAChF;AACF;AAEA,SAAS,UAAU,MAAc;CAC/B,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;AACvC;AAMA,SAAgB,0BACd,YACA,cAC+B;CAC/B,IAAI,CAAC,cACH,OAAO,mBAAmB,UAAU;CAGtC,MAAM,eAAe,UAAU,aAAa,IAAI;CAGhD,MAAM,aAAa,WAAW,QAC3B,OACC,GAAG,WAAW,SACd,GAAG,SAAS,aAAa,QACzB,GAAG,UAAU,WAAW,EAAE,UAAU,gBACpC,GAAG,UAAU,YAAY,MAAM,MAAM,EAAE,OAAO,UAAUA,cAAAA,kBAAkB,CAAC,CAAC,CAChF;CAEA,MAAM,aAAa,WAAW,MAAM,OAAO;EACzC,MAAM,WAAW,UAAU,GAAG,IAAI;EAClC,IAAI,SAAS,WAAW,aAAa,SAAS,GAC5C,OAAO;EAET,OAAO,aAAa,OAAO,SAAS,UAAU,SAAS,WAAW,OAAO;CAC3E,CAAC;CAED,IAAI,YACF,OAAO;CAIT,OADmB,WAAW,MAAM,OAAO,GAAG,KAAK,WAAW,GAAG,aAAa,KAAK,EAAE,CAC9E,KAAc,mBAAmB,UAAU;AACpD;AAEA,SAAgB,cAAc,UAAkD;CAC9E,IAAI,CAAC,UAAU,OAAO;CACtB,MAAM,OAAO,SAAS,UAAU,SAAS,UAAU;CACnD,IAAI,CAAC,KAAK,KAAK,GAAG,OAAO;CACzB,IAAI;EACF,OAAO,KAAK,MAAM,IAAI;CACxB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,cAAc,MAA0C;CACtE,IAAI,MAAM,QAAQ,IAAI,GAAG,OAAO;CAChC,IAAI,QAAQ,OAAO,SAAS,UACrB;OAAA,MAAM,SAAS,OAAO,OAAO,IAAI,GACpC,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO;CAAA;CAGrC,OAAO,CAAC;AACV;AAMA,SAAgB,yBACd,YACA,UACqB;CACrB,IAAI,SAAS,WAAW,GAAG,OAAO,CAAC;CACnC,MAAM,SAAS,IAAI,IAAI,QAAQ;CAC/B,OAAO,WAAW,QAAQ,OAAO;EAC/B,KAAK,GAAG,UAAU,QAAQ,CAAC,EAAA,CAAG,MAAM,QAAQ,OAAO,IAAI,GAAG,CAAC,GAAG,OAAO;EAGrE,OAAO,GAAG,WAAW,SAAS,OAAO,IAAI,GAAG,UAAU,eAAe,EAAE;CACzE,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/rpc/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAc5F,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,iBAAiB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,iBAAiB,GAAG,SAAS,CAgB/B;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,GAAG,SAAS,CAMjG;AAUD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,YAAY,EAAE,iBAAiB,GAAG,SAAS,GAC1C,iBAAiB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/rpc/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAc5F,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,iBAAiB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,iBAAiB,GAAG,SAAS,CAgB/B;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,GAAG,SAAS,CAMjG;AAUD,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,YAAY,EAAE,iBAAiB,GAAG,SAAS,GAC1C,iBAAiB,GAAG,SAAS,CA8B/B;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAS9E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAQtE;AAMD,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,iBAAiB,EAAE,CASrB"}
|
package/dist/rpc/classify.js
CHANGED
|
@@ -17,7 +17,7 @@ function splitPath(path) {
|
|
|
17
17
|
function findDetailEndpointForList(operations, listEndpoint) {
|
|
18
18
|
if (!listEndpoint) return findDetailEndpoint(operations);
|
|
19
19
|
const baseSegments = splitPath(listEndpoint.path);
|
|
20
|
-
const candidates = operations.filter((op) => op.method === "get" && op.path !== listEndpoint.path && op.operation.parameters?.some((p) => p.in === "path" || isPositionalParam(p)));
|
|
20
|
+
const candidates = operations.filter((op) => op.method === "get" && op.path !== listEndpoint.path && op.operation["x-clicky"]?.scope !== "collection" && op.operation.parameters?.some((p) => p.in === "path" || isPositionalParam(p)));
|
|
21
21
|
const exactChild = candidates.find((op) => {
|
|
22
22
|
const segments = splitPath(op.path);
|
|
23
23
|
if (segments.length !== baseSegments.length + 1) return false;
|