@flanksource/clicky-ui 0.2.21 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/comments/CommentAuthor.cjs +58 -0
- package/dist/comments/CommentAuthor.cjs.map +1 -0
- package/dist/comments/CommentAuthor.d.ts +17 -0
- package/dist/comments/CommentAuthor.d.ts.map +1 -0
- package/dist/comments/CommentAuthor.js +58 -0
- package/dist/comments/CommentAuthor.js.map +1 -0
- package/dist/comments/CommentCard.cjs +343 -0
- package/dist/comments/CommentCard.cjs.map +1 -0
- package/dist/comments/CommentCard.d.ts +27 -0
- package/dist/comments/CommentCard.d.ts.map +1 -0
- package/dist/comments/CommentCard.js +343 -0
- package/dist/comments/CommentCard.js.map +1 -0
- package/dist/comments/CommentComposer.cjs +207 -0
- package/dist/comments/CommentComposer.cjs.map +1 -0
- package/dist/comments/CommentComposer.d.ts +23 -0
- package/dist/comments/CommentComposer.d.ts.map +1 -0
- package/dist/comments/CommentComposer.js +207 -0
- package/dist/comments/CommentComposer.js.map +1 -0
- package/dist/comments/CommentFilterBar.cjs +145 -0
- package/dist/comments/CommentFilterBar.cjs.map +1 -0
- package/dist/comments/CommentFilterBar.d.ts +15 -0
- package/dist/comments/CommentFilterBar.d.ts.map +1 -0
- package/dist/comments/CommentFilterBar.js +145 -0
- package/dist/comments/CommentFilterBar.js.map +1 -0
- package/dist/comments/CommentMarkdown.cjs +156 -0
- package/dist/comments/CommentMarkdown.cjs.map +1 -0
- package/dist/comments/CommentMarkdown.d.ts +13 -0
- package/dist/comments/CommentMarkdown.d.ts.map +1 -0
- package/dist/comments/CommentMarkdown.js +156 -0
- package/dist/comments/CommentMarkdown.js.map +1 -0
- package/dist/comments/CommentProgress.cjs +86 -0
- package/dist/comments/CommentProgress.cjs.map +1 -0
- package/dist/comments/CommentProgress.d.ts +16 -0
- package/dist/comments/CommentProgress.d.ts.map +1 -0
- package/dist/comments/CommentProgress.js +86 -0
- package/dist/comments/CommentProgress.js.map +1 -0
- package/dist/comments/CommentProvider.cjs +99 -0
- package/dist/comments/CommentProvider.cjs.map +1 -0
- package/dist/comments/CommentProvider.d.ts +19 -0
- package/dist/comments/CommentProvider.d.ts.map +1 -0
- package/dist/comments/CommentProvider.js +99 -0
- package/dist/comments/CommentProvider.js.map +1 -0
- package/dist/comments/CommentSidePanel.cjs +219 -0
- package/dist/comments/CommentSidePanel.cjs.map +1 -0
- package/dist/comments/CommentSidePanel.d.ts +16 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -0
- package/dist/comments/CommentSidePanel.js +219 -0
- package/dist/comments/CommentSidePanel.js.map +1 -0
- package/dist/comments/CommentThread.cjs +57 -0
- package/dist/comments/CommentThread.cjs.map +1 -0
- package/dist/comments/CommentThread.d.ts +24 -0
- package/dist/comments/CommentThread.d.ts.map +1 -0
- package/dist/comments/CommentThread.js +57 -0
- package/dist/comments/CommentThread.js.map +1 -0
- package/dist/comments/CommentThreadList.cjs +124 -0
- package/dist/comments/CommentThreadList.cjs.map +1 -0
- package/dist/comments/CommentThreadList.d.ts +25 -0
- package/dist/comments/CommentThreadList.d.ts.map +1 -0
- package/dist/comments/CommentThreadList.js +124 -0
- package/dist/comments/CommentThreadList.js.map +1 -0
- package/dist/comments/GroupedComments.cjs +74 -0
- package/dist/comments/GroupedComments.cjs.map +1 -0
- package/dist/comments/GroupedComments.d.ts +18 -0
- package/dist/comments/GroupedComments.d.ts.map +1 -0
- package/dist/comments/GroupedComments.js +74 -0
- package/dist/comments/GroupedComments.js.map +1 -0
- package/dist/comments/MentionTextarea.cjs +253 -0
- package/dist/comments/MentionTextarea.cjs.map +1 -0
- package/dist/comments/MentionTextarea.d.ts +28 -0
- package/dist/comments/MentionTextarea.d.ts.map +1 -0
- package/dist/comments/MentionTextarea.js +253 -0
- package/dist/comments/MentionTextarea.js.map +1 -0
- package/dist/comments/comment-context.cjs +33 -0
- package/dist/comments/comment-context.cjs.map +1 -0
- package/dist/comments/comment-context.d.ts +32 -0
- package/dist/comments/comment-context.d.ts.map +1 -0
- package/dist/comments/comment-context.js +33 -0
- package/dist/comments/comment-context.js.map +1 -0
- package/dist/comments/comment-fixtures.d.ts +11 -0
- package/dist/comments/comment-fixtures.d.ts.map +1 -0
- package/dist/comments/comment-types.cjs +19 -0
- package/dist/comments/comment-types.cjs.map +1 -0
- package/dist/comments/comment-types.d.ts +170 -0
- package/dist/comments/comment-types.d.ts.map +1 -0
- package/dist/comments/comment-types.js +19 -0
- package/dist/comments/comment-types.js.map +1 -0
- package/dist/comments/comment-utils.cjs +216 -0
- package/dist/comments/comment-utils.cjs.map +1 -0
- package/dist/comments/comment-utils.d.ts +59 -0
- package/dist/comments/comment-utils.d.ts.map +1 -0
- package/dist/comments/comment-utils.js +216 -0
- package/dist/comments/comment-utils.js.map +1 -0
- package/dist/comments.cjs +57 -0
- package/dist/comments.cjs.map +1 -0
- package/dist/comments.d.ts +16 -0
- package/dist/comments.d.ts.map +1 -0
- package/dist/comments.js +57 -0
- package/dist/comments.js.map +1 -0
- package/dist/components/Combobox.cjs +5 -2
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +5 -2
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/FilterBar.cjs +293 -256
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +293 -256
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +22 -6
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +25 -9
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/MultiSelect.cjs +29 -32
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js +30 -33
- package/dist/components/MultiSelect.js.map +1 -1
- package/dist/components/NamespacePicker.cjs +52 -0
- package/dist/components/NamespacePicker.cjs.map +1 -0
- package/dist/components/NamespacePicker.d.ts +17 -0
- package/dist/components/NamespacePicker.d.ts.map +1 -0
- package/dist/components/NamespacePicker.js +52 -0
- package/dist/components/NamespacePicker.js.map +1 -0
- package/dist/components/TimeRange.cjs +29 -37
- package/dist/components/TimeRange.cjs.map +1 -1
- package/dist/components/TimeRange.d.ts.map +1 -1
- package/dist/components/TimeRange.js +30 -38
- package/dist/components/TimeRange.js.map +1 -1
- package/dist/components/TreePickerField.cjs +6 -3
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +6 -3
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/form-lookup-context.cjs +36 -0
- package/dist/components/form-lookup-context.cjs.map +1 -0
- package/dist/components/form-lookup-context.d.ts +9 -0
- package/dist/components/form-lookup-context.d.ts.map +1 -0
- package/dist/components/form-lookup-context.js +36 -0
- package/dist/components/form-lookup-context.js.map +1 -0
- package/dist/components/icon-menu-picker.cjs +9 -3
- package/dist/components/icon-menu-picker.cjs.map +1 -1
- package/dist/components/icon-menu-picker.d.ts.map +1 -1
- package/dist/components/icon-menu-picker.js +9 -3
- package/dist/components/icon-menu-picker.js.map +1 -1
- package/dist/components/json-schema-form-discriminator.cjs +67 -0
- package/dist/components/json-schema-form-discriminator.cjs.map +1 -0
- package/dist/components/json-schema-form-discriminator.d.ts +10 -0
- package/dist/components/json-schema-form-discriminator.d.ts.map +1 -0
- package/dist/components/json-schema-form-discriminator.js +67 -0
- package/dist/components/json-schema-form-discriminator.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +146 -3
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +22 -0
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +147 -4
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-grid.cjs +92 -0
- package/dist/components/json-schema-form-grid.cjs.map +1 -0
- package/dist/components/json-schema-form-grid.d.ts +9 -0
- package/dist/components/json-schema-form-grid.d.ts.map +1 -0
- package/dist/components/json-schema-form-grid.js +92 -0
- package/dist/components/json-schema-form-grid.js.map +1 -0
- package/dist/components/json-schema-form-refs.cjs +60 -0
- package/dist/components/json-schema-form-refs.cjs.map +1 -0
- package/dist/components/json-schema-form-refs.d.ts +3 -0
- package/dist/components/json-schema-form-refs.d.ts.map +1 -0
- package/dist/components/json-schema-form-refs.js +60 -0
- package/dist/components/json-schema-form-refs.js.map +1 -0
- package/dist/components/json-schema-form-render.cjs +34 -5
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +36 -7
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +29 -2
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +29 -2
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-template-menu.cjs +83 -0
- package/dist/components/json-schema-form-template-menu.cjs.map +1 -0
- package/dist/components/json-schema-form-template-menu.d.ts +15 -0
- package/dist/components/json-schema-form-template-menu.d.ts.map +1 -0
- package/dist/components/json-schema-form-template-menu.js +83 -0
- package/dist/components/json-schema-form-template-menu.js.map +1 -0
- package/dist/components/json-schema-form-template.cjs +18 -0
- package/dist/components/json-schema-form-template.cjs.map +1 -0
- package/dist/components/json-schema-form-template.d.ts +13 -0
- package/dist/components/json-schema-form-template.d.ts.map +1 -0
- package/dist/components/json-schema-form-template.js +18 -0
- package/dist/components/json-schema-form-template.js.map +1 -0
- package/dist/components/json-schema-form-types.d.ts +41 -2
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +8 -0
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +1 -0
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +8 -0
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/workload-picker-utils.cjs.map +1 -1
- package/dist/components/workload-picker-utils.d.ts +11 -1
- package/dist/components/workload-picker-utils.d.ts.map +1 -1
- package/dist/components/workload-picker-utils.js.map +1 -1
- package/dist/components.cjs +10 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +7 -2
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +10 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +231 -69
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +7 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.fixtures.d.ts +3 -1
- package/dist/data/Clicky.fixtures.d.ts.map +1 -1
- package/dist/data/Clicky.js +232 -70
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +23 -17
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +7 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +24 -18
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/ExecutionTree.cjs +68 -0
- package/dist/data/ExecutionTree.cjs.map +1 -0
- package/dist/data/ExecutionTree.d.ts +40 -0
- package/dist/data/ExecutionTree.d.ts.map +1 -0
- package/dist/data/ExecutionTree.js +68 -0
- package/dist/data/ExecutionTree.js.map +1 -0
- package/dist/data/Gauge.cjs +37 -4
- package/dist/data/Gauge.cjs.map +1 -1
- package/dist/data/Gauge.d.ts +6 -1
- package/dist/data/Gauge.d.ts.map +1 -1
- package/dist/data/Gauge.js +37 -4
- package/dist/data/Gauge.js.map +1 -1
- package/dist/data/GaugeHoverCard.cjs +35 -0
- package/dist/data/GaugeHoverCard.cjs.map +1 -0
- package/dist/data/GaugeHoverCard.d.ts +25 -0
- package/dist/data/GaugeHoverCard.d.ts.map +1 -0
- package/dist/data/GaugeHoverCard.js +35 -0
- package/dist/data/GaugeHoverCard.js.map +1 -0
- package/dist/data/MarkdownEditor.cjs +616 -0
- package/dist/data/MarkdownEditor.cjs.map +1 -0
- package/dist/data/MarkdownEditor.d.ts +61 -0
- package/dist/data/MarkdownEditor.d.ts.map +1 -0
- package/dist/data/MarkdownEditor.js +616 -0
- package/dist/data/MarkdownEditor.js.map +1 -0
- package/dist/data/MarkdownEditor.model.cjs +27 -0
- package/dist/data/MarkdownEditor.model.cjs.map +1 -0
- package/dist/data/MarkdownEditor.model.d.ts +38 -0
- package/dist/data/MarkdownEditor.model.d.ts.map +1 -0
- package/dist/data/MarkdownEditor.model.js +27 -0
- package/dist/data/MarkdownEditor.model.js.map +1 -0
- package/dist/data/ObjectGraph.cjs +44 -0
- package/dist/data/ObjectGraph.cjs.map +1 -0
- package/dist/data/ObjectGraph.d.ts +39 -0
- package/dist/data/ObjectGraph.d.ts.map +1 -0
- package/dist/data/ObjectGraph.js +44 -0
- package/dist/data/ObjectGraph.js.map +1 -0
- package/dist/data/SchemaViewer.cjs +152 -0
- package/dist/data/SchemaViewer.cjs.map +1 -0
- package/dist/data/SchemaViewer.d.ts +27 -0
- package/dist/data/SchemaViewer.d.ts.map +1 -0
- package/dist/data/SchemaViewer.js +152 -0
- package/dist/data/SchemaViewer.js.map +1 -0
- package/dist/data/TimeseriesCoreBars.cjs +169 -32
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts +42 -5
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +170 -33
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.cjs +5 -5
- package/dist/data/TimeseriesCoreBars.model.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.d.ts +4 -4
- package/dist/data/TimeseriesCoreBars.model.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.js +5 -5
- package/dist/data/TimeseriesCoreBars.model.js.map +1 -1
- package/dist/data/TimeseriesGauge.cjs +132 -36
- package/dist/data/TimeseriesGauge.cjs.map +1 -1
- package/dist/data/TimeseriesGauge.d.ts +15 -1
- package/dist/data/TimeseriesGauge.d.ts.map +1 -1
- package/dist/data/TimeseriesGauge.js +133 -37
- package/dist/data/TimeseriesGauge.js.map +1 -1
- package/dist/data/WorkloadCard.cjs +371 -0
- package/dist/data/WorkloadCard.cjs.map +1 -0
- package/dist/data/WorkloadCard.d.ts +25 -0
- package/dist/data/WorkloadCard.d.ts.map +1 -0
- package/dist/data/WorkloadCard.js +371 -0
- package/dist/data/WorkloadCard.js.map +1 -0
- package/dist/data/WorkloadCard.model.cjs +51 -0
- package/dist/data/WorkloadCard.model.cjs.map +1 -0
- package/dist/data/WorkloadCard.model.d.ts +53 -0
- package/dist/data/WorkloadCard.model.d.ts.map +1 -0
- package/dist/data/WorkloadCard.model.js +51 -0
- package/dist/data/WorkloadCard.model.js.map +1 -0
- package/dist/data/ai/ChatFab.cjs +3 -1
- package/dist/data/ai/ChatFab.cjs.map +1 -1
- package/dist/data/ai/ChatFab.d.ts.map +1 -1
- package/dist/data/ai/ChatFab.js +3 -1
- package/dist/data/ai/ChatFab.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +19 -9
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +4 -2
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +19 -9
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.cjs +20 -0
- package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -0
- package/dist/data/ai/ChatWindowRequestBody.d.ts +9 -0
- package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -0
- package/dist/data/ai/ChatWindowRequestBody.js +20 -0
- package/dist/data/ai/ChatWindowRequestBody.js.map +1 -0
- package/dist/data/ai/chat-window-context.cjs +2 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +1 -1
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +2 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/context.cjs.map +1 -1
- package/dist/data/ai/context.d.ts +3 -0
- package/dist/data/ai/context.d.ts.map +1 -1
- package/dist/data/ai/context.js.map +1 -1
- package/dist/data/chat/Chat.cjs +21 -1
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +11 -2
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +22 -2
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Message.cjs +13 -4
- package/dist/data/chat/Message.cjs.map +1 -1
- package/dist/data/chat/Message.d.ts +4 -2
- package/dist/data/chat/Message.d.ts.map +1 -1
- package/dist/data/chat/Message.js +13 -4
- package/dist/data/chat/Message.js.map +1 -1
- package/dist/data/chat/ToolCall.cjs +9 -4
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +3 -2
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +9 -4
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/index.d.ts +1 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +7 -0
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/gauge-stats.cjs +19 -0
- package/dist/data/gauge-stats.cjs.map +1 -0
- package/dist/data/gauge-stats.d.ts +15 -0
- package/dist/data/gauge-stats.d.ts.map +1 -0
- package/dist/data/gauge-stats.js +19 -0
- package/dist/data/gauge-stats.js.map +1 -0
- package/dist/data/schema-viewer-model.cjs +436 -0
- package/dist/data/schema-viewer-model.cjs.map +1 -0
- package/dist/data/schema-viewer-model.d.ts +64 -0
- package/dist/data/schema-viewer-model.d.ts.map +1 -0
- package/dist/data/schema-viewer-model.js +436 -0
- package/dist/data/schema-viewer-model.js.map +1 -0
- package/dist/data/version-info.cjs +2 -2
- package/dist/data/version-info.js +2 -2
- package/dist/data.cjs +30 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +14 -4
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +31 -1
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-sort.cjs +19 -10
- package/dist/hooks/use-sort.cjs.map +1 -1
- package/dist/hooks/use-sort.d.ts +3 -0
- package/dist/hooks/use-sort.d.ts.map +1 -1
- package/dist/hooks/use-sort.js +19 -10
- package/dist/hooks/use-sort.js.map +1 -1
- package/dist/index.cjs +98 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +6 -10
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +2 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +6 -10
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +50 -38
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +5 -1
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +50 -38
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/overlay/HoverCard.cjs +7 -2
- package/dist/overlay/HoverCard.cjs.map +1 -1
- package/dist/overlay/HoverCard.d.ts.map +1 -1
- package/dist/overlay/HoverCard.js +7 -2
- package/dist/overlay/HoverCard.js.map +1 -1
- package/dist/overlay/Modal.cjs +20 -17
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +21 -18
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/Toast.cjs +9 -1
- package/dist/overlay/Toast.cjs.map +1 -1
- package/dist/overlay/Toast.d.ts.map +1 -1
- package/dist/overlay/Toast.js +9 -1
- package/dist/overlay/Toast.js.map +1 -1
- package/dist/overlay/modalStack.cjs +53 -1
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts +12 -0
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +54 -2
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/overlay/zIndex.cjs +20 -0
- package/dist/overlay/zIndex.cjs.map +1 -0
- package/dist/overlay/zIndex.d.ts +39 -0
- package/dist/overlay/zIndex.d.ts.map +1 -0
- package/dist/overlay/zIndex.js +20 -0
- package/dist/overlay/zIndex.js.map +1 -0
- package/dist/rpc/EntityExplorerApp.cjs +102 -143
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +34 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +105 -146
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +135 -0
- package/dist/rpc/OperationActionBar.cjs.map +1 -0
- package/dist/rpc/OperationActionBar.d.ts +20 -0
- package/dist/rpc/OperationActionBar.d.ts.map +1 -0
- package/dist/rpc/OperationActionBar.js +135 -0
- package/dist/rpc/OperationActionBar.js.map +1 -0
- package/dist/rpc/OperationCatalog.cjs +79 -116
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +8 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +80 -117
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationCommandPage.cjs +134 -223
- package/dist/rpc/OperationCommandPage.cjs.map +1 -1
- package/dist/rpc/OperationCommandPage.d.ts +1 -1
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
- package/dist/rpc/OperationCommandPage.js +135 -224
- package/dist/rpc/OperationCommandPage.js.map +1 -1
- package/dist/rpc/OperationEntityPage.cjs +49 -100
- package/dist/rpc/OperationEntityPage.cjs.map +1 -1
- package/dist/rpc/OperationEntityPage.d.ts +6 -1
- package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
- package/dist/rpc/OperationEntityPage.js +50 -101
- package/dist/rpc/OperationEntityPage.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +43 -0
- package/dist/rpc/OperationResultView.cjs.map +1 -0
- package/dist/rpc/OperationResultView.d.ts +30 -0
- package/dist/rpc/OperationResultView.d.ts.map +1 -0
- package/dist/rpc/OperationResultView.js +43 -0
- package/dist/rpc/OperationResultView.js.map +1 -0
- package/dist/rpc/SchemaActionForm.cjs +102 -0
- package/dist/rpc/SchemaActionForm.cjs.map +1 -0
- package/dist/rpc/SchemaActionForm.d.ts +23 -0
- package/dist/rpc/SchemaActionForm.d.ts.map +1 -0
- package/dist/rpc/SchemaActionForm.js +102 -0
- package/dist/rpc/SchemaActionForm.js.map +1 -0
- package/dist/rpc/accept-options.cjs.map +1 -1
- package/dist/rpc/accept-options.d.ts +0 -1
- package/dist/rpc/accept-options.d.ts.map +1 -1
- package/dist/rpc/accept-options.js.map +1 -1
- package/dist/rpc/apiClient.cjs +34 -2
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.d.ts +4 -1
- package/dist/rpc/apiClient.d.ts.map +1 -1
- package/dist/rpc/apiClient.js +34 -2
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/clickyMetadata.cjs +4 -4
- package/dist/rpc/clickyMetadata.cjs.map +1 -1
- package/dist/rpc/clickyMetadata.d.ts +0 -1
- package/dist/rpc/clickyMetadata.d.ts.map +1 -1
- package/dist/rpc/clickyMetadata.js +4 -4
- package/dist/rpc/clickyMetadata.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +1 -0
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts +6 -1
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +1 -0
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/rpc/rowNavigation.cjs +86 -0
- package/dist/rpc/rowNavigation.cjs.map +1 -0
- package/dist/rpc/rowNavigation.d.ts +14 -0
- package/dist/rpc/rowNavigation.d.ts.map +1 -0
- package/dist/rpc/rowNavigation.js +86 -0
- package/dist/rpc/rowNavigation.js.map +1 -0
- package/dist/rpc/schemaActionPath.cjs +22 -0
- package/dist/rpc/schemaActionPath.cjs.map +1 -0
- package/dist/rpc/schemaActionPath.d.ts +4 -0
- package/dist/rpc/schemaActionPath.d.ts.map +1 -0
- package/dist/rpc/schemaActionPath.js +22 -0
- package/dist/rpc/schemaActionPath.js.map +1 -0
- package/dist/rpc/surfaceIconMap.cjs +35 -0
- package/dist/rpc/surfaceIconMap.cjs.map +1 -0
- package/dist/rpc/surfaceIconMap.d.ts +3 -0
- package/dist/rpc/surfaceIconMap.d.ts.map +1 -0
- package/dist/rpc/surfaceIconMap.js +35 -0
- package/dist/rpc/surfaceIconMap.js.map +1 -0
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +2 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc/useOperations.cjs.map +1 -1
- package/dist/rpc/useOperations.d.ts +4 -1
- package/dist/rpc/useOperations.d.ts.map +1 -1
- package/dist/rpc/useOperations.js.map +1 -1
- package/dist/rpc.cjs +4 -2
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +7 -6
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +4 -2
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
- package/dist/rpc/AcceptPicker.cjs +0 -135
- package/dist/rpc/AcceptPicker.cjs.map +0 -1
- package/dist/rpc/AcceptPicker.d.ts +0 -12
- package/dist/rpc/AcceptPicker.d.ts.map +0 -1
- package/dist/rpc/AcceptPicker.js +0 -135
- package/dist/rpc/AcceptPicker.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelect.js","sources":["../../src/components/MultiSelect.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"MultiSelect.js","sources":["../../src/components/MultiSelect.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode, type Ref } from \"react\";\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useRole,\n} from \"@floating-ui/react\";\nimport { Button } from \"./button\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"../data/Icon\";\nimport { UiChevronDown, UiChevronUp } from \"../icons\";\nimport { useEscapeLayer, useFloatingZIndex } from \"../overlay/modalStack\";\n\nexport type MultiSelectOption = {\n /** Stable option value written into the selected value array. */\n value: string;\n /** Visible option label in the menu and trigger summary. */\n label: ReactNode;\n /** Prevents selecting this option while still showing it in the menu. */\n disabled?: boolean;\n /** Optional browser tooltip for truncated or explanatory labels. */\n title?: string;\n};\n\nexport type MultiSelectProps = {\n /** Available options, rendered in the order provided. */\n options: MultiSelectOption[];\n /** Controlled selected option values. */\n value: string[];\n /** Called with the complete next value array after each toggle. */\n onChange: (next: string[]) => void;\n /** Trigger text when nothing is selected. Also labels the menu. */\n placeholder?: string;\n /** Accessible name for the trigger. Use when the field is labelled\n * elsewhere so the trigger doesn't have to borrow `placeholder` for its\n * name (which would force a synthesized placeholder). */\n ariaLabel?: string;\n /** Disables opening and changing selections. */\n disabled?: boolean;\n /** Classes applied to the root wrapper. */\n className?: string;\n /** Classes applied to the trigger button. */\n triggerClassName?: string;\n /** Classes applied to the popover menu. */\n menuClassName?: string;\n};\n\nexport function MultiSelect({\n options,\n value,\n onChange,\n placeholder = \"Select options\",\n ariaLabel,\n disabled,\n className,\n triggerClassName,\n menuClassName,\n}: MultiSelectProps) {\n const [open, setOpen] = useState(false);\n\n // Portaled (floating-ui) so the menu escapes `overflow` clipping from\n // scroll-container ancestors, matching Combobox/DropdownMenu.\n const floatingZ = useFloatingZIndex();\n const { refs, floatingStyles, context } = useFloating({\n open,\n onOpenChange: setOpen,\n placement: \"bottom-start\",\n whileElementsMounted: autoUpdate,\n middleware: [offset(6), flip({ padding: 8 }), shift({ padding: 8 })],\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useClick(context),\n useDismiss(context, { escapeKey: false }),\n useRole(context, { role: \"menu\" }),\n ]);\n useEscapeLayer(open, () => {\n setOpen(false);\n if (refs.domReference.current instanceof HTMLElement) refs.domReference.current.focus();\n });\n\n const selected = useMemo(() => {\n const selectedOptions = options.filter((option) => value.includes(option.value));\n const labels = selectedOptions\n .map((option) => option.label)\n .filter((label): label is string => typeof label === \"string\");\n\n if (selectedOptions.length === 0) return placeholder;\n if (labels.length === 0) return `${selectedOptions.length} selected`;\n if (labels.length <= 2) return labels.join(\", \");\n return `${labels.length} selected`;\n }, [options, placeholder, value]);\n\n function toggleOption(nextValue: string) {\n if (value.includes(nextValue)) {\n onChange(value.filter((current) => current !== nextValue));\n return;\n }\n onChange([...value, nextValue]);\n }\n\n return (\n <div className={cn(\"inline-flex\", className)}>\n <Button\n ref={refs.setReference as Ref<HTMLButtonElement>}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n disabled={disabled}\n aria-label={ariaLabel ?? `${placeholder} filter`}\n className={cn(\n \"w-fit max-w-[15rem] min-w-0 shrink-0 justify-between gap-3 text-left font-normal\",\n triggerClassName,\n value.length === 0 && \"text-muted-foreground\",\n )}\n {...getReferenceProps()}\n >\n <span className=\"truncate\">{selected}</span>\n <Icon icon={open ? UiChevronUp : UiChevronDown} className=\"text-muted-foreground\" />\n </Button>\n {open && (\n <FloatingPortal>\n <FloatingFocusManager context={context} modal={false}>\n <div\n ref={refs.setFloating}\n role=\"menu\"\n aria-label={placeholder}\n style={{ ...floatingStyles, zIndex: floatingZ }}\n className={cn(\n \"min-w-[14rem] max-w-[20rem] rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg shadow-black/5\",\n menuClassName,\n )}\n {...getFloatingProps()}\n >\n <div className=\"mb-1 flex items-center justify-between gap-2 px-2 py-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n <span>{placeholder}</span>\n <button\n type=\"button\"\n className=\"text-[10px] text-primary disabled:text-muted-foreground\"\n onClick={() => onChange([])}\n disabled={value.length === 0}\n >\n Clear all\n </button>\n </div>\n <div className=\"max-h-64 overflow-auto\">\n {options.map((option) => {\n const checked = value.includes(option.value);\n return (\n <label\n key={option.value}\n className={cn(\n \"flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm hover:bg-accent\",\n option.disabled && \"cursor-not-allowed opacity-50\",\n )}\n >\n <input\n type=\"checkbox\"\n role=\"menuitemcheckbox\"\n className=\"size-4 rounded border border-input\"\n checked={checked}\n disabled={option.disabled}\n onChange={() => toggleOption(option.value)}\n />\n <span className=\"min-w-0 truncate\">{option.label}</span>\n </label>\n );\n })}\n </div>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const Combobox = require("./Combobox.cjs");
|
|
6
|
+
function NamespacePicker({
|
|
7
|
+
value,
|
|
8
|
+
onChange,
|
|
9
|
+
loadNamespaces,
|
|
10
|
+
strict = false,
|
|
11
|
+
placeholder = "Select namespace…",
|
|
12
|
+
className
|
|
13
|
+
}) {
|
|
14
|
+
const [namespaces, setNamespaces] = react.useState([]);
|
|
15
|
+
const [loading, setLoading] = react.useState(false);
|
|
16
|
+
react.useEffect(() => {
|
|
17
|
+
let cancelled = false;
|
|
18
|
+
setLoading(true);
|
|
19
|
+
loadNamespaces().then((res) => {
|
|
20
|
+
if (!cancelled) setNamespaces(res);
|
|
21
|
+
}).finally(() => {
|
|
22
|
+
if (!cancelled) setLoading(false);
|
|
23
|
+
});
|
|
24
|
+
return () => {
|
|
25
|
+
cancelled = true;
|
|
26
|
+
};
|
|
27
|
+
}, [loadNamespaces]);
|
|
28
|
+
const options = react.useMemo(() => {
|
|
29
|
+
const opts = namespaces.map((ns) => ({ value: ns, label: ns }));
|
|
30
|
+
if (value && !namespaces.includes(value)) return [{ value, label: value }, ...opts];
|
|
31
|
+
return opts;
|
|
32
|
+
}, [namespaces, value]);
|
|
33
|
+
const invalid = react.useMemo(
|
|
34
|
+
() => strict && !!value && !loading && !namespaces.includes(value),
|
|
35
|
+
[strict, value, loading, namespaces]
|
|
36
|
+
);
|
|
37
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
38
|
+
Combobox.Combobox,
|
|
39
|
+
{
|
|
40
|
+
options,
|
|
41
|
+
value,
|
|
42
|
+
onChange,
|
|
43
|
+
allowCustomValue: true,
|
|
44
|
+
loading,
|
|
45
|
+
invalid,
|
|
46
|
+
placeholder,
|
|
47
|
+
...className ? { className } : {}
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
exports.NamespacePicker = NamespacePicker;
|
|
52
|
+
//# sourceMappingURL=NamespacePicker.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NamespacePicker.cjs","sources":["../../src/components/NamespacePicker.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { Combobox, type ComboboxOption } from \"./Combobox\";\n\n// NamespacePicker selects a Kubernetes namespace. It is presentational: it\n// fetches nothing — the consumer supplies an async `loadNamespaces` getter (e.g.\n// backed by `/api/v1/namespaces`). The selected namespace is the value other\n// form widgets (secret/workload pickers) read to scope their own lookups.\n\nexport type NamespacePickerProps = {\n /** Controlled selected namespace (or \"\" when cleared). */\n value: string;\n onChange: (value: string) => void;\n /** Async getter the component calls once to load namespace names. */\n loadNamespaces: () => Promise<string[]>;\n /**\n * When true, a non-empty value absent from the loaded set (once loading\n * settles) is flagged invalid. The value is still shown; freeform entry is\n * marked, not rejected.\n */\n strict?: boolean;\n placeholder?: string;\n className?: string;\n};\n\nexport function NamespacePicker({\n value,\n onChange,\n loadNamespaces,\n strict = false,\n placeholder = \"Select namespace…\",\n className,\n}: NamespacePickerProps) {\n const [namespaces, setNamespaces] = useState<string[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n loadNamespaces()\n .then((res) => {\n if (!cancelled) setNamespaces(res);\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [loadNamespaces]);\n\n const options = useMemo<ComboboxOption[]>(() => {\n const opts = namespaces.map((ns) => ({ value: ns, label: ns }));\n // Pin a current value not present in the loaded set so the selection stays\n // visible (e.g. a namespace the user lacks list permission for).\n if (value && !namespaces.includes(value)) return [{ value, label: value }, ...opts];\n return opts;\n }, [namespaces, value]);\n\n const invalid = useMemo(\n () => strict && !!value && !loading && !namespaces.includes(value),\n [strict, value, loading, namespaces],\n );\n\n return (\n <Combobox\n options={options}\n value={value}\n onChange={onChange}\n allowCustomValue\n loading={loading}\n invalid={invalid}\n placeholder={placeholder}\n {...(className ? { className } : {})}\n />\n );\n}\n"],"names":["useState","useEffect","useMemo","jsx","Combobox"],"mappings":";;;;;AAwBO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,cAAc;AAAA,EACd;AACF,GAAyB;AACvB,QAAM,CAAC,YAAY,aAAa,IAAIA,MAAAA,SAAmB,CAAA,CAAE;AACzD,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAAS,KAAK;AAE5CC,QAAAA,UAAU,MAAM;AACd,QAAI,YAAY;AAChB,eAAW,IAAI;AACf,mBAAA,EACG,KAAK,CAAC,QAAQ;AACb,UAAI,CAAC,UAAW,eAAc,GAAG;AAAA,IACnC,CAAC,EACA,QAAQ,MAAM;AACb,UAAI,CAAC,UAAW,YAAW,KAAK;AAAA,IAClC,CAAC;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,UAAUC,MAAAA,QAA0B,MAAM;AAC9C,UAAM,OAAO,WAAW,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,OAAO,GAAA,EAAK;AAG9D,QAAI,SAAS,CAAC,WAAW,SAAS,KAAK,EAAG,QAAO,CAAC,EAAE,OAAO,OAAO,MAAA,GAAS,GAAG,IAAI;AAClF,WAAO;AAAA,EACT,GAAG,CAAC,YAAY,KAAK,CAAC;AAEtB,QAAM,UAAUA,MAAAA;AAAAA,IACd,MAAM,UAAU,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,SAAS,KAAK;AAAA,IACjE,CAAC,QAAQ,OAAO,SAAS,UAAU;AAAA,EAAA;AAGrC,SACEC,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAI,YAAY,EAAE,cAAc,CAAA;AAAA,IAAC;AAAA,EAAA;AAGxC;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type NamespacePickerProps = {
|
|
2
|
+
/** Controlled selected namespace (or "" when cleared). */
|
|
3
|
+
value: string;
|
|
4
|
+
onChange: (value: string) => void;
|
|
5
|
+
/** Async getter the component calls once to load namespace names. */
|
|
6
|
+
loadNamespaces: () => Promise<string[]>;
|
|
7
|
+
/**
|
|
8
|
+
* When true, a non-empty value absent from the loaded set (once loading
|
|
9
|
+
* settles) is flagged invalid. The value is still shown; freeform entry is
|
|
10
|
+
* marked, not rejected.
|
|
11
|
+
*/
|
|
12
|
+
strict?: boolean;
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
className?: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function NamespacePicker({ value, onChange, loadNamespaces, strict, placeholder, className, }: NamespacePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=NamespacePicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NamespacePicker.d.ts","sourceRoot":"","sources":["../../src/components/NamespacePicker.tsx"],"names":[],"mappings":"AAQA,MAAM,MAAM,oBAAoB,GAAG;IACjC,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,qEAAqE;IACrE,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,cAAc,EACd,MAAc,EACd,WAAiC,EACjC,SAAS,GACV,EAAE,oBAAoB,2CA4CtB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useMemo } from "react";
|
|
3
|
+
import { Combobox } from "./Combobox.js";
|
|
4
|
+
function NamespacePicker({
|
|
5
|
+
value,
|
|
6
|
+
onChange,
|
|
7
|
+
loadNamespaces,
|
|
8
|
+
strict = false,
|
|
9
|
+
placeholder = "Select namespace…",
|
|
10
|
+
className
|
|
11
|
+
}) {
|
|
12
|
+
const [namespaces, setNamespaces] = useState([]);
|
|
13
|
+
const [loading, setLoading] = useState(false);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
let cancelled = false;
|
|
16
|
+
setLoading(true);
|
|
17
|
+
loadNamespaces().then((res) => {
|
|
18
|
+
if (!cancelled) setNamespaces(res);
|
|
19
|
+
}).finally(() => {
|
|
20
|
+
if (!cancelled) setLoading(false);
|
|
21
|
+
});
|
|
22
|
+
return () => {
|
|
23
|
+
cancelled = true;
|
|
24
|
+
};
|
|
25
|
+
}, [loadNamespaces]);
|
|
26
|
+
const options = useMemo(() => {
|
|
27
|
+
const opts = namespaces.map((ns) => ({ value: ns, label: ns }));
|
|
28
|
+
if (value && !namespaces.includes(value)) return [{ value, label: value }, ...opts];
|
|
29
|
+
return opts;
|
|
30
|
+
}, [namespaces, value]);
|
|
31
|
+
const invalid = useMemo(
|
|
32
|
+
() => strict && !!value && !loading && !namespaces.includes(value),
|
|
33
|
+
[strict, value, loading, namespaces]
|
|
34
|
+
);
|
|
35
|
+
return /* @__PURE__ */ jsx(
|
|
36
|
+
Combobox,
|
|
37
|
+
{
|
|
38
|
+
options,
|
|
39
|
+
value,
|
|
40
|
+
onChange,
|
|
41
|
+
allowCustomValue: true,
|
|
42
|
+
loading,
|
|
43
|
+
invalid,
|
|
44
|
+
placeholder,
|
|
45
|
+
...className ? { className } : {}
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
NamespacePicker
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=NamespacePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NamespacePicker.js","sources":["../../src/components/NamespacePicker.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { Combobox, type ComboboxOption } from \"./Combobox\";\n\n// NamespacePicker selects a Kubernetes namespace. It is presentational: it\n// fetches nothing — the consumer supplies an async `loadNamespaces` getter (e.g.\n// backed by `/api/v1/namespaces`). The selected namespace is the value other\n// form widgets (secret/workload pickers) read to scope their own lookups.\n\nexport type NamespacePickerProps = {\n /** Controlled selected namespace (or \"\" when cleared). */\n value: string;\n onChange: (value: string) => void;\n /** Async getter the component calls once to load namespace names. */\n loadNamespaces: () => Promise<string[]>;\n /**\n * When true, a non-empty value absent from the loaded set (once loading\n * settles) is flagged invalid. The value is still shown; freeform entry is\n * marked, not rejected.\n */\n strict?: boolean;\n placeholder?: string;\n className?: string;\n};\n\nexport function NamespacePicker({\n value,\n onChange,\n loadNamespaces,\n strict = false,\n placeholder = \"Select namespace…\",\n className,\n}: NamespacePickerProps) {\n const [namespaces, setNamespaces] = useState<string[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n loadNamespaces()\n .then((res) => {\n if (!cancelled) setNamespaces(res);\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [loadNamespaces]);\n\n const options = useMemo<ComboboxOption[]>(() => {\n const opts = namespaces.map((ns) => ({ value: ns, label: ns }));\n // Pin a current value not present in the loaded set so the selection stays\n // visible (e.g. a namespace the user lacks list permission for).\n if (value && !namespaces.includes(value)) return [{ value, label: value }, ...opts];\n return opts;\n }, [namespaces, value]);\n\n const invalid = useMemo(\n () => strict && !!value && !loading && !namespaces.includes(value),\n [strict, value, loading, namespaces],\n );\n\n return (\n <Combobox\n options={options}\n value={value}\n onChange={onChange}\n allowCustomValue\n loading={loading}\n invalid={invalid}\n placeholder={placeholder}\n {...(className ? { className } : {})}\n />\n );\n}\n"],"names":[],"mappings":";;;AAwBO,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,cAAc;AAAA,EACd;AACF,GAAyB;AACvB,QAAM,CAAC,YAAY,aAAa,IAAI,SAAmB,CAAA,CAAE;AACzD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,YAAU,MAAM;AACd,QAAI,YAAY;AAChB,eAAW,IAAI;AACf,mBAAA,EACG,KAAK,CAAC,QAAQ;AACb,UAAI,CAAC,UAAW,eAAc,GAAG;AAAA,IACnC,CAAC,EACA,QAAQ,MAAM;AACb,UAAI,CAAC,UAAW,YAAW,KAAK;AAAA,IAClC,CAAC;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,UAAU,QAA0B,MAAM;AAC9C,UAAM,OAAO,WAAW,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,OAAO,GAAA,EAAK;AAG9D,QAAI,SAAS,CAAC,WAAW,SAAS,KAAK,EAAG,QAAO,CAAC,EAAE,OAAO,OAAO,MAAA,GAAS,GAAG,IAAI;AAClF,WAAO;AAAA,EACT,GAAG,CAAC,YAAY,KAAK,CAAC;AAEtB,QAAM,UAAU;AAAA,IACd,MAAM,UAAU,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,SAAS,KAAK;AAAA,IACjE,CAAC,QAAQ,OAAO,SAAS,UAAU;AAAA,EAAA;AAGrC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAI,YAAY,EAAE,cAAc,CAAA;AAAA,IAAC;AAAA,EAAA;AAGxC;"}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
|
+
const react$1 = require("@floating-ui/react");
|
|
5
6
|
const Icon = require("../data/Icon.cjs");
|
|
6
7
|
const utils = require("../lib/utils.cjs");
|
|
8
|
+
const modalStack = require("../overlay/modalStack.cjs");
|
|
7
9
|
const button = require("./button.cjs");
|
|
8
10
|
const select = require("./select.cjs");
|
|
9
11
|
const UiWatch = require("../icons/components/UiWatch.cjs");
|
|
@@ -152,8 +154,6 @@ function TimeRange({
|
|
|
152
154
|
triggerClassName,
|
|
153
155
|
panelClassName
|
|
154
156
|
}) {
|
|
155
|
-
const rootRef = react.useRef(null);
|
|
156
|
-
const triggerRef = react.useRef(null);
|
|
157
157
|
const [open, setOpen] = react.useState(false);
|
|
158
158
|
const [draftFrom, setDraftFrom] = react.useState(from);
|
|
159
159
|
const [draftTo, setDraftTo] = react.useState(to);
|
|
@@ -165,7 +165,23 @@ function TimeRange({
|
|
|
165
165
|
presets,
|
|
166
166
|
chipRows
|
|
167
167
|
);
|
|
168
|
-
|
|
168
|
+
const floatingZ = modalStack.useFloatingZIndex();
|
|
169
|
+
const { refs, floatingStyles, context } = react$1.useFloating({
|
|
170
|
+
open,
|
|
171
|
+
onOpenChange: setOpen,
|
|
172
|
+
placement: align === "left" ? "bottom-start" : "bottom-end",
|
|
173
|
+
whileElementsMounted: react$1.autoUpdate,
|
|
174
|
+
middleware: [react$1.offset(6), react$1.flip({ padding: 8 }), react$1.shift({ padding: 8 })]
|
|
175
|
+
});
|
|
176
|
+
const { getReferenceProps, getFloatingProps } = react$1.useInteractions([
|
|
177
|
+
react$1.useClick(context),
|
|
178
|
+
react$1.useDismiss(context, { escapeKey: false }),
|
|
179
|
+
react$1.useRole(context, { role: "dialog" })
|
|
180
|
+
]);
|
|
181
|
+
modalStack.useEscapeLayer(open, () => {
|
|
182
|
+
setOpen(false);
|
|
183
|
+
if (refs.domReference.current instanceof HTMLElement) refs.domReference.current.focus();
|
|
184
|
+
});
|
|
169
185
|
react.useEffect(() => {
|
|
170
186
|
if (open) {
|
|
171
187
|
setDraftFrom(from);
|
|
@@ -197,23 +213,21 @@ function TimeRange({
|
|
|
197
213
|
onApply("", "");
|
|
198
214
|
setOpen(false);
|
|
199
215
|
}
|
|
200
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
216
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("inline-flex", className), children: [
|
|
201
217
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
202
218
|
button.Button,
|
|
203
219
|
{
|
|
204
|
-
ref:
|
|
220
|
+
ref: refs.setReference,
|
|
205
221
|
type: "button",
|
|
206
222
|
variant: "outline",
|
|
207
223
|
size: "sm",
|
|
208
224
|
"aria-label": `${label} filter`,
|
|
209
|
-
"aria-expanded": open,
|
|
210
|
-
"aria-haspopup": "dialog",
|
|
211
225
|
disabled,
|
|
212
|
-
onClick: () => setOpen((current) => !current),
|
|
213
226
|
className: utils.cn(
|
|
214
227
|
"h-7 w-fit max-w-[12rem] min-w-0 gap-2 px-2 text-xs font-normal",
|
|
215
228
|
triggerClassName
|
|
216
229
|
),
|
|
230
|
+
...getReferenceProps(),
|
|
217
231
|
children: [
|
|
218
232
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
219
233
|
Icon.Icon,
|
|
@@ -226,22 +240,24 @@ function TimeRange({
|
|
|
226
240
|
]
|
|
227
241
|
}
|
|
228
242
|
),
|
|
229
|
-
open && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
243
|
+
open && /* @__PURE__ */ jsxRuntime.jsx(react$1.FloatingPortal, { children: /* @__PURE__ */ jsxRuntime.jsx(react$1.FloatingFocusManager, { context, modal: false, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
230
244
|
"div",
|
|
231
245
|
{
|
|
246
|
+
ref: refs.setFloating,
|
|
232
247
|
role: "dialog",
|
|
233
248
|
"aria-label": label,
|
|
249
|
+
style: { ...floatingStyles, zIndex: floatingZ },
|
|
234
250
|
className: utils.cn(
|
|
235
|
-
"
|
|
236
|
-
align === "left" ? "md:left-0" : "md:right-0",
|
|
251
|
+
"flex max-h-[min(32rem,calc(100vh-2rem))] w-[22.5rem] max-w-[calc(100vw-1rem)] flex-col overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-lg shadow-black/10 outline-none",
|
|
237
252
|
panelClassName
|
|
238
253
|
),
|
|
254
|
+
...getFloatingProps(),
|
|
239
255
|
children: [
|
|
240
256
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b border-border/60 px-3.5 py-2.5", children: [
|
|
241
257
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-semibold uppercase tracking-wider text-muted-foreground", children: label }),
|
|
242
258
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-[10px] text-muted-foreground", children: timeEnabled ? selectedTimeZone : "Relative" })
|
|
243
259
|
] }),
|
|
244
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto
|
|
260
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto", children: [
|
|
245
261
|
activeChipRows.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(ChipRowList, { rows: activeChipRows, activeToken, onApply: applyRange }),
|
|
246
262
|
activePresets.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: activeChipRows.length > 0 ? "px-3.5 pb-3" : "px-3.5 pt-3", children: /* @__PURE__ */ jsxRuntime.jsx(PresetList, { presets: activePresets, onApply: applyRange }) }),
|
|
247
263
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t border-border/60 bg-muted/30 px-3.5 py-2.5", children: [
|
|
@@ -339,7 +355,7 @@ function TimeRange({
|
|
|
339
355
|
] })
|
|
340
356
|
]
|
|
341
357
|
}
|
|
342
|
-
)
|
|
358
|
+
) }) })
|
|
343
359
|
] });
|
|
344
360
|
}
|
|
345
361
|
function DraftRangeInput({
|
|
@@ -580,30 +596,6 @@ function formatPresetRange({ from, to }) {
|
|
|
580
596
|
if (!to || to === "now") return from;
|
|
581
597
|
return `${from} -> ${to}`;
|
|
582
598
|
}
|
|
583
|
-
function useDismissablePopup(open, rootRef, triggerRef, onClose) {
|
|
584
|
-
react.useEffect(() => {
|
|
585
|
-
if (!open) return;
|
|
586
|
-
const onPointerDown = (event) => {
|
|
587
|
-
var _a;
|
|
588
|
-
if (!((_a = rootRef.current) == null ? void 0 : _a.contains(event.target))) {
|
|
589
|
-
onClose();
|
|
590
|
-
}
|
|
591
|
-
};
|
|
592
|
-
const onKeyDown = (event) => {
|
|
593
|
-
var _a;
|
|
594
|
-
if (event.key === "Escape") {
|
|
595
|
-
onClose();
|
|
596
|
-
(_a = triggerRef.current) == null ? void 0 : _a.focus();
|
|
597
|
-
}
|
|
598
|
-
};
|
|
599
|
-
document.addEventListener("mousedown", onPointerDown);
|
|
600
|
-
document.addEventListener("keydown", onKeyDown);
|
|
601
|
-
return () => {
|
|
602
|
-
document.removeEventListener("mousedown", onPointerDown);
|
|
603
|
-
document.removeEventListener("keydown", onKeyDown);
|
|
604
|
-
};
|
|
605
|
-
}, [onClose, open, rootRef, triggerRef]);
|
|
606
|
-
}
|
|
607
599
|
function normalizeRangeValue(kind, value, options = {}) {
|
|
608
600
|
const trimmed = value.trim();
|
|
609
601
|
if (!trimmed) return "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeRange.cjs","sources":["../../src/components/TimeRange.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type RefObject } from \"react\";\nimport { Icon } from \"../data/Icon\";\nimport { UiArrowRight, UiCalendar, UiClose, UiWatch } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./button\";\nimport { Select } from \"./select\";\n\nexport type TimeRangeKind = \"time\" | \"date\";\n\nexport type TimeRangePresetGroup = \"min\" | \"hr\" | \"day\" | \"wk+\" | \"this\" | \"last\";\n\nexport type TimeRangePreset = {\n /** Visible label for the preset row. */\n label: string;\n /** Start value applied when the preset is selected, e.g. `now-1h`. */\n from: string;\n /** End value applied when the preset is selected, usually `now`. */\n to: string;\n};\n\nexport type TimeRangeChipRow = {\n /** Stable row id used as the React key. */\n id: string;\n /** Group label shown beside the chips. */\n label: string;\n /** Preset chips rendered in this row. */\n chips: {\n /** Compact label shown in the chip. */\n label: string;\n /** Start value applied when clicked, e.g. `now-15m`. */\n token: string;\n /** Optional end value; defaults to `now`. */\n to?: string;\n /** Accessible label for the chip button. */\n ariaLabel?: string;\n /** Optional browser tooltip. */\n title?: string;\n }[];\n};\n\nexport type TimeRangeProps = {\n /** Controls whether the inputs accept date-only or date-time values. */\n kind?: TimeRangeKind;\n /** Label shown in the trigger before the selected range summary. */\n label?: string;\n /** Current start value. Relative values such as `now-1h` are supported. */\n from?: string;\n /** Current end value. Relative values such as `now` are supported. */\n to?: string;\n /** Called when the user applies a typed value or preset. */\n onApply: (from: string, to: string) => void;\n /** Presets or preset groups to show in the popup. */\n presets?: Array<TimeRangePreset | TimeRangePresetGroup>;\n /** Explicit chip rows; overrides the built-in preset group layout. */\n chipRows?: TimeRangeChipRow[];\n /** Enables time fields for date-time ranges. */\n timeEnabled?: boolean;\n /** Selected timezone shown in the popup. */\n timeZone?: string;\n /** Available timezone options. */\n timeZones?: string[];\n /** Placeholder for the start input. */\n fromPlaceholder?: string;\n /** Placeholder for the end input. */\n toPlaceholder?: string;\n /** Trigger text when neither boundary is set. */\n emptyLabel?: string;\n /** Aligns the popup to the trigger's left or right edge. */\n align?: \"left\" | \"right\";\n /** Disables opening and applying changes. */\n disabled?: boolean;\n /** Classes applied to the root wrapper. */\n className?: string;\n /** Classes applied to the trigger button. */\n triggerClassName?: string;\n /** Classes applied to the popup panel. */\n panelClassName?: string;\n};\n\nconst defaultTimeChipRows: TimeRangeChipRow[] = [\n {\n id: \"minutes\",\n label: \"Min\",\n chips: [\n { label: \"5m\", token: \"now-5m\" },\n { label: \"15m\", token: \"now-15m\" },\n { label: \"30m\", token: \"now-30m\" },\n ],\n },\n {\n id: \"hours\",\n label: \"Hr\",\n chips: [\n { label: \"1h\", token: \"now-1h\" },\n { label: \"2h\", token: \"now-2h\" },\n { label: \"4h\", token: \"now-4h\" },\n { label: \"8h\", token: \"now-8h\" },\n { label: \"12h\", token: \"now-12h\" },\n ],\n },\n {\n id: \"days\",\n label: \"Day\",\n chips: [\n { label: \"1d\", token: \"now-1d\" },\n { label: \"2d\", token: \"now-2d\" },\n { label: \"3d\", token: \"now-3d\" },\n { label: \"1w\", token: \"now-1w\" },\n ],\n },\n {\n id: \"weeks\",\n label: \"Wk+\",\n chips: [\n { label: \"2w\", token: \"now-2w\" },\n { label: \"1M\", token: \"now-1M\" },\n { label: \"3M\", token: \"now-3M\" },\n { label: \"6M\", token: \"now-6M\" },\n { label: \"1y\", token: \"now-1y\" },\n ],\n },\n];\n\nconst timeChipRowsByGroup: Record<\n Exclude<TimeRangePresetGroup, \"this\" | \"last\">,\n TimeRangeChipRow\n> = {\n min: defaultTimeChipRows[0]!,\n hr: defaultTimeChipRows[1]!,\n day: defaultTimeChipRows[2]!,\n \"wk+\": defaultTimeChipRows[3]!,\n};\n\nconst defaultDateChipRows: TimeRangeChipRow[] = [\n {\n id: \"days\",\n label: \"Day\",\n chips: [\n { label: \"1d\", token: \"now-1d\" },\n { label: \"2d\", token: \"now-2d\" },\n { label: \"3d\", token: \"now-3d\" },\n { label: \"7d\", token: \"now-7d\" },\n ],\n },\n {\n id: \"weeks\",\n label: \"Wk\",\n chips: [\n { label: \"1w\", token: \"now-1w\" },\n { label: \"2w\", token: \"now-2w\" },\n { label: \"4w\", token: \"now-4w\" },\n ],\n },\n {\n id: \"months\",\n label: \"Mo\",\n chips: [\n { label: \"1M\", token: \"now-1M\" },\n { label: \"3M\", token: \"now-3M\" },\n { label: \"6M\", token: \"now-6M\" },\n { label: \"1y\", token: \"now-1y\" },\n ],\n },\n];\n\nconst thisLastChipRows: Record<Extract<TimeRangePresetGroup, \"this\" | \"last\">, TimeRangeChipRow> = {\n this: {\n id: \"this\",\n label: \"This\",\n chips: [\n { label: \"Week\", token: \"now/w\", to: \"now/w+1w\", ariaLabel: \"this week\" },\n {\n label: \"Month\",\n token: \"now/M\",\n to: \"now/M+1M\",\n ariaLabel: \"this month\",\n },\n {\n label: \"Quarter\",\n token: \"now/q\",\n to: \"now/q+1q\",\n ariaLabel: \"this quarter\",\n },\n { label: \"Year\", token: \"now/y\", to: \"now/y+1y\", ariaLabel: \"this year\" },\n ],\n },\n last: {\n id: \"last\",\n label: \"Last\",\n chips: [\n { label: \"Week\", token: \"now/w-1w\", to: \"now/w\", ariaLabel: \"last week\" },\n {\n label: \"Month\",\n token: \"now/M-1M\",\n to: \"now/M\",\n ariaLabel: \"last month\",\n },\n {\n label: \"Quarter\",\n token: \"now/q-1q\",\n to: \"now/q\",\n ariaLabel: \"last quarter\",\n },\n { label: \"Year\", token: \"now/y-1y\", to: \"now/y\", ariaLabel: \"last year\" },\n ],\n },\n};\n\nexport function TimeRange({\n kind = \"time\",\n label = \"Time range\",\n from = \"\",\n to = \"\",\n onApply,\n presets,\n chipRows,\n timeEnabled = false,\n timeZone,\n timeZones,\n fromPlaceholder,\n toPlaceholder,\n emptyLabel,\n align = \"right\",\n disabled = false,\n className,\n triggerClassName,\n panelClassName,\n}: TimeRangeProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState(false);\n const [draftFrom, setDraftFrom] = useState(from);\n const [draftTo, setDraftTo] = useState(to);\n const resolvedDefaultTimeZone = timeZone ?? getDefaultTimeZone();\n const [selectedTimeZone, setSelectedTimeZone] = useState(resolvedDefaultTimeZone);\n\n const activeTimeZones = resolveTimeZones(timeZones, selectedTimeZone);\n const { rows: activeChipRows, presets: activePresets } = resolvePresetConfig(\n kind,\n presets,\n chipRows,\n );\n\n useDismissablePopup(open, rootRef, triggerRef, () => setOpen(false));\n\n useEffect(() => {\n if (open) {\n setDraftFrom(from);\n setDraftTo(to);\n setSelectedTimeZone(resolvedDefaultTimeZone);\n }\n }, [from, open, resolvedDefaultTimeZone, to]);\n\n const buttonLabel =\n formatSelectedPresetLabel(from, to, activeChipRows, activePresets) ??\n formatRangeLabel(kind, from, to, emptyLabel);\n const activeToken = normalizeRangeValue(kind, from, {\n timeEnabled,\n timeZone: selectedTimeZone,\n });\n\n function applyRange(nextFrom: string, nextTo: string) {\n onApply(\n normalizeRangeValue(kind, nextFrom, {\n timeEnabled,\n timeZone: selectedTimeZone,\n }),\n normalizeRangeValue(kind, nextTo, {\n timeEnabled,\n timeZone: selectedTimeZone,\n }),\n );\n setOpen(false);\n }\n\n function clearRange() {\n setDraftFrom(\"\");\n setDraftTo(\"\");\n onApply(\"\", \"\");\n setOpen(false);\n }\n\n return (\n <div ref={rootRef} className={cn(\"relative inline-flex\", className)}>\n <Button\n ref={triggerRef}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${label} filter`}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n disabled={disabled}\n onClick={() => setOpen((current) => !current)}\n className={cn(\n \"h-7 w-fit max-w-[12rem] min-w-0 gap-2 px-2 text-xs font-normal\",\n triggerClassName,\n )}\n >\n <Icon\n icon={kind === \"time\" ? UiWatch : UiCalendar}\n className=\"text-muted-foreground text-[14px]\"\n />\n <span className=\"truncate font-normal tabular-nums\">{buttonLabel}</span>\n </Button>\n\n {open && (\n <div\n role=\"dialog\"\n aria-label={label}\n className={cn(\n \"fixed inset-x-2 bottom-4 top-16 z-50 flex flex-col overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-lg shadow-black/10 outline-none md:absolute md:bottom-auto md:top-[calc(100%+0.375rem)] md:block md:w-[22.5rem] md:shadow-black/5\",\n align === \"left\" ? \"md:left-0\" : \"md:right-0\",\n panelClassName,\n )}\n >\n <div className=\"flex items-center justify-between border-b border-border/60 px-3.5 py-2.5\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n {label}\n </span>\n <span className=\"font-mono text-[10px] text-muted-foreground\">\n {timeEnabled ? selectedTimeZone : \"Relative\"}\n </span>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto md:overflow-visible\">\n {activeChipRows.length > 0 && (\n <ChipRowList rows={activeChipRows} activeToken={activeToken} onApply={applyRange} />\n )}\n {activePresets.length > 0 && (\n <div className={activeChipRows.length > 0 ? \"px-3.5 pb-3\" : \"px-3.5 pt-3\"}>\n <PresetList presets={activePresets} onApply={applyRange} />\n </div>\n )}\n\n <div className=\"border-t border-border/60 bg-muted/30 px-3.5 py-2.5\">\n <div className=\"mb-1.5 flex flex-wrap items-center justify-between gap-2\">\n <div className=\"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n Custom\n </div>\n {timeEnabled && (\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n TZ\n </span>\n <Select\n aria-label={`${label} timezone`}\n value={selectedTimeZone}\n options={activeTimeZones.map((zone) => ({\n value: zone,\n label: zone,\n }))}\n onChange={(event) => setSelectedTimeZone(event.target.value)}\n className=\"h-7 w-40 truncate px-2 pr-7 font-mono text-xs\"\n />\n </div>\n )}\n </div>\n <div className=\"grid gap-1.5 md:grid-cols-[1fr_auto_1fr] md:items-center\">\n <DraftRangeInput\n aria-label={`${label} from`}\n placeholder={\n fromPlaceholder ?? (kind === \"date\" ? \"YYYY-MM-DD or now-1d\" : \"now-24h\")\n }\n value={draftFrom}\n onChange={setDraftFrom}\n onClear={() => setDraftFrom(\"\")}\n pickerKind={kind}\n timeEnabled={timeEnabled}\n />\n <Icon\n icon={UiArrowRight}\n className=\"hidden text-muted-foreground text-[12px] md:block\"\n />\n <DraftRangeInput\n aria-label={`${label} to`}\n placeholder={toPlaceholder ?? (kind === \"date\" ? \"YYYY-MM-DD or now\" : \"now\")}\n value={draftTo}\n onChange={setDraftTo}\n onClear={() => setDraftTo(\"\")}\n pickerKind={kind}\n timeEnabled={timeEnabled}\n />\n </div>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between border-t border-border/60 px-3 py-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2.5 text-xs\"\n disabled={!from && !to}\n onClick={clearRange}\n >\n Clear\n </Button>\n <div className=\"flex gap-1.5\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2.5 text-xs\"\n onClick={() => setOpen(false)}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n className=\"h-7 px-3.5 text-xs\"\n onClick={() => applyRange(draftFrom, draftTo)}\n >\n Apply\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction DraftRangeInput({\n value,\n onChange,\n onClear,\n placeholder,\n pickerKind,\n timeEnabled,\n ...rest\n}: {\n value: string;\n onChange: (value: string) => void;\n onClear: () => void;\n placeholder: string | undefined;\n pickerKind?: TimeRangeKind;\n timeEnabled: boolean;\n \"aria-label\": string;\n}) {\n const ariaLabel = rest[\"aria-label\"];\n const showCalendar = pickerKind !== undefined;\n const showTimeInput = pickerKind === \"time\" && timeEnabled;\n const { date: datePart, time: timePart } = splitDateTime(value);\n\n function setDatePart(nextDate: string) {\n if (!showTimeInput) {\n onChange(nextDate);\n return;\n }\n if (!nextDate) {\n onChange(timePart ? `T${timePart}` : \"\");\n return;\n }\n onChange(timePart ? `${nextDate}T${timePart}` : nextDate);\n }\n\n function setTimePart(nextTime: string) {\n if (!nextTime) {\n onChange(datePart);\n return;\n }\n onChange(datePart ? `${datePart}T${nextTime}` : `T${nextTime}`);\n }\n\n return (\n <div className=\"space-y-1\">\n <DraftTextInput\n ariaLabel={ariaLabel}\n placeholder={placeholder}\n value={showTimeInput ? datePart : value}\n onChange={showTimeInput ? setDatePart : onChange}\n onClear={onClear}\n showCalendar={showCalendar}\n />\n {showTimeInput && (\n <DraftTimeInput ariaLabel={`${ariaLabel} time`} value={timePart} onChange={setTimePart} />\n )}\n </div>\n );\n}\n\nfunction resolvePresetConfig(\n kind: TimeRangeKind,\n presets: TimeRangeProps[\"presets\"],\n chipRows: TimeRangeChipRow[] | undefined,\n) {\n if (presets === undefined) {\n return {\n rows: chipRows ?? (kind === \"date\" ? defaultDateChipRows : defaultTimeChipRows),\n presets: [] as TimeRangePreset[],\n };\n }\n\n const rows: TimeRangeChipRow[] = chipRows ? [...chipRows] : [];\n const presetList: TimeRangePreset[] = [];\n\n for (const preset of presets) {\n if (typeof preset !== \"string\") {\n presetList.push(preset);\n continue;\n }\n if (preset === \"this\" || preset === \"last\") {\n rows.push(thisLastChipRows[preset]);\n continue;\n }\n rows.push(timeChipRowsByGroup[preset]);\n }\n\n return { rows, presets: presetList };\n}\n\nfunction DraftTextInput({\n ariaLabel,\n value,\n onChange,\n onClear,\n placeholder,\n showCalendar,\n}: {\n ariaLabel: string;\n value: string;\n onChange: (value: string) => void;\n onClear: () => void;\n placeholder: string | undefined;\n showCalendar: boolean;\n}) {\n const pickerRef = useRef<HTMLInputElement | null>(null);\n const hasValue = value.length > 0;\n const paddingRight = showCalendar ? (hasValue ? \"pr-12\" : \"pr-7\") : \"pr-7\";\n\n return (\n <div className=\"relative\">\n <input\n type=\"text\"\n aria-label={ariaLabel}\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className={cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 font-mono text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n paddingRight,\n )}\n />\n {hasValue && (\n <button\n type=\"button\"\n aria-label={`Clear ${ariaLabel}`}\n onClick={onClear}\n className={cn(\n \"absolute inset-y-0 inline-flex w-5 items-center justify-center text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n showCalendar ? \"right-6\" : \"right-1\",\n )}\n >\n <Icon icon={UiClose} className=\"text-[12px]\" />\n </button>\n )}\n {showCalendar && (\n <>\n <input\n ref={pickerRef}\n type=\"date\"\n tabIndex={-1}\n aria-hidden=\"true\"\n value={/^\\d{4}-\\d{2}-\\d{2}$/.test(value.trim()) ? value.trim() : \"\"}\n onChange={(event) => onChange(event.target.value)}\n className=\"pointer-events-none absolute left-0 top-0 h-0 w-0 opacity-0\"\n />\n <button\n type=\"button\"\n aria-label={`Pick ${ariaLabel}`}\n onClick={() => pickerRef.current?.showPicker?.()}\n className=\"absolute inset-y-0 right-1 inline-flex w-5 items-center justify-center text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon icon={UiCalendar} className=\"text-[12px]\" />\n </button>\n </>\n )}\n </div>\n );\n}\n\nfunction DraftTimeInput({\n ariaLabel,\n value,\n onChange,\n}: {\n ariaLabel: string;\n value: string;\n onChange: (value: string) => void;\n}) {\n return (\n <input\n type=\"time\"\n aria-label={ariaLabel}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 font-mono text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n );\n}\n\nfunction splitDateTime(value: string) {\n const trimmed = value.trim();\n const match = /^(\\d{4}-\\d{2}-\\d{2})?T?(\\d{2}:\\d{2})?/.exec(trimmed);\n if (!match || trimmed.startsWith(\"now\") || /^[+-]/.test(trimmed)) {\n return { date: trimmed, time: \"\" };\n }\n return { date: match[1] ?? \"\", time: match[2] ?? \"\" };\n}\n\nfunction ChipRowList({\n rows,\n activeToken,\n onApply,\n}: {\n rows: TimeRangeChipRow[];\n activeToken: string;\n onApply: (from: string, to: string) => void;\n}) {\n if (rows.length === 0) return null;\n\n return (\n <div className=\"px-3.5 py-3\" role=\"list\" aria-label=\"Time filters\">\n {rows.map((row, index) => (\n <div\n key={row.id}\n className={cn(\n \"grid grid-cols-[2rem_1fr] items-center gap-2\",\n index === rows.length - 1 ? \"\" : \"mb-1.5\",\n )}\n role=\"listitem\"\n >\n <span className=\"text-[9.5px] font-bold uppercase tracking-wider text-muted-foreground\">\n {row.label}\n </span>\n <div className=\"flex divide-x divide-border overflow-hidden rounded-[5px] border border-border\">\n {row.chips.map((chip) => {\n const active = chip.token === activeToken;\n return (\n <button\n key={chip.token}\n type=\"button\"\n title={chip.title ?? chip.ariaLabel ?? chip.token}\n aria-label={chip.ariaLabel ?? chip.token}\n aria-pressed={active}\n onClick={() => onApply(chip.token, chip.to ?? \"now\")}\n className={cn(\n \"flex-1 min-w-0 px-0 py-1.5 text-center font-mono text-[11.5px] leading-none transition-colors focus-visible:relative focus-visible:z-10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"bg-foreground font-semibold text-background\"\n : \"bg-background font-medium text-muted-foreground hover:bg-muted\",\n )}\n >\n {chip.label}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction PresetList({\n presets,\n onApply,\n}: {\n presets: TimeRangePreset[];\n onApply: (from: string, to: string) => void;\n}) {\n if (presets.length === 0) return null;\n\n return (\n <div className=\"mb-3 space-y-1\" role=\"list\" aria-label=\"Time filters\">\n {presets.map((preset) => (\n <button\n key={`${preset.label}-${preset.from}-${preset.to}`}\n type=\"button\"\n className=\"flex h-8 w-full items-center justify-between gap-3 rounded-md border border-border bg-background px-2 text-left text-xs hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n onClick={() => onApply(preset.from, preset.to)}\n >\n <span className=\"min-w-0 truncate font-medium\">{preset.label}</span>\n <span className=\"shrink-0 font-mono text-[11px] text-muted-foreground\">\n {formatPresetRange(preset)}\n </span>\n </button>\n ))}\n </div>\n );\n}\n\nfunction formatSelectedPresetLabel(\n from: string,\n to: string,\n rows: TimeRangeChipRow[],\n presets: TimeRangePreset[],\n) {\n const normalizedFrom = from.trim();\n const normalizedTo = to.trim();\n if (!normalizedFrom && !normalizedTo) return undefined;\n\n for (const row of rows) {\n for (const chip of row.chips) {\n if (chip.token === normalizedFrom && (chip.to ?? \"now\") === normalizedTo) {\n return chip.ariaLabel ?? chip.title ?? chip.label;\n }\n }\n }\n\n return presets.find((preset) => preset.from === normalizedFrom && preset.to === normalizedTo)\n ?.label;\n}\n\nfunction formatPresetRange({ from, to }: TimeRangePreset) {\n if (!from) return to;\n if (!to || to === \"now\") return from;\n return `${from} -> ${to}`;\n}\n\nfunction useDismissablePopup(\n open: boolean,\n rootRef: RefObject<HTMLElement | null>,\n triggerRef: RefObject<HTMLElement | null>,\n onClose: () => void,\n) {\n useEffect(() => {\n if (!open) return;\n\n const onPointerDown = (event: MouseEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n onClose();\n }\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n triggerRef.current?.focus();\n }\n };\n\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [onClose, open, rootRef, triggerRef]);\n}\n\nfunction normalizeRangeValue(\n kind: TimeRangeKind,\n value: string,\n options: { timeEnabled?: boolean; timeZone?: string } = {},\n) {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n if (trimmed === \"now\" || trimmed.startsWith(\"now\")) return trimmed;\n if (kind === \"time\" && /^[+-]\\d/.test(trimmed)) return `now${trimmed}`;\n if (kind === \"time\" && options.timeEnabled) {\n return encodeDateTimeWithOffset(trimmed, options.timeZone ?? getDefaultTimeZone());\n }\n return trimmed;\n}\n\nfunction formatRangeLabel(kind: TimeRangeKind, from: string, to: string, emptyLabel?: string) {\n const trimmedFrom = from.trim();\n const trimmedTo = to.trim();\n\n if (!trimmedFrom && !trimmedTo) {\n return emptyLabel ?? (kind === \"date\" ? \"Any date\" : \"now-24h\");\n }\n\n if (kind === \"time\") {\n const normalizedFrom = normalizeRangeValue(kind, trimmedFrom);\n const normalizedTo = normalizeRangeValue(kind, trimmedTo || \"now\");\n if (!normalizedFrom) return normalizedTo;\n if (normalizedTo === \"now\") return normalizedFrom;\n return `${normalizedFrom} -> ${normalizedTo}`;\n }\n\n if (trimmedFrom && trimmedTo && trimmedFrom === trimmedTo) {\n return trimmedFrom;\n }\n\n if (!trimmedFrom) return trimmedTo;\n if (!trimmedTo) return trimmedFrom;\n return `${trimmedFrom} -> ${trimmedTo}`;\n}\n\nfunction getDefaultTimeZone() {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone || \"UTC\";\n } catch {\n return \"UTC\";\n }\n}\n\nfunction resolveTimeZones(timeZones: string[] | undefined, selectedTimeZone: string) {\n const zones = timeZones && timeZones.length > 0 ? timeZones : [selectedTimeZone, \"UTC\"];\n return Array.from(new Set([selectedTimeZone, ...zones, \"UTC\"].filter(Boolean)));\n}\n\nfunction encodeDateTimeWithOffset(value: string, timeZone: string) {\n if (!isLocalDateTime(value) || hasExplicitOffset(value)) return value;\n\n const match = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?(?:\\.\\d+)?$/);\n if (!match) return value;\n\n const [, year, month, day, hour, minute, second = \"00\"] = match;\n const localUtcMillis = Date.UTC(\n Number(year),\n Number(month) - 1,\n Number(day),\n Number(hour),\n Number(minute),\n Number(second),\n );\n const offsetMinutes = getTimeZoneOffsetMinutes(timeZone, localUtcMillis);\n return `${year}-${month}-${day}T${hour}:${minute}:${second}${formatOffset(offsetMinutes)}`;\n}\n\nfunction isLocalDateTime(value: string) {\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2})?(?:\\.\\d+)?$/.test(value.trim());\n}\n\nfunction hasExplicitOffset(value: string) {\n return /(?:Z|[+-]\\d{2}:?\\d{2})$/i.test(value.trim());\n}\n\nfunction getTimeZoneOffsetMinutes(timeZone: string, localUtcMillis: number) {\n try {\n const formatter = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n });\n const parts = Object.fromEntries(\n formatter\n .formatToParts(new Date(localUtcMillis))\n .filter((part) => part.type !== \"literal\")\n .map((part) => [part.type, part.value]),\n );\n const zonedUtcMillis = Date.UTC(\n Number(parts.year),\n Number(parts.month) - 1,\n Number(parts.day),\n Number(parts.hour),\n Number(parts.minute),\n Number(parts.second),\n );\n return (zonedUtcMillis - localUtcMillis) / 60_000;\n } catch {\n return 0;\n }\n}\n\nfunction formatOffset(offsetMinutes: number) {\n const sign = offsetMinutes >= 0 ? \"+\" : \"-\";\n const abs = Math.abs(offsetMinutes);\n const hours = Math.floor(abs / 60)\n .toString()\n .padStart(2, \"0\");\n const minutes = Math.floor(abs % 60)\n .toString()\n .padStart(2, \"0\");\n return `${sign}${hours}:${minutes}`;\n}\n"],"names":["useRef","useState","useEffect","jsxs","cn","Button","jsx","Icon","UiWatch","UiCalendar","Select","UiArrowRight","UiClose","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TimeRange.cjs","sources":["../../src/components/TimeRange.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type Ref } from \"react\";\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useRole,\n} from \"@floating-ui/react\";\nimport { Icon } from \"../data/Icon\";\nimport { UiArrowRight, UiCalendar, UiClose, UiWatch } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { useEscapeLayer, useFloatingZIndex } from \"../overlay/modalStack\";\nimport { Button } from \"./button\";\nimport { Select } from \"./select\";\n\nexport type TimeRangeKind = \"time\" | \"date\";\n\nexport type TimeRangePresetGroup = \"min\" | \"hr\" | \"day\" | \"wk+\" | \"this\" | \"last\";\n\nexport type TimeRangePreset = {\n /** Visible label for the preset row. */\n label: string;\n /** Start value applied when the preset is selected, e.g. `now-1h`. */\n from: string;\n /** End value applied when the preset is selected, usually `now`. */\n to: string;\n};\n\nexport type TimeRangeChipRow = {\n /** Stable row id used as the React key. */\n id: string;\n /** Group label shown beside the chips. */\n label: string;\n /** Preset chips rendered in this row. */\n chips: {\n /** Compact label shown in the chip. */\n label: string;\n /** Start value applied when clicked, e.g. `now-15m`. */\n token: string;\n /** Optional end value; defaults to `now`. */\n to?: string;\n /** Accessible label for the chip button. */\n ariaLabel?: string;\n /** Optional browser tooltip. */\n title?: string;\n }[];\n};\n\nexport type TimeRangeProps = {\n /** Controls whether the inputs accept date-only or date-time values. */\n kind?: TimeRangeKind;\n /** Label shown in the trigger before the selected range summary. */\n label?: string;\n /** Current start value. Relative values such as `now-1h` are supported. */\n from?: string;\n /** Current end value. Relative values such as `now` are supported. */\n to?: string;\n /** Called when the user applies a typed value or preset. */\n onApply: (from: string, to: string) => void;\n /** Presets or preset groups to show in the popup. */\n presets?: Array<TimeRangePreset | TimeRangePresetGroup>;\n /** Explicit chip rows; overrides the built-in preset group layout. */\n chipRows?: TimeRangeChipRow[];\n /** Enables time fields for date-time ranges. */\n timeEnabled?: boolean;\n /** Selected timezone shown in the popup. */\n timeZone?: string;\n /** Available timezone options. */\n timeZones?: string[];\n /** Placeholder for the start input. */\n fromPlaceholder?: string;\n /** Placeholder for the end input. */\n toPlaceholder?: string;\n /** Trigger text when neither boundary is set. */\n emptyLabel?: string;\n /** Aligns the popup to the trigger's left or right edge. */\n align?: \"left\" | \"right\";\n /** Disables opening and applying changes. */\n disabled?: boolean;\n /** Classes applied to the root wrapper. */\n className?: string;\n /** Classes applied to the trigger button. */\n triggerClassName?: string;\n /** Classes applied to the popup panel. */\n panelClassName?: string;\n};\n\nconst defaultTimeChipRows: TimeRangeChipRow[] = [\n {\n id: \"minutes\",\n label: \"Min\",\n chips: [\n { label: \"5m\", token: \"now-5m\" },\n { label: \"15m\", token: \"now-15m\" },\n { label: \"30m\", token: \"now-30m\" },\n ],\n },\n {\n id: \"hours\",\n label: \"Hr\",\n chips: [\n { label: \"1h\", token: \"now-1h\" },\n { label: \"2h\", token: \"now-2h\" },\n { label: \"4h\", token: \"now-4h\" },\n { label: \"8h\", token: \"now-8h\" },\n { label: \"12h\", token: \"now-12h\" },\n ],\n },\n {\n id: \"days\",\n label: \"Day\",\n chips: [\n { label: \"1d\", token: \"now-1d\" },\n { label: \"2d\", token: \"now-2d\" },\n { label: \"3d\", token: \"now-3d\" },\n { label: \"1w\", token: \"now-1w\" },\n ],\n },\n {\n id: \"weeks\",\n label: \"Wk+\",\n chips: [\n { label: \"2w\", token: \"now-2w\" },\n { label: \"1M\", token: \"now-1M\" },\n { label: \"3M\", token: \"now-3M\" },\n { label: \"6M\", token: \"now-6M\" },\n { label: \"1y\", token: \"now-1y\" },\n ],\n },\n];\n\nconst timeChipRowsByGroup: Record<\n Exclude<TimeRangePresetGroup, \"this\" | \"last\">,\n TimeRangeChipRow\n> = {\n min: defaultTimeChipRows[0]!,\n hr: defaultTimeChipRows[1]!,\n day: defaultTimeChipRows[2]!,\n \"wk+\": defaultTimeChipRows[3]!,\n};\n\nconst defaultDateChipRows: TimeRangeChipRow[] = [\n {\n id: \"days\",\n label: \"Day\",\n chips: [\n { label: \"1d\", token: \"now-1d\" },\n { label: \"2d\", token: \"now-2d\" },\n { label: \"3d\", token: \"now-3d\" },\n { label: \"7d\", token: \"now-7d\" },\n ],\n },\n {\n id: \"weeks\",\n label: \"Wk\",\n chips: [\n { label: \"1w\", token: \"now-1w\" },\n { label: \"2w\", token: \"now-2w\" },\n { label: \"4w\", token: \"now-4w\" },\n ],\n },\n {\n id: \"months\",\n label: \"Mo\",\n chips: [\n { label: \"1M\", token: \"now-1M\" },\n { label: \"3M\", token: \"now-3M\" },\n { label: \"6M\", token: \"now-6M\" },\n { label: \"1y\", token: \"now-1y\" },\n ],\n },\n];\n\nconst thisLastChipRows: Record<Extract<TimeRangePresetGroup, \"this\" | \"last\">, TimeRangeChipRow> = {\n this: {\n id: \"this\",\n label: \"This\",\n chips: [\n { label: \"Week\", token: \"now/w\", to: \"now/w+1w\", ariaLabel: \"this week\" },\n {\n label: \"Month\",\n token: \"now/M\",\n to: \"now/M+1M\",\n ariaLabel: \"this month\",\n },\n {\n label: \"Quarter\",\n token: \"now/q\",\n to: \"now/q+1q\",\n ariaLabel: \"this quarter\",\n },\n { label: \"Year\", token: \"now/y\", to: \"now/y+1y\", ariaLabel: \"this year\" },\n ],\n },\n last: {\n id: \"last\",\n label: \"Last\",\n chips: [\n { label: \"Week\", token: \"now/w-1w\", to: \"now/w\", ariaLabel: \"last week\" },\n {\n label: \"Month\",\n token: \"now/M-1M\",\n to: \"now/M\",\n ariaLabel: \"last month\",\n },\n {\n label: \"Quarter\",\n token: \"now/q-1q\",\n to: \"now/q\",\n ariaLabel: \"last quarter\",\n },\n { label: \"Year\", token: \"now/y-1y\", to: \"now/y\", ariaLabel: \"last year\" },\n ],\n },\n};\n\nexport function TimeRange({\n kind = \"time\",\n label = \"Time range\",\n from = \"\",\n to = \"\",\n onApply,\n presets,\n chipRows,\n timeEnabled = false,\n timeZone,\n timeZones,\n fromPlaceholder,\n toPlaceholder,\n emptyLabel,\n align = \"right\",\n disabled = false,\n className,\n triggerClassName,\n panelClassName,\n}: TimeRangeProps) {\n const [open, setOpen] = useState(false);\n const [draftFrom, setDraftFrom] = useState(from);\n const [draftTo, setDraftTo] = useState(to);\n const resolvedDefaultTimeZone = timeZone ?? getDefaultTimeZone();\n const [selectedTimeZone, setSelectedTimeZone] = useState(resolvedDefaultTimeZone);\n\n const activeTimeZones = resolveTimeZones(timeZones, selectedTimeZone);\n const { rows: activeChipRows, presets: activePresets } = resolvePresetConfig(\n kind,\n presets,\n chipRows,\n );\n\n // The popup is portaled (floating-ui) so it escapes the `overflow` clipping of\n // scroll-container ancestors (e.g. AppLayout's `<main overflow-y-auto>`) — the\n // same approach Combobox/DropdownMenu use. `flip`/`shift` keep it on-screen.\n const floatingZ = useFloatingZIndex();\n const { refs, floatingStyles, context } = useFloating({\n open,\n onOpenChange: setOpen,\n placement: align === \"left\" ? \"bottom-start\" : \"bottom-end\",\n whileElementsMounted: autoUpdate,\n middleware: [offset(6), flip({ padding: 8 }), shift({ padding: 8 })],\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useClick(context),\n useDismiss(context, { escapeKey: false }),\n useRole(context, { role: \"dialog\" }),\n ]);\n useEscapeLayer(open, () => {\n setOpen(false);\n if (refs.domReference.current instanceof HTMLElement) refs.domReference.current.focus();\n });\n\n useEffect(() => {\n if (open) {\n setDraftFrom(from);\n setDraftTo(to);\n setSelectedTimeZone(resolvedDefaultTimeZone);\n }\n }, [from, open, resolvedDefaultTimeZone, to]);\n\n const buttonLabel =\n formatSelectedPresetLabel(from, to, activeChipRows, activePresets) ??\n formatRangeLabel(kind, from, to, emptyLabel);\n const activeToken = normalizeRangeValue(kind, from, {\n timeEnabled,\n timeZone: selectedTimeZone,\n });\n\n function applyRange(nextFrom: string, nextTo: string) {\n onApply(\n normalizeRangeValue(kind, nextFrom, {\n timeEnabled,\n timeZone: selectedTimeZone,\n }),\n normalizeRangeValue(kind, nextTo, {\n timeEnabled,\n timeZone: selectedTimeZone,\n }),\n );\n setOpen(false);\n }\n\n function clearRange() {\n setDraftFrom(\"\");\n setDraftTo(\"\");\n onApply(\"\", \"\");\n setOpen(false);\n }\n\n return (\n <div className={cn(\"inline-flex\", className)}>\n <Button\n ref={refs.setReference as Ref<HTMLButtonElement>}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${label} filter`}\n disabled={disabled}\n className={cn(\n \"h-7 w-fit max-w-[12rem] min-w-0 gap-2 px-2 text-xs font-normal\",\n triggerClassName,\n )}\n {...getReferenceProps()}\n >\n <Icon\n icon={kind === \"time\" ? UiWatch : UiCalendar}\n className=\"text-muted-foreground text-[14px]\"\n />\n <span className=\"truncate font-normal tabular-nums\">{buttonLabel}</span>\n </Button>\n\n {open && (\n <FloatingPortal>\n <FloatingFocusManager context={context} modal={false}>\n <div\n ref={refs.setFloating}\n role=\"dialog\"\n aria-label={label}\n style={{ ...floatingStyles, zIndex: floatingZ }}\n className={cn(\n \"flex max-h-[min(32rem,calc(100vh-2rem))] w-[22.5rem] max-w-[calc(100vw-1rem)] flex-col overflow-hidden rounded-lg border border-border bg-popover text-popover-foreground shadow-lg shadow-black/10 outline-none\",\n panelClassName,\n )}\n {...getFloatingProps()}\n >\n <div className=\"flex items-center justify-between border-b border-border/60 px-3.5 py-2.5\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n {label}\n </span>\n <span className=\"font-mono text-[10px] text-muted-foreground\">\n {timeEnabled ? selectedTimeZone : \"Relative\"}\n </span>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {activeChipRows.length > 0 && (\n <ChipRowList rows={activeChipRows} activeToken={activeToken} onApply={applyRange} />\n )}\n {activePresets.length > 0 && (\n <div className={activeChipRows.length > 0 ? \"px-3.5 pb-3\" : \"px-3.5 pt-3\"}>\n <PresetList presets={activePresets} onApply={applyRange} />\n </div>\n )}\n\n <div className=\"border-t border-border/60 bg-muted/30 px-3.5 py-2.5\">\n <div className=\"mb-1.5 flex flex-wrap items-center justify-between gap-2\">\n <div className=\"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n Custom\n </div>\n {timeEnabled && (\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n TZ\n </span>\n <Select\n aria-label={`${label} timezone`}\n value={selectedTimeZone}\n options={activeTimeZones.map((zone) => ({\n value: zone,\n label: zone,\n }))}\n onChange={(event) => setSelectedTimeZone(event.target.value)}\n className=\"h-7 w-40 truncate px-2 pr-7 font-mono text-xs\"\n />\n </div>\n )}\n </div>\n <div className=\"grid gap-1.5 md:grid-cols-[1fr_auto_1fr] md:items-center\">\n <DraftRangeInput\n aria-label={`${label} from`}\n placeholder={\n fromPlaceholder ?? (kind === \"date\" ? \"YYYY-MM-DD or now-1d\" : \"now-24h\")\n }\n value={draftFrom}\n onChange={setDraftFrom}\n onClear={() => setDraftFrom(\"\")}\n pickerKind={kind}\n timeEnabled={timeEnabled}\n />\n <Icon\n icon={UiArrowRight}\n className=\"hidden text-muted-foreground text-[12px] md:block\"\n />\n <DraftRangeInput\n aria-label={`${label} to`}\n placeholder={toPlaceholder ?? (kind === \"date\" ? \"YYYY-MM-DD or now\" : \"now\")}\n value={draftTo}\n onChange={setDraftTo}\n onClear={() => setDraftTo(\"\")}\n pickerKind={kind}\n timeEnabled={timeEnabled}\n />\n </div>\n </div>\n </div>\n\n <div className=\"flex items-center justify-between border-t border-border/60 px-3 py-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2.5 text-xs\"\n disabled={!from && !to}\n onClick={clearRange}\n >\n Clear\n </Button>\n <div className=\"flex gap-1.5\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2.5 text-xs\"\n onClick={() => setOpen(false)}\n >\n Cancel\n </Button>\n <Button\n type=\"button\"\n variant=\"default\"\n size=\"sm\"\n className=\"h-7 px-3.5 text-xs\"\n onClick={() => applyRange(draftFrom, draftTo)}\n >\n Apply\n </Button>\n </div>\n </div>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </div>\n );\n}\n\nfunction DraftRangeInput({\n value,\n onChange,\n onClear,\n placeholder,\n pickerKind,\n timeEnabled,\n ...rest\n}: {\n value: string;\n onChange: (value: string) => void;\n onClear: () => void;\n placeholder: string | undefined;\n pickerKind?: TimeRangeKind;\n timeEnabled: boolean;\n \"aria-label\": string;\n}) {\n const ariaLabel = rest[\"aria-label\"];\n const showCalendar = pickerKind !== undefined;\n const showTimeInput = pickerKind === \"time\" && timeEnabled;\n const { date: datePart, time: timePart } = splitDateTime(value);\n\n function setDatePart(nextDate: string) {\n if (!showTimeInput) {\n onChange(nextDate);\n return;\n }\n if (!nextDate) {\n onChange(timePart ? `T${timePart}` : \"\");\n return;\n }\n onChange(timePart ? `${nextDate}T${timePart}` : nextDate);\n }\n\n function setTimePart(nextTime: string) {\n if (!nextTime) {\n onChange(datePart);\n return;\n }\n onChange(datePart ? `${datePart}T${nextTime}` : `T${nextTime}`);\n }\n\n return (\n <div className=\"space-y-1\">\n <DraftTextInput\n ariaLabel={ariaLabel}\n placeholder={placeholder}\n value={showTimeInput ? datePart : value}\n onChange={showTimeInput ? setDatePart : onChange}\n onClear={onClear}\n showCalendar={showCalendar}\n />\n {showTimeInput && (\n <DraftTimeInput ariaLabel={`${ariaLabel} time`} value={timePart} onChange={setTimePart} />\n )}\n </div>\n );\n}\n\nfunction resolvePresetConfig(\n kind: TimeRangeKind,\n presets: TimeRangeProps[\"presets\"],\n chipRows: TimeRangeChipRow[] | undefined,\n) {\n if (presets === undefined) {\n return {\n rows: chipRows ?? (kind === \"date\" ? defaultDateChipRows : defaultTimeChipRows),\n presets: [] as TimeRangePreset[],\n };\n }\n\n const rows: TimeRangeChipRow[] = chipRows ? [...chipRows] : [];\n const presetList: TimeRangePreset[] = [];\n\n for (const preset of presets) {\n if (typeof preset !== \"string\") {\n presetList.push(preset);\n continue;\n }\n if (preset === \"this\" || preset === \"last\") {\n rows.push(thisLastChipRows[preset]);\n continue;\n }\n rows.push(timeChipRowsByGroup[preset]);\n }\n\n return { rows, presets: presetList };\n}\n\nfunction DraftTextInput({\n ariaLabel,\n value,\n onChange,\n onClear,\n placeholder,\n showCalendar,\n}: {\n ariaLabel: string;\n value: string;\n onChange: (value: string) => void;\n onClear: () => void;\n placeholder: string | undefined;\n showCalendar: boolean;\n}) {\n const pickerRef = useRef<HTMLInputElement | null>(null);\n const hasValue = value.length > 0;\n const paddingRight = showCalendar ? (hasValue ? \"pr-12\" : \"pr-7\") : \"pr-7\";\n\n return (\n <div className=\"relative\">\n <input\n type=\"text\"\n aria-label={ariaLabel}\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className={cn(\n \"h-8 w-full rounded-md border border-input bg-background px-2 font-mono text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n paddingRight,\n )}\n />\n {hasValue && (\n <button\n type=\"button\"\n aria-label={`Clear ${ariaLabel}`}\n onClick={onClear}\n className={cn(\n \"absolute inset-y-0 inline-flex w-5 items-center justify-center text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n showCalendar ? \"right-6\" : \"right-1\",\n )}\n >\n <Icon icon={UiClose} className=\"text-[12px]\" />\n </button>\n )}\n {showCalendar && (\n <>\n <input\n ref={pickerRef}\n type=\"date\"\n tabIndex={-1}\n aria-hidden=\"true\"\n value={/^\\d{4}-\\d{2}-\\d{2}$/.test(value.trim()) ? value.trim() : \"\"}\n onChange={(event) => onChange(event.target.value)}\n className=\"pointer-events-none absolute left-0 top-0 h-0 w-0 opacity-0\"\n />\n <button\n type=\"button\"\n aria-label={`Pick ${ariaLabel}`}\n onClick={() => pickerRef.current?.showPicker?.()}\n className=\"absolute inset-y-0 right-1 inline-flex w-5 items-center justify-center text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon icon={UiCalendar} className=\"text-[12px]\" />\n </button>\n </>\n )}\n </div>\n );\n}\n\nfunction DraftTimeInput({\n ariaLabel,\n value,\n onChange,\n}: {\n ariaLabel: string;\n value: string;\n onChange: (value: string) => void;\n}) {\n return (\n <input\n type=\"time\"\n aria-label={ariaLabel}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className=\"h-8 w-full rounded-md border border-input bg-background px-2 font-mono text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n );\n}\n\nfunction splitDateTime(value: string) {\n const trimmed = value.trim();\n const match = /^(\\d{4}-\\d{2}-\\d{2})?T?(\\d{2}:\\d{2})?/.exec(trimmed);\n if (!match || trimmed.startsWith(\"now\") || /^[+-]/.test(trimmed)) {\n return { date: trimmed, time: \"\" };\n }\n return { date: match[1] ?? \"\", time: match[2] ?? \"\" };\n}\n\nfunction ChipRowList({\n rows,\n activeToken,\n onApply,\n}: {\n rows: TimeRangeChipRow[];\n activeToken: string;\n onApply: (from: string, to: string) => void;\n}) {\n if (rows.length === 0) return null;\n\n return (\n <div className=\"px-3.5 py-3\" role=\"list\" aria-label=\"Time filters\">\n {rows.map((row, index) => (\n <div\n key={row.id}\n className={cn(\n \"grid grid-cols-[2rem_1fr] items-center gap-2\",\n index === rows.length - 1 ? \"\" : \"mb-1.5\",\n )}\n role=\"listitem\"\n >\n <span className=\"text-[9.5px] font-bold uppercase tracking-wider text-muted-foreground\">\n {row.label}\n </span>\n <div className=\"flex divide-x divide-border overflow-hidden rounded-[5px] border border-border\">\n {row.chips.map((chip) => {\n const active = chip.token === activeToken;\n return (\n <button\n key={chip.token}\n type=\"button\"\n title={chip.title ?? chip.ariaLabel ?? chip.token}\n aria-label={chip.ariaLabel ?? chip.token}\n aria-pressed={active}\n onClick={() => onApply(chip.token, chip.to ?? \"now\")}\n className={cn(\n \"flex-1 min-w-0 px-0 py-1.5 text-center font-mono text-[11.5px] leading-none transition-colors focus-visible:relative focus-visible:z-10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"bg-foreground font-semibold text-background\"\n : \"bg-background font-medium text-muted-foreground hover:bg-muted\",\n )}\n >\n {chip.label}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction PresetList({\n presets,\n onApply,\n}: {\n presets: TimeRangePreset[];\n onApply: (from: string, to: string) => void;\n}) {\n if (presets.length === 0) return null;\n\n return (\n <div className=\"mb-3 space-y-1\" role=\"list\" aria-label=\"Time filters\">\n {presets.map((preset) => (\n <button\n key={`${preset.label}-${preset.from}-${preset.to}`}\n type=\"button\"\n className=\"flex h-8 w-full items-center justify-between gap-3 rounded-md border border-border bg-background px-2 text-left text-xs hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n onClick={() => onApply(preset.from, preset.to)}\n >\n <span className=\"min-w-0 truncate font-medium\">{preset.label}</span>\n <span className=\"shrink-0 font-mono text-[11px] text-muted-foreground\">\n {formatPresetRange(preset)}\n </span>\n </button>\n ))}\n </div>\n );\n}\n\nfunction formatSelectedPresetLabel(\n from: string,\n to: string,\n rows: TimeRangeChipRow[],\n presets: TimeRangePreset[],\n) {\n const normalizedFrom = from.trim();\n const normalizedTo = to.trim();\n if (!normalizedFrom && !normalizedTo) return undefined;\n\n for (const row of rows) {\n for (const chip of row.chips) {\n if (chip.token === normalizedFrom && (chip.to ?? \"now\") === normalizedTo) {\n return chip.ariaLabel ?? chip.title ?? chip.label;\n }\n }\n }\n\n return presets.find((preset) => preset.from === normalizedFrom && preset.to === normalizedTo)\n ?.label;\n}\n\nfunction formatPresetRange({ from, to }: TimeRangePreset) {\n if (!from) return to;\n if (!to || to === \"now\") return from;\n return `${from} -> ${to}`;\n}\n\nfunction normalizeRangeValue(\n kind: TimeRangeKind,\n value: string,\n options: { timeEnabled?: boolean; timeZone?: string } = {},\n) {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n if (trimmed === \"now\" || trimmed.startsWith(\"now\")) return trimmed;\n if (kind === \"time\" && /^[+-]\\d/.test(trimmed)) return `now${trimmed}`;\n if (kind === \"time\" && options.timeEnabled) {\n return encodeDateTimeWithOffset(trimmed, options.timeZone ?? getDefaultTimeZone());\n }\n return trimmed;\n}\n\nfunction formatRangeLabel(kind: TimeRangeKind, from: string, to: string, emptyLabel?: string) {\n const trimmedFrom = from.trim();\n const trimmedTo = to.trim();\n\n if (!trimmedFrom && !trimmedTo) {\n return emptyLabel ?? (kind === \"date\" ? \"Any date\" : \"now-24h\");\n }\n\n if (kind === \"time\") {\n const normalizedFrom = normalizeRangeValue(kind, trimmedFrom);\n const normalizedTo = normalizeRangeValue(kind, trimmedTo || \"now\");\n if (!normalizedFrom) return normalizedTo;\n if (normalizedTo === \"now\") return normalizedFrom;\n return `${normalizedFrom} -> ${normalizedTo}`;\n }\n\n if (trimmedFrom && trimmedTo && trimmedFrom === trimmedTo) {\n return trimmedFrom;\n }\n\n if (!trimmedFrom) return trimmedTo;\n if (!trimmedTo) return trimmedFrom;\n return `${trimmedFrom} -> ${trimmedTo}`;\n}\n\nfunction getDefaultTimeZone() {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone || \"UTC\";\n } catch {\n return \"UTC\";\n }\n}\n\nfunction resolveTimeZones(timeZones: string[] | undefined, selectedTimeZone: string) {\n const zones = timeZones && timeZones.length > 0 ? timeZones : [selectedTimeZone, \"UTC\"];\n return Array.from(new Set([selectedTimeZone, ...zones, \"UTC\"].filter(Boolean)));\n}\n\nfunction encodeDateTimeWithOffset(value: string, timeZone: string) {\n if (!isLocalDateTime(value) || hasExplicitOffset(value)) return value;\n\n const match = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?(?:\\.\\d+)?$/);\n if (!match) return value;\n\n const [, year, month, day, hour, minute, second = \"00\"] = match;\n const localUtcMillis = Date.UTC(\n Number(year),\n Number(month) - 1,\n Number(day),\n Number(hour),\n Number(minute),\n Number(second),\n );\n const offsetMinutes = getTimeZoneOffsetMinutes(timeZone, localUtcMillis);\n return `${year}-${month}-${day}T${hour}:${minute}:${second}${formatOffset(offsetMinutes)}`;\n}\n\nfunction isLocalDateTime(value: string) {\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2})?(?:\\.\\d+)?$/.test(value.trim());\n}\n\nfunction hasExplicitOffset(value: string) {\n return /(?:Z|[+-]\\d{2}:?\\d{2})$/i.test(value.trim());\n}\n\nfunction getTimeZoneOffsetMinutes(timeZone: string, localUtcMillis: number) {\n try {\n const formatter = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false,\n });\n const parts = Object.fromEntries(\n formatter\n .formatToParts(new Date(localUtcMillis))\n .filter((part) => part.type !== \"literal\")\n .map((part) => [part.type, part.value]),\n );\n const zonedUtcMillis = Date.UTC(\n Number(parts.year),\n Number(parts.month) - 1,\n Number(parts.day),\n Number(parts.hour),\n Number(parts.minute),\n Number(parts.second),\n );\n return (zonedUtcMillis - localUtcMillis) / 60_000;\n } catch {\n return 0;\n }\n}\n\nfunction formatOffset(offsetMinutes: number) {\n const sign = offsetMinutes >= 0 ? \"+\" : \"-\";\n const abs = Math.abs(offsetMinutes);\n const hours = Math.floor(abs / 60)\n .toString()\n .padStart(2, \"0\");\n const minutes = Math.floor(abs % 60)\n .toString()\n .padStart(2, \"0\");\n return `${sign}${hours}:${minutes}`;\n}\n"],"names":["useState","useFloatingZIndex","useFloating","autoUpdate","offset","flip","shift","useInteractions","useClick","useDismiss","useRole","useEscapeLayer","useEffect","cn","jsxs","Button","jsx","Icon","UiWatch","UiCalendar","FloatingPortal","FloatingFocusManager","Select","UiArrowRight","useRef","UiClose","Fragment"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeRange.d.ts","sourceRoot":"","sources":["../../src/components/TimeRange.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TimeRange.d.ts","sourceRoot":"","sources":["../../src/components/TimeRange.tsx"],"names":[],"mappings":"AAqBA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAElF,MAAM,MAAM,eAAe,GAAG;IAC5B,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,KAAK,EAAE;QACL,uCAAuC;QACvC,KAAK,EAAE,MAAM,CAAC;QACd,wDAAwD;QACxD,KAAK,EAAE,MAAM,CAAC;QACd,6CAA6C;QAC7C,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,4CAA4C;QAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,gCAAgC;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,wEAAwE;IACxE,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,qDAAqD;IACrD,OAAO,CAAC,EAAE,KAAK,CAAC,eAAe,GAAG,oBAAoB,CAAC,CAAC;IACxD,sEAAsE;IACtE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0CAA0C;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAmIF,wBAAgB,SAAS,CAAC,EACxB,IAAa,EACb,KAAoB,EACpB,IAAS,EACT,EAAO,EACP,OAAO,EACP,OAAO,EACP,QAAQ,EACR,WAAmB,EACnB,QAAQ,EACR,SAAS,EACT,eAAe,EACf,aAAa,EACb,UAAU,EACV,KAAe,EACf,QAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,cAAc,GACf,EAAE,cAAc,2CAyNhB"}
|