@flanksource/clicky-ui 0.2.14 → 0.2.16
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 +19 -9
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts +10 -0
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +19 -9
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/DateTimePicker.cjs +6 -1
- package/dist/components/DateTimePicker.cjs.map +1 -1
- package/dist/components/DateTimePicker.d.ts +11 -3
- package/dist/components/DateTimePicker.d.ts.map +1 -1
- package/dist/components/DateTimePicker.js +6 -1
- package/dist/components/DateTimePicker.js.map +1 -1
- package/dist/components/Field.cjs +33 -0
- package/dist/components/Field.cjs.map +1 -0
- package/dist/components/Field.d.ts +27 -0
- package/dist/components/Field.d.ts.map +1 -0
- package/dist/components/Field.js +33 -0
- package/dist/components/Field.js.map +1 -0
- package/dist/components/FilterBar.cjs +49 -55
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +2 -2
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +44 -50
- 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/MultiSelect.cjs +2 -1
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts +5 -1
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js +2 -1
- package/dist/components/MultiSelect.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 +97 -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 +89 -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 +59 -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 +29 -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/use-form.cjs +27 -0
- package/dist/components/use-form.cjs.map +1 -0
- package/dist/components/use-form.d.ts +30 -0
- package/dist/components/use-form.d.ts.map +1 -0
- package/dist/components/use-form.js +27 -0
- package/dist/components/use-form.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 +25 -6
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +14 -4
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +24 -5
- 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 +78 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +61 -13
- 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 +38 -27
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts +8 -2
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +38 -27
- 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/FilterForm.cjs +4 -4
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.js +4 -4
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +38 -60
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +3 -3
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +40 -62
- 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/formMetadata.cjs +5 -3
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +5 -3
- package/dist/rpc/formMetadata.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,109 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import { cn } from "../lib/utils.js";
|
|
4
|
+
const FIXED_DOT_SIZE = {
|
|
5
|
+
sm: "size-4",
|
|
6
|
+
md: "size-6",
|
|
7
|
+
lg: "size-10"
|
|
8
|
+
};
|
|
9
|
+
const RESPONSIVE_DOT_SIZE = "size-[clamp(1.25rem,18cqmin,2.5rem)]";
|
|
10
|
+
const RESPONSIVE_LABEL_SIZE = "text-[clamp(0.72rem,4.5cqmin,0.9rem)]";
|
|
11
|
+
const LoadingDots = forwardRef(
|
|
12
|
+
({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
13
|
+
"svg",
|
|
14
|
+
{
|
|
15
|
+
ref,
|
|
16
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
17
|
+
viewBox: "0 0 24 24",
|
|
18
|
+
fill: "currentColor",
|
|
19
|
+
"aria-hidden": "true",
|
|
20
|
+
className: cn("shrink-0", className),
|
|
21
|
+
...props,
|
|
22
|
+
children: [
|
|
23
|
+
/* @__PURE__ */ jsx("circle", { cx: "4", cy: "12", r: "3", children: /* @__PURE__ */ jsx(
|
|
24
|
+
"animate",
|
|
25
|
+
{
|
|
26
|
+
id: "clickyLoadDotA",
|
|
27
|
+
fill: "freeze",
|
|
28
|
+
attributeName: "opacity",
|
|
29
|
+
begin: "0;clickyLoadDotC.end-0.25s",
|
|
30
|
+
dur: "0.75s",
|
|
31
|
+
values: "1;0.2"
|
|
32
|
+
}
|
|
33
|
+
) }),
|
|
34
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3", opacity: "0.4", children: /* @__PURE__ */ jsx(
|
|
35
|
+
"animate",
|
|
36
|
+
{
|
|
37
|
+
fill: "freeze",
|
|
38
|
+
attributeName: "opacity",
|
|
39
|
+
begin: "clickyLoadDotA.begin+0.15s",
|
|
40
|
+
dur: "0.75s",
|
|
41
|
+
values: "1;0.2"
|
|
42
|
+
}
|
|
43
|
+
) }),
|
|
44
|
+
/* @__PURE__ */ jsx("circle", { cx: "20", cy: "12", r: "3", opacity: "0.3", children: /* @__PURE__ */ jsx(
|
|
45
|
+
"animate",
|
|
46
|
+
{
|
|
47
|
+
id: "clickyLoadDotC",
|
|
48
|
+
fill: "freeze",
|
|
49
|
+
attributeName: "opacity",
|
|
50
|
+
begin: "clickyLoadDotA.begin+0.3s",
|
|
51
|
+
dur: "0.75s",
|
|
52
|
+
values: "1;0.2"
|
|
53
|
+
}
|
|
54
|
+
) })
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
);
|
|
59
|
+
LoadingDots.displayName = "LoadingDots";
|
|
60
|
+
const Loading = forwardRef(
|
|
61
|
+
({ size = "responsive", variant = "inline", label, className, ...props }, ref) => {
|
|
62
|
+
const effectiveSize = variant === "inline" && size === "responsive" ? "sm" : size;
|
|
63
|
+
const isResponsive = effectiveSize === "responsive";
|
|
64
|
+
const dotClass = isResponsive ? RESPONSIVE_DOT_SIZE : FIXED_DOT_SIZE[effectiveSize];
|
|
65
|
+
if (variant === "centered") {
|
|
66
|
+
return /* @__PURE__ */ jsxs(
|
|
67
|
+
"div",
|
|
68
|
+
{
|
|
69
|
+
ref,
|
|
70
|
+
role: "status",
|
|
71
|
+
"aria-label": "Loading",
|
|
72
|
+
className: cn(
|
|
73
|
+
"flex h-full min-h-32 w-full flex-col items-center justify-center gap-3 text-muted-foreground",
|
|
74
|
+
"[container-type:size]",
|
|
75
|
+
className
|
|
76
|
+
),
|
|
77
|
+
...props,
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ jsx(LoadingDots, { className: dotClass }),
|
|
80
|
+
label != null && /* @__PURE__ */ jsx("span", { className: cn(isResponsive ? RESPONSIVE_LABEL_SIZE : "text-sm"), children: label })
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
return /* @__PURE__ */ jsxs(
|
|
86
|
+
"div",
|
|
87
|
+
{
|
|
88
|
+
ref,
|
|
89
|
+
role: "status",
|
|
90
|
+
"aria-label": "Loading",
|
|
91
|
+
className: cn(
|
|
92
|
+
"inline-flex items-center gap-2 text-muted-foreground",
|
|
93
|
+
className
|
|
94
|
+
),
|
|
95
|
+
...props,
|
|
96
|
+
children: [
|
|
97
|
+
/* @__PURE__ */ jsx(LoadingDots, { className: dotClass }),
|
|
98
|
+
label != null && /* @__PURE__ */ jsx("span", { className: "text-sm", children: label })
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
Loading.displayName = "Loading";
|
|
105
|
+
export {
|
|
106
|
+
Loading,
|
|
107
|
+
LoadingDots
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=loading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading.js","sources":["../../src/components/loading.tsx"],"sourcesContent":["import {\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n type SVGProps,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type LoadingSize = \"sm\" | \"md\" | \"lg\" | \"responsive\";\nexport type LoadingVariant = \"inline\" | \"centered\";\n\nexport interface LoadingProps extends HTMLAttributes<HTMLDivElement> {\n /** Fixed size, or `responsive` (default) to scale with the container. */\n size?: LoadingSize;\n /** `inline` for a small in-flow loader, `centered` for a section/page loader. */\n variant?: LoadingVariant;\n /** Optional caption rendered beside (inline) or beneath (centered) the dots. */\n label?: ReactNode;\n}\n\nconst FIXED_DOT_SIZE: Record<Exclude<LoadingSize, \"responsive\">, string> = {\n sm: \"size-4\",\n md: \"size-6\",\n lg: \"size-10\",\n};\n\n// Scales with the SMALLER of the container's two dimensions (`cqmin`, enabled by\n// `container-type: size` on the centered wrapper). Using `cqmin` rather than the\n// width alone means a wide-but-short panel reads as small — only a genuinely\n// large area (a full-page load) grows the dots. Floors at 1.25rem (20px) in\n// tight panels, climbs to 2.5rem (40px) on big loads. Pure CSS — no\n// ResizeObserver, SSR-safe.\nconst RESPONSIVE_DOT_SIZE = \"size-[clamp(1.25rem,18cqmin,2.5rem)]\";\nconst RESPONSIVE_LABEL_SIZE = \"text-[clamp(0.72rem,4.5cqmin,0.9rem)]\";\n\n/**\n * Three bouncing dots. `fill=\"currentColor\"` so the dots inherit the surrounding\n * theme text color (works in light and dark). Size is driven entirely by the\n * className (width + height); the viewBox keeps the 1:1 aspect.\n */\nexport const LoadingDots = forwardRef<SVGSVGElement, SVGProps<SVGSVGElement>>(\n ({ className, ...props }, ref) => (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n className={cn(\"shrink-0\", className)}\n {...props}\n >\n <circle cx=\"4\" cy=\"12\" r=\"3\">\n <animate\n id=\"clickyLoadDotA\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"0;clickyLoadDotC.end-0.25s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"12\" cy=\"12\" r=\"3\" opacity=\"0.4\">\n <animate\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.15s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n <circle cx=\"20\" cy=\"12\" r=\"3\" opacity=\"0.3\">\n <animate\n id=\"clickyLoadDotC\"\n fill=\"freeze\"\n attributeName=\"opacity\"\n begin=\"clickyLoadDotA.begin+0.3s\"\n dur=\"0.75s\"\n values=\"1;0.2\"\n />\n </circle>\n </svg>\n ),\n);\nLoadingDots.displayName = \"LoadingDots\";\n\n/**\n * Loading indicator built on the shared 3-dot animation.\n *\n * `centered` fills the space it is given (`h-full` within a `min-h-32` floor) and\n * establishes a size container (`container-type: size`) so the default\n * `responsive` size scales the dots to that space via `cqmin` — small inside a\n * narrow/short panel, large on a full-page route shell that stretches it tall.\n * The `inline` variant is not a container, so a `responsive` request there\n * renders at `sm`.\n */\nexport const Loading = forwardRef<HTMLDivElement, LoadingProps>(\n ({ size = \"responsive\", variant = \"inline\", label, className, ...props }, ref) => {\n const effectiveSize =\n variant === \"inline\" && size === \"responsive\" ? \"sm\" : size;\n const isResponsive = effectiveSize === \"responsive\";\n const dotClass = isResponsive\n ? RESPONSIVE_DOT_SIZE\n : FIXED_DOT_SIZE[effectiveSize];\n\n if (variant === \"centered\") {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"flex h-full min-h-32 w-full flex-col items-center justify-center gap-3 text-muted-foreground\",\n \"[container-type:size]\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} />\n {label != null && (\n <span className={cn(isResponsive ? RESPONSIVE_LABEL_SIZE : \"text-sm\")}>\n {label}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label=\"Loading\"\n className={cn(\n \"inline-flex items-center gap-2 text-muted-foreground\",\n className,\n )}\n {...props}\n >\n <LoadingDots className={dotClass} />\n {label != null && <span className=\"text-sm\">{label}</span>}\n </div>\n );\n },\n);\nLoading.displayName = \"Loading\";\n"],"names":[],"mappings":";;;AAoBA,MAAM,iBAAqE;AAAA,EACzE,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAQA,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAOvB,MAAM,cAAc;AAAA,EACzB,CAAC,EAAE,WAAW,GAAG,MAAA,GAAS,QACxB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,WAAW,GAAG,YAAY,SAAS;AAAA,MAClC,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA,oBAAC,YAAO,IAAG,KAAI,IAAG,MAAK,GAAE,KACvB,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACA,oBAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,SAAQ,OACpC,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,GAEX;AAAA,QACA,oBAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,SAAQ,OACpC,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,eAAc;AAAA,YACd,OAAM;AAAA,YACN,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA,EACT,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AACA,YAAY,cAAc;AAYnB,MAAM,UAAU;AAAA,EACrB,CAAC,EAAE,OAAO,cAAc,UAAU,UAAU,OAAO,WAAW,GAAG,MAAA,GAAS,QAAQ;AAChF,UAAM,gBACJ,YAAY,YAAY,SAAS,eAAe,OAAO;AACzD,UAAM,eAAe,kBAAkB;AACvC,UAAM,WAAW,eACb,sBACA,eAAe,aAAa;AAEhC,QAAI,YAAY,YAAY;AAC1B,aACE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA,MAAK;AAAA,UACL,cAAW;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,UAED,GAAG;AAAA,UAEJ,UAAA;AAAA,YAAA,oBAAC,aAAA,EAAY,WAAW,SAAA,CAAU;AAAA,YACjC,SAAS,QACR,oBAAC,QAAA,EAAK,WAAW,GAAG,eAAe,wBAAwB,SAAS,GACjE,UAAA,MAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAIR;AAEA,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,cAAW;AAAA,QACX,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAED,GAAG;AAAA,QAEJ,UAAA;AAAA,UAAA,oBAAC,aAAA,EAAY,WAAW,SAAA,CAAU;AAAA,UACjC,SAAS,QAAQ,oBAAC,QAAA,EAAK,WAAU,WAAW,UAAA,MAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGzD;AACF;AACA,QAAQ,cAAc;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
function useForm({ values, validate, onSubmit }) {
|
|
5
|
+
const [touched, setTouched] = react.useState({});
|
|
6
|
+
const [submitted, setSubmitted] = react.useState(false);
|
|
7
|
+
const errors = react.useMemo(() => validate(values), [validate, values]);
|
|
8
|
+
const isValid = react.useMemo(() => !Object.values(errors).some(Boolean), [errors]);
|
|
9
|
+
const fieldError = react.useCallback(
|
|
10
|
+
(key) => submitted || touched[key] ? errors[key] : void 0,
|
|
11
|
+
[submitted, touched, errors]
|
|
12
|
+
);
|
|
13
|
+
const markTouched = react.useCallback((key) => {
|
|
14
|
+
setTouched((prev) => prev[key] ? prev : { ...prev, [key]: true });
|
|
15
|
+
}, []);
|
|
16
|
+
const submit = react.useCallback(() => {
|
|
17
|
+
setSubmitted(true);
|
|
18
|
+
if (isValid) onSubmit == null ? void 0 : onSubmit(values);
|
|
19
|
+
}, [isValid, onSubmit, values]);
|
|
20
|
+
const reset = react.useCallback(() => {
|
|
21
|
+
setTouched({});
|
|
22
|
+
setSubmitted(false);
|
|
23
|
+
}, []);
|
|
24
|
+
return { errors, isValid, submitted, fieldError, markTouched, submit, reset };
|
|
25
|
+
}
|
|
26
|
+
exports.useForm = useForm;
|
|
27
|
+
//# sourceMappingURL=use-form.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form.cjs","sources":["../../src/components/use-form.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\n// FieldErrors maps a field key to its current validation message (or undefined\n// when the field is valid). validate() returns the full map every call so a form\n// can show every problem at once, not just the first.\nexport type FieldErrors = Record<string, string | undefined>;\n\nexport interface UseFormOptions<V> {\n /** The current form values (owned by the caller). */\n values: V;\n /** Pure validator returning all field errors for the given values. */\n validate: (values: V) => FieldErrors;\n /** Called by submit() only when the form is valid. */\n onSubmit?: (values: V) => void;\n}\n\nexport interface UseFormResult {\n /** Every field's error (independent of touched/submitted). */\n errors: FieldErrors;\n /** True when no field has an error. */\n isValid: boolean;\n /** True once submit() has been called (reveals all errors). */\n submitted: boolean;\n /**\n * The error to display for a field: present only once the field has been\n * touched (blurred) or submit() has run, so a pristine form isn't all red.\n */\n fieldError: (key: string) => string | undefined;\n /** Mark a field touched — wire to a field's onBlur. */\n markTouched: (key: string) => void;\n /** Reveal all errors; run onSubmit only when valid. */\n submit: () => void;\n /** Clear touched + submitted state (e.g. when a dialog reopens). */\n reset: () => void;\n}\n\n// useForm centralizes the touched/submitted/error bookkeeping a hand-built form\n// needs: it computes per-field errors from the caller's validate(), and gates\n// their display so each error surfaces on blur or on submit. The form values\n// stay owned by the caller (this hook does not store them), so it composes with\n// conditional fields and bespoke layouts.\nexport function useForm<V>({ values, validate, onSubmit }: UseFormOptions<V>): UseFormResult {\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [submitted, setSubmitted] = useState(false);\n\n const errors = useMemo(() => validate(values), [validate, values]);\n const isValid = useMemo(() => !Object.values(errors).some(Boolean), [errors]);\n\n const fieldError = useCallback(\n (key: string) => (submitted || touched[key] ? errors[key] : undefined),\n [submitted, touched, errors],\n );\n\n const markTouched = useCallback((key: string) => {\n setTouched((prev) => (prev[key] ? prev : { ...prev, [key]: true }));\n }, []);\n\n const submit = useCallback(() => {\n setSubmitted(true);\n if (isValid) onSubmit?.(values);\n }, [isValid, onSubmit, values]);\n\n const reset = useCallback(() => {\n setTouched({});\n setSubmitted(false);\n }, []);\n\n return { errors, isValid, submitted, fieldError, markTouched, submit, reset };\n}\n"],"names":["useState","useMemo","useCallback"],"mappings":";;;AAyCO,SAAS,QAAW,EAAE,QAAQ,UAAU,YAA8C;AAC3F,QAAM,CAAC,SAAS,UAAU,IAAIA,MAAAA,SAAkC,CAAA,CAAE;AAClE,QAAM,CAAC,WAAW,YAAY,IAAIA,MAAAA,SAAS,KAAK;AAEhD,QAAM,SAASC,MAAAA,QAAQ,MAAM,SAAS,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC;AACjE,QAAM,UAAUA,MAAAA,QAAQ,MAAM,CAAC,OAAO,OAAO,MAAM,EAAE,KAAK,OAAO,GAAG,CAAC,MAAM,CAAC;AAE5E,QAAM,aAAaC,MAAAA;AAAAA,IACjB,CAAC,QAAiB,aAAa,QAAQ,GAAG,IAAI,OAAO,GAAG,IAAI;AAAA,IAC5D,CAAC,WAAW,SAAS,MAAM;AAAA,EAAA;AAG7B,QAAM,cAAcA,kBAAY,CAAC,QAAgB;AAC/C,eAAW,CAAC,SAAU,KAAK,GAAG,IAAI,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,MAAO;AAAA,EACpE,GAAG,CAAA,CAAE;AAEL,QAAM,SAASA,MAAAA,YAAY,MAAM;AAC/B,iBAAa,IAAI;AACjB,QAAI,8CAAoB;AAAA,EAC1B,GAAG,CAAC,SAAS,UAAU,MAAM,CAAC;AAE9B,QAAM,QAAQA,MAAAA,YAAY,MAAM;AAC9B,eAAW,CAAA,CAAE;AACb,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,SAAO,EAAE,QAAQ,SAAS,WAAW,YAAY,aAAa,QAAQ,MAAA;AACxE;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type FieldErrors = Record<string, string | undefined>;
|
|
2
|
+
export interface UseFormOptions<V> {
|
|
3
|
+
/** The current form values (owned by the caller). */
|
|
4
|
+
values: V;
|
|
5
|
+
/** Pure validator returning all field errors for the given values. */
|
|
6
|
+
validate: (values: V) => FieldErrors;
|
|
7
|
+
/** Called by submit() only when the form is valid. */
|
|
8
|
+
onSubmit?: (values: V) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface UseFormResult {
|
|
11
|
+
/** Every field's error (independent of touched/submitted). */
|
|
12
|
+
errors: FieldErrors;
|
|
13
|
+
/** True when no field has an error. */
|
|
14
|
+
isValid: boolean;
|
|
15
|
+
/** True once submit() has been called (reveals all errors). */
|
|
16
|
+
submitted: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* The error to display for a field: present only once the field has been
|
|
19
|
+
* touched (blurred) or submit() has run, so a pristine form isn't all red.
|
|
20
|
+
*/
|
|
21
|
+
fieldError: (key: string) => string | undefined;
|
|
22
|
+
/** Mark a field touched — wire to a field's onBlur. */
|
|
23
|
+
markTouched: (key: string) => void;
|
|
24
|
+
/** Reveal all errors; run onSubmit only when valid. */
|
|
25
|
+
submit: () => void;
|
|
26
|
+
/** Clear touched + submitted state (e.g. when a dialog reopens). */
|
|
27
|
+
reset: () => void;
|
|
28
|
+
}
|
|
29
|
+
export declare function useForm<V>({ values, validate, onSubmit }: UseFormOptions<V>): UseFormResult;
|
|
30
|
+
//# sourceMappingURL=use-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form.d.ts","sourceRoot":"","sources":["../../src/components/use-form.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE7D,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,qDAAqD;IACrD,MAAM,EAAE,CAAC,CAAC;IACV,sEAAsE;IACtE,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,WAAW,CAAC;IACrC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,MAAM,EAAE,WAAW,CAAC;IACpB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAChD,uDAAuD;IACvD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,uDAAuD;IACvD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,oEAAoE;IACpE,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAOD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CA2B3F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useState, useMemo, useCallback } from "react";
|
|
2
|
+
function useForm({ values, validate, onSubmit }) {
|
|
3
|
+
const [touched, setTouched] = useState({});
|
|
4
|
+
const [submitted, setSubmitted] = useState(false);
|
|
5
|
+
const errors = useMemo(() => validate(values), [validate, values]);
|
|
6
|
+
const isValid = useMemo(() => !Object.values(errors).some(Boolean), [errors]);
|
|
7
|
+
const fieldError = useCallback(
|
|
8
|
+
(key) => submitted || touched[key] ? errors[key] : void 0,
|
|
9
|
+
[submitted, touched, errors]
|
|
10
|
+
);
|
|
11
|
+
const markTouched = useCallback((key) => {
|
|
12
|
+
setTouched((prev) => prev[key] ? prev : { ...prev, [key]: true });
|
|
13
|
+
}, []);
|
|
14
|
+
const submit = useCallback(() => {
|
|
15
|
+
setSubmitted(true);
|
|
16
|
+
if (isValid) onSubmit == null ? void 0 : onSubmit(values);
|
|
17
|
+
}, [isValid, onSubmit, values]);
|
|
18
|
+
const reset = useCallback(() => {
|
|
19
|
+
setTouched({});
|
|
20
|
+
setSubmitted(false);
|
|
21
|
+
}, []);
|
|
22
|
+
return { errors, isValid, submitted, fieldError, markTouched, submit, reset };
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
useForm
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=use-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form.js","sources":["../../src/components/use-form.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\n\n// FieldErrors maps a field key to its current validation message (or undefined\n// when the field is valid). validate() returns the full map every call so a form\n// can show every problem at once, not just the first.\nexport type FieldErrors = Record<string, string | undefined>;\n\nexport interface UseFormOptions<V> {\n /** The current form values (owned by the caller). */\n values: V;\n /** Pure validator returning all field errors for the given values. */\n validate: (values: V) => FieldErrors;\n /** Called by submit() only when the form is valid. */\n onSubmit?: (values: V) => void;\n}\n\nexport interface UseFormResult {\n /** Every field's error (independent of touched/submitted). */\n errors: FieldErrors;\n /** True when no field has an error. */\n isValid: boolean;\n /** True once submit() has been called (reveals all errors). */\n submitted: boolean;\n /**\n * The error to display for a field: present only once the field has been\n * touched (blurred) or submit() has run, so a pristine form isn't all red.\n */\n fieldError: (key: string) => string | undefined;\n /** Mark a field touched — wire to a field's onBlur. */\n markTouched: (key: string) => void;\n /** Reveal all errors; run onSubmit only when valid. */\n submit: () => void;\n /** Clear touched + submitted state (e.g. when a dialog reopens). */\n reset: () => void;\n}\n\n// useForm centralizes the touched/submitted/error bookkeeping a hand-built form\n// needs: it computes per-field errors from the caller's validate(), and gates\n// their display so each error surfaces on blur or on submit. The form values\n// stay owned by the caller (this hook does not store them), so it composes with\n// conditional fields and bespoke layouts.\nexport function useForm<V>({ values, validate, onSubmit }: UseFormOptions<V>): UseFormResult {\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [submitted, setSubmitted] = useState(false);\n\n const errors = useMemo(() => validate(values), [validate, values]);\n const isValid = useMemo(() => !Object.values(errors).some(Boolean), [errors]);\n\n const fieldError = useCallback(\n (key: string) => (submitted || touched[key] ? errors[key] : undefined),\n [submitted, touched, errors],\n );\n\n const markTouched = useCallback((key: string) => {\n setTouched((prev) => (prev[key] ? prev : { ...prev, [key]: true }));\n }, []);\n\n const submit = useCallback(() => {\n setSubmitted(true);\n if (isValid) onSubmit?.(values);\n }, [isValid, onSubmit, values]);\n\n const reset = useCallback(() => {\n setTouched({});\n setSubmitted(false);\n }, []);\n\n return { errors, isValid, submitted, fieldError, markTouched, submit, reset };\n}\n"],"names":[],"mappings":";AAyCO,SAAS,QAAW,EAAE,QAAQ,UAAU,YAA8C;AAC3F,QAAM,CAAC,SAAS,UAAU,IAAI,SAAkC,CAAA,CAAE;AAClE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,SAAS,QAAQ,MAAM,SAAS,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC;AACjE,QAAM,UAAU,QAAQ,MAAM,CAAC,OAAO,OAAO,MAAM,EAAE,KAAK,OAAO,GAAG,CAAC,MAAM,CAAC;AAE5E,QAAM,aAAa;AAAA,IACjB,CAAC,QAAiB,aAAa,QAAQ,GAAG,IAAI,OAAO,GAAG,IAAI;AAAA,IAC5D,CAAC,WAAW,SAAS,MAAM;AAAA,EAAA;AAG7B,QAAM,cAAc,YAAY,CAAC,QAAgB;AAC/C,eAAW,CAAC,SAAU,KAAK,GAAG,IAAI,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,MAAO;AAAA,EACpE,GAAG,CAAA,CAAE;AAEL,QAAM,SAAS,YAAY,MAAM;AAC/B,iBAAa,IAAI;AACjB,QAAI,8CAAoB;AAAA,EAC1B,GAAG,CAAC,SAAS,UAAU,MAAM,CAAC;AAE9B,QAAM,QAAQ,YAAY,MAAM;AAC9B,eAAW,CAAA,CAAE;AACb,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,SAAO,EAAE,QAAQ,SAAS,WAAW,YAAY,aAAa,QAAQ,MAAA;AACxE;"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
require("react");
|
|
5
|
+
const mi = require("@flanksource/icons/mi");
|
|
6
|
+
const WORKLOAD_META = {
|
|
7
|
+
service: { label: "Service", Icon: mi.K8SService },
|
|
8
|
+
ingress: { label: "Ingress", Icon: mi.K8SIngress },
|
|
9
|
+
deployment: { label: "Deployment", Icon: mi.K8SDeployment },
|
|
10
|
+
statefulset: { label: "StatefulSet", Icon: mi.K8SStatefulset }
|
|
11
|
+
};
|
|
12
|
+
const ALL_WORKLOAD_KINDS = [
|
|
13
|
+
"service",
|
|
14
|
+
"ingress",
|
|
15
|
+
"deployment",
|
|
16
|
+
"statefulset"
|
|
17
|
+
];
|
|
18
|
+
function ingressHost(kind, r) {
|
|
19
|
+
var _a;
|
|
20
|
+
return kind === "ingress" ? (_a = r.hosts) == null ? void 0 : _a[0] : void 0;
|
|
21
|
+
}
|
|
22
|
+
function workloadName(kind, r) {
|
|
23
|
+
return ingressHost(kind, r) ?? r.name;
|
|
24
|
+
}
|
|
25
|
+
const KNOWN_KINDS = /* @__PURE__ */ new Set(["service", "ingress", "deployment", "statefulset"]);
|
|
26
|
+
function workloadKey(namespace, kind, r) {
|
|
27
|
+
const name = workloadName(kind, r);
|
|
28
|
+
return namespace ? `${namespace}/${kind}/${name}` : `${kind}/${name}`;
|
|
29
|
+
}
|
|
30
|
+
function parseWorkloadKey(value) {
|
|
31
|
+
const parts = value.split("/");
|
|
32
|
+
const name = parts.at(-1);
|
|
33
|
+
const maybeKind = parts.at(-2);
|
|
34
|
+
if (name != null && maybeKind != null && KNOWN_KINDS.has(maybeKind)) {
|
|
35
|
+
const namespace = parts.slice(0, -2).join("/");
|
|
36
|
+
const parsed = { kind: maybeKind, name };
|
|
37
|
+
if (namespace) parsed.namespace = namespace;
|
|
38
|
+
return parsed;
|
|
39
|
+
}
|
|
40
|
+
return { name: value };
|
|
41
|
+
}
|
|
42
|
+
function loadedWorkloads(namespace, byKind, kinds) {
|
|
43
|
+
const keys = /* @__PURE__ */ new Set();
|
|
44
|
+
const names = /* @__PURE__ */ new Set();
|
|
45
|
+
for (const kind of kinds) {
|
|
46
|
+
for (const r of byKind[kind] ?? []) {
|
|
47
|
+
keys.add(workloadKey(namespace, kind, r));
|
|
48
|
+
names.add(workloadName(kind, r));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return { keys, names };
|
|
52
|
+
}
|
|
53
|
+
function kindForValue(kinds, value) {
|
|
54
|
+
const kind = value ? parseWorkloadKey(value).kind : void 0;
|
|
55
|
+
return kind ?? kinds[0] ?? "service";
|
|
56
|
+
}
|
|
57
|
+
function buildWorkloadOptions(namespace, byKind, kinds, value) {
|
|
58
|
+
const opts = [];
|
|
59
|
+
for (const kind of kinds) {
|
|
60
|
+
const meta = WORKLOAD_META[kind];
|
|
61
|
+
const Icon = meta.Icon;
|
|
62
|
+
for (const r of byKind[kind] ?? []) {
|
|
63
|
+
const host = ingressHost(kind, r);
|
|
64
|
+
opts.push({
|
|
65
|
+
value: workloadKey(namespace, kind, r),
|
|
66
|
+
// The label is the human name; an ingress pairs its host with the
|
|
67
|
+
// ingress name for context.
|
|
68
|
+
label: host ? `${host} (${r.name})` : r.name,
|
|
69
|
+
group: meta.label,
|
|
70
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-4 w-4" })
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (value && !opts.some((o) => o.value === value)) {
|
|
75
|
+
const parsed = parseWorkloadKey(value);
|
|
76
|
+
const Icon = WORKLOAD_META[parsed.kind ?? kinds[0] ?? "service"].Icon;
|
|
77
|
+
return [{ value, label: parsed.name, icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "h-4 w-4" }) }, ...opts];
|
|
78
|
+
}
|
|
79
|
+
return opts;
|
|
80
|
+
}
|
|
81
|
+
exports.ALL_WORKLOAD_KINDS = ALL_WORKLOAD_KINDS;
|
|
82
|
+
exports.WORKLOAD_META = WORKLOAD_META;
|
|
83
|
+
exports.buildWorkloadOptions = buildWorkloadOptions;
|
|
84
|
+
exports.kindForValue = kindForValue;
|
|
85
|
+
exports.loadedWorkloads = loadedWorkloads;
|
|
86
|
+
exports.parseWorkloadKey = parseWorkloadKey;
|
|
87
|
+
exports.workloadKey = workloadKey;
|
|
88
|
+
//# sourceMappingURL=workload-picker-utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workload-picker-utils.cjs","sources":["../../src/components/workload-picker-utils.tsx"],"sourcesContent":["import { type ComponentType } from \"react\";\nimport {\n K8SService,\n K8SIngress,\n K8SDeployment,\n K8SStatefulset,\n} from \"@flanksource/icons/mi\";\nimport type { ComboboxOption } from \"./Combobox\";\n\n// Key encoding and option-building for WorkloadPicker: the emitted value is a\n// `[namespace/]kind/name` composite (see workloadKey / parseWorkloadKey) so two\n// workloads of different kinds that share a name don't collide.\n\nexport type WorkloadKind = \"service\" | \"ingress\" | \"deployment\" | \"statefulset\";\n\n/** One workload returned by the loader. Ingresses may carry rule hostnames. */\nexport type WorkloadResource = { name: string; hosts?: string[] };\n\ntype KindIconProps = { className?: string; title?: string; \"aria-label\"?: string };\ntype KindMeta = { label: string; Icon: ComponentType<KindIconProps> };\n\n// WORKLOAD_META maps each kind to its group header label and icon, in display\n// order. The order of the keys drives the order options/groups appear in.\nexport const WORKLOAD_META: Record<WorkloadKind, KindMeta> = {\n service: { label: \"Service\", Icon: K8SService },\n ingress: { label: \"Ingress\", Icon: K8SIngress },\n deployment: { label: \"Deployment\", Icon: K8SDeployment },\n statefulset: { label: \"StatefulSet\", Icon: K8SStatefulset },\n};\n\nexport const ALL_WORKLOAD_KINDS: WorkloadKind[] = [\n \"service\",\n \"ingress\",\n \"deployment\",\n \"statefulset\",\n];\n\n// ingressHost is the first host an ingress routes, or undefined for non-ingress\n// kinds and host-less ingresses. An ingress's name-part is its host.\nfunction ingressHost(kind: WorkloadKind, r: WorkloadResource): string | undefined {\n return kind === \"ingress\" ? r.hosts?.[0] : undefined;\n}\n\n// workloadName is the name-part of a resource's key: an ingress's first host\n// (the routable address callers want), else the resource's own name.\nfunction workloadName(kind: WorkloadKind, r: WorkloadResource): string {\n return ingressHost(kind, r) ?? r.name;\n}\n\n// ParsedWorkloadKey is the structured form of a `[namespace/]kind/name` value.\nexport type ParsedWorkloadKey = { namespace?: string; kind?: WorkloadKind; name: string };\n\nconst KNOWN_KINDS = new Set<string>([\"service\", \"ingress\", \"deployment\", \"statefulset\"]);\n\n// workloadKey is the value a resource contributes (what onChange emits): a\n// `[namespace/]kind/name` composite so two workloads of different kinds sharing\n// a name don't collide. namespace is omitted when not supplied.\nexport function workloadKey(\n namespace: string | undefined,\n kind: WorkloadKind,\n r: WorkloadResource,\n): string {\n const name = workloadName(kind, r);\n return namespace ? `${namespace}/${kind}/${name}` : `${kind}/${name}`;\n}\n\n// parseWorkloadKey splits a `[namespace/]kind/name` value back into its parts.\n// The trailing segment is always the name (a host may itself contain no slash);\n// the segment before it is the kind when it is a known workload kind, and any\n// remaining leading segment is the namespace. A bare value (no recognised\n// kind/name shape) is returned as just its name so freeform input survives.\nexport function parseWorkloadKey(value: string): ParsedWorkloadKey {\n const parts = value.split(\"/\");\n const name = parts.at(-1);\n const maybeKind = parts.at(-2);\n if (name != null && maybeKind != null && KNOWN_KINDS.has(maybeKind)) {\n const namespace = parts.slice(0, -2).join(\"/\");\n const parsed: ParsedWorkloadKey = { kind: maybeKind as WorkloadKind, name };\n if (namespace) parsed.namespace = namespace;\n return parsed;\n }\n return { name: value };\n}\n\n// loadedWorkloads collapses the loaded resources into the two membership sets a\n// strict picker validates a value against: `keys` are the full\n// `[namespace/]kind/name` keys the picker emits, `names` are the bare name-parts\n// (service name / ingress host) a consumer may persist instead. A value in\n// neither set names a workload that doesn't exist in the namespace.\nexport function loadedWorkloads(\n namespace: string | undefined,\n byKind: Partial<Record<WorkloadKind, WorkloadResource[]>>,\n kinds: WorkloadKind[],\n): { keys: Set<string>; names: Set<string> } {\n const keys = new Set<string>();\n const names = new Set<string>();\n for (const kind of kinds) {\n for (const r of byKind[kind] ?? []) {\n keys.add(workloadKey(namespace, kind, r));\n names.add(workloadName(kind, r));\n }\n }\n return { keys, names };\n}\n\n// kindForValue returns the kind encoded in the selected value, so the lead icon\n// can mirror it without consulting the loaded resources. Falls back to the first\n// offered kind when nothing is selected or the value carries no recognised kind.\nexport function kindForValue(kinds: WorkloadKind[], value: string): WorkloadKind {\n const kind = value ? parseWorkloadKey(value).kind : undefined;\n return kind ?? kinds[0] ?? \"service\";\n}\n\n// buildWorkloadOptions flattens the per-kind resources into grouped Combobox\n// options in kind order. Each option's value is its `[namespace/]kind/name` key\n// and its label the human name; a current value not present in any kind is\n// pinned first (labelled with just its name-part) so the selection stays visible.\nexport function buildWorkloadOptions(\n namespace: string | undefined,\n byKind: Partial<Record<WorkloadKind, WorkloadResource[]>>,\n kinds: WorkloadKind[],\n value: string,\n): ComboboxOption[] {\n const opts: ComboboxOption[] = [];\n for (const kind of kinds) {\n const meta = WORKLOAD_META[kind];\n const Icon = meta.Icon;\n for (const r of byKind[kind] ?? []) {\n const host = ingressHost(kind, r);\n opts.push({\n value: workloadKey(namespace, kind, r),\n // The label is the human name; an ingress pairs its host with the\n // ingress name for context.\n label: host ? `${host} (${r.name})` : r.name,\n group: meta.label,\n icon: <Icon className=\"h-4 w-4\" />,\n });\n }\n }\n if (value && !opts.some((o) => o.value === value)) {\n const parsed = parseWorkloadKey(value);\n const Icon = WORKLOAD_META[parsed.kind ?? kinds[0] ?? \"service\"].Icon;\n return [{ value, label: parsed.name, icon: <Icon className=\"h-4 w-4\" /> }, ...opts];\n }\n return opts;\n}\n"],"names":["K8SService","K8SIngress","K8SDeployment","K8SStatefulset","jsx"],"mappings":";;;;;AAuBO,MAAM,gBAAgD;AAAA,EAC3D,SAAS,EAAE,OAAO,WAAW,MAAMA,GAAAA,WAAA;AAAA,EACnC,SAAS,EAAE,OAAO,WAAW,MAAMC,GAAAA,WAAA;AAAA,EACnC,YAAY,EAAE,OAAO,cAAc,MAAMC,GAAAA,cAAA;AAAA,EACzC,aAAa,EAAE,OAAO,eAAe,MAAMC,GAAAA,eAAA;AAC7C;AAEO,MAAM,qBAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIA,SAAS,YAAY,MAAoB,GAAyC;;AAChF,SAAO,SAAS,aAAY,OAAE,UAAF,mBAAU,KAAK;AAC7C;AAIA,SAAS,aAAa,MAAoB,GAA6B;AACrE,SAAO,YAAY,MAAM,CAAC,KAAK,EAAE;AACnC;AAKA,MAAM,kCAAkB,IAAY,CAAC,WAAW,WAAW,cAAc,aAAa,CAAC;AAKhF,SAAS,YACd,WACA,MACA,GACQ;AACR,QAAM,OAAO,aAAa,MAAM,CAAC;AACjC,SAAO,YAAY,GAAG,SAAS,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,IAAI;AACrE;AAOO,SAAS,iBAAiB,OAAkC;AACjE,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,QAAM,OAAO,MAAM,GAAG,EAAE;AACxB,QAAM,YAAY,MAAM,GAAG,EAAE;AAC7B,MAAI,QAAQ,QAAQ,aAAa,QAAQ,YAAY,IAAI,SAAS,GAAG;AACnE,UAAM,YAAY,MAAM,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AAC7C,UAAM,SAA4B,EAAE,MAAM,WAA2B,KAAA;AACrE,QAAI,kBAAkB,YAAY;AAClC,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,MAAA;AACjB;AAOO,SAAS,gBACd,WACA,QACA,OAC2C;AAC3C,QAAM,2BAAW,IAAA;AACjB,QAAM,4BAAY,IAAA;AAClB,aAAW,QAAQ,OAAO;AACxB,eAAW,KAAK,OAAO,IAAI,KAAK,CAAA,GAAI;AAClC,WAAK,IAAI,YAAY,WAAW,MAAM,CAAC,CAAC;AACxC,YAAM,IAAI,aAAa,MAAM,CAAC,CAAC;AAAA,IACjC;AAAA,EACF;AACA,SAAO,EAAE,MAAM,MAAA;AACjB;AAKO,SAAS,aAAa,OAAuB,OAA6B;AAC/E,QAAM,OAAO,QAAQ,iBAAiB,KAAK,EAAE,OAAO;AACpD,SAAO,QAAQ,MAAM,CAAC,KAAK;AAC7B;AAMO,SAAS,qBACd,WACA,QACA,OACA,OACkB;AAClB,QAAM,OAAyB,CAAA;AAC/B,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,cAAc,IAAI;AAC/B,UAAM,OAAO,KAAK;AAClB,eAAW,KAAK,OAAO,IAAI,KAAK,CAAA,GAAI;AAClC,YAAM,OAAO,YAAY,MAAM,CAAC;AAChC,WAAK,KAAK;AAAA,QACR,OAAO,YAAY,WAAW,MAAM,CAAC;AAAA;AAAA;AAAA,QAGrC,OAAO,OAAO,GAAG,IAAI,KAAK,EAAE,IAAI,MAAM,EAAE;AAAA,QACxC,OAAO,KAAK;AAAA,QACZ,MAAMC,2BAAAA,IAAC,MAAA,EAAK,WAAU,UAAA,CAAU;AAAA,MAAA,CACjC;AAAA,IACH;AAAA,EACF;AACA,MAAI,SAAS,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,GAAG;AACjD,UAAM,SAAS,iBAAiB,KAAK;AACrC,UAAM,OAAO,cAAc,OAAO,QAAQ,MAAM,CAAC,KAAK,SAAS,EAAE;AACjE,WAAO,CAAC,EAAE,OAAO,OAAO,OAAO,MAAM,MAAMA,2BAAAA,IAAC,MAAA,EAAK,WAAU,UAAA,CAAU,EAAA,GAAM,GAAG,IAAI;AAAA,EACpF;AACA,SAAO;AACT;;;;;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
import { ComboboxOption } from './Combobox';
|
|
3
|
+
export type WorkloadKind = "service" | "ingress" | "deployment" | "statefulset";
|
|
4
|
+
/** One workload returned by the loader. Ingresses may carry rule hostnames. */
|
|
5
|
+
export type WorkloadResource = {
|
|
6
|
+
name: string;
|
|
7
|
+
hosts?: string[];
|
|
8
|
+
};
|
|
9
|
+
type KindIconProps = {
|
|
10
|
+
className?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
"aria-label"?: string;
|
|
13
|
+
};
|
|
14
|
+
type KindMeta = {
|
|
15
|
+
label: string;
|
|
16
|
+
Icon: ComponentType<KindIconProps>;
|
|
17
|
+
};
|
|
18
|
+
export declare const WORKLOAD_META: Record<WorkloadKind, KindMeta>;
|
|
19
|
+
export declare const ALL_WORKLOAD_KINDS: WorkloadKind[];
|
|
20
|
+
export type ParsedWorkloadKey = {
|
|
21
|
+
namespace?: string;
|
|
22
|
+
kind?: WorkloadKind;
|
|
23
|
+
name: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function workloadKey(namespace: string | undefined, kind: WorkloadKind, r: WorkloadResource): string;
|
|
26
|
+
export declare function parseWorkloadKey(value: string): ParsedWorkloadKey;
|
|
27
|
+
export declare function loadedWorkloads(namespace: string | undefined, byKind: Partial<Record<WorkloadKind, WorkloadResource[]>>, kinds: WorkloadKind[]): {
|
|
28
|
+
keys: Set<string>;
|
|
29
|
+
names: Set<string>;
|
|
30
|
+
};
|
|
31
|
+
export declare function kindForValue(kinds: WorkloadKind[], value: string): WorkloadKind;
|
|
32
|
+
export declare function buildWorkloadOptions(namespace: string | undefined, byKind: Partial<Record<WorkloadKind, WorkloadResource[]>>, kinds: WorkloadKind[], value: string): ComboboxOption[];
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=workload-picker-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workload-picker-utils.d.ts","sourceRoot":"","sources":["../../src/components/workload-picker-utils.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAO3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC;AAEhF,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAElE,KAAK,aAAa,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACnF,KAAK,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;CAAE,CAAC;AAItE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,QAAQ,CAKxD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,YAAY,EAK5C,CAAC;AAeF,MAAM,MAAM,iBAAiB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAO1F,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,YAAY,EAClB,CAAC,EAAE,gBAAgB,GAClB,MAAM,CAGR;AAOD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAWjE;AAOD,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC,EACzD,KAAK,EAAE,YAAY,EAAE,GACpB;IAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAU3C;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAG/E;AAMD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC,EACzD,KAAK,EAAE,YAAY,EAAE,EACrB,KAAK,EAAE,MAAM,GACZ,cAAc,EAAE,CAuBlB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import "react";
|
|
3
|
+
import { K8SStatefulset, K8SDeployment, K8SIngress, K8SService } from "@flanksource/icons/mi";
|
|
4
|
+
const WORKLOAD_META = {
|
|
5
|
+
service: { label: "Service", Icon: K8SService },
|
|
6
|
+
ingress: { label: "Ingress", Icon: K8SIngress },
|
|
7
|
+
deployment: { label: "Deployment", Icon: K8SDeployment },
|
|
8
|
+
statefulset: { label: "StatefulSet", Icon: K8SStatefulset }
|
|
9
|
+
};
|
|
10
|
+
const ALL_WORKLOAD_KINDS = [
|
|
11
|
+
"service",
|
|
12
|
+
"ingress",
|
|
13
|
+
"deployment",
|
|
14
|
+
"statefulset"
|
|
15
|
+
];
|
|
16
|
+
function ingressHost(kind, r) {
|
|
17
|
+
var _a;
|
|
18
|
+
return kind === "ingress" ? (_a = r.hosts) == null ? void 0 : _a[0] : void 0;
|
|
19
|
+
}
|
|
20
|
+
function workloadName(kind, r) {
|
|
21
|
+
return ingressHost(kind, r) ?? r.name;
|
|
22
|
+
}
|
|
23
|
+
const KNOWN_KINDS = /* @__PURE__ */ new Set(["service", "ingress", "deployment", "statefulset"]);
|
|
24
|
+
function workloadKey(namespace, kind, r) {
|
|
25
|
+
const name = workloadName(kind, r);
|
|
26
|
+
return namespace ? `${namespace}/${kind}/${name}` : `${kind}/${name}`;
|
|
27
|
+
}
|
|
28
|
+
function parseWorkloadKey(value) {
|
|
29
|
+
const parts = value.split("/");
|
|
30
|
+
const name = parts.at(-1);
|
|
31
|
+
const maybeKind = parts.at(-2);
|
|
32
|
+
if (name != null && maybeKind != null && KNOWN_KINDS.has(maybeKind)) {
|
|
33
|
+
const namespace = parts.slice(0, -2).join("/");
|
|
34
|
+
const parsed = { kind: maybeKind, name };
|
|
35
|
+
if (namespace) parsed.namespace = namespace;
|
|
36
|
+
return parsed;
|
|
37
|
+
}
|
|
38
|
+
return { name: value };
|
|
39
|
+
}
|
|
40
|
+
function loadedWorkloads(namespace, byKind, kinds) {
|
|
41
|
+
const keys = /* @__PURE__ */ new Set();
|
|
42
|
+
const names = /* @__PURE__ */ new Set();
|
|
43
|
+
for (const kind of kinds) {
|
|
44
|
+
for (const r of byKind[kind] ?? []) {
|
|
45
|
+
keys.add(workloadKey(namespace, kind, r));
|
|
46
|
+
names.add(workloadName(kind, r));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { keys, names };
|
|
50
|
+
}
|
|
51
|
+
function kindForValue(kinds, value) {
|
|
52
|
+
const kind = value ? parseWorkloadKey(value).kind : void 0;
|
|
53
|
+
return kind ?? kinds[0] ?? "service";
|
|
54
|
+
}
|
|
55
|
+
function buildWorkloadOptions(namespace, byKind, kinds, value) {
|
|
56
|
+
const opts = [];
|
|
57
|
+
for (const kind of kinds) {
|
|
58
|
+
const meta = WORKLOAD_META[kind];
|
|
59
|
+
const Icon = meta.Icon;
|
|
60
|
+
for (const r of byKind[kind] ?? []) {
|
|
61
|
+
const host = ingressHost(kind, r);
|
|
62
|
+
opts.push({
|
|
63
|
+
value: workloadKey(namespace, kind, r),
|
|
64
|
+
// The label is the human name; an ingress pairs its host with the
|
|
65
|
+
// ingress name for context.
|
|
66
|
+
label: host ? `${host} (${r.name})` : r.name,
|
|
67
|
+
group: meta.label,
|
|
68
|
+
icon: /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" })
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (value && !opts.some((o) => o.value === value)) {
|
|
73
|
+
const parsed = parseWorkloadKey(value);
|
|
74
|
+
const Icon = WORKLOAD_META[parsed.kind ?? kinds[0] ?? "service"].Icon;
|
|
75
|
+
return [{ value, label: parsed.name, icon: /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" }) }, ...opts];
|
|
76
|
+
}
|
|
77
|
+
return opts;
|
|
78
|
+
}
|
|
79
|
+
export {
|
|
80
|
+
ALL_WORKLOAD_KINDS,
|
|
81
|
+
WORKLOAD_META,
|
|
82
|
+
buildWorkloadOptions,
|
|
83
|
+
kindForValue,
|
|
84
|
+
loadedWorkloads,
|
|
85
|
+
parseWorkloadKey,
|
|
86
|
+
workloadKey
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=workload-picker-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workload-picker-utils.js","sources":["../../src/components/workload-picker-utils.tsx"],"sourcesContent":["import { type ComponentType } from \"react\";\nimport {\n K8SService,\n K8SIngress,\n K8SDeployment,\n K8SStatefulset,\n} from \"@flanksource/icons/mi\";\nimport type { ComboboxOption } from \"./Combobox\";\n\n// Key encoding and option-building for WorkloadPicker: the emitted value is a\n// `[namespace/]kind/name` composite (see workloadKey / parseWorkloadKey) so two\n// workloads of different kinds that share a name don't collide.\n\nexport type WorkloadKind = \"service\" | \"ingress\" | \"deployment\" | \"statefulset\";\n\n/** One workload returned by the loader. Ingresses may carry rule hostnames. */\nexport type WorkloadResource = { name: string; hosts?: string[] };\n\ntype KindIconProps = { className?: string; title?: string; \"aria-label\"?: string };\ntype KindMeta = { label: string; Icon: ComponentType<KindIconProps> };\n\n// WORKLOAD_META maps each kind to its group header label and icon, in display\n// order. The order of the keys drives the order options/groups appear in.\nexport const WORKLOAD_META: Record<WorkloadKind, KindMeta> = {\n service: { label: \"Service\", Icon: K8SService },\n ingress: { label: \"Ingress\", Icon: K8SIngress },\n deployment: { label: \"Deployment\", Icon: K8SDeployment },\n statefulset: { label: \"StatefulSet\", Icon: K8SStatefulset },\n};\n\nexport const ALL_WORKLOAD_KINDS: WorkloadKind[] = [\n \"service\",\n \"ingress\",\n \"deployment\",\n \"statefulset\",\n];\n\n// ingressHost is the first host an ingress routes, or undefined for non-ingress\n// kinds and host-less ingresses. An ingress's name-part is its host.\nfunction ingressHost(kind: WorkloadKind, r: WorkloadResource): string | undefined {\n return kind === \"ingress\" ? r.hosts?.[0] : undefined;\n}\n\n// workloadName is the name-part of a resource's key: an ingress's first host\n// (the routable address callers want), else the resource's own name.\nfunction workloadName(kind: WorkloadKind, r: WorkloadResource): string {\n return ingressHost(kind, r) ?? r.name;\n}\n\n// ParsedWorkloadKey is the structured form of a `[namespace/]kind/name` value.\nexport type ParsedWorkloadKey = { namespace?: string; kind?: WorkloadKind; name: string };\n\nconst KNOWN_KINDS = new Set<string>([\"service\", \"ingress\", \"deployment\", \"statefulset\"]);\n\n// workloadKey is the value a resource contributes (what onChange emits): a\n// `[namespace/]kind/name` composite so two workloads of different kinds sharing\n// a name don't collide. namespace is omitted when not supplied.\nexport function workloadKey(\n namespace: string | undefined,\n kind: WorkloadKind,\n r: WorkloadResource,\n): string {\n const name = workloadName(kind, r);\n return namespace ? `${namespace}/${kind}/${name}` : `${kind}/${name}`;\n}\n\n// parseWorkloadKey splits a `[namespace/]kind/name` value back into its parts.\n// The trailing segment is always the name (a host may itself contain no slash);\n// the segment before it is the kind when it is a known workload kind, and any\n// remaining leading segment is the namespace. A bare value (no recognised\n// kind/name shape) is returned as just its name so freeform input survives.\nexport function parseWorkloadKey(value: string): ParsedWorkloadKey {\n const parts = value.split(\"/\");\n const name = parts.at(-1);\n const maybeKind = parts.at(-2);\n if (name != null && maybeKind != null && KNOWN_KINDS.has(maybeKind)) {\n const namespace = parts.slice(0, -2).join(\"/\");\n const parsed: ParsedWorkloadKey = { kind: maybeKind as WorkloadKind, name };\n if (namespace) parsed.namespace = namespace;\n return parsed;\n }\n return { name: value };\n}\n\n// loadedWorkloads collapses the loaded resources into the two membership sets a\n// strict picker validates a value against: `keys` are the full\n// `[namespace/]kind/name` keys the picker emits, `names` are the bare name-parts\n// (service name / ingress host) a consumer may persist instead. A value in\n// neither set names a workload that doesn't exist in the namespace.\nexport function loadedWorkloads(\n namespace: string | undefined,\n byKind: Partial<Record<WorkloadKind, WorkloadResource[]>>,\n kinds: WorkloadKind[],\n): { keys: Set<string>; names: Set<string> } {\n const keys = new Set<string>();\n const names = new Set<string>();\n for (const kind of kinds) {\n for (const r of byKind[kind] ?? []) {\n keys.add(workloadKey(namespace, kind, r));\n names.add(workloadName(kind, r));\n }\n }\n return { keys, names };\n}\n\n// kindForValue returns the kind encoded in the selected value, so the lead icon\n// can mirror it without consulting the loaded resources. Falls back to the first\n// offered kind when nothing is selected or the value carries no recognised kind.\nexport function kindForValue(kinds: WorkloadKind[], value: string): WorkloadKind {\n const kind = value ? parseWorkloadKey(value).kind : undefined;\n return kind ?? kinds[0] ?? \"service\";\n}\n\n// buildWorkloadOptions flattens the per-kind resources into grouped Combobox\n// options in kind order. Each option's value is its `[namespace/]kind/name` key\n// and its label the human name; a current value not present in any kind is\n// pinned first (labelled with just its name-part) so the selection stays visible.\nexport function buildWorkloadOptions(\n namespace: string | undefined,\n byKind: Partial<Record<WorkloadKind, WorkloadResource[]>>,\n kinds: WorkloadKind[],\n value: string,\n): ComboboxOption[] {\n const opts: ComboboxOption[] = [];\n for (const kind of kinds) {\n const meta = WORKLOAD_META[kind];\n const Icon = meta.Icon;\n for (const r of byKind[kind] ?? []) {\n const host = ingressHost(kind, r);\n opts.push({\n value: workloadKey(namespace, kind, r),\n // The label is the human name; an ingress pairs its host with the\n // ingress name for context.\n label: host ? `${host} (${r.name})` : r.name,\n group: meta.label,\n icon: <Icon className=\"h-4 w-4\" />,\n });\n }\n }\n if (value && !opts.some((o) => o.value === value)) {\n const parsed = parseWorkloadKey(value);\n const Icon = WORKLOAD_META[parsed.kind ?? kinds[0] ?? \"service\"].Icon;\n return [{ value, label: parsed.name, icon: <Icon className=\"h-4 w-4\" /> }, ...opts];\n }\n return opts;\n}\n"],"names":[],"mappings":";;;AAuBO,MAAM,gBAAgD;AAAA,EAC3D,SAAS,EAAE,OAAO,WAAW,MAAM,WAAA;AAAA,EACnC,SAAS,EAAE,OAAO,WAAW,MAAM,WAAA;AAAA,EACnC,YAAY,EAAE,OAAO,cAAc,MAAM,cAAA;AAAA,EACzC,aAAa,EAAE,OAAO,eAAe,MAAM,eAAA;AAC7C;AAEO,MAAM,qBAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIA,SAAS,YAAY,MAAoB,GAAyC;;AAChF,SAAO,SAAS,aAAY,OAAE,UAAF,mBAAU,KAAK;AAC7C;AAIA,SAAS,aAAa,MAAoB,GAA6B;AACrE,SAAO,YAAY,MAAM,CAAC,KAAK,EAAE;AACnC;AAKA,MAAM,kCAAkB,IAAY,CAAC,WAAW,WAAW,cAAc,aAAa,CAAC;AAKhF,SAAS,YACd,WACA,MACA,GACQ;AACR,QAAM,OAAO,aAAa,MAAM,CAAC;AACjC,SAAO,YAAY,GAAG,SAAS,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,IAAI;AACrE;AAOO,SAAS,iBAAiB,OAAkC;AACjE,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,QAAM,OAAO,MAAM,GAAG,EAAE;AACxB,QAAM,YAAY,MAAM,GAAG,EAAE;AAC7B,MAAI,QAAQ,QAAQ,aAAa,QAAQ,YAAY,IAAI,SAAS,GAAG;AACnE,UAAM,YAAY,MAAM,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AAC7C,UAAM,SAA4B,EAAE,MAAM,WAA2B,KAAA;AACrE,QAAI,kBAAkB,YAAY;AAClC,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,MAAA;AACjB;AAOO,SAAS,gBACd,WACA,QACA,OAC2C;AAC3C,QAAM,2BAAW,IAAA;AACjB,QAAM,4BAAY,IAAA;AAClB,aAAW,QAAQ,OAAO;AACxB,eAAW,KAAK,OAAO,IAAI,KAAK,CAAA,GAAI;AAClC,WAAK,IAAI,YAAY,WAAW,MAAM,CAAC,CAAC;AACxC,YAAM,IAAI,aAAa,MAAM,CAAC,CAAC;AAAA,IACjC;AAAA,EACF;AACA,SAAO,EAAE,MAAM,MAAA;AACjB;AAKO,SAAS,aAAa,OAAuB,OAA6B;AAC/E,QAAM,OAAO,QAAQ,iBAAiB,KAAK,EAAE,OAAO;AACpD,SAAO,QAAQ,MAAM,CAAC,KAAK;AAC7B;AAMO,SAAS,qBACd,WACA,QACA,OACA,OACkB;AAClB,QAAM,OAAyB,CAAA;AAC/B,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,cAAc,IAAI;AAC/B,UAAM,OAAO,KAAK;AAClB,eAAW,KAAK,OAAO,IAAI,KAAK,CAAA,GAAI;AAClC,YAAM,OAAO,YAAY,MAAM,CAAC;AAChC,WAAK,KAAK;AAAA,QACR,OAAO,YAAY,WAAW,MAAM,CAAC;AAAA;AAAA;AAAA,QAGrC,OAAO,OAAO,GAAG,IAAI,KAAK,EAAE,IAAI,MAAM,EAAE;AAAA,QACxC,OAAO,KAAK;AAAA,QACZ,MAAM,oBAAC,MAAA,EAAK,WAAU,UAAA,CAAU;AAAA,MAAA,CACjC;AAAA,IACH;AAAA,EACF;AACA,MAAI,SAAS,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,GAAG;AACjD,UAAM,SAAS,iBAAiB,KAAK;AACrC,UAAM,OAAO,cAAc,OAAO,QAAQ,MAAM,CAAC,KAAK,SAAS,EAAE;AACjE,WAAO,CAAC,EAAE,OAAO,OAAO,OAAO,MAAM,MAAM,oBAAC,MAAA,EAAK,WAAU,UAAA,CAAU,EAAA,GAAM,GAAG,IAAI;AAAA,EACpF;AACA,SAAO;AACT;"}
|
package/dist/components.cjs
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const button = require("./components/button.cjs");
|
|
4
|
+
const loading = require("./components/loading.cjs");
|
|
5
|
+
const buttonVariants = require("./components/button-variants.cjs");
|
|
4
6
|
const IconButton = require("./components/IconButton.cjs");
|
|
5
7
|
const SplitButton = require("./components/SplitButton.cjs");
|
|
6
8
|
const FormatOptionsDropdown = require("./components/FormatOptionsDropdown.cjs");
|
|
9
|
+
const formatOptions = require("./components/format-options.cjs");
|
|
7
10
|
const DateField = require("./components/DateField.cjs");
|
|
8
11
|
const DatePicker = require("./components/DatePicker.cjs");
|
|
9
12
|
const DateTimePicker = require("./components/DateTimePicker.cjs");
|
|
@@ -13,45 +16,60 @@ const FilterBar = require("./components/FilterBar.cjs");
|
|
|
13
16
|
const MultiSelect = require("./components/MultiSelect.cjs");
|
|
14
17
|
const select = require("./components/select.cjs");
|
|
15
18
|
const Combobox = require("./components/Combobox.cjs");
|
|
19
|
+
const Field = require("./components/Field.cjs");
|
|
20
|
+
const useForm = require("./components/use-form.cjs");
|
|
21
|
+
const TreePickerField = require("./components/TreePickerField.cjs");
|
|
16
22
|
const WorkloadPicker = require("./components/WorkloadPicker.cjs");
|
|
23
|
+
const workloadPickerUtils = require("./components/workload-picker-utils.cjs");
|
|
17
24
|
const SecretKeySelector = require("./components/SecretKeySelector.cjs");
|
|
18
25
|
const themeSwitcher = require("./components/theme-switcher.cjs");
|
|
19
26
|
const densitySwitcher = require("./components/density-switcher.cjs");
|
|
20
27
|
const iconMenuPicker = require("./components/icon-menu-picker.cjs");
|
|
21
28
|
const JsonSchemaForm = require("./components/JsonSchemaForm.cjs");
|
|
22
29
|
const jsonSchemaFormSize = require("./components/json-schema-form-size.cjs");
|
|
30
|
+
const jsonSchemaFormPreferences = require("./components/json-schema-form-preferences.cjs");
|
|
23
31
|
const jsonSchemaFormResolve = require("./components/json-schema-form-resolve.cjs");
|
|
24
32
|
const SplitPane = require("./layout/SplitPane.cjs");
|
|
25
33
|
const Section = require("./layout/Section.cjs");
|
|
26
34
|
const DropdownMenu = require("./overlay/DropdownMenu.cjs");
|
|
27
35
|
const HoverCard = require("./overlay/HoverCard.cjs");
|
|
28
36
|
const Modal = require("./overlay/Modal.cjs");
|
|
37
|
+
const modalStack = require("./overlay/modalStack.cjs");
|
|
29
38
|
exports.Button = button.Button;
|
|
30
|
-
exports.
|
|
39
|
+
exports.Loading = loading.Loading;
|
|
40
|
+
exports.LoadingDots = loading.LoadingDots;
|
|
41
|
+
exports.buttonVariants = buttonVariants.buttonVariants;
|
|
31
42
|
exports.IconButton = IconButton.IconButton;
|
|
32
43
|
exports.SplitButton = SplitButton.SplitButton;
|
|
33
|
-
exports.CLICKY_FORMAT_OPTIONS = FormatOptionsDropdown.CLICKY_FORMAT_OPTIONS;
|
|
34
44
|
exports.FormatOptionsDropdown = FormatOptionsDropdown.FormatOptionsDropdown;
|
|
45
|
+
exports.CLICKY_FORMAT_OPTIONS = formatOptions.CLICKY_FORMAT_OPTIONS;
|
|
35
46
|
exports.DateField = DateField.DateField;
|
|
36
47
|
exports.DatePicker = DatePicker.DatePicker;
|
|
37
48
|
exports.DateTimePicker = DateTimePicker.DateTimePicker;
|
|
38
49
|
exports.TimeRange = TimeRange.TimeRange;
|
|
39
50
|
exports.RangeSlider = RangeSlider.RangeSlider;
|
|
40
51
|
exports.FilterBar = FilterBar.FilterBar;
|
|
52
|
+
exports.applyFilterExtensions = FilterBar.applyFilterExtensions;
|
|
41
53
|
exports.MultiSelect = MultiSelect.MultiSelect;
|
|
42
54
|
exports.Select = select.Select;
|
|
43
55
|
exports.Combobox = Combobox.Combobox;
|
|
56
|
+
exports.Field = Field.Field;
|
|
57
|
+
exports.useForm = useForm.useForm;
|
|
58
|
+
exports.TreePickerField = TreePickerField.TreePickerField;
|
|
44
59
|
exports.WorkloadPicker = WorkloadPicker.WorkloadPicker;
|
|
45
|
-
exports.kindForValue =
|
|
46
|
-
exports.loadedWorkloads =
|
|
47
|
-
exports.parseWorkloadKey =
|
|
48
|
-
exports.workloadKey =
|
|
60
|
+
exports.kindForValue = workloadPickerUtils.kindForValue;
|
|
61
|
+
exports.loadedWorkloads = workloadPickerUtils.loadedWorkloads;
|
|
62
|
+
exports.parseWorkloadKey = workloadPickerUtils.parseWorkloadKey;
|
|
63
|
+
exports.workloadKey = workloadPickerUtils.workloadKey;
|
|
49
64
|
exports.SecretKeySelector = SecretKeySelector.SecretKeySelector;
|
|
50
65
|
exports.ThemeSwitcher = themeSwitcher.ThemeSwitcher;
|
|
51
66
|
exports.DensitySwitcher = densitySwitcher.DensitySwitcher;
|
|
52
67
|
exports.IconMenuPicker = iconMenuPicker.IconMenuPicker;
|
|
53
68
|
exports.JsonSchemaForm = JsonSchemaForm.JsonSchemaForm;
|
|
54
69
|
exports.DEFAULT_FORM_SIZE = jsonSchemaFormSize.DEFAULT_FORM_SIZE;
|
|
70
|
+
exports.DEFAULT_PREFERENCES_STORAGE_KEY = jsonSchemaFormPreferences.DEFAULT_PREFERENCES_STORAGE_KEY;
|
|
71
|
+
exports.readPreferences = jsonSchemaFormPreferences.readPreferences;
|
|
72
|
+
exports.writePreferences = jsonSchemaFormPreferences.writePreferences;
|
|
55
73
|
exports.effectiveProperties = jsonSchemaFormResolve.effectiveProperties;
|
|
56
74
|
exports.isOpenStringMap = jsonSchemaFormResolve.isOpenStringMap;
|
|
57
75
|
exports.matchesIf = jsonSchemaFormResolve.matchesIf;
|
|
@@ -62,4 +80,5 @@ exports.Section = Section.Section;
|
|
|
62
80
|
exports.DropdownMenu = DropdownMenu.DropdownMenu;
|
|
63
81
|
exports.HoverCard = HoverCard.HoverCard;
|
|
64
82
|
exports.Modal = Modal.Modal;
|
|
83
|
+
exports.useModalStack = modalStack.useModalStack;
|
|
65
84
|
//# sourceMappingURL=components.cjs.map
|
package/dist/components.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|