@flanksource/clicky-ui 0.2.21 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/comments/CommentAuthor.cjs +58 -0
- package/dist/comments/CommentAuthor.cjs.map +1 -0
- package/dist/comments/CommentAuthor.d.ts +17 -0
- package/dist/comments/CommentAuthor.d.ts.map +1 -0
- package/dist/comments/CommentAuthor.js +58 -0
- package/dist/comments/CommentAuthor.js.map +1 -0
- package/dist/comments/CommentCard.cjs +343 -0
- package/dist/comments/CommentCard.cjs.map +1 -0
- package/dist/comments/CommentCard.d.ts +27 -0
- package/dist/comments/CommentCard.d.ts.map +1 -0
- package/dist/comments/CommentCard.js +343 -0
- package/dist/comments/CommentCard.js.map +1 -0
- package/dist/comments/CommentComposer.cjs +207 -0
- package/dist/comments/CommentComposer.cjs.map +1 -0
- package/dist/comments/CommentComposer.d.ts +23 -0
- package/dist/comments/CommentComposer.d.ts.map +1 -0
- package/dist/comments/CommentComposer.js +207 -0
- package/dist/comments/CommentComposer.js.map +1 -0
- package/dist/comments/CommentFilterBar.cjs +145 -0
- package/dist/comments/CommentFilterBar.cjs.map +1 -0
- package/dist/comments/CommentFilterBar.d.ts +15 -0
- package/dist/comments/CommentFilterBar.d.ts.map +1 -0
- package/dist/comments/CommentFilterBar.js +145 -0
- package/dist/comments/CommentFilterBar.js.map +1 -0
- package/dist/comments/CommentMarkdown.cjs +156 -0
- package/dist/comments/CommentMarkdown.cjs.map +1 -0
- package/dist/comments/CommentMarkdown.d.ts +13 -0
- package/dist/comments/CommentMarkdown.d.ts.map +1 -0
- package/dist/comments/CommentMarkdown.js +156 -0
- package/dist/comments/CommentMarkdown.js.map +1 -0
- package/dist/comments/CommentProgress.cjs +86 -0
- package/dist/comments/CommentProgress.cjs.map +1 -0
- package/dist/comments/CommentProgress.d.ts +16 -0
- package/dist/comments/CommentProgress.d.ts.map +1 -0
- package/dist/comments/CommentProgress.js +86 -0
- package/dist/comments/CommentProgress.js.map +1 -0
- package/dist/comments/CommentProvider.cjs +99 -0
- package/dist/comments/CommentProvider.cjs.map +1 -0
- package/dist/comments/CommentProvider.d.ts +19 -0
- package/dist/comments/CommentProvider.d.ts.map +1 -0
- package/dist/comments/CommentProvider.js +99 -0
- package/dist/comments/CommentProvider.js.map +1 -0
- package/dist/comments/CommentSidePanel.cjs +219 -0
- package/dist/comments/CommentSidePanel.cjs.map +1 -0
- package/dist/comments/CommentSidePanel.d.ts +16 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -0
- package/dist/comments/CommentSidePanel.js +219 -0
- package/dist/comments/CommentSidePanel.js.map +1 -0
- package/dist/comments/CommentThread.cjs +57 -0
- package/dist/comments/CommentThread.cjs.map +1 -0
- package/dist/comments/CommentThread.d.ts +24 -0
- package/dist/comments/CommentThread.d.ts.map +1 -0
- package/dist/comments/CommentThread.js +57 -0
- package/dist/comments/CommentThread.js.map +1 -0
- package/dist/comments/CommentThreadList.cjs +124 -0
- package/dist/comments/CommentThreadList.cjs.map +1 -0
- package/dist/comments/CommentThreadList.d.ts +25 -0
- package/dist/comments/CommentThreadList.d.ts.map +1 -0
- package/dist/comments/CommentThreadList.js +124 -0
- package/dist/comments/CommentThreadList.js.map +1 -0
- package/dist/comments/GroupedComments.cjs +74 -0
- package/dist/comments/GroupedComments.cjs.map +1 -0
- package/dist/comments/GroupedComments.d.ts +18 -0
- package/dist/comments/GroupedComments.d.ts.map +1 -0
- package/dist/comments/GroupedComments.js +74 -0
- package/dist/comments/GroupedComments.js.map +1 -0
- package/dist/comments/MentionTextarea.cjs +253 -0
- package/dist/comments/MentionTextarea.cjs.map +1 -0
- package/dist/comments/MentionTextarea.d.ts +28 -0
- package/dist/comments/MentionTextarea.d.ts.map +1 -0
- package/dist/comments/MentionTextarea.js +253 -0
- package/dist/comments/MentionTextarea.js.map +1 -0
- package/dist/comments/comment-context.cjs +33 -0
- package/dist/comments/comment-context.cjs.map +1 -0
- package/dist/comments/comment-context.d.ts +32 -0
- package/dist/comments/comment-context.d.ts.map +1 -0
- package/dist/comments/comment-context.js +33 -0
- package/dist/comments/comment-context.js.map +1 -0
- package/dist/comments/comment-fixtures.d.ts +11 -0
- package/dist/comments/comment-fixtures.d.ts.map +1 -0
- package/dist/comments/comment-types.cjs +19 -0
- package/dist/comments/comment-types.cjs.map +1 -0
- package/dist/comments/comment-types.d.ts +170 -0
- package/dist/comments/comment-types.d.ts.map +1 -0
- package/dist/comments/comment-types.js +19 -0
- package/dist/comments/comment-types.js.map +1 -0
- package/dist/comments/comment-utils.cjs +216 -0
- package/dist/comments/comment-utils.cjs.map +1 -0
- package/dist/comments/comment-utils.d.ts +59 -0
- package/dist/comments/comment-utils.d.ts.map +1 -0
- package/dist/comments/comment-utils.js +216 -0
- package/dist/comments/comment-utils.js.map +1 -0
- package/dist/comments.cjs +57 -0
- package/dist/comments.cjs.map +1 -0
- package/dist/comments.d.ts +16 -0
- package/dist/comments.d.ts.map +1 -0
- package/dist/comments.js +57 -0
- package/dist/comments.js.map +1 -0
- package/dist/components/Combobox.cjs +5 -2
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +5 -2
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/FilterBar.cjs +293 -256
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +293 -256
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +22 -6
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +25 -9
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/MultiSelect.cjs +29 -32
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js +30 -33
- package/dist/components/MultiSelect.js.map +1 -1
- package/dist/components/NamespacePicker.cjs +52 -0
- package/dist/components/NamespacePicker.cjs.map +1 -0
- package/dist/components/NamespacePicker.d.ts +17 -0
- package/dist/components/NamespacePicker.d.ts.map +1 -0
- package/dist/components/NamespacePicker.js +52 -0
- package/dist/components/NamespacePicker.js.map +1 -0
- package/dist/components/TimeRange.cjs +29 -37
- package/dist/components/TimeRange.cjs.map +1 -1
- package/dist/components/TimeRange.d.ts.map +1 -1
- package/dist/components/TimeRange.js +30 -38
- package/dist/components/TimeRange.js.map +1 -1
- package/dist/components/TreePickerField.cjs +6 -3
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +6 -3
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/form-lookup-context.cjs +36 -0
- package/dist/components/form-lookup-context.cjs.map +1 -0
- package/dist/components/form-lookup-context.d.ts +9 -0
- package/dist/components/form-lookup-context.d.ts.map +1 -0
- package/dist/components/form-lookup-context.js +36 -0
- package/dist/components/form-lookup-context.js.map +1 -0
- package/dist/components/icon-menu-picker.cjs +9 -3
- package/dist/components/icon-menu-picker.cjs.map +1 -1
- package/dist/components/icon-menu-picker.d.ts.map +1 -1
- package/dist/components/icon-menu-picker.js +9 -3
- package/dist/components/icon-menu-picker.js.map +1 -1
- package/dist/components/json-schema-form-discriminator.cjs +67 -0
- package/dist/components/json-schema-form-discriminator.cjs.map +1 -0
- package/dist/components/json-schema-form-discriminator.d.ts +10 -0
- package/dist/components/json-schema-form-discriminator.d.ts.map +1 -0
- package/dist/components/json-schema-form-discriminator.js +67 -0
- package/dist/components/json-schema-form-discriminator.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +146 -3
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +22 -0
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +147 -4
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-grid.cjs +92 -0
- package/dist/components/json-schema-form-grid.cjs.map +1 -0
- package/dist/components/json-schema-form-grid.d.ts +9 -0
- package/dist/components/json-schema-form-grid.d.ts.map +1 -0
- package/dist/components/json-schema-form-grid.js +92 -0
- package/dist/components/json-schema-form-grid.js.map +1 -0
- package/dist/components/json-schema-form-refs.cjs +60 -0
- package/dist/components/json-schema-form-refs.cjs.map +1 -0
- package/dist/components/json-schema-form-refs.d.ts +3 -0
- package/dist/components/json-schema-form-refs.d.ts.map +1 -0
- package/dist/components/json-schema-form-refs.js +60 -0
- package/dist/components/json-schema-form-refs.js.map +1 -0
- package/dist/components/json-schema-form-render.cjs +34 -5
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +36 -7
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +29 -2
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +29 -2
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-template-menu.cjs +83 -0
- package/dist/components/json-schema-form-template-menu.cjs.map +1 -0
- package/dist/components/json-schema-form-template-menu.d.ts +15 -0
- package/dist/components/json-schema-form-template-menu.d.ts.map +1 -0
- package/dist/components/json-schema-form-template-menu.js +83 -0
- package/dist/components/json-schema-form-template-menu.js.map +1 -0
- package/dist/components/json-schema-form-template.cjs +18 -0
- package/dist/components/json-schema-form-template.cjs.map +1 -0
- package/dist/components/json-schema-form-template.d.ts +13 -0
- package/dist/components/json-schema-form-template.d.ts.map +1 -0
- package/dist/components/json-schema-form-template.js +18 -0
- package/dist/components/json-schema-form-template.js.map +1 -0
- package/dist/components/json-schema-form-types.d.ts +41 -2
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +8 -0
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +1 -0
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +8 -0
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/workload-picker-utils.cjs.map +1 -1
- package/dist/components/workload-picker-utils.d.ts +11 -1
- package/dist/components/workload-picker-utils.d.ts.map +1 -1
- package/dist/components/workload-picker-utils.js.map +1 -1
- package/dist/components.cjs +10 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +7 -2
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +10 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +231 -69
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +7 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.fixtures.d.ts +3 -1
- package/dist/data/Clicky.fixtures.d.ts.map +1 -1
- package/dist/data/Clicky.js +232 -70
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +23 -17
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +7 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +24 -18
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/ExecutionTree.cjs +68 -0
- package/dist/data/ExecutionTree.cjs.map +1 -0
- package/dist/data/ExecutionTree.d.ts +40 -0
- package/dist/data/ExecutionTree.d.ts.map +1 -0
- package/dist/data/ExecutionTree.js +68 -0
- package/dist/data/ExecutionTree.js.map +1 -0
- package/dist/data/Gauge.cjs +37 -4
- package/dist/data/Gauge.cjs.map +1 -1
- package/dist/data/Gauge.d.ts +6 -1
- package/dist/data/Gauge.d.ts.map +1 -1
- package/dist/data/Gauge.js +37 -4
- package/dist/data/Gauge.js.map +1 -1
- package/dist/data/GaugeHoverCard.cjs +35 -0
- package/dist/data/GaugeHoverCard.cjs.map +1 -0
- package/dist/data/GaugeHoverCard.d.ts +25 -0
- package/dist/data/GaugeHoverCard.d.ts.map +1 -0
- package/dist/data/GaugeHoverCard.js +35 -0
- package/dist/data/GaugeHoverCard.js.map +1 -0
- package/dist/data/MarkdownEditor.cjs +616 -0
- package/dist/data/MarkdownEditor.cjs.map +1 -0
- package/dist/data/MarkdownEditor.d.ts +61 -0
- package/dist/data/MarkdownEditor.d.ts.map +1 -0
- package/dist/data/MarkdownEditor.js +616 -0
- package/dist/data/MarkdownEditor.js.map +1 -0
- package/dist/data/MarkdownEditor.model.cjs +27 -0
- package/dist/data/MarkdownEditor.model.cjs.map +1 -0
- package/dist/data/MarkdownEditor.model.d.ts +38 -0
- package/dist/data/MarkdownEditor.model.d.ts.map +1 -0
- package/dist/data/MarkdownEditor.model.js +27 -0
- package/dist/data/MarkdownEditor.model.js.map +1 -0
- package/dist/data/ObjectGraph.cjs +44 -0
- package/dist/data/ObjectGraph.cjs.map +1 -0
- package/dist/data/ObjectGraph.d.ts +39 -0
- package/dist/data/ObjectGraph.d.ts.map +1 -0
- package/dist/data/ObjectGraph.js +44 -0
- package/dist/data/ObjectGraph.js.map +1 -0
- package/dist/data/SchemaViewer.cjs +152 -0
- package/dist/data/SchemaViewer.cjs.map +1 -0
- package/dist/data/SchemaViewer.d.ts +27 -0
- package/dist/data/SchemaViewer.d.ts.map +1 -0
- package/dist/data/SchemaViewer.js +152 -0
- package/dist/data/SchemaViewer.js.map +1 -0
- package/dist/data/TimeseriesCoreBars.cjs +169 -32
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts +42 -5
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +170 -33
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.cjs +5 -5
- package/dist/data/TimeseriesCoreBars.model.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.d.ts +4 -4
- package/dist/data/TimeseriesCoreBars.model.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.js +5 -5
- package/dist/data/TimeseriesCoreBars.model.js.map +1 -1
- package/dist/data/TimeseriesGauge.cjs +132 -36
- package/dist/data/TimeseriesGauge.cjs.map +1 -1
- package/dist/data/TimeseriesGauge.d.ts +15 -1
- package/dist/data/TimeseriesGauge.d.ts.map +1 -1
- package/dist/data/TimeseriesGauge.js +133 -37
- package/dist/data/TimeseriesGauge.js.map +1 -1
- package/dist/data/WorkloadCard.cjs +371 -0
- package/dist/data/WorkloadCard.cjs.map +1 -0
- package/dist/data/WorkloadCard.d.ts +25 -0
- package/dist/data/WorkloadCard.d.ts.map +1 -0
- package/dist/data/WorkloadCard.js +371 -0
- package/dist/data/WorkloadCard.js.map +1 -0
- package/dist/data/WorkloadCard.model.cjs +51 -0
- package/dist/data/WorkloadCard.model.cjs.map +1 -0
- package/dist/data/WorkloadCard.model.d.ts +53 -0
- package/dist/data/WorkloadCard.model.d.ts.map +1 -0
- package/dist/data/WorkloadCard.model.js +51 -0
- package/dist/data/WorkloadCard.model.js.map +1 -0
- package/dist/data/ai/ChatFab.cjs +3 -1
- package/dist/data/ai/ChatFab.cjs.map +1 -1
- package/dist/data/ai/ChatFab.d.ts.map +1 -1
- package/dist/data/ai/ChatFab.js +3 -1
- package/dist/data/ai/ChatFab.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +19 -9
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +4 -2
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +19 -9
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.cjs +20 -0
- package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -0
- package/dist/data/ai/ChatWindowRequestBody.d.ts +9 -0
- package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -0
- package/dist/data/ai/ChatWindowRequestBody.js +20 -0
- package/dist/data/ai/ChatWindowRequestBody.js.map +1 -0
- package/dist/data/ai/chat-window-context.cjs +2 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +1 -1
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +2 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/context.cjs.map +1 -1
- package/dist/data/ai/context.d.ts +3 -0
- package/dist/data/ai/context.d.ts.map +1 -1
- package/dist/data/ai/context.js.map +1 -1
- package/dist/data/chat/Chat.cjs +21 -1
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +11 -2
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +22 -2
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Message.cjs +13 -4
- package/dist/data/chat/Message.cjs.map +1 -1
- package/dist/data/chat/Message.d.ts +4 -2
- package/dist/data/chat/Message.d.ts.map +1 -1
- package/dist/data/chat/Message.js +13 -4
- package/dist/data/chat/Message.js.map +1 -1
- package/dist/data/chat/ToolCall.cjs +9 -4
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +3 -2
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +9 -4
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/index.d.ts +1 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +7 -0
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/gauge-stats.cjs +19 -0
- package/dist/data/gauge-stats.cjs.map +1 -0
- package/dist/data/gauge-stats.d.ts +15 -0
- package/dist/data/gauge-stats.d.ts.map +1 -0
- package/dist/data/gauge-stats.js +19 -0
- package/dist/data/gauge-stats.js.map +1 -0
- package/dist/data/schema-viewer-model.cjs +436 -0
- package/dist/data/schema-viewer-model.cjs.map +1 -0
- package/dist/data/schema-viewer-model.d.ts +64 -0
- package/dist/data/schema-viewer-model.d.ts.map +1 -0
- package/dist/data/schema-viewer-model.js +436 -0
- package/dist/data/schema-viewer-model.js.map +1 -0
- package/dist/data/version-info.cjs +2 -2
- package/dist/data/version-info.js +2 -2
- package/dist/data.cjs +30 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +14 -4
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +31 -1
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-sort.cjs +19 -10
- package/dist/hooks/use-sort.cjs.map +1 -1
- package/dist/hooks/use-sort.d.ts +3 -0
- package/dist/hooks/use-sort.d.ts.map +1 -1
- package/dist/hooks/use-sort.js +19 -10
- package/dist/hooks/use-sort.js.map +1 -1
- package/dist/index.cjs +98 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +6 -10
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +2 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +6 -10
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +50 -38
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +5 -1
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +50 -38
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/overlay/HoverCard.cjs +7 -2
- package/dist/overlay/HoverCard.cjs.map +1 -1
- package/dist/overlay/HoverCard.d.ts.map +1 -1
- package/dist/overlay/HoverCard.js +7 -2
- package/dist/overlay/HoverCard.js.map +1 -1
- package/dist/overlay/Modal.cjs +20 -17
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +21 -18
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/Toast.cjs +9 -1
- package/dist/overlay/Toast.cjs.map +1 -1
- package/dist/overlay/Toast.d.ts.map +1 -1
- package/dist/overlay/Toast.js +9 -1
- package/dist/overlay/Toast.js.map +1 -1
- package/dist/overlay/modalStack.cjs +53 -1
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts +12 -0
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +54 -2
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/overlay/zIndex.cjs +20 -0
- package/dist/overlay/zIndex.cjs.map +1 -0
- package/dist/overlay/zIndex.d.ts +39 -0
- package/dist/overlay/zIndex.d.ts.map +1 -0
- package/dist/overlay/zIndex.js +20 -0
- package/dist/overlay/zIndex.js.map +1 -0
- package/dist/rpc/EntityExplorerApp.cjs +102 -143
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +34 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +105 -146
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +135 -0
- package/dist/rpc/OperationActionBar.cjs.map +1 -0
- package/dist/rpc/OperationActionBar.d.ts +20 -0
- package/dist/rpc/OperationActionBar.d.ts.map +1 -0
- package/dist/rpc/OperationActionBar.js +135 -0
- package/dist/rpc/OperationActionBar.js.map +1 -0
- package/dist/rpc/OperationCatalog.cjs +79 -116
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +8 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +80 -117
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationCommandPage.cjs +134 -223
- package/dist/rpc/OperationCommandPage.cjs.map +1 -1
- package/dist/rpc/OperationCommandPage.d.ts +1 -1
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
- package/dist/rpc/OperationCommandPage.js +135 -224
- package/dist/rpc/OperationCommandPage.js.map +1 -1
- package/dist/rpc/OperationEntityPage.cjs +49 -100
- package/dist/rpc/OperationEntityPage.cjs.map +1 -1
- package/dist/rpc/OperationEntityPage.d.ts +6 -1
- package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
- package/dist/rpc/OperationEntityPage.js +50 -101
- package/dist/rpc/OperationEntityPage.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +43 -0
- package/dist/rpc/OperationResultView.cjs.map +1 -0
- package/dist/rpc/OperationResultView.d.ts +30 -0
- package/dist/rpc/OperationResultView.d.ts.map +1 -0
- package/dist/rpc/OperationResultView.js +43 -0
- package/dist/rpc/OperationResultView.js.map +1 -0
- package/dist/rpc/SchemaActionForm.cjs +102 -0
- package/dist/rpc/SchemaActionForm.cjs.map +1 -0
- package/dist/rpc/SchemaActionForm.d.ts +23 -0
- package/dist/rpc/SchemaActionForm.d.ts.map +1 -0
- package/dist/rpc/SchemaActionForm.js +102 -0
- package/dist/rpc/SchemaActionForm.js.map +1 -0
- package/dist/rpc/accept-options.cjs.map +1 -1
- package/dist/rpc/accept-options.d.ts +0 -1
- package/dist/rpc/accept-options.d.ts.map +1 -1
- package/dist/rpc/accept-options.js.map +1 -1
- package/dist/rpc/apiClient.cjs +34 -2
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.d.ts +4 -1
- package/dist/rpc/apiClient.d.ts.map +1 -1
- package/dist/rpc/apiClient.js +34 -2
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/clickyMetadata.cjs +4 -4
- package/dist/rpc/clickyMetadata.cjs.map +1 -1
- package/dist/rpc/clickyMetadata.d.ts +0 -1
- package/dist/rpc/clickyMetadata.d.ts.map +1 -1
- package/dist/rpc/clickyMetadata.js +4 -4
- package/dist/rpc/clickyMetadata.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +1 -0
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts +6 -1
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +1 -0
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/rpc/rowNavigation.cjs +86 -0
- package/dist/rpc/rowNavigation.cjs.map +1 -0
- package/dist/rpc/rowNavigation.d.ts +14 -0
- package/dist/rpc/rowNavigation.d.ts.map +1 -0
- package/dist/rpc/rowNavigation.js +86 -0
- package/dist/rpc/rowNavigation.js.map +1 -0
- package/dist/rpc/schemaActionPath.cjs +22 -0
- package/dist/rpc/schemaActionPath.cjs.map +1 -0
- package/dist/rpc/schemaActionPath.d.ts +4 -0
- package/dist/rpc/schemaActionPath.d.ts.map +1 -0
- package/dist/rpc/schemaActionPath.js +22 -0
- package/dist/rpc/schemaActionPath.js.map +1 -0
- package/dist/rpc/surfaceIconMap.cjs +35 -0
- package/dist/rpc/surfaceIconMap.cjs.map +1 -0
- package/dist/rpc/surfaceIconMap.d.ts +3 -0
- package/dist/rpc/surfaceIconMap.d.ts.map +1 -0
- package/dist/rpc/surfaceIconMap.js +35 -0
- package/dist/rpc/surfaceIconMap.js.map +1 -0
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +2 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc/useOperations.cjs.map +1 -1
- package/dist/rpc/useOperations.d.ts +4 -1
- package/dist/rpc/useOperations.d.ts.map +1 -1
- package/dist/rpc/useOperations.js.map +1 -1
- package/dist/rpc.cjs +4 -2
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +7 -6
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +4 -2
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
- package/dist/rpc/AcceptPicker.cjs +0 -135
- package/dist/rpc/AcceptPicker.cjs.map +0 -1
- package/dist/rpc/AcceptPicker.d.ts +0 -12
- package/dist/rpc/AcceptPicker.d.ts.map +0 -1
- package/dist/rpc/AcceptPicker.js +0 -135
- package/dist/rpc/AcceptPicker.js.map +0 -1
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const react = require("react");
|
|
4
|
+
const zIndex = require("./zIndex.cjs");
|
|
4
5
|
const stack = [];
|
|
5
6
|
const listeners = /* @__PURE__ */ new Set();
|
|
7
|
+
const escapeStack = [];
|
|
8
|
+
let escapeDocument = null;
|
|
6
9
|
function emit() {
|
|
7
10
|
for (const listener of listeners) listener();
|
|
8
11
|
}
|
|
@@ -15,6 +18,30 @@ function subscribe(listener) {
|
|
|
15
18
|
function getSnapshot() {
|
|
16
19
|
return stack.join("\0");
|
|
17
20
|
}
|
|
21
|
+
function onEscapeKeyDown(event) {
|
|
22
|
+
if (event.defaultPrevented || event.key !== "Escape" || event.isComposing || event.keyCode === 229) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const top = escapeStack[escapeStack.length - 1];
|
|
26
|
+
if (!top) return;
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
event.stopPropagation();
|
|
29
|
+
event.stopImmediatePropagation();
|
|
30
|
+
top.onEscape();
|
|
31
|
+
}
|
|
32
|
+
function ensureEscapeListener() {
|
|
33
|
+
if (escapeDocument || typeof document === "undefined") return;
|
|
34
|
+
escapeDocument = document;
|
|
35
|
+
escapeDocument.addEventListener("keydown", onEscapeKeyDown);
|
|
36
|
+
}
|
|
37
|
+
function removeEscapeLayer(id) {
|
|
38
|
+
const index = escapeStack.findIndex((entry) => entry.id === id);
|
|
39
|
+
if (index !== -1) escapeStack.splice(index, 1);
|
|
40
|
+
if (escapeStack.length === 0 && escapeDocument) {
|
|
41
|
+
escapeDocument.removeEventListener("keydown", onEscapeKeyDown);
|
|
42
|
+
escapeDocument = null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
18
45
|
function useModalStack(open) {
|
|
19
46
|
const id = react.useId();
|
|
20
47
|
react.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
@@ -29,7 +56,32 @@ function useModalStack(open) {
|
|
|
29
56
|
};
|
|
30
57
|
}, [open, id]);
|
|
31
58
|
const depth = stack.indexOf(id);
|
|
32
|
-
return {
|
|
59
|
+
return {
|
|
60
|
+
isTop: depth !== -1 && depth === stack.length - 1,
|
|
61
|
+
depth: depth === -1 ? 0 : depth
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function useEscapeLayer(open, onEscape, enabled = true) {
|
|
65
|
+
const id = react.useId();
|
|
66
|
+
const onEscapeRef = react.useRef(onEscape);
|
|
67
|
+
onEscapeRef.current = onEscape;
|
|
68
|
+
react.useEffect(() => {
|
|
69
|
+
if (!open || !enabled) return;
|
|
70
|
+
ensureEscapeListener();
|
|
71
|
+
escapeStack.push({
|
|
72
|
+
id,
|
|
73
|
+
onEscape: () => onEscapeRef.current()
|
|
74
|
+
});
|
|
75
|
+
return () => removeEscapeLayer(id);
|
|
76
|
+
}, [enabled, id, open]);
|
|
77
|
+
}
|
|
78
|
+
function useFloatingZIndex() {
|
|
79
|
+
react.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
80
|
+
if (stack.length === 0) return zIndex.zIndex.popover;
|
|
81
|
+
const topModalZ = zIndex.zIndex.modal + (stack.length - 1) * zIndex.zIndex.modalStep;
|
|
82
|
+
return topModalZ + zIndex.zIndex.popoverOverModalOffset;
|
|
33
83
|
}
|
|
84
|
+
exports.useEscapeLayer = useEscapeLayer;
|
|
85
|
+
exports.useFloatingZIndex = useFloatingZIndex;
|
|
34
86
|
exports.useModalStack = useModalStack;
|
|
35
87
|
//# sourceMappingURL=modalStack.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modalStack.cjs","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useSyncExternalStore } from \"react\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity; it only changes when an entry is pushed or\n// popped, so subscribers re-render exactly when their position could have moved.\nfunction getSnapshot() {\n return stack.join(\"
|
|
1
|
+
{"version":3,"file":"modalStack.cjs","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useRef, useSyncExternalStore } from \"react\";\nimport { zIndex } from \"./zIndex\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\nconst escapeStack: Array<{ id: string; onEscape: () => void }> = [];\nlet escapeDocument: Document | null = null;\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity; it only changes when an entry is pushed or\n// popped, so subscribers re-render exactly when their position could have moved.\nfunction getSnapshot() {\n return stack.join(\"\\u0000\");\n}\n\nfunction onEscapeKeyDown(event: KeyboardEvent) {\n if (\n event.defaultPrevented ||\n event.key !== \"Escape\" ||\n event.isComposing ||\n (event as KeyboardEvent & { keyCode?: number }).keyCode === 229\n ) {\n return;\n }\n\n const top = escapeStack[escapeStack.length - 1];\n if (!top) return;\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n top.onEscape();\n}\n\nfunction ensureEscapeListener() {\n if (escapeDocument || typeof document === \"undefined\") return;\n escapeDocument = document;\n escapeDocument.addEventListener(\"keydown\", onEscapeKeyDown);\n}\n\nfunction removeEscapeLayer(id: string) {\n const index = escapeStack.findIndex((entry) => entry.id === id);\n if (index !== -1) escapeStack.splice(index, 1);\n\n if (escapeStack.length === 0 && escapeDocument) {\n escapeDocument.removeEventListener(\"keydown\", onEscapeKeyDown);\n escapeDocument = null;\n }\n}\n\nexport type ModalStackPosition = {\n /** Whether this modal is the topmost open one and should own global affordances. */\n isTop: boolean;\n /** Zero-based depth in the stack; drives the stacking order of nested modals. */\n depth: number;\n};\n\n/**\n * Registers a modal in the global stack while `open`, returning its live\n * position. Used so a nested modal sits above its opener and only the topmost\n * modal closes on Escape.\n */\nexport function useModalStack(open: boolean): ModalStackPosition {\n const id = useId();\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!open) return;\n stack.push(id);\n emit();\n return () => {\n const index = stack.indexOf(id);\n if (index !== -1) stack.splice(index, 1);\n emit();\n };\n }, [open, id]);\n\n const depth = stack.indexOf(id);\n return {\n isTop: depth !== -1 && depth === stack.length - 1,\n depth: depth === -1 ? 0 : depth,\n };\n}\n\n/**\n * Registers an Escape-closeable overlay while `open`. The topmost registered\n * layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.\n */\nexport function useEscapeLayer(open: boolean, onEscape: () => void, enabled = true) {\n const id = useId();\n const onEscapeRef = useRef(onEscape);\n onEscapeRef.current = onEscape;\n\n useEffect(() => {\n if (!open || !enabled) return;\n\n ensureEscapeListener();\n escapeStack.push({\n id,\n onEscape: () => onEscapeRef.current(),\n });\n\n return () => removeEscapeLayer(id);\n }, [enabled, id, open]);\n}\n\n/**\n * z-index a floating layer (dropdown / combobox / tooltip / popover) should use\n * so it renders above any open modal — and below the next nested modal — or at\n * the popover floor when no modal is open. Subscribes to the modal stack so the\n * value tracks modals opening and closing.\n */\nexport function useFloatingZIndex(): number {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (stack.length === 0) return zIndex.popover;\n const topModalZ = zIndex.modal + (stack.length - 1) * zIndex.modalStep;\n return topModalZ + zIndex.popoverOverModalOffset;\n}\n"],"names":["useId","useSyncExternalStore","useEffect","useRef","zIndex"],"mappings":";;;;AAOA,MAAM,QAAkB,CAAA;AACxB,MAAM,gCAAgB,IAAA;AACtB,MAAM,cAA2D,CAAA;AACjE,IAAI,iBAAkC;AAEtC,SAAS,OAAO;AACd,aAAW,YAAY,UAAW,UAAA;AACpC;AAEA,SAAS,UAAU,UAAsB;AACvC,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM;AACX,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;AAIA,SAAS,cAAc;AACrB,SAAO,MAAM,KAAK,IAAQ;AAC5B;AAEA,SAAS,gBAAgB,OAAsB;AAC7C,MACE,MAAM,oBACN,MAAM,QAAQ,YACd,MAAM,eACL,MAA+C,YAAY,KAC5D;AACA;AAAA,EACF;AAEA,QAAM,MAAM,YAAY,YAAY,SAAS,CAAC;AAC9C,MAAI,CAAC,IAAK;AAEV,QAAM,eAAA;AACN,QAAM,gBAAA;AACN,QAAM,yBAAA;AACN,MAAI,SAAA;AACN;AAEA,SAAS,uBAAuB;AAC9B,MAAI,kBAAkB,OAAO,aAAa,YAAa;AACvD,mBAAiB;AACjB,iBAAe,iBAAiB,WAAW,eAAe;AAC5D;AAEA,SAAS,kBAAkB,IAAY;AACrC,QAAM,QAAQ,YAAY,UAAU,CAAC,UAAU,MAAM,OAAO,EAAE;AAC9D,MAAI,UAAU,GAAI,aAAY,OAAO,OAAO,CAAC;AAE7C,MAAI,YAAY,WAAW,KAAK,gBAAgB;AAC9C,mBAAe,oBAAoB,WAAW,eAAe;AAC7D,qBAAiB;AAAA,EACnB;AACF;AAcO,SAAS,cAAc,MAAmC;AAC/D,QAAM,KAAKA,MAAAA,MAAA;AACXC,6BAAqB,WAAW,aAAa,WAAW;AAExDC,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,KAAM;AACX,UAAM,KAAK,EAAE;AACb,SAAA;AACA,WAAO,MAAM;AACX,YAAM,QAAQ,MAAM,QAAQ,EAAE;AAC9B,UAAI,UAAU,GAAI,OAAM,OAAO,OAAO,CAAC;AACvC,WAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,EAAE,CAAC;AAEb,QAAM,QAAQ,MAAM,QAAQ,EAAE;AAC9B,SAAO;AAAA,IACL,OAAO,UAAU,MAAM,UAAU,MAAM,SAAS;AAAA,IAChD,OAAO,UAAU,KAAK,IAAI;AAAA,EAAA;AAE9B;AAMO,SAAS,eAAe,MAAe,UAAsB,UAAU,MAAM;AAClF,QAAM,KAAKF,MAAAA,MAAA;AACX,QAAM,cAAcG,MAAAA,OAAO,QAAQ;AACnC,cAAY,UAAU;AAEtBD,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,QAAQ,CAAC,QAAS;AAEvB,yBAAA;AACA,gBAAY,KAAK;AAAA,MACf;AAAA,MACA,UAAU,MAAM,YAAY,QAAA;AAAA,IAAQ,CACrC;AAED,WAAO,MAAM,kBAAkB,EAAE;AAAA,EACnC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC;AACxB;AAQO,SAAS,oBAA4B;AAC1CD,6BAAqB,WAAW,aAAa,WAAW;AACxD,MAAI,MAAM,WAAW,EAAG,QAAOG,OAAAA,OAAO;AACtC,QAAM,YAAYA,OAAAA,OAAO,SAAS,MAAM,SAAS,KAAKA,OAAAA,OAAO;AAC7D,SAAO,YAAYA,OAAAA,OAAO;AAC5B;;;;"}
|
|
@@ -10,4 +10,16 @@ export type ModalStackPosition = {
|
|
|
10
10
|
* modal closes on Escape.
|
|
11
11
|
*/
|
|
12
12
|
export declare function useModalStack(open: boolean): ModalStackPosition;
|
|
13
|
+
/**
|
|
14
|
+
* Registers an Escape-closeable overlay while `open`. The topmost registered
|
|
15
|
+
* layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.
|
|
16
|
+
*/
|
|
17
|
+
export declare function useEscapeLayer(open: boolean, onEscape: () => void, enabled?: boolean): void;
|
|
18
|
+
/**
|
|
19
|
+
* z-index a floating layer (dropdown / combobox / tooltip / popover) should use
|
|
20
|
+
* so it renders above any open modal — and below the next nested modal — or at
|
|
21
|
+
* the popover floor when no modal is open. Subscribes to the modal stack so the
|
|
22
|
+
* value tracks modals opening and closing.
|
|
23
|
+
*/
|
|
24
|
+
export declare function useFloatingZIndex(): number;
|
|
13
25
|
//# sourceMappingURL=modalStack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modalStack.d.ts","sourceRoot":"","sources":["../../src/overlay/modalStack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"modalStack.d.ts","sourceRoot":"","sources":["../../src/overlay/modalStack.ts"],"names":[],"mappings":"AAgEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,oFAAoF;IACpF,KAAK,EAAE,OAAO,CAAC;IACf,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAoB/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,UAAO,QAgBjF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { useId, useSyncExternalStore, useEffect } from "react";
|
|
1
|
+
import { useId, useSyncExternalStore, useEffect, useRef } from "react";
|
|
2
|
+
import { zIndex } from "./zIndex.js";
|
|
2
3
|
const stack = [];
|
|
3
4
|
const listeners = /* @__PURE__ */ new Set();
|
|
5
|
+
const escapeStack = [];
|
|
6
|
+
let escapeDocument = null;
|
|
4
7
|
function emit() {
|
|
5
8
|
for (const listener of listeners) listener();
|
|
6
9
|
}
|
|
@@ -13,6 +16,30 @@ function subscribe(listener) {
|
|
|
13
16
|
function getSnapshot() {
|
|
14
17
|
return stack.join("\0");
|
|
15
18
|
}
|
|
19
|
+
function onEscapeKeyDown(event) {
|
|
20
|
+
if (event.defaultPrevented || event.key !== "Escape" || event.isComposing || event.keyCode === 229) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const top = escapeStack[escapeStack.length - 1];
|
|
24
|
+
if (!top) return;
|
|
25
|
+
event.preventDefault();
|
|
26
|
+
event.stopPropagation();
|
|
27
|
+
event.stopImmediatePropagation();
|
|
28
|
+
top.onEscape();
|
|
29
|
+
}
|
|
30
|
+
function ensureEscapeListener() {
|
|
31
|
+
if (escapeDocument || typeof document === "undefined") return;
|
|
32
|
+
escapeDocument = document;
|
|
33
|
+
escapeDocument.addEventListener("keydown", onEscapeKeyDown);
|
|
34
|
+
}
|
|
35
|
+
function removeEscapeLayer(id) {
|
|
36
|
+
const index = escapeStack.findIndex((entry) => entry.id === id);
|
|
37
|
+
if (index !== -1) escapeStack.splice(index, 1);
|
|
38
|
+
if (escapeStack.length === 0 && escapeDocument) {
|
|
39
|
+
escapeDocument.removeEventListener("keydown", onEscapeKeyDown);
|
|
40
|
+
escapeDocument = null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
16
43
|
function useModalStack(open) {
|
|
17
44
|
const id = useId();
|
|
18
45
|
useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
@@ -27,9 +54,34 @@ function useModalStack(open) {
|
|
|
27
54
|
};
|
|
28
55
|
}, [open, id]);
|
|
29
56
|
const depth = stack.indexOf(id);
|
|
30
|
-
return {
|
|
57
|
+
return {
|
|
58
|
+
isTop: depth !== -1 && depth === stack.length - 1,
|
|
59
|
+
depth: depth === -1 ? 0 : depth
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function useEscapeLayer(open, onEscape, enabled = true) {
|
|
63
|
+
const id = useId();
|
|
64
|
+
const onEscapeRef = useRef(onEscape);
|
|
65
|
+
onEscapeRef.current = onEscape;
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (!open || !enabled) return;
|
|
68
|
+
ensureEscapeListener();
|
|
69
|
+
escapeStack.push({
|
|
70
|
+
id,
|
|
71
|
+
onEscape: () => onEscapeRef.current()
|
|
72
|
+
});
|
|
73
|
+
return () => removeEscapeLayer(id);
|
|
74
|
+
}, [enabled, id, open]);
|
|
75
|
+
}
|
|
76
|
+
function useFloatingZIndex() {
|
|
77
|
+
useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
78
|
+
if (stack.length === 0) return zIndex.popover;
|
|
79
|
+
const topModalZ = zIndex.modal + (stack.length - 1) * zIndex.modalStep;
|
|
80
|
+
return topModalZ + zIndex.popoverOverModalOffset;
|
|
31
81
|
}
|
|
32
82
|
export {
|
|
83
|
+
useEscapeLayer,
|
|
84
|
+
useFloatingZIndex,
|
|
33
85
|
useModalStack
|
|
34
86
|
};
|
|
35
87
|
//# sourceMappingURL=modalStack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modalStack.js","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useSyncExternalStore } from \"react\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity; it only changes when an entry is pushed or\n// popped, so subscribers re-render exactly when their position could have moved.\nfunction getSnapshot() {\n return stack.join(\"
|
|
1
|
+
{"version":3,"file":"modalStack.js","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useRef, useSyncExternalStore } from \"react\";\nimport { zIndex } from \"./zIndex\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\nconst escapeStack: Array<{ id: string; onEscape: () => void }> = [];\nlet escapeDocument: Document | null = null;\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity; it only changes when an entry is pushed or\n// popped, so subscribers re-render exactly when their position could have moved.\nfunction getSnapshot() {\n return stack.join(\"\\u0000\");\n}\n\nfunction onEscapeKeyDown(event: KeyboardEvent) {\n if (\n event.defaultPrevented ||\n event.key !== \"Escape\" ||\n event.isComposing ||\n (event as KeyboardEvent & { keyCode?: number }).keyCode === 229\n ) {\n return;\n }\n\n const top = escapeStack[escapeStack.length - 1];\n if (!top) return;\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n top.onEscape();\n}\n\nfunction ensureEscapeListener() {\n if (escapeDocument || typeof document === \"undefined\") return;\n escapeDocument = document;\n escapeDocument.addEventListener(\"keydown\", onEscapeKeyDown);\n}\n\nfunction removeEscapeLayer(id: string) {\n const index = escapeStack.findIndex((entry) => entry.id === id);\n if (index !== -1) escapeStack.splice(index, 1);\n\n if (escapeStack.length === 0 && escapeDocument) {\n escapeDocument.removeEventListener(\"keydown\", onEscapeKeyDown);\n escapeDocument = null;\n }\n}\n\nexport type ModalStackPosition = {\n /** Whether this modal is the topmost open one and should own global affordances. */\n isTop: boolean;\n /** Zero-based depth in the stack; drives the stacking order of nested modals. */\n depth: number;\n};\n\n/**\n * Registers a modal in the global stack while `open`, returning its live\n * position. Used so a nested modal sits above its opener and only the topmost\n * modal closes on Escape.\n */\nexport function useModalStack(open: boolean): ModalStackPosition {\n const id = useId();\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!open) return;\n stack.push(id);\n emit();\n return () => {\n const index = stack.indexOf(id);\n if (index !== -1) stack.splice(index, 1);\n emit();\n };\n }, [open, id]);\n\n const depth = stack.indexOf(id);\n return {\n isTop: depth !== -1 && depth === stack.length - 1,\n depth: depth === -1 ? 0 : depth,\n };\n}\n\n/**\n * Registers an Escape-closeable overlay while `open`. The topmost registered\n * layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.\n */\nexport function useEscapeLayer(open: boolean, onEscape: () => void, enabled = true) {\n const id = useId();\n const onEscapeRef = useRef(onEscape);\n onEscapeRef.current = onEscape;\n\n useEffect(() => {\n if (!open || !enabled) return;\n\n ensureEscapeListener();\n escapeStack.push({\n id,\n onEscape: () => onEscapeRef.current(),\n });\n\n return () => removeEscapeLayer(id);\n }, [enabled, id, open]);\n}\n\n/**\n * z-index a floating layer (dropdown / combobox / tooltip / popover) should use\n * so it renders above any open modal — and below the next nested modal — or at\n * the popover floor when no modal is open. Subscribes to the modal stack so the\n * value tracks modals opening and closing.\n */\nexport function useFloatingZIndex(): number {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (stack.length === 0) return zIndex.popover;\n const topModalZ = zIndex.modal + (stack.length - 1) * zIndex.modalStep;\n return topModalZ + zIndex.popoverOverModalOffset;\n}\n"],"names":[],"mappings":";;AAOA,MAAM,QAAkB,CAAA;AACxB,MAAM,gCAAgB,IAAA;AACtB,MAAM,cAA2D,CAAA;AACjE,IAAI,iBAAkC;AAEtC,SAAS,OAAO;AACd,aAAW,YAAY,UAAW,UAAA;AACpC;AAEA,SAAS,UAAU,UAAsB;AACvC,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM;AACX,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;AAIA,SAAS,cAAc;AACrB,SAAO,MAAM,KAAK,IAAQ;AAC5B;AAEA,SAAS,gBAAgB,OAAsB;AAC7C,MACE,MAAM,oBACN,MAAM,QAAQ,YACd,MAAM,eACL,MAA+C,YAAY,KAC5D;AACA;AAAA,EACF;AAEA,QAAM,MAAM,YAAY,YAAY,SAAS,CAAC;AAC9C,MAAI,CAAC,IAAK;AAEV,QAAM,eAAA;AACN,QAAM,gBAAA;AACN,QAAM,yBAAA;AACN,MAAI,SAAA;AACN;AAEA,SAAS,uBAAuB;AAC9B,MAAI,kBAAkB,OAAO,aAAa,YAAa;AACvD,mBAAiB;AACjB,iBAAe,iBAAiB,WAAW,eAAe;AAC5D;AAEA,SAAS,kBAAkB,IAAY;AACrC,QAAM,QAAQ,YAAY,UAAU,CAAC,UAAU,MAAM,OAAO,EAAE;AAC9D,MAAI,UAAU,GAAI,aAAY,OAAO,OAAO,CAAC;AAE7C,MAAI,YAAY,WAAW,KAAK,gBAAgB;AAC9C,mBAAe,oBAAoB,WAAW,eAAe;AAC7D,qBAAiB;AAAA,EACnB;AACF;AAcO,SAAS,cAAc,MAAmC;AAC/D,QAAM,KAAK,MAAA;AACX,uBAAqB,WAAW,aAAa,WAAW;AAExD,YAAU,MAAM;AACd,QAAI,CAAC,KAAM;AACX,UAAM,KAAK,EAAE;AACb,SAAA;AACA,WAAO,MAAM;AACX,YAAM,QAAQ,MAAM,QAAQ,EAAE;AAC9B,UAAI,UAAU,GAAI,OAAM,OAAO,OAAO,CAAC;AACvC,WAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,EAAE,CAAC;AAEb,QAAM,QAAQ,MAAM,QAAQ,EAAE;AAC9B,SAAO;AAAA,IACL,OAAO,UAAU,MAAM,UAAU,MAAM,SAAS;AAAA,IAChD,OAAO,UAAU,KAAK,IAAI;AAAA,EAAA;AAE9B;AAMO,SAAS,eAAe,MAAe,UAAsB,UAAU,MAAM;AAClF,QAAM,KAAK,MAAA;AACX,QAAM,cAAc,OAAO,QAAQ;AACnC,cAAY,UAAU;AAEtB,YAAU,MAAM;AACd,QAAI,CAAC,QAAQ,CAAC,QAAS;AAEvB,yBAAA;AACA,gBAAY,KAAK;AAAA,MACf;AAAA,MACA,UAAU,MAAM,YAAY,QAAA;AAAA,IAAQ,CACrC;AAED,WAAO,MAAM,kBAAkB,EAAE;AAAA,EACnC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC;AACxB;AAQO,SAAS,oBAA4B;AAC1C,uBAAqB,WAAW,aAAa,WAAW;AACxD,MAAI,MAAM,WAAW,EAAG,QAAO,OAAO;AACtC,QAAM,YAAY,OAAO,SAAS,MAAM,SAAS,KAAK,OAAO;AAC7D,SAAO,YAAY,OAAO;AAC5B;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const zIndex = {
|
|
4
|
+
/** Persistent chat launcher. */
|
|
5
|
+
chatFab: 60,
|
|
6
|
+
/** Floating chat windows; `ChatWindowManager` increments from this base. */
|
|
7
|
+
chatWindow: 61,
|
|
8
|
+
/** Floating transient content when NO modal is open (above app chrome). */
|
|
9
|
+
popover: 9e3,
|
|
10
|
+
/** Modal/dialog at depth 0; nested modals add `modalStep` per level. */
|
|
11
|
+
modal: 1e4,
|
|
12
|
+
/** Per-level step between stacked modals. */
|
|
13
|
+
modalStep: 10,
|
|
14
|
+
/** How far above the top modal floating content sits (below the next nest). */
|
|
15
|
+
popoverOverModalOffset: 5,
|
|
16
|
+
/** Toasts / notifications — always the topmost layer. */
|
|
17
|
+
toast: 1e5
|
|
18
|
+
};
|
|
19
|
+
exports.zIndex = zIndex;
|
|
20
|
+
//# sourceMappingURL=zIndex.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zIndex.cjs","sources":["../../src/overlay/zIndex.ts"],"sourcesContent":["/**\n * Centralized z-index scale for clicky-ui overlays — the single source of truth\n * so stacking conflicts (e.g. a dropdown opened inside a modal rendering behind\n * it) cannot recur.\n *\n * These are applied as inline `style={{ zIndex }}`, never as arbitrary `z-[N]`\n * Tailwind classes: a consumer's Tailwind build only generates the arbitrary\n * classes it can scan from clicky-ui's published dist, so a freshly chosen\n * `z-[N]` may silently emit no rule. Inline styles are immune to that.\n *\n * Floating, transient content (dropdown / combobox / menu / tooltip / popover)\n * must clear whatever modal is open, so its z-index is computed relative to the\n * active modal via `useFloatingZIndex` (see ./modalStack) rather than taken from\n * a constant here.\n *\n * Layers NOT listed here are intentionally local: they live inside their own\n * stacking context and never participate in the global ordering —\n * `Timeline` (`z-[1]`), `RangeSlider` thumbs (20/30), and `Modal`'s\n * `ConfirmClosePrompt` (`z-10`, relative to the modal panel).\n */\nexport const zIndex = {\n /** In-flow raised affordances (sticky bits). */\n raised: 30,\n /** Persistent chat launcher. */\n chatFab: 60,\n /** Floating chat windows; `ChatWindowManager` increments from this base. */\n chatWindow: 61,\n /** Floating transient content when NO modal is open (above app chrome). */\n popover: 9000,\n /** Modal/dialog at depth 0; nested modals add `modalStep` per level. */\n modal: 10000,\n /** Per-level step between stacked modals. */\n modalStep: 10,\n /** How far above the top modal floating content sits (below the next nest). */\n popoverOverModalOffset: 5,\n /** Toasts / notifications — always the topmost layer. */\n toast: 100000,\n} as const;\n"],"names":[],"mappings":";;AAoBO,MAAM,SAAS;AAAA;AAAA,EAIpB,SAAS;AAAA;AAAA,EAET,YAAY;AAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,EAET,OAAO;AAAA;AAAA,EAEP,WAAW;AAAA;AAAA,EAEX,wBAAwB;AAAA;AAAA,EAExB,OAAO;AACT;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized z-index scale for clicky-ui overlays — the single source of truth
|
|
3
|
+
* so stacking conflicts (e.g. a dropdown opened inside a modal rendering behind
|
|
4
|
+
* it) cannot recur.
|
|
5
|
+
*
|
|
6
|
+
* These are applied as inline `style={{ zIndex }}`, never as arbitrary `z-[N]`
|
|
7
|
+
* Tailwind classes: a consumer's Tailwind build only generates the arbitrary
|
|
8
|
+
* classes it can scan from clicky-ui's published dist, so a freshly chosen
|
|
9
|
+
* `z-[N]` may silently emit no rule. Inline styles are immune to that.
|
|
10
|
+
*
|
|
11
|
+
* Floating, transient content (dropdown / combobox / menu / tooltip / popover)
|
|
12
|
+
* must clear whatever modal is open, so its z-index is computed relative to the
|
|
13
|
+
* active modal via `useFloatingZIndex` (see ./modalStack) rather than taken from
|
|
14
|
+
* a constant here.
|
|
15
|
+
*
|
|
16
|
+
* Layers NOT listed here are intentionally local: they live inside their own
|
|
17
|
+
* stacking context and never participate in the global ordering —
|
|
18
|
+
* `Timeline` (`z-[1]`), `RangeSlider` thumbs (20/30), and `Modal`'s
|
|
19
|
+
* `ConfirmClosePrompt` (`z-10`, relative to the modal panel).
|
|
20
|
+
*/
|
|
21
|
+
export declare const zIndex: {
|
|
22
|
+
/** In-flow raised affordances (sticky bits). */
|
|
23
|
+
readonly raised: 30;
|
|
24
|
+
/** Persistent chat launcher. */
|
|
25
|
+
readonly chatFab: 60;
|
|
26
|
+
/** Floating chat windows; `ChatWindowManager` increments from this base. */
|
|
27
|
+
readonly chatWindow: 61;
|
|
28
|
+
/** Floating transient content when NO modal is open (above app chrome). */
|
|
29
|
+
readonly popover: 9000;
|
|
30
|
+
/** Modal/dialog at depth 0; nested modals add `modalStep` per level. */
|
|
31
|
+
readonly modal: 10000;
|
|
32
|
+
/** Per-level step between stacked modals. */
|
|
33
|
+
readonly modalStep: 10;
|
|
34
|
+
/** How far above the top modal floating content sits (below the next nest). */
|
|
35
|
+
readonly popoverOverModalOffset: 5;
|
|
36
|
+
/** Toasts / notifications — always the topmost layer. */
|
|
37
|
+
readonly toast: 100000;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=zIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zIndex.d.ts","sourceRoot":"","sources":["../../src/overlay/zIndex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,MAAM;IACjB,gDAAgD;;IAEhD,gCAAgC;;IAEhC,4EAA4E;;IAE5E,2EAA2E;;IAE3E,wEAAwE;;IAExE,6CAA6C;;IAE7C,+EAA+E;;IAE/E,yDAAyD;;CAEjD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const zIndex = {
|
|
2
|
+
/** Persistent chat launcher. */
|
|
3
|
+
chatFab: 60,
|
|
4
|
+
/** Floating chat windows; `ChatWindowManager` increments from this base. */
|
|
5
|
+
chatWindow: 61,
|
|
6
|
+
/** Floating transient content when NO modal is open (above app chrome). */
|
|
7
|
+
popover: 9e3,
|
|
8
|
+
/** Modal/dialog at depth 0; nested modals add `modalStep` per level. */
|
|
9
|
+
modal: 1e4,
|
|
10
|
+
/** Per-level step between stacked modals. */
|
|
11
|
+
modalStep: 10,
|
|
12
|
+
/** How far above the top modal floating content sits (below the next nest). */
|
|
13
|
+
popoverOverModalOffset: 5,
|
|
14
|
+
/** Toasts / notifications — always the topmost layer. */
|
|
15
|
+
toast: 1e5
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
zIndex
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=zIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zIndex.js","sources":["../../src/overlay/zIndex.ts"],"sourcesContent":["/**\n * Centralized z-index scale for clicky-ui overlays — the single source of truth\n * so stacking conflicts (e.g. a dropdown opened inside a modal rendering behind\n * it) cannot recur.\n *\n * These are applied as inline `style={{ zIndex }}`, never as arbitrary `z-[N]`\n * Tailwind classes: a consumer's Tailwind build only generates the arbitrary\n * classes it can scan from clicky-ui's published dist, so a freshly chosen\n * `z-[N]` may silently emit no rule. Inline styles are immune to that.\n *\n * Floating, transient content (dropdown / combobox / menu / tooltip / popover)\n * must clear whatever modal is open, so its z-index is computed relative to the\n * active modal via `useFloatingZIndex` (see ./modalStack) rather than taken from\n * a constant here.\n *\n * Layers NOT listed here are intentionally local: they live inside their own\n * stacking context and never participate in the global ordering —\n * `Timeline` (`z-[1]`), `RangeSlider` thumbs (20/30), and `Modal`'s\n * `ConfirmClosePrompt` (`z-10`, relative to the modal panel).\n */\nexport const zIndex = {\n /** In-flow raised affordances (sticky bits). */\n raised: 30,\n /** Persistent chat launcher. */\n chatFab: 60,\n /** Floating chat windows; `ChatWindowManager` increments from this base. */\n chatWindow: 61,\n /** Floating transient content when NO modal is open (above app chrome). */\n popover: 9000,\n /** Modal/dialog at depth 0; nested modals add `modalStep` per level. */\n modal: 10000,\n /** Per-level step between stacked modals. */\n modalStep: 10,\n /** How far above the top modal floating content sits (below the next nest). */\n popoverOverModalOffset: 5,\n /** Toasts / notifications — always the topmost layer. */\n toast: 100000,\n} as const;\n"],"names":[],"mappings":"AAoBO,MAAM,SAAS;AAAA;AAAA,EAIpB,SAAS;AAAA;AAAA,EAET,YAAY;AAAA;AAAA,EAEZ,SAAS;AAAA;AAAA,EAET,OAAO;AAAA;AAAA,EAEP,WAAW;AAAA;AAAA,EAEX,wBAAwB;AAAA;AAAA,EAExB,OAAO;AACT;"}
|
|
@@ -3,47 +3,30 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const themeSwitcher = require("../components/theme-switcher.cjs");
|
|
6
|
+
const AppShell = require("../layout/AppShell.cjs");
|
|
6
7
|
const clickyMetadata = require("./clickyMetadata.cjs");
|
|
7
8
|
const commandHref = require("./commandHref.cjs");
|
|
8
9
|
const router = require("./router.cjs");
|
|
9
10
|
const OperationCatalog = require("./OperationCatalog.cjs");
|
|
10
11
|
const OperationCommandPage = require("./OperationCommandPage.cjs");
|
|
11
12
|
const OperationEntityPage = require("./OperationEntityPage.cjs");
|
|
13
|
+
const surfaceIconMap = require("./surfaceIconMap.cjs");
|
|
12
14
|
const useOperations = require("./useOperations.cjs");
|
|
13
|
-
const
|
|
15
|
+
const SIDEBAR_COLLAPSED_KEY = "clicky-ui:sidebar:collapsed";
|
|
14
16
|
function EntityExplorerApp({
|
|
15
17
|
client,
|
|
16
18
|
basePath = "",
|
|
17
19
|
showApiExplorer = true,
|
|
18
|
-
|
|
20
|
+
formExtensions,
|
|
21
|
+
formActions,
|
|
22
|
+
resultRenderer
|
|
19
23
|
}) {
|
|
24
|
+
const formPre = formExtensions == null ? void 0 : formExtensions.pre;
|
|
25
|
+
const formPost = formExtensions == null ? void 0 : formExtensions.post;
|
|
20
26
|
const { pathname, renderLink, navigate } = router.useRouter();
|
|
21
|
-
const {
|
|
27
|
+
const { spec } = useOperations.useOperations(client);
|
|
22
28
|
const surfaces = react.useMemo(() => clickyMetadata.getClickySurfaces(spec), [spec]);
|
|
23
29
|
const surfaceGroups = react.useMemo(() => groupSurfacesByParent(surfaces), [surfaces]);
|
|
24
|
-
const listHrefBySurface = react.useMemo(() => {
|
|
25
|
-
const out = {};
|
|
26
|
-
for (const surface of surfaces) {
|
|
27
|
-
const listOp = clickyMetadata.findSurfaceListOperation(operations, surface.key);
|
|
28
|
-
if (!(listOp == null ? void 0 : listOp.operation.operationId)) continue;
|
|
29
|
-
const href = commandHref.buildCommandHref(basePath, {
|
|
30
|
-
operation: listOp,
|
|
31
|
-
request: { command: listOp.operation.operationId, autoRun: true }
|
|
32
|
-
});
|
|
33
|
-
if (href) out[surface.key] = href;
|
|
34
|
-
}
|
|
35
|
-
return out;
|
|
36
|
-
}, [basePath, operations, surfaces]);
|
|
37
|
-
const [collapsedGroups, setCollapsedGroups] = react.useState(
|
|
38
|
-
() => readCollapsedGroups()
|
|
39
|
-
);
|
|
40
|
-
const toggleGroup = react.useCallback((parent) => {
|
|
41
|
-
setCollapsedGroups((prev) => {
|
|
42
|
-
const next = { ...prev, [parent]: !prev[parent] };
|
|
43
|
-
writeCollapsedGroups(next);
|
|
44
|
-
return next;
|
|
45
|
-
});
|
|
46
|
-
}, []);
|
|
47
30
|
const defaultSurface = react.useMemo(
|
|
48
31
|
() => surfaces.find((surface) => !surface.admin) ?? surfaces[0],
|
|
49
32
|
[surfaces]
|
|
@@ -75,104 +58,104 @@ function EntityExplorerApp({
|
|
|
75
58
|
}),
|
|
76
59
|
[]
|
|
77
60
|
);
|
|
61
|
+
const navSections = react.useMemo(() => {
|
|
62
|
+
const sections = surfaceGroups.map((group) => ({
|
|
63
|
+
label: group.label,
|
|
64
|
+
items: group.surfaces.map((surface) => {
|
|
65
|
+
const icon = surfaceIconMap.resolveSurfaceIcon(surface.icon);
|
|
66
|
+
return {
|
|
67
|
+
key: surface.key,
|
|
68
|
+
label: surface.title,
|
|
69
|
+
...icon ? { icon } : {},
|
|
70
|
+
active: isSurfaceRouteActive(resolvedRoute, surface.key),
|
|
71
|
+
to: commandHref.withBasePath(basePath, `/${surface.key}`)
|
|
72
|
+
};
|
|
73
|
+
})
|
|
74
|
+
}));
|
|
75
|
+
if (showApiExplorer) {
|
|
76
|
+
sections.push({
|
|
77
|
+
items: [
|
|
78
|
+
{
|
|
79
|
+
key: explorerDefinition.key,
|
|
80
|
+
label: explorerDefinition.title,
|
|
81
|
+
active: resolvedRoute.kind === "explorer" || resolvedRoute.kind === "command",
|
|
82
|
+
to: commandHref.withBasePath(basePath, "/explorer")
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return sections;
|
|
88
|
+
}, [surfaceGroups, basePath, resolvedRoute, showApiExplorer, explorerDefinition]);
|
|
78
89
|
react.useEffect(() => {
|
|
79
90
|
if (defaultSurface == null || relativePath !== "/") return;
|
|
80
91
|
navigate(commandHref.withBasePath(basePath, `/${defaultSurface.key}`), { replace: true });
|
|
81
92
|
}, [basePath, defaultSurface, relativePath, navigate]);
|
|
82
|
-
const content = /* @__PURE__ */ jsxRuntime.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-
|
|
93
|
+
const content = /* @__PURE__ */ jsxRuntime.jsx(
|
|
94
|
+
AppShell.AppShell,
|
|
95
|
+
{
|
|
96
|
+
brand: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
97
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-sm font-semibold", children: (spec == null ? void 0 : spec.info.title) ?? "Clicky Explorer" }),
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-xs text-sidebar-foreground/60", children: "Metadata-driven entity explorer" })
|
|
87
99
|
] }),
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
backHref: commandHref.withBasePath(basePath, `/${resolvedRoute.surface.key}`),
|
|
148
|
-
backLabel: `Back to ${resolvedRoute.surface.title}`,
|
|
149
|
-
commandRuntime,
|
|
150
|
-
...resolvedRoute.id ? { id: resolvedRoute.id } : {}
|
|
151
|
-
}
|
|
152
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(UnknownSurface, { surfaceKey: resolvedRoute.surfaceKey }) : resolvedRoute.kind === "command" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
153
|
-
OperationCommandPage.OperationCommandPage,
|
|
154
|
-
{
|
|
155
|
-
client,
|
|
156
|
-
backHref: commandHref.withBasePath(basePath, "/explorer"),
|
|
157
|
-
backLabel: "Back to API Explorer",
|
|
158
|
-
renderLink,
|
|
159
|
-
commandRuntime,
|
|
160
|
-
initialValues: commandInitialValues,
|
|
161
|
-
autoRun: true,
|
|
162
|
-
...resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {}
|
|
163
|
-
}
|
|
164
|
-
) : resolvedRoute.kind === "explorer" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
165
|
-
OperationCatalog.OperationCatalog,
|
|
166
|
-
{
|
|
167
|
-
definition: explorerDefinition,
|
|
168
|
-
entities: [],
|
|
169
|
-
allOperations: true,
|
|
170
|
-
client,
|
|
171
|
-
renderLink,
|
|
172
|
-
commandRuntime
|
|
173
|
-
}
|
|
174
|
-
) : defaultSurface == null ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: "Loading surfaces…" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: "Redirecting…" }) })
|
|
175
|
-
] });
|
|
100
|
+
navSections,
|
|
101
|
+
sidebarFooter: /* @__PURE__ */ jsxRuntime.jsx(themeSwitcher.ThemeSwitcher, {}),
|
|
102
|
+
collapsedStorageKey: SIDEBAR_COLLAPSED_KEY,
|
|
103
|
+
contentClassName: "p-6",
|
|
104
|
+
children: resolvedRoute.kind === "surface" ? resolvedRoute.surface ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
105
|
+
OperationCatalog.OperationCatalog,
|
|
106
|
+
{
|
|
107
|
+
definition: clickyMetadata.makeSurfaceDefinition(resolvedRoute.surface),
|
|
108
|
+
entities: [resolvedRoute.surface.entity],
|
|
109
|
+
client,
|
|
110
|
+
renderLink,
|
|
111
|
+
surfaceKey: resolvedRoute.surface.key,
|
|
112
|
+
commandRuntime,
|
|
113
|
+
...formPre ? { formPre } : {},
|
|
114
|
+
...formPost ? { formPost } : {},
|
|
115
|
+
...formActions ? { formActions } : {},
|
|
116
|
+
...resultRenderer ? { resultRenderer } : {}
|
|
117
|
+
}
|
|
118
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(UnknownSurface, { surfaceKey: resolvedRoute.surfaceKey }) : resolvedRoute.kind === "entity" ? resolvedRoute.surface ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
119
|
+
OperationEntityPage.OperationEntityPage,
|
|
120
|
+
{
|
|
121
|
+
definition: clickyMetadata.makeSurfaceDefinition(resolvedRoute.surface),
|
|
122
|
+
entities: [resolvedRoute.surface.entity],
|
|
123
|
+
client,
|
|
124
|
+
renderLink,
|
|
125
|
+
surfaceKey: resolvedRoute.surface.key,
|
|
126
|
+
backHref: commandHref.withBasePath(basePath, `/${resolvedRoute.surface.key}`),
|
|
127
|
+
backLabel: `Back to ${resolvedRoute.surface.title}`,
|
|
128
|
+
commandRuntime,
|
|
129
|
+
...formPre ? { formPre } : {},
|
|
130
|
+
...formPost ? { formPost } : {},
|
|
131
|
+
...formActions ? { formActions } : {},
|
|
132
|
+
...resolvedRoute.id ? { id: resolvedRoute.id } : {}
|
|
133
|
+
}
|
|
134
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(UnknownSurface, { surfaceKey: resolvedRoute.surfaceKey }) : resolvedRoute.kind === "command" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
135
|
+
OperationCommandPage.OperationCommandPage,
|
|
136
|
+
{
|
|
137
|
+
client,
|
|
138
|
+
backHref: commandHref.withBasePath(basePath, "/explorer"),
|
|
139
|
+
backLabel: "Back to API Explorer",
|
|
140
|
+
renderLink,
|
|
141
|
+
commandRuntime,
|
|
142
|
+
initialValues: commandInitialValues,
|
|
143
|
+
autoRun: true,
|
|
144
|
+
...resolvedRoute.operationId ? { operationId: resolvedRoute.operationId } : {}
|
|
145
|
+
}
|
|
146
|
+
) : resolvedRoute.kind === "explorer" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
147
|
+
OperationCatalog.OperationCatalog,
|
|
148
|
+
{
|
|
149
|
+
definition: explorerDefinition,
|
|
150
|
+
entities: [],
|
|
151
|
+
allOperations: true,
|
|
152
|
+
client,
|
|
153
|
+
renderLink,
|
|
154
|
+
commandRuntime
|
|
155
|
+
}
|
|
156
|
+
) : defaultSurface == null ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: "Loading surfaces…" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: "Redirecting…" })
|
|
157
|
+
}
|
|
158
|
+
);
|
|
176
159
|
return content;
|
|
177
160
|
}
|
|
178
161
|
function parseExplorerRoute(pathname) {
|
|
@@ -207,12 +190,6 @@ function resolveRouteSurface(route, surfaces) {
|
|
|
207
190
|
function isSurfaceRouteActive(route, surfaceKey) {
|
|
208
191
|
return route.kind === "surface" && route.surfaceKey === surfaceKey || route.kind === "entity" && route.surfaceKey === surfaceKey;
|
|
209
192
|
}
|
|
210
|
-
function navLinkClassName(active) {
|
|
211
|
-
return [
|
|
212
|
-
"rounded-md px-2 py-1.5 text-sm transition-colors",
|
|
213
|
-
active ? "bg-accent text-accent-foreground" : "text-foreground hover:bg-accent"
|
|
214
|
-
].join(" ");
|
|
215
|
-
}
|
|
216
193
|
function stripBasePath(pathname, basePath) {
|
|
217
194
|
const base = commandHref.trimTrailingSlash(basePath);
|
|
218
195
|
if (!base || base === "/") {
|
|
@@ -254,24 +231,6 @@ function titleCase(value) {
|
|
|
254
231
|
if (!value) return value;
|
|
255
232
|
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
256
233
|
}
|
|
257
|
-
function readCollapsedGroups() {
|
|
258
|
-
if (typeof window === "undefined") return {};
|
|
259
|
-
try {
|
|
260
|
-
const raw = window.localStorage.getItem(SURFACE_GROUP_STATE_KEY);
|
|
261
|
-
if (!raw) return {};
|
|
262
|
-
const parsed = JSON.parse(raw);
|
|
263
|
-
return parsed && typeof parsed === "object" ? parsed : {};
|
|
264
|
-
} catch {
|
|
265
|
-
return {};
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
function writeCollapsedGroups(state) {
|
|
269
|
-
if (typeof window === "undefined") return;
|
|
270
|
-
try {
|
|
271
|
-
window.localStorage.setItem(SURFACE_GROUP_STATE_KEY, JSON.stringify(state));
|
|
272
|
-
} catch {
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
234
|
function readCommandQueryParams() {
|
|
276
235
|
if (typeof window === "undefined") {
|
|
277
236
|
return { initialValues: {}, autoRun: false };
|