@flanksource/clicky-ui 0.2.14 → 0.2.15
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/chat.cjs +20 -0
- package/dist/chat.cjs.map +1 -0
- package/dist/chat.d.ts +2 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +20 -0
- package/dist/chat.js.map +1 -0
- package/dist/components/Combobox.cjs +5 -3
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts +2 -0
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +5 -3
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/DateTimePicker.cjs +3 -1
- package/dist/components/DateTimePicker.cjs.map +1 -1
- package/dist/components/DateTimePicker.d.ts +5 -1
- package/dist/components/DateTimePicker.d.ts.map +1 -1
- package/dist/components/DateTimePicker.js +3 -1
- package/dist/components/DateTimePicker.js.map +1 -1
- package/dist/components/FilterBar.cjs +8 -41
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +0 -2
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +3 -36
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/FormatOptionsDropdown.cjs +2 -18
- package/dist/components/FormatOptionsDropdown.cjs.map +1 -1
- package/dist/components/FormatOptionsDropdown.d.ts +1 -17
- package/dist/components/FormatOptionsDropdown.d.ts.map +1 -1
- package/dist/components/FormatOptionsDropdown.js +1 -17
- package/dist/components/FormatOptionsDropdown.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +128 -12
- 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 +131 -15
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/SecretKeySelector.cjs +0 -1
- package/dist/components/SecretKeySelector.cjs.map +1 -1
- package/dist/components/SecretKeySelector.d.ts +0 -2
- package/dist/components/SecretKeySelector.d.ts.map +1 -1
- package/dist/components/SecretKeySelector.js +1 -2
- package/dist/components/SecretKeySelector.js.map +1 -1
- package/dist/components/TreePickerField.cjs +137 -0
- package/dist/components/TreePickerField.cjs.map +1 -0
- package/dist/components/TreePickerField.d.ts +30 -0
- package/dist/components/TreePickerField.d.ts.map +1 -0
- package/dist/components/TreePickerField.js +137 -0
- package/dist/components/TreePickerField.js.map +1 -0
- package/dist/components/WorkloadPicker.cjs +6 -81
- package/dist/components/WorkloadPicker.cjs.map +1 -1
- package/dist/components/WorkloadPicker.d.ts +1 -20
- package/dist/components/WorkloadPicker.d.ts.map +1 -1
- package/dist/components/WorkloadPicker.js +3 -78
- package/dist/components/WorkloadPicker.js.map +1 -1
- package/dist/components/button-variants.cjs +30 -0
- package/dist/components/button-variants.cjs.map +1 -0
- package/dist/components/button-variants.d.ts +5 -0
- package/dist/components/button-variants.d.ts.map +1 -0
- package/dist/components/button-variants.js +30 -0
- package/dist/components/button-variants.js.map +1 -0
- package/dist/components/button.cjs +11 -82
- package/dist/components/button.cjs.map +1 -1
- package/dist/components/button.d.ts +1 -5
- package/dist/components/button.d.ts.map +1 -1
- package/dist/components/button.js +5 -76
- package/dist/components/button.js.map +1 -1
- package/dist/components/filter-bar-utils.cjs +37 -0
- package/dist/components/filter-bar-utils.cjs.map +1 -0
- package/dist/components/filter-bar-utils.d.ts +4 -0
- package/dist/components/filter-bar-utils.d.ts.map +1 -0
- package/dist/components/filter-bar-utils.js +37 -0
- package/dist/components/filter-bar-utils.js.map +1 -0
- package/dist/components/format-options.cjs +20 -0
- package/dist/components/format-options.cjs.map +1 -0
- package/dist/components/format-options.d.ts +18 -0
- package/dist/components/format-options.d.ts.map +1 -0
- package/dist/components/format-options.js +20 -0
- package/dist/components/format-options.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +13 -17
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts +1 -2
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +3 -7
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-fields.cjs +90 -232
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +51 -6
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +82 -224
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-object.cjs +149 -0
- package/dist/components/json-schema-form-object.cjs.map +1 -0
- package/dist/components/json-schema-form-object.d.ts +10 -0
- package/dist/components/json-schema-form-object.d.ts.map +1 -0
- package/dist/components/json-schema-form-object.js +149 -0
- package/dist/components/json-schema-form-object.js.map +1 -0
- package/dist/components/json-schema-form-preferences.cjs +41 -0
- package/dist/components/json-schema-form-preferences.cjs.map +1 -0
- package/dist/components/json-schema-form-preferences.d.ts +10 -0
- package/dist/components/json-schema-form-preferences.d.ts.map +1 -0
- package/dist/components/json-schema-form-preferences.js +41 -0
- package/dist/components/json-schema-form-preferences.js.map +1 -0
- package/dist/components/json-schema-form-render.cjs +43 -72
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts +5 -33
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +41 -70
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +9 -1
- 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 +9 -1
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +58 -1
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +96 -0
- package/dist/components/json-schema-form-utils.cjs.map +1 -0
- package/dist/components/json-schema-form-utils.d.ts +17 -0
- package/dist/components/json-schema-form-utils.d.ts.map +1 -0
- package/dist/components/json-schema-form-utils.js +96 -0
- package/dist/components/json-schema-form-utils.js.map +1 -0
- package/dist/components/loading.cjs +109 -0
- package/dist/components/loading.cjs.map +1 -0
- package/dist/components/loading.d.ts +27 -0
- package/dist/components/loading.d.ts.map +1 -0
- package/dist/components/loading.js +109 -0
- package/dist/components/loading.js.map +1 -0
- package/dist/components/workload-picker-utils.cjs +88 -0
- package/dist/components/workload-picker-utils.cjs.map +1 -0
- package/dist/components/workload-picker-utils.d.ts +34 -0
- package/dist/components/workload-picker-utils.d.ts.map +1 -0
- package/dist/components/workload-picker-utils.js +88 -0
- package/dist/components/workload-picker-utils.js.map +1 -0
- package/dist/components.cjs +18 -6
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +10 -3
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +16 -4
- package/dist/components.js.map +1 -1
- package/dist/data/Badge.cjs +11 -91
- package/dist/data/Badge.cjs.map +1 -1
- package/dist/data/Badge.d.ts +1 -5
- package/dist/data/Badge.d.ts.map +1 -1
- package/dist/data/Badge.js +11 -91
- package/dist/data/Badge.js.map +1 -1
- package/dist/data/Clicky.cjs +4 -3
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +4 -3
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +161 -156
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +25 -4
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +140 -135
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/FilterPill.cjs +3 -0
- package/dist/data/FilterPill.cjs.map +1 -1
- package/dist/data/FilterPill.d.ts.map +1 -1
- package/dist/data/FilterPill.js +3 -0
- package/dist/data/FilterPill.js.map +1 -1
- package/dist/data/Icon.cjs +7 -7
- package/dist/data/Icon.cjs.map +1 -1
- package/dist/data/Icon.js +7 -7
- package/dist/data/Icon.js.map +1 -1
- package/dist/data/LogDetails.cjs +5 -14
- package/dist/data/LogDetails.cjs.map +1 -1
- package/dist/data/LogDetails.d.ts +8 -4
- package/dist/data/LogDetails.d.ts.map +1 -1
- package/dist/data/LogDetails.js +4 -13
- package/dist/data/LogDetails.js.map +1 -1
- package/dist/data/LogsTable.cjs +6 -165
- package/dist/data/LogsTable.cjs.map +1 -1
- package/dist/data/LogsTable.d.ts +2 -15
- package/dist/data/LogsTable.d.ts.map +1 -1
- package/dist/data/LogsTable.js +6 -165
- package/dist/data/LogsTable.js.map +1 -1
- package/dist/data/TimeseriesPanel.axes.cjs.map +1 -1
- package/dist/data/TimeseriesPanel.axes.js.map +1 -1
- package/dist/data/TreeNode.cjs +13 -7
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +13 -7
- package/dist/data/TreeNode.js.map +1 -1
- package/dist/data/badge-variants.cjs +85 -0
- package/dist/data/badge-variants.cjs.map +1 -0
- package/dist/data/badge-variants.d.ts +6 -0
- package/dist/data/badge-variants.d.ts.map +1 -0
- package/dist/data/badge-variants.js +85 -0
- package/dist/data/badge-variants.js.map +1 -0
- package/dist/data/cache-browser/CacheBrowser.cjs +59 -0
- package/dist/data/cache-browser/CacheBrowser.cjs.map +1 -0
- package/dist/data/cache-browser/CacheBrowser.d.ts +26 -0
- package/dist/data/cache-browser/CacheBrowser.d.ts.map +1 -0
- package/dist/data/cache-browser/CacheBrowser.js +59 -0
- package/dist/data/cache-browser/CacheBrowser.js.map +1 -0
- package/dist/data/cache-browser/CacheDetailPanel.cjs +193 -0
- package/dist/data/cache-browser/CacheDetailPanel.cjs.map +1 -0
- package/dist/data/cache-browser/CacheDetailPanel.d.ts +20 -0
- package/dist/data/cache-browser/CacheDetailPanel.d.ts.map +1 -0
- package/dist/data/cache-browser/CacheDetailPanel.js +193 -0
- package/dist/data/cache-browser/CacheDetailPanel.js.map +1 -0
- package/dist/data/cache-browser/CacheStatsOverview.cjs +126 -0
- package/dist/data/cache-browser/CacheStatsOverview.cjs.map +1 -0
- package/dist/data/cache-browser/CacheStatsOverview.d.ts +17 -0
- package/dist/data/cache-browser/CacheStatsOverview.d.ts.map +1 -0
- package/dist/data/cache-browser/CacheStatsOverview.js +126 -0
- package/dist/data/cache-browser/CacheStatsOverview.js.map +1 -0
- package/dist/data/cache-browser/CacheTree.cjs +189 -0
- package/dist/data/cache-browser/CacheTree.cjs.map +1 -0
- package/dist/data/cache-browser/CacheTree.d.ts +27 -0
- package/dist/data/cache-browser/CacheTree.d.ts.map +1 -0
- package/dist/data/cache-browser/CacheTree.js +189 -0
- package/dist/data/cache-browser/CacheTree.js.map +1 -0
- package/dist/data/cache-browser/CacheValue.cjs +86 -0
- package/dist/data/cache-browser/CacheValue.cjs.map +1 -0
- package/dist/data/cache-browser/CacheValue.d.ts +11 -0
- package/dist/data/cache-browser/CacheValue.d.ts.map +1 -0
- package/dist/data/cache-browser/CacheValue.js +86 -0
- package/dist/data/cache-browser/CacheValue.js.map +1 -0
- package/dist/data/cache-browser/adapter.cjs +52 -0
- package/dist/data/cache-browser/adapter.cjs.map +1 -0
- package/dist/data/cache-browser/adapter.d.ts +48 -0
- package/dist/data/cache-browser/adapter.d.ts.map +1 -0
- package/dist/data/cache-browser/adapter.js +52 -0
- package/dist/data/cache-browser/adapter.js.map +1 -0
- package/dist/data/cache-browser/api.cjs +42 -0
- package/dist/data/cache-browser/api.cjs.map +1 -0
- package/dist/data/cache-browser/api.d.ts +33 -0
- package/dist/data/cache-browser/api.d.ts.map +1 -0
- package/dist/data/cache-browser/api.js +42 -0
- package/dist/data/cache-browser/api.js.map +1 -0
- package/dist/data/cache-browser/index.d.ts +9 -0
- package/dist/data/cache-browser/index.d.ts.map +1 -0
- package/dist/data/cache-browser/types.cjs +7 -0
- package/dist/data/cache-browser/types.cjs.map +1 -0
- package/dist/data/cache-browser/types.d.ts +78 -0
- package/dist/data/cache-browser/types.d.ts.map +1 -0
- package/dist/data/cache-browser/types.js +7 -0
- package/dist/data/cache-browser/types.js.map +1 -0
- package/dist/data/cells/TagList.cjs +4 -101
- package/dist/data/cells/TagList.cjs.map +1 -1
- package/dist/data/cells/TagList.d.ts +1 -49
- package/dist/data/cells/TagList.d.ts.map +1 -1
- package/dist/data/cells/TagList.js +3 -100
- package/dist/data/cells/TagList.js.map +1 -1
- package/dist/data/cells/Timestamp.cjs +3 -192
- package/dist/data/cells/Timestamp.cjs.map +1 -1
- package/dist/data/cells/Timestamp.d.ts +1 -50
- package/dist/data/cells/Timestamp.d.ts.map +1 -1
- package/dist/data/cells/Timestamp.js +2 -191
- package/dist/data/cells/Timestamp.js.map +1 -1
- package/dist/data/cells/tag-utils.cjs +103 -0
- package/dist/data/cells/tag-utils.cjs.map +1 -0
- package/dist/data/cells/tag-utils.d.ts +51 -0
- package/dist/data/cells/tag-utils.d.ts.map +1 -0
- package/dist/data/cells/tag-utils.js +103 -0
- package/dist/data/cells/tag-utils.js.map +1 -0
- package/dist/data/cells/timestamp-format.cjs +193 -0
- package/dist/data/cells/timestamp-format.cjs.map +1 -0
- package/dist/data/cells/timestamp-format.d.ts +51 -0
- package/dist/data/cells/timestamp-format.d.ts.map +1 -0
- package/dist/data/cells/timestamp-format.js +193 -0
- package/dist/data/cells/timestamp-format.js.map +1 -0
- package/dist/data/chat/Chat.cjs +48 -0
- package/dist/data/chat/Chat.cjs.map +1 -0
- package/dist/data/chat/Chat.d.ts +26 -0
- package/dist/data/chat/Chat.d.ts.map +1 -0
- package/dist/data/chat/Chat.fixtures.d.ts +6 -0
- package/dist/data/chat/Chat.fixtures.d.ts.map +1 -0
- package/dist/data/chat/Chat.js +48 -0
- package/dist/data/chat/Chat.js.map +1 -0
- package/dist/data/chat/Conversation.cjs +34 -0
- package/dist/data/chat/Conversation.cjs.map +1 -0
- package/dist/data/chat/Conversation.d.ts +11 -0
- package/dist/data/chat/Conversation.d.ts.map +1 -0
- package/dist/data/chat/Conversation.js +34 -0
- package/dist/data/chat/Conversation.js.map +1 -0
- package/dist/data/chat/Message.cjs +44 -0
- package/dist/data/chat/Message.cjs.map +1 -0
- package/dist/data/chat/Message.d.ts +10 -0
- package/dist/data/chat/Message.d.ts.map +1 -0
- package/dist/data/chat/Message.js +44 -0
- package/dist/data/chat/Message.js.map +1 -0
- package/dist/data/chat/PromptInput.cjs +61 -0
- package/dist/data/chat/PromptInput.cjs.map +1 -0
- package/dist/data/chat/PromptInput.d.ts +16 -0
- package/dist/data/chat/PromptInput.d.ts.map +1 -0
- package/dist/data/chat/PromptInput.js +61 -0
- package/dist/data/chat/PromptInput.js.map +1 -0
- package/dist/data/chat/ToolCall.cjs +92 -0
- package/dist/data/chat/ToolCall.cjs.map +1 -0
- package/dist/data/chat/ToolCall.d.ts +14 -0
- package/dist/data/chat/ToolCall.d.ts.map +1 -0
- package/dist/data/chat/ToolCall.js +92 -0
- package/dist/data/chat/ToolCall.js.map +1 -0
- package/dist/data/chat/clickyOperationsToTools.cjs +73 -0
- package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -0
- package/dist/data/chat/clickyOperationsToTools.d.ts +10 -0
- package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -0
- package/dist/data/chat/clickyOperationsToTools.js +73 -0
- package/dist/data/chat/clickyOperationsToTools.js.map +1 -0
- package/dist/data/chat/index.d.ts +8 -0
- package/dist/data/chat/index.d.ts.map +1 -0
- package/dist/data/chat/types.cjs +18 -0
- package/dist/data/chat/types.cjs.map +1 -0
- package/dist/data/chat/types.d.ts +41 -0
- package/dist/data/chat/types.d.ts.map +1 -0
- package/dist/data/chat/types.js +18 -0
- package/dist/data/chat/types.js.map +1 -0
- package/dist/data/data-table-utils.cjs +55 -0
- package/dist/data/data-table-utils.cjs.map +1 -0
- package/dist/data/data-table-utils.d.ts +24 -0
- package/dist/data/data-table-utils.d.ts.map +1 -0
- package/dist/data/data-table-utils.js +55 -0
- package/dist/data/data-table-utils.js.map +1 -0
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs +2 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.cjs.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +3 -2
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -1
- package/dist/data/diagnostics/GoroutineCard.cjs +3 -22
- package/dist/data/diagnostics/GoroutineCard.cjs.map +1 -1
- package/dist/data/diagnostics/GoroutineCard.d.ts +0 -2
- package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -1
- package/dist/data/diagnostics/GoroutineCard.js +2 -21
- package/dist/data/diagnostics/GoroutineCard.js.map +1 -1
- package/dist/data/diagnostics/ThreadCard.cjs +3 -38
- package/dist/data/diagnostics/ThreadCard.cjs.map +1 -1
- package/dist/data/diagnostics/ThreadCard.d.ts +0 -2
- package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -1
- package/dist/data/diagnostics/ThreadCard.js +2 -37
- package/dist/data/diagnostics/ThreadCard.js.map +1 -1
- package/dist/data/diagnostics/state-styles.cjs +59 -0
- package/dist/data/diagnostics/state-styles.cjs.map +1 -0
- package/dist/data/diagnostics/state-styles.d.ts +5 -0
- package/dist/data/diagnostics/state-styles.d.ts.map +1 -0
- package/dist/data/diagnostics/state-styles.js +59 -0
- package/dist/data/diagnostics/state-styles.js.map +1 -0
- package/dist/data/logs-normalize.cjs +166 -0
- package/dist/data/logs-normalize.cjs.map +1 -0
- package/dist/data/logs-normalize.d.ts +16 -0
- package/dist/data/logs-normalize.d.ts.map +1 -0
- package/dist/data/logs-normalize.js +166 -0
- package/dist/data/logs-normalize.js.map +1 -0
- package/dist/data/task-status.cjs +19 -19
- package/dist/data/task-status.cjs.map +1 -1
- package/dist/data/task-status.js +19 -19
- package/dist/data/task-status.js.map +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +43 -18
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +11 -5
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +30 -5
- package/dist/data.js.map +1 -1
- package/dist/hooks/density-provider.cjs +38 -0
- package/dist/hooks/density-provider.cjs.map +1 -0
- package/dist/hooks/density-provider.d.ts +20 -0
- package/dist/hooks/density-provider.d.ts.map +1 -0
- package/dist/hooks/density-provider.js +38 -0
- package/dist/hooks/density-provider.js.map +1 -0
- package/dist/hooks/theme-provider.cjs +43 -0
- package/dist/hooks/theme-provider.cjs.map +1 -0
- package/dist/hooks/theme-provider.d.ts +9 -0
- package/dist/hooks/theme-provider.d.ts.map +1 -0
- package/dist/hooks/theme-provider.js +43 -0
- package/dist/hooks/theme-provider.js.map +1 -0
- package/dist/hooks/use-density.cjs +8 -37
- package/dist/hooks/use-density.cjs.map +1 -1
- package/dist/hooks/use-density.d.ts +5 -20
- package/dist/hooks/use-density.d.ts.map +1 -1
- package/dist/hooks/use-density.js +9 -38
- package/dist/hooks/use-density.js.map +1 -1
- package/dist/hooks/use-theme.cjs +10 -43
- package/dist/hooks/use-theme.cjs.map +1 -1
- package/dist/hooks/use-theme.d.ts +6 -9
- package/dist/hooks/use-theme.d.ts.map +1 -1
- package/dist/hooks/use-theme.js +11 -44
- package/dist/hooks/use-theme.js.map +1 -1
- package/dist/hooks.cjs +5 -2
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.d.ts +4 -2
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +5 -2
- package/dist/hooks.js.map +1 -1
- package/dist/icons/changeIconAliases.cjs +13 -13
- package/dist/icons/changeIconAliases.cjs.map +1 -1
- package/dist/icons/changeIconAliases.d.ts.map +1 -1
- package/dist/icons/changeIconAliases.js +13 -13
- package/dist/icons/changeIconAliases.js.map +1 -1
- package/dist/index.cjs +71 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +53 -12
- package/dist/index.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +2 -0
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +3 -1
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +2 -0
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/overlay/Modal.cjs +11 -4
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +11 -4
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/modalStack.cjs +35 -0
- package/dist/overlay/modalStack.cjs.map +1 -0
- package/dist/overlay/modalStack.d.ts +13 -0
- package/dist/overlay/modalStack.d.ts.map +1 -0
- package/dist/overlay/modalStack.js +35 -0
- package/dist/overlay/modalStack.js.map +1 -0
- package/dist/rpc/AcceptPicker.cjs +2 -18
- package/dist/rpc/AcceptPicker.cjs.map +1 -1
- package/dist/rpc/AcceptPicker.d.ts +1 -41
- package/dist/rpc/AcceptPicker.d.ts.map +1 -1
- package/dist/rpc/AcceptPicker.js +2 -18
- package/dist/rpc/AcceptPicker.js.map +1 -1
- package/dist/rpc/CommandOutput.cjs +1 -1
- package/dist/rpc/CommandOutput.cjs.map +1 -1
- package/dist/rpc/CommandOutput.js +1 -1
- package/dist/rpc/CommandOutput.js.map +1 -1
- package/dist/rpc/EndpointList.cjs +1 -1
- package/dist/rpc/EndpointList.cjs.map +1 -1
- package/dist/rpc/EndpointList.js +1 -1
- package/dist/rpc/EndpointList.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +23 -41
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +24 -42
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationCommandPage.cjs.map +1 -1
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
- package/dist/rpc/OperationCommandPage.js.map +1 -1
- package/dist/rpc/accept-options.cjs +20 -0
- package/dist/rpc/accept-options.cjs.map +1 -0
- package/dist/rpc/accept-options.d.ts +42 -0
- package/dist/rpc/accept-options.d.ts.map +1 -0
- package/dist/rpc/accept-options.js +20 -0
- package/dist/rpc/accept-options.js.map +1 -0
- package/dist/rpc/classify.cjs +15 -4
- package/dist/rpc/classify.cjs.map +1 -1
- package/dist/rpc/classify.d.ts.map +1 -1
- package/dist/rpc/classify.js +15 -4
- package/dist/rpc/classify.js.map +1 -1
- package/dist/rpc/clickyMetadata.cjs +13 -3
- package/dist/rpc/clickyMetadata.cjs.map +1 -1
- package/dist/rpc/clickyMetadata.d.ts +2 -0
- package/dist/rpc/clickyMetadata.d.ts.map +1 -1
- package/dist/rpc/clickyMetadata.js +14 -4
- package/dist/rpc/clickyMetadata.js.map +1 -1
- package/dist/rpc.cjs +3 -2
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +2 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -1
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +16 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-utils.cjs","sources":["../../../src/data/cells/tag-utils.ts"],"sourcesContent":["import { createContext, useContext, useMemo } from \"react\";\nimport type { FilterMode } from \"../FilterPill\";\n\nexport type TagInput = string | { key: string; value: string } | { name: string; value: string };\n\nexport type NormalizedTag = {\n key?: string;\n value: string;\n display: string;\n token: string;\n};\n\nexport type TagsValue =\n | TagInput[]\n | Record<string, string | number | boolean | null>\n | null\n | undefined;\n\nexport type TagsOptions = {\n /** Number of tags to show inline before using the `+N` overflow popover. */\n maxVisible?: number;\n /** Separator between tag keys and values. Defaults to `=`. */\n separator?: string;\n};\n\nexport function normalizeTags(value: TagsValue, separator = \"=\"): NormalizedTag[] {\n if (value == null) return [];\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeOne(entry, separator)).filter((tag) => tag.value !== \"\");\n }\n\n if (typeof value === \"object\") {\n return Object.entries(value)\n .map(([key, raw]): NormalizedTag | null => {\n if (raw == null) return null;\n const valueStr = String(raw).trim();\n if (!valueStr) return null;\n return {\n key,\n value: valueStr,\n display: `${key}${separator}${valueStr}`,\n token: `${key}${separator}${valueStr}`,\n } satisfies NormalizedTag;\n })\n .filter((tag): tag is NormalizedTag => tag !== null);\n }\n\n return [];\n}\n\nfunction normalizeOne(entry: TagInput, separator: string): NormalizedTag {\n if (typeof entry === \"string\") {\n const trimmed = entry.trim();\n const eq = trimmed.indexOf(\"=\");\n const colon = trimmed.indexOf(\":\");\n const splitAt =\n eq >= 0 && (colon < 0 || eq < colon)\n ? eq\n : colon >= 0 && colon < trimmed.length - 1\n ? colon\n : -1;\n\n if (splitAt > 0) {\n const key = trimmed.slice(0, splitAt);\n const value = trimmed.slice(splitAt + 1);\n return {\n key,\n value,\n display: `${key}${separator}${value}`,\n token: `${key}${separator}${value}`,\n };\n }\n\n return { value: trimmed, display: trimmed, token: trimmed };\n }\n\n const key =\n \"key\" in entry && typeof entry.key === \"string\"\n ? entry.key\n : \"name\" in entry && typeof entry.name === \"string\"\n ? entry.name\n : undefined;\n const value = String(entry.value ?? \"\").trim();\n\n if (key) {\n return {\n key,\n value,\n display: `${key}${separator}${value}`,\n token: `${key}${separator}${value}`,\n };\n }\n return { value, display: value, token: value };\n}\n\nexport function tagFilterTokens(value: TagsValue, separator = \"=\"): string[] {\n return normalizeTags(value, separator).map((tag) => tag.token);\n}\n\n/**\n * Splits a token previously produced by `normalizeTags`/`tagFilterTokens`\n * back into its key and value parts using the same separator. Tokens\n * without a separator (bare tags) return `{ key: \"\", value: token }`.\n */\nexport function splitTagToken(token: string, separator = \"=\"): { key: string; value: string } {\n const idx = token.indexOf(separator);\n if (idx <= 0) return { key: \"\", value: token };\n return {\n key: token.slice(0, idx),\n value: token.slice(idx + separator.length),\n };\n}\n\n// Filter mode mapping (re-using FilterPill's tri-state vocabulary so the wire\n// shape matches DataTable's existing multiFilters state).\nexport type TagFilterMode = Extract<FilterMode, \"include\" | \"exclude\">;\n\nexport type TagActionsContextValue = {\n /** Returns the current mode for a token; \"neutral\" if the user hasn't acted on it. */\n getMode: (token: string) => FilterMode;\n /** Toggle include for this token (off → include → off). */\n toggleInclude: (token: string) => void;\n /** Toggle exclude for this token (off → exclude → off). */\n toggleExclude: (token: string) => void;\n};\n\nconst noop: TagActionsContextValue = {\n getMode: () => \"neutral\",\n toggleInclude: () => {},\n toggleExclude: () => {},\n};\n\nexport const TagActionsContext = createContext<TagActionsContextValue>(noop);\n\nexport function useTagActions(): TagActionsContextValue {\n return useContext(TagActionsContext);\n}\n\n/**\n * Builds a TagActionsContextValue from a flat record-of-modes (the same\n * shape used by FilterBar's multi/nested-multi filters). Useful when\n * connecting DataTable's multiFilters state to the in-cell + / − buttons.\n */\nexport function tagActionsFromRecord(\n value: Record<string, TagFilterMode>,\n onChange: (next: Record<string, TagFilterMode>) => void,\n): TagActionsContextValue {\n return {\n getMode: (token) => value[token] ?? \"neutral\",\n toggleInclude: (token) => {\n const next = { ...value };\n if (next[token] === \"include\") delete next[token];\n else next[token] = \"include\";\n onChange(next);\n },\n toggleExclude: (token) => {\n const next = { ...value };\n if (next[token] === \"exclude\") delete next[token];\n else next[token] = \"exclude\";\n onChange(next);\n },\n };\n}\n\n// Memoizing the context value avoids re-rendering every TagList cell on\n// unrelated state changes.\nexport function useTagActionsValue(\n value: Record<string, TagFilterMode>,\n onChange: (next: Record<string, TagFilterMode>) => void,\n): TagActionsContextValue {\n return useMemo(() => tagActionsFromRecord(value, onChange), [value, onChange]);\n}\n"],"names":["key","value","createContext","useContext","useMemo"],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { FilterMode } from '../FilterPill';
|
|
2
|
+
export type TagInput = string | {
|
|
3
|
+
key: string;
|
|
4
|
+
value: string;
|
|
5
|
+
} | {
|
|
6
|
+
name: string;
|
|
7
|
+
value: string;
|
|
8
|
+
};
|
|
9
|
+
export type NormalizedTag = {
|
|
10
|
+
key?: string;
|
|
11
|
+
value: string;
|
|
12
|
+
display: string;
|
|
13
|
+
token: string;
|
|
14
|
+
};
|
|
15
|
+
export type TagsValue = TagInput[] | Record<string, string | number | boolean | null> | null | undefined;
|
|
16
|
+
export type TagsOptions = {
|
|
17
|
+
/** Number of tags to show inline before using the `+N` overflow popover. */
|
|
18
|
+
maxVisible?: number;
|
|
19
|
+
/** Separator between tag keys and values. Defaults to `=`. */
|
|
20
|
+
separator?: string;
|
|
21
|
+
};
|
|
22
|
+
export declare function normalizeTags(value: TagsValue, separator?: string): NormalizedTag[];
|
|
23
|
+
export declare function tagFilterTokens(value: TagsValue, separator?: string): string[];
|
|
24
|
+
/**
|
|
25
|
+
* Splits a token previously produced by `normalizeTags`/`tagFilterTokens`
|
|
26
|
+
* back into its key and value parts using the same separator. Tokens
|
|
27
|
+
* without a separator (bare tags) return `{ key: "", value: token }`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function splitTagToken(token: string, separator?: string): {
|
|
30
|
+
key: string;
|
|
31
|
+
value: string;
|
|
32
|
+
};
|
|
33
|
+
export type TagFilterMode = Extract<FilterMode, "include" | "exclude">;
|
|
34
|
+
export type TagActionsContextValue = {
|
|
35
|
+
/** Returns the current mode for a token; "neutral" if the user hasn't acted on it. */
|
|
36
|
+
getMode: (token: string) => FilterMode;
|
|
37
|
+
/** Toggle include for this token (off → include → off). */
|
|
38
|
+
toggleInclude: (token: string) => void;
|
|
39
|
+
/** Toggle exclude for this token (off → exclude → off). */
|
|
40
|
+
toggleExclude: (token: string) => void;
|
|
41
|
+
};
|
|
42
|
+
export declare const TagActionsContext: import('react').Context<TagActionsContextValue>;
|
|
43
|
+
export declare function useTagActions(): TagActionsContextValue;
|
|
44
|
+
/**
|
|
45
|
+
* Builds a TagActionsContextValue from a flat record-of-modes (the same
|
|
46
|
+
* shape used by FilterBar's multi/nested-multi filters). Useful when
|
|
47
|
+
* connecting DataTable's multiFilters state to the in-cell + / − buttons.
|
|
48
|
+
*/
|
|
49
|
+
export declare function tagActionsFromRecord(value: Record<string, TagFilterMode>, onChange: (next: Record<string, TagFilterMode>) => void): TagActionsContextValue;
|
|
50
|
+
export declare function useTagActionsValue(value: Record<string, TagFilterMode>, onChange: (next: Record<string, TagFilterMode>) => void): TagActionsContextValue;
|
|
51
|
+
//# sourceMappingURL=tag-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-utils.d.ts","sourceRoot":"","sources":["../../../src/data/cells/tag-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GACjB,QAAQ,EAAE,GACV,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAChD,IAAI,GACJ,SAAS,CAAC;AAEd,MAAM,MAAM,WAAW,GAAG;IACxB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,SAAM,GAAG,aAAa,EAAE,CAwBhF;AA+CD,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,SAAM,GAAG,MAAM,EAAE,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAO5F;AAID,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG;IACnC,sFAAsF;IACtF,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC;IACvC,2DAA2D;IAC3D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,2DAA2D;IAC3D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAQF,eAAO,MAAM,iBAAiB,iDAA8C,CAAC;AAE7E,wBAAgB,aAAa,IAAI,sBAAsB,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,IAAI,GACtD,sBAAsB,CAgBxB;AAID,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,IAAI,GACtD,sBAAsB,CAExB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { useContext, useMemo, createContext } from "react";
|
|
2
|
+
function normalizeTags(value, separator = "=") {
|
|
3
|
+
if (value == null) return [];
|
|
4
|
+
if (Array.isArray(value)) {
|
|
5
|
+
return value.map((entry) => normalizeOne(entry, separator)).filter((tag) => tag.value !== "");
|
|
6
|
+
}
|
|
7
|
+
if (typeof value === "object") {
|
|
8
|
+
return Object.entries(value).map(([key, raw]) => {
|
|
9
|
+
if (raw == null) return null;
|
|
10
|
+
const valueStr = String(raw).trim();
|
|
11
|
+
if (!valueStr) return null;
|
|
12
|
+
return {
|
|
13
|
+
key,
|
|
14
|
+
value: valueStr,
|
|
15
|
+
display: `${key}${separator}${valueStr}`,
|
|
16
|
+
token: `${key}${separator}${valueStr}`
|
|
17
|
+
};
|
|
18
|
+
}).filter((tag) => tag !== null);
|
|
19
|
+
}
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
function normalizeOne(entry, separator) {
|
|
23
|
+
if (typeof entry === "string") {
|
|
24
|
+
const trimmed = entry.trim();
|
|
25
|
+
const eq = trimmed.indexOf("=");
|
|
26
|
+
const colon = trimmed.indexOf(":");
|
|
27
|
+
const splitAt = eq >= 0 && (colon < 0 || eq < colon) ? eq : colon >= 0 && colon < trimmed.length - 1 ? colon : -1;
|
|
28
|
+
if (splitAt > 0) {
|
|
29
|
+
const key2 = trimmed.slice(0, splitAt);
|
|
30
|
+
const value2 = trimmed.slice(splitAt + 1);
|
|
31
|
+
return {
|
|
32
|
+
key: key2,
|
|
33
|
+
value: value2,
|
|
34
|
+
display: `${key2}${separator}${value2}`,
|
|
35
|
+
token: `${key2}${separator}${value2}`
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return { value: trimmed, display: trimmed, token: trimmed };
|
|
39
|
+
}
|
|
40
|
+
const key = "key" in entry && typeof entry.key === "string" ? entry.key : "name" in entry && typeof entry.name === "string" ? entry.name : void 0;
|
|
41
|
+
const value = String(entry.value ?? "").trim();
|
|
42
|
+
if (key) {
|
|
43
|
+
return {
|
|
44
|
+
key,
|
|
45
|
+
value,
|
|
46
|
+
display: `${key}${separator}${value}`,
|
|
47
|
+
token: `${key}${separator}${value}`
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return { value, display: value, token: value };
|
|
51
|
+
}
|
|
52
|
+
function tagFilterTokens(value, separator = "=") {
|
|
53
|
+
return normalizeTags(value, separator).map((tag) => tag.token);
|
|
54
|
+
}
|
|
55
|
+
function splitTagToken(token, separator = "=") {
|
|
56
|
+
const idx = token.indexOf(separator);
|
|
57
|
+
if (idx <= 0) return { key: "", value: token };
|
|
58
|
+
return {
|
|
59
|
+
key: token.slice(0, idx),
|
|
60
|
+
value: token.slice(idx + separator.length)
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const noop = {
|
|
64
|
+
getMode: () => "neutral",
|
|
65
|
+
toggleInclude: () => {
|
|
66
|
+
},
|
|
67
|
+
toggleExclude: () => {
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const TagActionsContext = createContext(noop);
|
|
71
|
+
function useTagActions() {
|
|
72
|
+
return useContext(TagActionsContext);
|
|
73
|
+
}
|
|
74
|
+
function tagActionsFromRecord(value, onChange) {
|
|
75
|
+
return {
|
|
76
|
+
getMode: (token) => value[token] ?? "neutral",
|
|
77
|
+
toggleInclude: (token) => {
|
|
78
|
+
const next = { ...value };
|
|
79
|
+
if (next[token] === "include") delete next[token];
|
|
80
|
+
else next[token] = "include";
|
|
81
|
+
onChange(next);
|
|
82
|
+
},
|
|
83
|
+
toggleExclude: (token) => {
|
|
84
|
+
const next = { ...value };
|
|
85
|
+
if (next[token] === "exclude") delete next[token];
|
|
86
|
+
else next[token] = "exclude";
|
|
87
|
+
onChange(next);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function useTagActionsValue(value, onChange) {
|
|
92
|
+
return useMemo(() => tagActionsFromRecord(value, onChange), [value, onChange]);
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
TagActionsContext,
|
|
96
|
+
normalizeTags,
|
|
97
|
+
splitTagToken,
|
|
98
|
+
tagActionsFromRecord,
|
|
99
|
+
tagFilterTokens,
|
|
100
|
+
useTagActions,
|
|
101
|
+
useTagActionsValue
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=tag-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tag-utils.js","sources":["../../../src/data/cells/tag-utils.ts"],"sourcesContent":["import { createContext, useContext, useMemo } from \"react\";\nimport type { FilterMode } from \"../FilterPill\";\n\nexport type TagInput = string | { key: string; value: string } | { name: string; value: string };\n\nexport type NormalizedTag = {\n key?: string;\n value: string;\n display: string;\n token: string;\n};\n\nexport type TagsValue =\n | TagInput[]\n | Record<string, string | number | boolean | null>\n | null\n | undefined;\n\nexport type TagsOptions = {\n /** Number of tags to show inline before using the `+N` overflow popover. */\n maxVisible?: number;\n /** Separator between tag keys and values. Defaults to `=`. */\n separator?: string;\n};\n\nexport function normalizeTags(value: TagsValue, separator = \"=\"): NormalizedTag[] {\n if (value == null) return [];\n\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeOne(entry, separator)).filter((tag) => tag.value !== \"\");\n }\n\n if (typeof value === \"object\") {\n return Object.entries(value)\n .map(([key, raw]): NormalizedTag | null => {\n if (raw == null) return null;\n const valueStr = String(raw).trim();\n if (!valueStr) return null;\n return {\n key,\n value: valueStr,\n display: `${key}${separator}${valueStr}`,\n token: `${key}${separator}${valueStr}`,\n } satisfies NormalizedTag;\n })\n .filter((tag): tag is NormalizedTag => tag !== null);\n }\n\n return [];\n}\n\nfunction normalizeOne(entry: TagInput, separator: string): NormalizedTag {\n if (typeof entry === \"string\") {\n const trimmed = entry.trim();\n const eq = trimmed.indexOf(\"=\");\n const colon = trimmed.indexOf(\":\");\n const splitAt =\n eq >= 0 && (colon < 0 || eq < colon)\n ? eq\n : colon >= 0 && colon < trimmed.length - 1\n ? colon\n : -1;\n\n if (splitAt > 0) {\n const key = trimmed.slice(0, splitAt);\n const value = trimmed.slice(splitAt + 1);\n return {\n key,\n value,\n display: `${key}${separator}${value}`,\n token: `${key}${separator}${value}`,\n };\n }\n\n return { value: trimmed, display: trimmed, token: trimmed };\n }\n\n const key =\n \"key\" in entry && typeof entry.key === \"string\"\n ? entry.key\n : \"name\" in entry && typeof entry.name === \"string\"\n ? entry.name\n : undefined;\n const value = String(entry.value ?? \"\").trim();\n\n if (key) {\n return {\n key,\n value,\n display: `${key}${separator}${value}`,\n token: `${key}${separator}${value}`,\n };\n }\n return { value, display: value, token: value };\n}\n\nexport function tagFilterTokens(value: TagsValue, separator = \"=\"): string[] {\n return normalizeTags(value, separator).map((tag) => tag.token);\n}\n\n/**\n * Splits a token previously produced by `normalizeTags`/`tagFilterTokens`\n * back into its key and value parts using the same separator. Tokens\n * without a separator (bare tags) return `{ key: \"\", value: token }`.\n */\nexport function splitTagToken(token: string, separator = \"=\"): { key: string; value: string } {\n const idx = token.indexOf(separator);\n if (idx <= 0) return { key: \"\", value: token };\n return {\n key: token.slice(0, idx),\n value: token.slice(idx + separator.length),\n };\n}\n\n// Filter mode mapping (re-using FilterPill's tri-state vocabulary so the wire\n// shape matches DataTable's existing multiFilters state).\nexport type TagFilterMode = Extract<FilterMode, \"include\" | \"exclude\">;\n\nexport type TagActionsContextValue = {\n /** Returns the current mode for a token; \"neutral\" if the user hasn't acted on it. */\n getMode: (token: string) => FilterMode;\n /** Toggle include for this token (off → include → off). */\n toggleInclude: (token: string) => void;\n /** Toggle exclude for this token (off → exclude → off). */\n toggleExclude: (token: string) => void;\n};\n\nconst noop: TagActionsContextValue = {\n getMode: () => \"neutral\",\n toggleInclude: () => {},\n toggleExclude: () => {},\n};\n\nexport const TagActionsContext = createContext<TagActionsContextValue>(noop);\n\nexport function useTagActions(): TagActionsContextValue {\n return useContext(TagActionsContext);\n}\n\n/**\n * Builds a TagActionsContextValue from a flat record-of-modes (the same\n * shape used by FilterBar's multi/nested-multi filters). Useful when\n * connecting DataTable's multiFilters state to the in-cell + / − buttons.\n */\nexport function tagActionsFromRecord(\n value: Record<string, TagFilterMode>,\n onChange: (next: Record<string, TagFilterMode>) => void,\n): TagActionsContextValue {\n return {\n getMode: (token) => value[token] ?? \"neutral\",\n toggleInclude: (token) => {\n const next = { ...value };\n if (next[token] === \"include\") delete next[token];\n else next[token] = \"include\";\n onChange(next);\n },\n toggleExclude: (token) => {\n const next = { ...value };\n if (next[token] === \"exclude\") delete next[token];\n else next[token] = \"exclude\";\n onChange(next);\n },\n };\n}\n\n// Memoizing the context value avoids re-rendering every TagList cell on\n// unrelated state changes.\nexport function useTagActionsValue(\n value: Record<string, TagFilterMode>,\n onChange: (next: Record<string, TagFilterMode>) => void,\n): TagActionsContextValue {\n return useMemo(() => tagActionsFromRecord(value, onChange), [value, onChange]);\n}\n"],"names":["key","value"],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
function parseTimestamp(value) {
|
|
4
|
+
if (value == null) return null;
|
|
5
|
+
if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;
|
|
6
|
+
if (typeof value === "number") {
|
|
7
|
+
const ms = value < 1e12 ? value * 1e3 : value;
|
|
8
|
+
const d = new Date(ms);
|
|
9
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
10
|
+
}
|
|
11
|
+
if (typeof value === "string") {
|
|
12
|
+
const trimmed = value.trim();
|
|
13
|
+
if (!trimmed) return null;
|
|
14
|
+
const d = new Date(trimmed);
|
|
15
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const UNIT_MS = {
|
|
20
|
+
s: 1e3,
|
|
21
|
+
m: 6e4,
|
|
22
|
+
h: 36e5,
|
|
23
|
+
d: 864e5,
|
|
24
|
+
w: 6048e5
|
|
25
|
+
};
|
|
26
|
+
const RELATIVE_PATTERN = /^now\s*([+-])\s*(\d+)\s*([smhdwMqy])$/;
|
|
27
|
+
const ANCHORED_PATTERN = /^now\/([wMqy])(?:\s*([+-])\s*(\d+)\s*([wMqy]))?$/;
|
|
28
|
+
function resolveDateMath(value, now = /* @__PURE__ */ new Date()) {
|
|
29
|
+
if (value == null) return null;
|
|
30
|
+
if (typeof value === "string") {
|
|
31
|
+
const trimmed = value.trim();
|
|
32
|
+
if (!trimmed) return null;
|
|
33
|
+
if (trimmed.toLowerCase() === "now") return new Date(now.getTime());
|
|
34
|
+
const anchoredMatch = trimmed.match(ANCHORED_PATTERN);
|
|
35
|
+
if (anchoredMatch) {
|
|
36
|
+
const [, anchor, sign, amount, unit] = anchoredMatch;
|
|
37
|
+
let anchored = startOfPeriod(now, anchor);
|
|
38
|
+
if (sign && amount && unit) {
|
|
39
|
+
anchored = addPeriod(anchored, unit, Number(amount) * (sign === "-" ? -1 : 1));
|
|
40
|
+
}
|
|
41
|
+
return anchored;
|
|
42
|
+
}
|
|
43
|
+
const match = trimmed.match(RELATIVE_PATTERN);
|
|
44
|
+
if (match) {
|
|
45
|
+
const [, sign, amount, unit] = match;
|
|
46
|
+
const calendarUnit = unit;
|
|
47
|
+
if (isCalendarUnit(calendarUnit)) {
|
|
48
|
+
return addPeriod(now, calendarUnit, Number(amount) * (sign === "-" ? -1 : 1));
|
|
49
|
+
}
|
|
50
|
+
const unitMs = UNIT_MS[calendarUnit.toLowerCase()];
|
|
51
|
+
if (!unitMs) return null;
|
|
52
|
+
const delta = Number(amount) * unitMs * (sign === "-" ? -1 : 1);
|
|
53
|
+
return new Date(now.getTime() + delta);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return parseTimestamp(value);
|
|
57
|
+
}
|
|
58
|
+
function isCalendarUnit(unit) {
|
|
59
|
+
return unit === "M" || unit === "q" || unit === "y";
|
|
60
|
+
}
|
|
61
|
+
function startOfPeriod(date, unit) {
|
|
62
|
+
const year = date.getUTCFullYear();
|
|
63
|
+
const month = date.getUTCMonth();
|
|
64
|
+
const day = date.getUTCDate();
|
|
65
|
+
if (unit === "w") {
|
|
66
|
+
const start = new Date(Date.UTC(year, month, day));
|
|
67
|
+
const dayOfWeek = start.getUTCDay();
|
|
68
|
+
const daysSinceMonday = (dayOfWeek + 6) % 7;
|
|
69
|
+
start.setUTCDate(start.getUTCDate() - daysSinceMonday);
|
|
70
|
+
return start;
|
|
71
|
+
}
|
|
72
|
+
if (unit === "M") return new Date(Date.UTC(year, month, 1));
|
|
73
|
+
if (unit === "q") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));
|
|
74
|
+
if (unit === "y") return new Date(Date.UTC(year, 0, 1));
|
|
75
|
+
return new Date(date.getTime());
|
|
76
|
+
}
|
|
77
|
+
function addPeriod(date, unit, amount) {
|
|
78
|
+
const next = new Date(date.getTime());
|
|
79
|
+
if (unit === "w") {
|
|
80
|
+
next.setUTCDate(next.getUTCDate() + amount * 7);
|
|
81
|
+
} else if (unit === "M") {
|
|
82
|
+
next.setUTCMonth(next.getUTCMonth() + amount);
|
|
83
|
+
} else if (unit === "q") {
|
|
84
|
+
next.setUTCMonth(next.getUTCMonth() + amount * 3);
|
|
85
|
+
} else if (unit === "y") {
|
|
86
|
+
next.setUTCFullYear(next.getUTCFullYear() + amount);
|
|
87
|
+
} else {
|
|
88
|
+
const unitMs = UNIT_MS[unit.toLowerCase()];
|
|
89
|
+
if (unitMs) next.setTime(next.getTime() + amount * unitMs);
|
|
90
|
+
}
|
|
91
|
+
return next;
|
|
92
|
+
}
|
|
93
|
+
const MS_PER_MINUTE = 6e4;
|
|
94
|
+
const MS_PER_DAY = 864e5;
|
|
95
|
+
function chooseTimestampFormat(values) {
|
|
96
|
+
if (values.length === 0) return "iso";
|
|
97
|
+
let min = Infinity;
|
|
98
|
+
let max = -Infinity;
|
|
99
|
+
for (const d of values) {
|
|
100
|
+
const t = d.getTime();
|
|
101
|
+
if (t < min) min = t;
|
|
102
|
+
if (t > max) max = t;
|
|
103
|
+
}
|
|
104
|
+
const span = max - min;
|
|
105
|
+
if (span <= MS_PER_MINUTE) return "relative";
|
|
106
|
+
const minDate = new Date(min);
|
|
107
|
+
const maxDate = new Date(max);
|
|
108
|
+
if (minDate.getFullYear() === maxDate.getFullYear() && minDate.getMonth() === maxDate.getMonth() && minDate.getDate() === maxDate.getDate()) {
|
|
109
|
+
return "time";
|
|
110
|
+
}
|
|
111
|
+
if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {
|
|
112
|
+
return "short";
|
|
113
|
+
}
|
|
114
|
+
return "iso";
|
|
115
|
+
}
|
|
116
|
+
function formatTimestamp(date, format, now = /* @__PURE__ */ new Date()) {
|
|
117
|
+
switch (format) {
|
|
118
|
+
case "relative":
|
|
119
|
+
return formatRelativeTime(date, now);
|
|
120
|
+
case "time":
|
|
121
|
+
return date.toLocaleTimeString(void 0, {
|
|
122
|
+
hour: "2-digit",
|
|
123
|
+
minute: "2-digit",
|
|
124
|
+
second: "2-digit"
|
|
125
|
+
});
|
|
126
|
+
case "short":
|
|
127
|
+
return date.toLocaleString(void 0, {
|
|
128
|
+
month: "short",
|
|
129
|
+
day: "numeric",
|
|
130
|
+
hour: "2-digit",
|
|
131
|
+
minute: "2-digit"
|
|
132
|
+
});
|
|
133
|
+
case "iso":
|
|
134
|
+
default:
|
|
135
|
+
return formatIso(date);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function formatIso(date) {
|
|
139
|
+
const yyyy = date.getFullYear();
|
|
140
|
+
const mm = String(date.getMonth() + 1).padStart(2, "0");
|
|
141
|
+
const dd = String(date.getDate()).padStart(2, "0");
|
|
142
|
+
const hh = String(date.getHours()).padStart(2, "0");
|
|
143
|
+
const min = String(date.getMinutes()).padStart(2, "0");
|
|
144
|
+
return `${yyyy}-${mm}-${dd} ${hh}:${min}`;
|
|
145
|
+
}
|
|
146
|
+
function formatRelativeTime(date, now = /* @__PURE__ */ new Date()) {
|
|
147
|
+
const diffMs = now.getTime() - date.getTime();
|
|
148
|
+
const future = diffMs < 0;
|
|
149
|
+
const abs = Math.abs(diffMs);
|
|
150
|
+
const sec = Math.round(abs / 1e3);
|
|
151
|
+
let value;
|
|
152
|
+
if (sec < 1) value = "just now";
|
|
153
|
+
else if (sec < 60) value = `${sec}s`;
|
|
154
|
+
else if (sec < 3600) value = `${Math.round(sec / 60)}m`;
|
|
155
|
+
else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;
|
|
156
|
+
else value = `${Math.round(sec / 86400)}d`;
|
|
157
|
+
if (value === "just now") return value;
|
|
158
|
+
return future ? `in ${value}` : `${value} ago`;
|
|
159
|
+
}
|
|
160
|
+
function formatDateTimeRelative(value, now = /* @__PURE__ */ new Date()) {
|
|
161
|
+
const parsed = parseTimestamp(value);
|
|
162
|
+
if (!parsed) return typeof value === "string" ? value : "";
|
|
163
|
+
const absolute = parsed.toLocaleString(void 0, {
|
|
164
|
+
year: "numeric",
|
|
165
|
+
month: "short",
|
|
166
|
+
day: "numeric",
|
|
167
|
+
hour: "2-digit",
|
|
168
|
+
minute: "2-digit"
|
|
169
|
+
});
|
|
170
|
+
const relative = formatRelativeTime(parsed, now);
|
|
171
|
+
return relative === "just now" ? absolute : `${absolute} (${relative})`;
|
|
172
|
+
}
|
|
173
|
+
function modeToFormat(mode, dataFormat) {
|
|
174
|
+
switch (mode) {
|
|
175
|
+
case "absolute":
|
|
176
|
+
return "iso";
|
|
177
|
+
case "relative":
|
|
178
|
+
return "relative";
|
|
179
|
+
case "time":
|
|
180
|
+
return "time";
|
|
181
|
+
case "auto":
|
|
182
|
+
default:
|
|
183
|
+
return dataFormat;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.chooseTimestampFormat = chooseTimestampFormat;
|
|
187
|
+
exports.formatDateTimeRelative = formatDateTimeRelative;
|
|
188
|
+
exports.formatRelativeTime = formatRelativeTime;
|
|
189
|
+
exports.formatTimestamp = formatTimestamp;
|
|
190
|
+
exports.modeToFormat = modeToFormat;
|
|
191
|
+
exports.parseTimestamp = parseTimestamp;
|
|
192
|
+
exports.resolveDateMath = resolveDateMath;
|
|
193
|
+
//# sourceMappingURL=timestamp-format.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamp-format.cjs","sources":["../../../src/data/cells/timestamp-format.ts"],"sourcesContent":["import type { TimeRangePresetGroup } from \"../../components/TimeRange\";\n\nexport type TimestampMode = \"auto\" | \"absolute\" | \"relative\" | \"time\";\n\nexport type TimestampFormat = \"relative\" | \"time\" | \"short\" | \"iso\";\n\nexport type TimestampOptions = {\n /** Rendering mode for timestamp cells. */\n mode?: TimestampMode;\n /** Show the full timestamp in a tooltip even for absolute/ISO formats. */\n alwaysShowFullOnHover?: boolean;\n /**\n * When the column is on a DataTable with `autoFilter`, DataTable mounts a\n * \"Time range\" picker (matching the trace UI) and filters rows whose\n * timestamp falls outside the selected range. Set `false` to suppress.\n */\n autoRangeFilter?: boolean;\n /** Override the trace-style preset list (\"Last 15 minutes\", etc.). */\n rangePresets?: Array<{ label: string; from: string; to: string } | TimeRangePresetGroup>;\n /** Enable absolute date+time input and timezone selection for range filters. */\n timeEnabled?: boolean;\n /** Default timezone used when encoding absolute date+time range values. */\n timeZone?: string;\n /** Selectable timezones shown when `timeEnabled` is true. */\n timeZones?: string[];\n /**\n * Default range applied on first render. Either side may use date-math\n * (`now-24h`, `now`) or any value parseable by `parseTimestamp`.\n */\n defaultRange?: { from?: string; to?: string };\n};\n\nexport function parseTimestamp(value: unknown): Date | null {\n if (value == null) return null;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n\n if (typeof value === \"number\") {\n const ms = value < 1e12 ? value * 1000 : value;\n const d = new Date(ms);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const d = new Date(trimmed);\n return Number.isNaN(d.getTime()) ? null : d;\n }\n\n return null;\n}\n\nconst UNIT_MS: Record<string, number> = {\n s: 1_000,\n m: 60_000,\n h: 3_600_000,\n d: 86_400_000,\n w: 604_800_000,\n};\n\nconst RELATIVE_PATTERN = /^now\\s*([+-])\\s*(\\d+)\\s*([smhdwMqy])$/;\nconst ANCHORED_PATTERN = /^now\\/([wMqy])(?:\\s*([+-])\\s*(\\d+)\\s*([wMqy]))?$/;\n\n/**\n * Resolves date-math strings to an absolute Date. Recognised forms:\n * - \"now\"\n * - \"now-15m\", \"now-1h\", \"now+30s\", \"now-7d\", \"now-2w\" (units: s/m/h/d/w/M/q/y)\n * - \"now/w\", \"now/M\", \"now/q\", \"now/y\" with optional calendar offsets\n * - any value parseable by `parseTimestamp` (ISO, epoch ms/s, Date)\n * Returns null for unparseable input.\n */\nexport function resolveDateMath(value: unknown, now: Date = new Date()): Date | null {\n if (value == null) return null;\n\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return null;\n\n if (trimmed.toLowerCase() === \"now\") return new Date(now.getTime());\n\n const anchoredMatch = trimmed.match(ANCHORED_PATTERN);\n if (anchoredMatch) {\n const [, anchor, sign, amount, unit] = anchoredMatch;\n let anchored = startOfPeriod(now, anchor!);\n if (sign && amount && unit) {\n anchored = addPeriod(anchored, unit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n return anchored;\n }\n\n const match = trimmed.match(RELATIVE_PATTERN);\n if (match) {\n const [, sign, amount, unit] = match;\n const calendarUnit = unit!;\n if (isCalendarUnit(calendarUnit)) {\n return addPeriod(now, calendarUnit, Number(amount) * (sign === \"-\" ? -1 : 1));\n }\n const unitMs = UNIT_MS[calendarUnit.toLowerCase()];\n if (!unitMs) return null;\n const delta = Number(amount) * unitMs * (sign === \"-\" ? -1 : 1);\n return new Date(now.getTime() + delta);\n }\n }\n\n return parseTimestamp(value);\n}\n\nfunction isCalendarUnit(unit: string) {\n return unit === \"M\" || unit === \"q\" || unit === \"y\";\n}\n\nfunction startOfPeriod(date: Date, unit: string) {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const day = date.getUTCDate();\n\n if (unit === \"w\") {\n const start = new Date(Date.UTC(year, month, day));\n const dayOfWeek = start.getUTCDay();\n const daysSinceMonday = (dayOfWeek + 6) % 7;\n start.setUTCDate(start.getUTCDate() - daysSinceMonday);\n return start;\n }\n if (unit === \"M\") return new Date(Date.UTC(year, month, 1));\n if (unit === \"q\") return new Date(Date.UTC(year, Math.floor(month / 3) * 3, 1));\n if (unit === \"y\") return new Date(Date.UTC(year, 0, 1));\n return new Date(date.getTime());\n}\n\nfunction addPeriod(date: Date, unit: string, amount: number) {\n const next = new Date(date.getTime());\n if (unit === \"w\") {\n next.setUTCDate(next.getUTCDate() + amount * 7);\n } else if (unit === \"M\") {\n next.setUTCMonth(next.getUTCMonth() + amount);\n } else if (unit === \"q\") {\n next.setUTCMonth(next.getUTCMonth() + amount * 3);\n } else if (unit === \"y\") {\n next.setUTCFullYear(next.getUTCFullYear() + amount);\n } else {\n const unitMs = UNIT_MS[unit.toLowerCase()];\n if (unitMs) next.setTime(next.getTime() + amount * unitMs);\n }\n return next;\n}\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_DAY = 86_400_000;\n\nexport function chooseTimestampFormat(values: Date[]): TimestampFormat {\n if (values.length === 0) return \"iso\";\n\n let min = Infinity;\n let max = -Infinity;\n for (const d of values) {\n const t = d.getTime();\n if (t < min) min = t;\n if (t > max) max = t;\n }\n const span = max - min;\n\n if (span <= MS_PER_MINUTE) return \"relative\";\n\n const minDate = new Date(min);\n const maxDate = new Date(max);\n\n if (\n minDate.getFullYear() === maxDate.getFullYear() &&\n minDate.getMonth() === maxDate.getMonth() &&\n minDate.getDate() === maxDate.getDate()\n ) {\n return \"time\";\n }\n\n if (minDate.getFullYear() === maxDate.getFullYear() && span <= MS_PER_DAY * 365) {\n return \"short\";\n }\n\n return \"iso\";\n}\n\nexport function formatTimestamp(\n date: Date,\n format: TimestampFormat,\n now: Date = new Date(),\n): string {\n switch (format) {\n case \"relative\":\n return formatRelativeTime(date, now);\n case \"time\":\n return date.toLocaleTimeString(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n case \"short\":\n return date.toLocaleString(undefined, {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n case \"iso\":\n default:\n return formatIso(date);\n }\n}\n\nfunction formatIso(date: Date): string {\n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, \"0\");\n const dd = String(date.getDate()).padStart(2, \"0\");\n const hh = String(date.getHours()).padStart(2, \"0\");\n const min = String(date.getMinutes()).padStart(2, \"0\");\n return `${yyyy}-${mm}-${dd} ${hh}:${min}`;\n}\n\n// formatRelativeTime renders a compact \"30s ago\" / \"in 5m\" / \"just now\" string.\nexport function formatRelativeTime(date: Date, now: Date = new Date()): string {\n const diffMs = now.getTime() - date.getTime();\n const future = diffMs < 0;\n const abs = Math.abs(diffMs);\n const sec = Math.round(abs / 1000);\n\n let value: string;\n if (sec < 1) value = \"just now\";\n else if (sec < 60) value = `${sec}s`;\n else if (sec < 3600) value = `${Math.round(sec / 60)}m`;\n else if (sec < 86400) value = `${Math.round(sec / 3600)}h`;\n else value = `${Math.round(sec / 86400)}d`;\n\n if (value === \"just now\") return value;\n return future ? `in ${value}` : `${value} ago`;\n}\n\n// formatDateTimeRelative renders a value as an absolute locale date+time plus a\n// parenthesised relative hint, e.g. \"Apr 15, 2026, 12:00 PM (2h ago)\". It is the\n// shared \"locale + relative\" presentation used for date-typed values across the\n// form, filter, and combobox surfaces. Unparseable strings pass through\n// unchanged (so a template token or freeform value is preserved); nullish input\n// yields an empty string. The hint is dropped when the value reads \"just now\".\nexport function formatDateTimeRelative(value: unknown, now: Date = new Date()): string {\n const parsed = parseTimestamp(value);\n if (!parsed) return typeof value === \"string\" ? value : \"\";\n const absolute = parsed.toLocaleString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n const relative = formatRelativeTime(parsed, now);\n return relative === \"just now\" ? absolute : `${absolute} (${relative})`;\n}\n\nexport function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat {\n switch (mode) {\n case \"absolute\":\n return \"iso\";\n case \"relative\":\n return \"relative\";\n case \"time\":\n return \"time\";\n case \"auto\":\n default:\n return dataFormat;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { TimeRangePresetGroup } from '../../components/TimeRange';
|
|
2
|
+
export type TimestampMode = "auto" | "absolute" | "relative" | "time";
|
|
3
|
+
export type TimestampFormat = "relative" | "time" | "short" | "iso";
|
|
4
|
+
export type TimestampOptions = {
|
|
5
|
+
/** Rendering mode for timestamp cells. */
|
|
6
|
+
mode?: TimestampMode;
|
|
7
|
+
/** Show the full timestamp in a tooltip even for absolute/ISO formats. */
|
|
8
|
+
alwaysShowFullOnHover?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* When the column is on a DataTable with `autoFilter`, DataTable mounts a
|
|
11
|
+
* "Time range" picker (matching the trace UI) and filters rows whose
|
|
12
|
+
* timestamp falls outside the selected range. Set `false` to suppress.
|
|
13
|
+
*/
|
|
14
|
+
autoRangeFilter?: boolean;
|
|
15
|
+
/** Override the trace-style preset list ("Last 15 minutes", etc.). */
|
|
16
|
+
rangePresets?: Array<{
|
|
17
|
+
label: string;
|
|
18
|
+
from: string;
|
|
19
|
+
to: string;
|
|
20
|
+
} | TimeRangePresetGroup>;
|
|
21
|
+
/** Enable absolute date+time input and timezone selection for range filters. */
|
|
22
|
+
timeEnabled?: boolean;
|
|
23
|
+
/** Default timezone used when encoding absolute date+time range values. */
|
|
24
|
+
timeZone?: string;
|
|
25
|
+
/** Selectable timezones shown when `timeEnabled` is true. */
|
|
26
|
+
timeZones?: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Default range applied on first render. Either side may use date-math
|
|
29
|
+
* (`now-24h`, `now`) or any value parseable by `parseTimestamp`.
|
|
30
|
+
*/
|
|
31
|
+
defaultRange?: {
|
|
32
|
+
from?: string;
|
|
33
|
+
to?: string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export declare function parseTimestamp(value: unknown): Date | null;
|
|
37
|
+
/**
|
|
38
|
+
* Resolves date-math strings to an absolute Date. Recognised forms:
|
|
39
|
+
* - "now"
|
|
40
|
+
* - "now-15m", "now-1h", "now+30s", "now-7d", "now-2w" (units: s/m/h/d/w/M/q/y)
|
|
41
|
+
* - "now/w", "now/M", "now/q", "now/y" with optional calendar offsets
|
|
42
|
+
* - any value parseable by `parseTimestamp` (ISO, epoch ms/s, Date)
|
|
43
|
+
* Returns null for unparseable input.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveDateMath(value: unknown, now?: Date): Date | null;
|
|
46
|
+
export declare function chooseTimestampFormat(values: Date[]): TimestampFormat;
|
|
47
|
+
export declare function formatTimestamp(date: Date, format: TimestampFormat, now?: Date): string;
|
|
48
|
+
export declare function formatRelativeTime(date: Date, now?: Date): string;
|
|
49
|
+
export declare function formatDateTimeRelative(value: unknown, now?: Date): string;
|
|
50
|
+
export declare function modeToFormat(mode: TimestampMode, dataFormat: TimestampFormat): TimestampFormat;
|
|
51
|
+
//# sourceMappingURL=timestamp-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamp-format.d.ts","sourceRoot":"","sources":["../../../src/data/cells/timestamp-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,0CAA0C;IAC1C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,oBAAoB,CAAC,CAAC;IACzF,gFAAgF;IAChF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAkB1D;AAaD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI,GAAG,IAAI,CAkCnF;AA4CD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CA8BrE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,eAAe,EACvB,GAAG,GAAE,IAAiB,GACrB,MAAM,CAqBR;AAYD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAe7E;AAQD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAYrF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,GAAG,eAAe,CAY9F"}
|