@flanksource/clicky-ui 0.3.34 → 0.3.35
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/README.md +4 -0
- package/dist/ai.cjs +3 -0
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +3 -0
- package/dist/ai.js.map +1 -1
- package/dist/comments/CommentCard.d.ts +1 -1
- package/dist/comments/CommentProvider.d.ts +1 -1
- package/dist/comments/CommentThread.d.ts +1 -1
- package/dist/comments/CommentThreadList.d.ts +1 -1
- package/dist/comments/MentionTextarea.d.ts +1 -1
- package/dist/comments/comment-context.d.ts +4 -4
- package/dist/comments/comment-fixtures.d.ts +1 -1
- package/dist/comments/comment-types.d.ts +1 -1
- package/dist/components/AccordionList.d.ts +1 -1
- package/dist/components/ComboboxControl.d.ts +1 -1
- package/dist/components/ComboboxMenu.d.ts +2 -2
- package/dist/components/ComboboxTags.cjs +41 -11
- package/dist/components/ComboboxTags.cjs.map +1 -1
- package/dist/components/ComboboxTags.d.ts +6 -0
- package/dist/components/ComboboxTags.d.ts.map +1 -1
- package/dist/components/ComboboxTags.js +41 -11
- package/dist/components/ComboboxTags.js.map +1 -1
- package/dist/components/DateField.d.ts +3 -3
- package/dist/components/DatePicker.d.ts +3 -3
- package/dist/components/DateTimePicker.d.ts +3 -3
- package/dist/components/ErrorWrapper.d.ts +2 -2
- package/dist/components/Field.d.ts +1 -1
- package/dist/components/FilterBar.d.ts +1 -1
- package/dist/components/FormLookupProvider.d.ts +1 -1
- package/dist/components/FormatOptionsDropdown.d.ts +1 -1
- package/dist/components/IconButton.d.ts +3 -3
- package/dist/components/InputField.d.ts +2 -2
- package/dist/components/ItemActions.d.ts +1 -1
- package/dist/components/JsonSchemaForm.cjs +17 -36
- 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 +17 -36
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/ListMenu.d.ts +1 -1
- package/dist/components/MultiSelect.d.ts +1 -1
- package/dist/components/SearchInput.d.ts +1 -1
- package/dist/components/SegmentedControl.d.ts +1 -1
- package/dist/components/SplitButton.d.ts +1 -1
- package/dist/components/Switch.d.ts +1 -1
- package/dist/components/TreePickerField.cjs +11 -2
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts +13 -4
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +11 -2
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/UnitStepControls.d.ts +1 -1
- package/dist/components/button.d.ts +3 -3
- package/dist/components/combobox-types.d.ts +1 -1
- package/dist/components/density-switcher.d.ts +1 -1
- package/dist/components/filter-bar-context.d.ts +1 -1
- package/dist/components/filter-bar-field-utils.d.ts +2 -2
- package/dist/components/form-lookup-context.d.ts +1 -1
- package/dist/components/icon-menu-picker.d.ts +1 -1
- package/dist/components/json-schema-form-accordion-array.cjs +44 -21
- package/dist/components/json-schema-form-accordion-array.cjs.map +1 -1
- package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-accordion-array.js +47 -24
- package/dist/components/json-schema-form-accordion-array.js.map +1 -1
- package/dist/components/json-schema-form-array.cjs +53 -30
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +54 -31
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-cards-array.cjs +32 -22
- package/dist/components/json-schema-form-cards-array.cjs.map +1 -1
- package/dist/components/json-schema-form-cards-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-cards-array.js +33 -23
- package/dist/components/json-schema-form-cards-array.js.map +1 -1
- package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts +44 -0
- package/dist/components/json-schema-form-collection-layouts.fixtures.d.ts.map +1 -0
- package/dist/components/json-schema-form-discriminator.d.ts +1 -1
- package/dist/components/json-schema-form-errors.cjs +5 -1
- package/dist/components/json-schema-form-errors.cjs.map +1 -1
- package/dist/components/json-schema-form-errors.d.ts +2 -1
- package/dist/components/json-schema-form-errors.d.ts.map +1 -1
- package/dist/components/json-schema-form-errors.js +6 -2
- package/dist/components/json-schema-form-errors.js.map +1 -1
- package/dist/components/json-schema-form-extensions.d.ts +1 -1
- package/dist/components/json-schema-form-filter-input.cjs +50 -0
- package/dist/components/json-schema-form-filter-input.cjs.map +1 -0
- package/dist/components/json-schema-form-filter-input.d.ts +5 -0
- package/dist/components/json-schema-form-filter-input.d.ts.map +1 -0
- package/dist/components/json-schema-form-filter-input.js +50 -0
- package/dist/components/json-schema-form-filter-input.js.map +1 -0
- package/dist/components/json-schema-form-filter.cjs +49 -0
- package/dist/components/json-schema-form-filter.cjs.map +1 -0
- package/dist/components/json-schema-form-filter.d.ts +8 -0
- package/dist/components/json-schema-form-filter.d.ts.map +1 -0
- package/dist/components/json-schema-form-filter.js +49 -0
- package/dist/components/json-schema-form-filter.js.map +1 -0
- package/dist/components/json-schema-form-layout.cjs +84 -17
- package/dist/components/json-schema-form-layout.cjs.map +1 -1
- package/dist/components/json-schema-form-layout.d.ts +1 -1
- package/dist/components/json-schema-form-layout.d.ts.map +1 -1
- package/dist/components/json-schema-form-layout.js +84 -17
- package/dist/components/json-schema-form-layout.js.map +1 -1
- package/dist/components/json-schema-form-list-array.cjs +16 -5
- package/dist/components/json-schema-form-list-array.cjs.map +1 -1
- package/dist/components/json-schema-form-list-array.d.ts +2 -1
- package/dist/components/json-schema-form-list-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-list-array.js +16 -5
- package/dist/components/json-schema-form-list-array.js.map +1 -1
- package/dist/components/json-schema-form-object.cjs +239 -85
- package/dist/components/json-schema-form-object.cjs.map +1 -1
- package/dist/components/json-schema-form-object.d.ts +2 -2
- package/dist/components/json-schema-form-object.d.ts.map +1 -1
- package/dist/components/json-schema-form-object.js +241 -87
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-preferences.cjs +1 -1
- package/dist/components/json-schema-form-preferences.cjs.map +1 -1
- package/dist/components/json-schema-form-preferences.d.ts +1 -1
- package/dist/components/json-schema-form-preferences.d.ts.map +1 -1
- package/dist/components/json-schema-form-preferences.js +1 -1
- package/dist/components/json-schema-form-preferences.js.map +1 -1
- package/dist/components/json-schema-form-properties-errors.fixtures.d.ts +14 -0
- package/dist/components/json-schema-form-properties-errors.fixtures.d.ts.map +1 -0
- package/dist/components/json-schema-form-properties-size.cjs +19 -0
- package/dist/components/json-schema-form-properties-size.cjs.map +1 -0
- package/dist/components/json-schema-form-properties-size.d.ts +4 -0
- package/dist/components/json-schema-form-properties-size.d.ts.map +1 -0
- package/dist/components/json-schema-form-properties-size.js +19 -0
- package/dist/components/json-schema-form-properties-size.js.map +1 -0
- package/dist/components/json-schema-form-properties.cjs +305 -0
- package/dist/components/json-schema-form-properties.cjs.map +1 -0
- package/dist/components/json-schema-form-properties.d.ts +20 -0
- package/dist/components/json-schema-form-properties.d.ts.map +1 -0
- package/dist/components/json-schema-form-properties.fixtures.d.ts +157 -0
- package/dist/components/json-schema-form-properties.fixtures.d.ts.map +1 -0
- package/dist/components/json-schema-form-properties.js +305 -0
- package/dist/components/json-schema-form-properties.js.map +1 -0
- package/dist/components/json-schema-form-property-actions-context.cjs +6 -0
- package/dist/components/json-schema-form-property-actions-context.cjs.map +1 -0
- package/dist/components/json-schema-form-property-actions-context.d.ts +2 -0
- package/dist/components/json-schema-form-property-actions-context.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-actions-context.js +6 -0
- package/dist/components/json-schema-form-property-actions-context.js.map +1 -0
- package/dist/components/json-schema-form-property-collection.cjs +31 -0
- package/dist/components/json-schema-form-property-collection.cjs.map +1 -0
- package/dist/components/json-schema-form-property-collection.d.ts +6 -0
- package/dist/components/json-schema-form-property-collection.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-collection.js +31 -0
- package/dist/components/json-schema-form-property-collection.js.map +1 -0
- package/dist/components/json-schema-form-property-draft.cjs +45 -0
- package/dist/components/json-schema-form-property-draft.cjs.map +1 -0
- package/dist/components/json-schema-form-property-draft.d.ts +8 -0
- package/dist/components/json-schema-form-property-draft.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-draft.js +45 -0
- package/dist/components/json-schema-form-property-draft.js.map +1 -0
- package/dist/components/json-schema-form-property-preview.cjs +68 -0
- package/dist/components/json-schema-form-property-preview.cjs.map +1 -0
- package/dist/components/json-schema-form-property-preview.d.ts +7 -0
- package/dist/components/json-schema-form-property-preview.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-preview.js +68 -0
- package/dist/components/json-schema-form-property-preview.js.map +1 -0
- package/dist/components/json-schema-form-property-selection.cjs +89 -0
- package/dist/components/json-schema-form-property-selection.cjs.map +1 -0
- package/dist/components/json-schema-form-property-selection.d.ts +6 -0
- package/dist/components/json-schema-form-property-selection.d.ts.map +1 -0
- package/dist/components/json-schema-form-property-selection.js +89 -0
- package/dist/components/json-schema-form-property-selection.js.map +1 -0
- package/dist/components/json-schema-form-render.cjs +41 -4
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +42 -5
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +2 -0
- 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 +2 -0
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-runtime-types.d.ts +222 -0
- package/dist/components/json-schema-form-runtime-types.d.ts.map +1 -0
- package/dist/components/json-schema-form-table-array.cjs +82 -51
- package/dist/components/json-schema-form-table-array.cjs.map +1 -1
- package/dist/components/json-schema-form-table-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-table-array.js +84 -53
- package/dist/components/json-schema-form-table-array.js.map +1 -1
- package/dist/components/json-schema-form-template-menu.d.ts +1 -1
- package/dist/components/json-schema-form-template.d.ts +1 -1
- package/dist/components/json-schema-form-types.d.ts +7 -179
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +10 -9
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +11 -1
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +10 -9
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/loading.d.ts +4 -4
- package/dist/components/mdx-editor-callout.d.ts +1 -1
- package/dist/components/mdx-editor-options.d.ts +1 -1
- package/dist/components/select.d.ts +3 -3
- package/dist/components/theme-switcher.d.ts +1 -1
- package/dist/components/use-list-menu-selection.d.ts +1 -1
- package/dist/components/useComboboxLayout.d.ts +1 -1
- package/dist/components/workload-picker-utils.d.ts +1 -1
- package/dist/data/Avatar.d.ts +1 -1
- package/dist/data/AvatarBadge.d.ts +1 -1
- package/dist/data/Badge.d.ts +1 -1
- package/dist/data/Callout.d.ts +1 -1
- package/dist/data/DataTable.cjs +575 -435
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +21 -13
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.grouping.d.ts +1 -1
- package/dist/data/DataTable.js +575 -435
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/ExecutionTree.d.ts +1 -1
- package/dist/data/FilterPill.d.ts +1 -1
- package/dist/data/FixtureEditor/RawFenceEditor.d.ts +1 -1
- package/dist/data/FixtureEditor/types.d.ts +1 -1
- package/dist/data/Gauge.d.ts +1 -1
- package/dist/data/GaugeHoverCard.d.ts +1 -1
- package/dist/data/Icon.d.ts +1 -1
- package/dist/data/KeyValueList.d.ts +1 -1
- package/dist/data/MarkdownEditor.d.ts +1 -1
- package/dist/data/MatrixTable.d.ts +1 -1
- package/dist/data/ObjectGraph.d.ts +1 -1
- package/dist/data/ProgressBars.d.ts +1 -1
- package/dist/data/Properties.cjs +86 -35
- package/dist/data/Properties.cjs.map +1 -1
- package/dist/data/Properties.d.ts +2 -2
- package/dist/data/Properties.d.ts.map +1 -1
- package/dist/data/Properties.js +87 -36
- package/dist/data/Properties.js.map +1 -1
- package/dist/data/RadialGauge.d.ts +1 -1
- package/dist/data/SchemaViewer.d.ts +1 -1
- package/dist/data/SortableHeader.d.ts +1 -1
- package/dist/data/StatStrip.d.ts +1 -1
- package/dist/data/StatusBreakdown.d.ts +1 -1
- package/dist/data/TabButton.d.ts +1 -1
- package/dist/data/TaskManager.cjs +9 -17
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +9 -17
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskManagerButton.cjs +17 -34
- package/dist/data/TaskManagerButton.cjs.map +1 -1
- package/dist/data/TaskManagerButton.d.ts.map +1 -1
- package/dist/data/TaskManagerButton.js +18 -35
- package/dist/data/TaskManagerButton.js.map +1 -1
- package/dist/data/TaskProcessDetails.cjs +5 -26
- package/dist/data/TaskProcessDetails.cjs.map +1 -1
- package/dist/data/TaskProcessDetails.d.ts +2 -1
- package/dist/data/TaskProcessDetails.d.ts.map +1 -1
- package/dist/data/TaskProcessDetails.js +5 -26
- package/dist/data/TaskProcessDetails.js.map +1 -1
- package/dist/data/TaskProgress.cjs +24 -15
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +2 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +24 -15
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskResourceReadings.cjs +42 -0
- package/dist/data/TaskResourceReadings.cjs.map +1 -0
- package/dist/data/TaskResourceReadings.d.ts +6 -0
- package/dist/data/TaskResourceReadings.d.ts.map +1 -0
- package/dist/data/TaskResourceReadings.js +42 -0
- package/dist/data/TaskResourceReadings.js.map +1 -0
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +14 -1
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/Timeline.d.ts +1 -1
- package/dist/data/Tree.d.ts +1 -1
- package/dist/data/TreeGroupHeader.d.ts +1 -1
- package/dist/data/TreeNode.d.ts +1 -1
- package/dist/data/Version.d.ts +3 -3
- package/dist/data/ai/ChatWindow.cjs +22 -12
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +22 -12
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.test-utils.d.ts +4 -2
- package/dist/data/ai/ChatWindow.test-utils.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.types.d.ts +1 -1
- package/dist/data/ai/ChatWindowManager.cjs +2 -0
- package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
- package/dist/data/ai/ChatWindowManager.d.ts +1 -1
- package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.js +2 -0
- package/dist/data/ai/ChatWindowManager.js.map +1 -1
- package/dist/data/ai/PolicyTree.d.ts +1 -1
- package/dist/data/ai/PromptCatalog/PromptPageHeader.d.ts +1 -1
- package/dist/data/ai/PromptCatalog/types.d.ts +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +4 -0
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +5 -2
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +4 -0
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/SessionChatComposer.d.ts +1 -1
- package/dist/data/ai/SessionInspector.approvals.cjs +147 -0
- package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.approvals.d.ts +21 -0
- package/dist/data/ai/SessionInspector.approvals.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.approvals.js +147 -0
- package/dist/data/ai/SessionInspector.approvals.js.map +1 -0
- package/dist/data/ai/SessionInspector.cjs +21 -8
- package/dist/data/ai/SessionInspector.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.d.ts +6 -2
- package/dist/data/ai/SessionInspector.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.d.ts +1 -1
- package/dist/data/ai/SessionInspector.js +21 -8
- package/dist/data/ai/SessionInspector.js.map +1 -1
- package/dist/data/ai/SessionInspector.panel-parts.cjs +47 -0
- package/dist/data/ai/SessionInspector.panel-parts.cjs.map +1 -0
- package/dist/data/ai/SessionInspector.panel-parts.d.ts +20 -0
- package/dist/data/ai/SessionInspector.panel-parts.d.ts.map +1 -0
- package/dist/data/ai/SessionInspector.panel-parts.js +47 -0
- package/dist/data/ai/SessionInspector.panel-parts.js.map +1 -0
- package/dist/data/ai/SessionInspector.panels.cjs +40 -99
- package/dist/data/ai/SessionInspector.panels.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.panels.d.ts +3 -1
- package/dist/data/ai/SessionInspector.panels.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.panels.js +12 -71
- package/dist/data/ai/SessionInspector.panels.js.map +1 -1
- package/dist/data/ai/SessionViewer.d.ts +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts +1 -1
- package/dist/data/ai/SessionViewer.tool-details.d.ts +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +23 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/Footer.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/Rail.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/SectionCard.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs +3 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +3 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js +3 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/fields.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs +3 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +5 -2
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js +3 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/chat-window-context.cjs +1 -0
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +13 -5
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +1 -0
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/index.d.ts +2 -1
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/use-session-scroll.d.ts +1 -1
- package/dist/data/cache-browser/adapter.d.ts +1 -1
- package/dist/data/cells/CellFilterActions.d.ts +1 -1
- package/dist/data/cells/EntityCell.d.ts +1 -1
- package/dist/data/cells/tag-utils.d.ts +1 -1
- package/dist/data/chat/Chat.cjs +42 -46
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +16 -5
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +43 -47
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/ModelSelector.d.ts +1 -1
- package/dist/data/chat/PromptInput.cjs +13 -0
- package/dist/data/chat/PromptInput.cjs.map +1 -1
- package/dist/data/chat/PromptInput.d.ts +8 -2
- package/dist/data/chat/PromptInput.d.ts.map +1 -1
- package/dist/data/chat/PromptInput.js +14 -1
- package/dist/data/chat/PromptInput.js.map +1 -1
- package/dist/data/chat/tool-render/ToolArgs.d.ts +1 -1
- package/dist/data/chat/tool-render/ToolParams.d.ts +1 -1
- package/dist/data/chat/tool-render/ToolValue.d.ts +1 -1
- package/dist/data/chat/tool-render/adapter.d.ts +1 -1
- package/dist/data/chat/tool-render/context.d.ts +1 -1
- package/dist/data/chat/tool-render/defaults.d.ts +1 -1
- package/dist/data/chat/tool-render/known-tool-views.d.ts +1 -1
- package/dist/data/chat/tool-render/summary.d.ts +1 -1
- package/dist/data/chat/types.d.ts +1 -1
- package/dist/data/clicky-export/useClickyExport.d.ts +1 -1
- package/dist/data/data-table-server-filters.d.ts +1 -1
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +1 -1
- package/dist/data/diagnostics/ErrorDetails.d.ts +1 -1
- package/dist/data/diagnostics/StackFrameRow.d.ts +1 -1
- package/dist/data/git/GitChangeList.d.ts +1 -1
- package/dist/data/icon-fallback.d.ts +1 -1
- package/dist/data/properties-context.cjs +6 -0
- package/dist/data/properties-context.cjs.map +1 -0
- package/dist/data/properties-context.d.ts +7 -0
- package/dist/data/properties-context.d.ts.map +1 -0
- package/dist/data/properties-context.js +6 -0
- package/dist/data/properties-context.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.types.d.ts +1 -1
- package/dist/data/runtime/RuntimeBar.cjs +7 -3
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
- package/dist/data/runtime/RuntimeBar.js +7 -3
- package/dist/data/runtime/RuntimeBar.js.map +1 -1
- package/dist/data/task-copy.cjs +1 -1
- package/dist/data/task-copy.cjs.map +1 -1
- package/dist/data/task-copy.js +1 -1
- package/dist/data/task-copy.js.map +1 -1
- package/dist/data/task-resource-summary.cjs +30 -0
- package/dist/data/task-resource-summary.cjs.map +1 -0
- package/dist/data/task-resource-summary.d.ts +15 -0
- package/dist/data/task-resource-summary.d.ts.map +1 -0
- package/dist/data/task-resource-summary.js +30 -0
- package/dist/data/task-resource-summary.js.map +1 -0
- package/dist/data/task-status.cjs +8 -2
- package/dist/data/task-status.cjs.map +1 -1
- package/dist/data/task-status.d.ts +3 -0
- package/dist/data/task-status.d.ts.map +1 -1
- package/dist/data/task-status.js +8 -2
- package/dist/data/task-status.js.map +1 -1
- package/dist/data/task-work-progress.cjs +24 -0
- package/dist/data/task-work-progress.cjs.map +1 -0
- package/dist/data/task-work-progress.d.ts +21 -0
- package/dist/data/task-work-progress.d.ts.map +1 -0
- package/dist/data/task-work-progress.js +24 -0
- package/dist/data/task-work-progress.js.map +1 -0
- package/dist/data/test-runner/TestRunner.d.ts +1 -1
- package/dist/data/test-runner/adapter.d.ts +1 -1
- package/dist/data/test-runner/context.d.ts +1 -1
- package/dist/data/use-data-table-virtual.cjs +73 -0
- package/dist/data/use-data-table-virtual.cjs.map +1 -0
- package/dist/data/use-data-table-virtual.d.ts +40 -0
- package/dist/data/use-data-table-virtual.d.ts.map +1 -0
- package/dist/data/use-data-table-virtual.js +73 -0
- package/dist/data/use-data-table-virtual.js.map +1 -0
- package/dist/data/verification/VerificationResults.d.ts +1 -1
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/expressions/lang/attributes.cjs +56 -0
- package/dist/expressions/lang/attributes.cjs.map +1 -0
- package/dist/expressions/lang/attributes.d.ts +22 -0
- package/dist/expressions/lang/attributes.d.ts.map +1 -0
- package/dist/expressions/lang/attributes.js +56 -0
- package/dist/expressions/lang/attributes.js.map +1 -0
- package/dist/expressions/lang/completion.cjs +164 -0
- package/dist/expressions/lang/completion.cjs.map +1 -0
- package/dist/expressions/lang/completion.d.ts +29 -0
- package/dist/expressions/lang/completion.d.ts.map +1 -0
- package/dist/expressions/lang/completion.js +164 -0
- package/dist/expressions/lang/completion.js.map +1 -0
- package/dist/expressions/lang/environment.cjs +115 -0
- package/dist/expressions/lang/environment.cjs.map +1 -0
- package/dist/expressions/lang/environment.d.ts +54 -0
- package/dist/expressions/lang/environment.d.ts.map +1 -0
- package/dist/expressions/lang/environment.js +115 -0
- package/dist/expressions/lang/environment.js.map +1 -0
- package/dist/expressions/lang/generated/conformance.json.d.ts +4962 -0
- package/dist/expressions/lang/generated/index.cjs +18 -0
- package/dist/expressions/lang/generated/index.cjs.map +1 -0
- package/dist/expressions/lang/generated/index.d.ts +9 -0
- package/dist/expressions/lang/generated/index.d.ts.map +1 -0
- package/dist/expressions/lang/generated/index.js +18 -0
- package/dist/expressions/lang/generated/index.js.map +1 -0
- package/dist/expressions/lang/generated/languages.json.cjs +18 -0
- package/dist/expressions/lang/generated/languages.json.cjs.map +1 -0
- package/dist/expressions/lang/generated/languages.json.d.ts +2305 -0
- package/dist/expressions/lang/generated/languages.json.js +18 -0
- package/dist/expressions/lang/generated/languages.json.js.map +1 -0
- package/dist/expressions/lang/generated/spec.json.cjs +12 -0
- package/dist/expressions/lang/generated/spec.json.cjs.map +1 -0
- package/dist/expressions/lang/generated/spec.json.d.ts +6260 -0
- package/dist/expressions/lang/generated/spec.json.js +12 -0
- package/dist/expressions/lang/generated/spec.json.js.map +1 -0
- package/dist/expressions/lang/hover.cjs +106 -0
- package/dist/expressions/lang/hover.cjs.map +1 -0
- package/dist/expressions/lang/hover.d.ts +54 -0
- package/dist/expressions/lang/hover.d.ts.map +1 -0
- package/dist/expressions/lang/hover.js +106 -0
- package/dist/expressions/lang/hover.js.map +1 -0
- package/dist/expressions/lang/index.cjs +87 -0
- package/dist/expressions/lang/index.cjs.map +1 -0
- package/dist/expressions/lang/index.d.ts +65 -0
- package/dist/expressions/lang/index.d.ts.map +1 -0
- package/dist/expressions/lang/index.js +90 -0
- package/dist/expressions/lang/index.js.map +1 -0
- package/dist/expressions/lang/merge.cjs +52 -0
- package/dist/expressions/lang/merge.cjs.map +1 -0
- package/dist/expressions/lang/merge.d.ts +12 -0
- package/dist/expressions/lang/merge.d.ts.map +1 -0
- package/dist/expressions/lang/merge.js +52 -0
- package/dist/expressions/lang/merge.js.map +1 -0
- package/dist/expressions/lang/prefix.cjs +91 -0
- package/dist/expressions/lang/prefix.cjs.map +1 -0
- package/dist/expressions/lang/prefix.d.ts +36 -0
- package/dist/expressions/lang/prefix.d.ts.map +1 -0
- package/dist/expressions/lang/prefix.js +91 -0
- package/dist/expressions/lang/prefix.js.map +1 -0
- package/dist/expressions/lang/spec.d.ts +13 -0
- package/dist/expressions/lang/spec.d.ts.map +1 -0
- package/dist/expressions/lang/theme.cjs +97 -0
- package/dist/expressions/lang/theme.cjs.map +1 -0
- package/dist/expressions/lang/theme.d.ts +6 -0
- package/dist/expressions/lang/theme.d.ts.map +1 -0
- package/dist/expressions/lang/theme.js +97 -0
- package/dist/expressions/lang/theme.js.map +1 -0
- package/dist/expressions/lang/types.d.ts +81 -0
- package/dist/expressions/lang/types.d.ts.map +1 -0
- package/dist/expressions/playground/ExpressionPlayground.cjs +308 -0
- package/dist/expressions/playground/ExpressionPlayground.cjs.map +1 -0
- package/dist/expressions/playground/ExpressionPlayground.d.ts +42 -0
- package/dist/expressions/playground/ExpressionPlayground.d.ts.map +1 -0
- package/dist/expressions/playground/ExpressionPlayground.js +291 -0
- package/dist/expressions/playground/ExpressionPlayground.js.map +1 -0
- package/dist/expressions/playground/RunControls.cjs +51 -0
- package/dist/expressions/playground/RunControls.cjs.map +1 -0
- package/dist/expressions/playground/RunControls.d.ts +7 -0
- package/dist/expressions/playground/RunControls.d.ts.map +1 -0
- package/dist/expressions/playground/RunControls.js +51 -0
- package/dist/expressions/playground/RunControls.js.map +1 -0
- package/dist/expressions/playground/VerticalSplit.cjs +109 -0
- package/dist/expressions/playground/VerticalSplit.cjs.map +1 -0
- package/dist/expressions/playground/VerticalSplit.d.ts +23 -0
- package/dist/expressions/playground/VerticalSplit.d.ts.map +1 -0
- package/dist/expressions/playground/VerticalSplit.js +109 -0
- package/dist/expressions/playground/VerticalSplit.js.map +1 -0
- package/dist/expressions/playground/api.cjs +49 -0
- package/dist/expressions/playground/api.cjs.map +1 -0
- package/dist/expressions/playground/api.d.ts +53 -0
- package/dist/expressions/playground/api.d.ts.map +1 -0
- package/dist/expressions/playground/api.js +49 -0
- package/dist/expressions/playground/api.js.map +1 -0
- package/dist/expressions/playground/languages.cjs +88 -0
- package/dist/expressions/playground/languages.cjs.map +1 -0
- package/dist/expressions/playground/languages.d.ts +43 -0
- package/dist/expressions/playground/languages.d.ts.map +1 -0
- package/dist/expressions/playground/languages.js +88 -0
- package/dist/expressions/playground/languages.js.map +1 -0
- package/dist/expressions/playground/panels/GraphPanel.cjs +72 -0
- package/dist/expressions/playground/panels/GraphPanel.cjs.map +1 -0
- package/dist/expressions/playground/panels/GraphPanel.d.ts +19 -0
- package/dist/expressions/playground/panels/GraphPanel.d.ts.map +1 -0
- package/dist/expressions/playground/panels/GraphPanel.js +72 -0
- package/dist/expressions/playground/panels/GraphPanel.js.map +1 -0
- package/dist/expressions/playground/panels/ResultPanel.cjs +82 -0
- package/dist/expressions/playground/panels/ResultPanel.cjs.map +1 -0
- package/dist/expressions/playground/panels/ResultPanel.d.ts +11 -0
- package/dist/expressions/playground/panels/ResultPanel.d.ts.map +1 -0
- package/dist/expressions/playground/panels/ResultPanel.js +82 -0
- package/dist/expressions/playground/panels/ResultPanel.js.map +1 -0
- package/dist/expressions/playground/panels/SpecPanel.cjs +76 -0
- package/dist/expressions/playground/panels/SpecPanel.cjs.map +1 -0
- package/dist/expressions/playground/panels/SpecPanel.d.ts +18 -0
- package/dist/expressions/playground/panels/SpecPanel.d.ts.map +1 -0
- package/dist/expressions/playground/panels/SpecPanel.js +76 -0
- package/dist/expressions/playground/panels/SpecPanel.js.map +1 -0
- package/dist/expressions/playground/panels/TokensPanel.cjs +89 -0
- package/dist/expressions/playground/panels/TokensPanel.cjs.map +1 -0
- package/dist/expressions/playground/panels/TokensPanel.d.ts +15 -0
- package/dist/expressions/playground/panels/TokensPanel.d.ts.map +1 -0
- package/dist/expressions/playground/panels/TokensPanel.js +72 -0
- package/dist/expressions/playground/panels/TokensPanel.js.map +1 -0
- package/dist/expressions/playground/panels/graphNodes.cjs +35 -0
- package/dist/expressions/playground/panels/graphNodes.cjs.map +1 -0
- package/dist/expressions/playground/panels/graphNodes.d.ts +19 -0
- package/dist/expressions/playground/panels/graphNodes.d.ts.map +1 -0
- package/dist/expressions/playground/panels/graphNodes.js +35 -0
- package/dist/expressions/playground/panels/graphNodes.js.map +1 -0
- package/dist/expressions/playground/runAction.cjs +12 -0
- package/dist/expressions/playground/runAction.cjs.map +1 -0
- package/dist/expressions/playground/runAction.d.ts +15 -0
- package/dist/expressions/playground/runAction.d.ts.map +1 -0
- package/dist/expressions/playground/runAction.js +12 -0
- package/dist/expressions/playground/runAction.js.map +1 -0
- package/dist/expressions/playground/runShortcut.cjs +9 -0
- package/dist/expressions/playground/runShortcut.cjs.map +1 -0
- package/dist/expressions/playground/runShortcut.d.ts +2 -0
- package/dist/expressions/playground/runShortcut.d.ts.map +1 -0
- package/dist/expressions/playground/runShortcut.js +9 -0
- package/dist/expressions/playground/runShortcut.js.map +1 -0
- package/dist/expressions/playground/useEditorTheme.cjs +40 -0
- package/dist/expressions/playground/useEditorTheme.cjs.map +1 -0
- package/dist/expressions/playground/useEditorTheme.d.ts +16 -0
- package/dist/expressions/playground/useEditorTheme.d.ts.map +1 -0
- package/dist/expressions/playground/useEditorTheme.js +23 -0
- package/dist/expressions/playground/useEditorTheme.js.map +1 -0
- package/dist/expressions/playground/useEvaluator.cjs +72 -0
- package/dist/expressions/playground/useEvaluator.cjs.map +1 -0
- package/dist/expressions/playground/useEvaluator.d.ts +25 -0
- package/dist/expressions/playground/useEvaluator.d.ts.map +1 -0
- package/dist/expressions/playground/useEvaluator.js +72 -0
- package/dist/expressions/playground/useEvaluator.js.map +1 -0
- package/dist/expressions/playground/useParsedInput.cjs +22 -0
- package/dist/expressions/playground/useParsedInput.cjs.map +1 -0
- package/dist/expressions/playground/useParsedInput.d.ts +20 -0
- package/dist/expressions/playground/useParsedInput.d.ts.map +1 -0
- package/dist/expressions/playground/useParsedInput.js +22 -0
- package/dist/expressions/playground/useParsedInput.js.map +1 -0
- package/dist/expressions/playground/verticalSplitModel.cjs +11 -0
- package/dist/expressions/playground/verticalSplitModel.cjs.map +1 -0
- package/dist/expressions/playground/verticalSplitModel.d.ts +3 -0
- package/dist/expressions/playground/verticalSplitModel.d.ts.map +1 -0
- package/dist/expressions/playground/verticalSplitModel.js +11 -0
- package/dist/expressions/playground/verticalSplitModel.js.map +1 -0
- package/dist/expressions/playground.cjs +18 -0
- package/dist/expressions/playground.cjs.map +1 -0
- package/dist/expressions/playground.d.ts +18 -0
- package/dist/expressions/playground.d.ts.map +1 -0
- package/dist/expressions/playground.js +18 -0
- package/dist/expressions/playground.js.map +1 -0
- package/dist/expressions.cjs +28 -0
- package/dist/expressions.cjs.map +1 -0
- package/dist/expressions.d.ts +10 -0
- package/dist/expressions.d.ts.map +1 -0
- package/dist/expressions.js +28 -0
- package/dist/expressions.js.map +1 -0
- package/dist/hooks/density-provider.d.ts +1 -1
- package/dist/hooks/theme-provider.d.ts +1 -1
- package/dist/hooks/use-density.d.ts +1 -1
- package/dist/hooks/use-resource-clock.cjs +14 -0
- package/dist/hooks/use-resource-clock.cjs.map +1 -0
- package/dist/hooks/use-resource-clock.d.ts +2 -0
- package/dist/hooks/use-resource-clock.d.ts.map +1 -0
- package/dist/hooks/use-resource-clock.js +14 -0
- package/dist/hooks/use-resource-clock.js.map +1 -0
- package/dist/hooks/use-task-run.cjs +12 -3
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +12 -3
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/hooks/use-theme.d.ts +1 -1
- package/dist/icons/registry.d.ts +1 -1
- package/dist/icons/types.d.ts +1 -1
- package/dist/layout/AppShell.d.ts +1 -1
- package/dist/layout/AppShell.nav.drag.d.ts +1 -1
- package/dist/layout/AppSidebar.d.ts +1 -1
- package/dist/layout/Panel.d.ts +1 -1
- package/dist/layout/PanelFrame.d.ts +1 -1
- package/dist/layout/Section.d.ts +1 -1
- package/dist/layout/SplitPane.d.ts +1 -1
- package/dist/layout/Tabs.d.ts +1 -1
- package/dist/layout/Workspace.d.ts +1 -1
- package/dist/layout/Workspace.model.d.ts +1 -1
- package/dist/lib/combobox-values.d.ts +1 -1
- package/dist/monaco/MonacoEditor.cjs +3 -3
- package/dist/monaco/MonacoEditor.cjs.map +1 -1
- package/dist/monaco/MonacoEditor.js +2 -2
- package/dist/monaco/MonacoEditor.js.map +1 -1
- package/dist/monaco/types.d.ts +1 -1
- package/dist/monaco/use-monaco-worker.d.ts +1 -1
- package/dist/overlay/CellActions.d.ts +1 -1
- package/dist/overlay/CommandPalette.d.ts +2 -2
- package/dist/overlay/CommandPalette.model.d.ts +1 -1
- package/dist/overlay/CommandPaletteList.d.ts +1 -1
- package/dist/overlay/DropdownMenu.d.ts +1 -1
- package/dist/overlay/HoverCard.d.ts +1 -1
- package/dist/overlay/Modal.d.ts +2 -2
- package/dist/overlay/Toast.d.ts +1 -1
- package/dist/overlay/TourCard.d.ts +1 -1
- package/dist/overlay/TourProvider.d.ts +1 -1
- package/dist/overlay/dropdownMenuContext.d.ts +1 -1
- package/dist/overlay/toast-context.d.ts +2 -2
- package/dist/overlay/tour-context.d.ts +1 -1
- package/dist/overlay/tour-types.d.ts +1 -1
- package/dist/profiles/connections/connectionBrowserModel.d.ts +1 -1
- package/dist/profiles/connections/connectionQueryWorkspace.d.ts +1 -1
- package/dist/profiles/editor/profileBuilder.d.ts +1 -1
- package/dist/profiles/elasticsearch/esParamOperandExtension.d.ts +1 -1
- package/dist/profiles/fields/profileFieldControls.d.ts +1 -1
- package/dist/profiles/fields/profileFieldIcons.d.ts +1 -1
- package/dist/profiles/fields/profileFieldState.d.ts +1 -1
- package/dist/profiles/query/jsonPathSample.d.ts +1 -1
- package/dist/profiles/query/jsonPathSampleRow.d.ts +1 -1
- package/dist/profiles/query/prometheusResults.d.ts +2 -2
- package/dist/rpc/EndpointList.d.ts +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +1 -1
- package/dist/rpc/OperationCatalog.d.ts +1 -1
- package/dist/rpc/OperationEntityContextPicker.d.ts +1 -1
- package/dist/rpc/OperationEntityPage.d.ts +1 -1
- package/dist/rpc/OperationResultView.d.ts +1 -1
- package/dist/rpc/RouterProvider.d.ts +1 -1
- package/dist/rpc/SchemaActionForm.d.ts +1 -1
- package/dist/rpc/formMetadata.d.ts +1 -1
- package/dist/rpc/router.d.ts +1 -1
- package/dist/rpc/rpc-story.fixtures.d.ts +1 -1
- package/dist/styles.css +1 -1
- package/package.json +21 -2
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback, useMemo, useRef, useEffect } from "react";
|
|
3
|
+
import { Combobox } from "../../components/Combobox.js";
|
|
4
|
+
import { Tabs } from "../../layout/Tabs.js";
|
|
5
|
+
import { MonacoEditor } from "../../monaco/MonacoEditor.js";
|
|
6
|
+
import * as monacoEditor from "monaco-editor";
|
|
7
|
+
import { registerGomplateLanguages } from "../lang/index.js";
|
|
8
|
+
import { DEFAULT_API_BASE, fetchSpec, fetchExamples } from "./api.js";
|
|
9
|
+
import { LANGUAGES, languageById } from "./languages.js";
|
|
10
|
+
import { GraphPanel } from "./panels/GraphPanel.js";
|
|
11
|
+
import { ResultPanel } from "./panels/ResultPanel.js";
|
|
12
|
+
import { SpecPanel } from "./panels/SpecPanel.js";
|
|
13
|
+
import { TokensPanel } from "./panels/TokensPanel.js";
|
|
14
|
+
import { RunControls } from "./RunControls.js";
|
|
15
|
+
import { registerRunAction } from "./runAction.js";
|
|
16
|
+
import { useEditorTheme } from "./useEditorTheme.js";
|
|
17
|
+
import { useEvaluator } from "./useEvaluator.js";
|
|
18
|
+
import { useParsedInput } from "./useParsedInput.js";
|
|
19
|
+
import { VerticalSplit } from "./VerticalSplit.js";
|
|
20
|
+
import { rowsToPaneHeight } from "./verticalSplitModel.js";
|
|
21
|
+
import { mergeSpec } from "../lang/merge.js";
|
|
22
|
+
import { spec } from "../lang/generated/index.js";
|
|
23
|
+
const SOURCE_MODEL_PATH = "inmemory://expressions/source";
|
|
24
|
+
const INPUT_MODEL_PATH = "inmemory://expressions/input.yaml";
|
|
25
|
+
const EMPTY_STATE = { language: "cel", source: "", input: "" };
|
|
26
|
+
function ExpressionPlayground({
|
|
27
|
+
apiBase = DEFAULT_API_BASE,
|
|
28
|
+
languages: offered = LANGUAGES,
|
|
29
|
+
examples,
|
|
30
|
+
value,
|
|
31
|
+
onChange,
|
|
32
|
+
defaultValue,
|
|
33
|
+
className
|
|
34
|
+
}) {
|
|
35
|
+
const [uncontrolled, setUncontrolled] = useState(
|
|
36
|
+
() => {
|
|
37
|
+
var _a;
|
|
38
|
+
return defaultValue ?? { ...EMPTY_STATE, language: ((_a = offered[0]) == null ? void 0 : _a.id) ?? "cel" };
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
const state = value ?? uncontrolled;
|
|
42
|
+
const update = useCallback(
|
|
43
|
+
(patch) => {
|
|
44
|
+
const next = { ...state, ...patch };
|
|
45
|
+
if (!value) setUncontrolled(next);
|
|
46
|
+
onChange == null ? void 0 : onChange(next);
|
|
47
|
+
},
|
|
48
|
+
[state, value, onChange]
|
|
49
|
+
);
|
|
50
|
+
const language = useMemo(
|
|
51
|
+
() => languageById(state.language, offered),
|
|
52
|
+
[state.language, offered]
|
|
53
|
+
);
|
|
54
|
+
const [outputTab, setOutputTab] = useState("result");
|
|
55
|
+
const evaluator = useEvaluator(apiBase, {
|
|
56
|
+
language: language.evalLanguage,
|
|
57
|
+
source: state.source,
|
|
58
|
+
input: state.input
|
|
59
|
+
});
|
|
60
|
+
const parsedInput = useParsedInput(state.input);
|
|
61
|
+
const environmentRef = useRef(void 0);
|
|
62
|
+
environmentRef.current = parsedInput.value;
|
|
63
|
+
const [served, setServed] = useState();
|
|
64
|
+
const servedRef = useRef(void 0);
|
|
65
|
+
servedRef.current = served;
|
|
66
|
+
const activeSpec = useMemo(() => mergeSpec(spec, served), [served]);
|
|
67
|
+
const [fetched, setFetched] = useState();
|
|
68
|
+
const available = examples ?? fetched ?? [];
|
|
69
|
+
const forLanguage = available.filter(
|
|
70
|
+
(example) => example.language === language.evalLanguage
|
|
71
|
+
);
|
|
72
|
+
const registered = useRef(null);
|
|
73
|
+
const registerLanguages = useCallback((monaco) => {
|
|
74
|
+
const current = servedRef.current;
|
|
75
|
+
registered.current = registerGomplateLanguages(monaco, {
|
|
76
|
+
environment: () => environmentRef.current,
|
|
77
|
+
...current ? { spec: current } : {}
|
|
78
|
+
});
|
|
79
|
+
}, []);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
const controller = new AbortController();
|
|
82
|
+
void fetchSpec(apiBase, controller.signal).then((next) => {
|
|
83
|
+
if (!controller.signal.aborted) setServed(next);
|
|
84
|
+
});
|
|
85
|
+
return () => controller.abort();
|
|
86
|
+
}, [apiBase]);
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
var _a;
|
|
89
|
+
if (served) (_a = registered.current) == null ? void 0 : _a.setSpec(served);
|
|
90
|
+
}, [served]);
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
if (examples) return;
|
|
93
|
+
const controller = new AbortController();
|
|
94
|
+
void fetchExamples(apiBase, controller.signal).then((next) => {
|
|
95
|
+
if (!controller.signal.aborted && next) setFetched(next);
|
|
96
|
+
});
|
|
97
|
+
return () => controller.abort();
|
|
98
|
+
}, [apiBase, examples]);
|
|
99
|
+
useMarkers(evaluator.response);
|
|
100
|
+
const applyTheme = useEditorTheme();
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
if (outputTab === "spec" && !language.catalogue) setOutputTab("result");
|
|
103
|
+
}, [language.catalogue, outputTab]);
|
|
104
|
+
const runRef = useRef(evaluator.run);
|
|
105
|
+
runRef.current = evaluator.run;
|
|
106
|
+
const sourceEditor = useRef(
|
|
107
|
+
null
|
|
108
|
+
);
|
|
109
|
+
const onEditorMount = useCallback(
|
|
110
|
+
(editor, monaco) => {
|
|
111
|
+
var _a;
|
|
112
|
+
applyTheme();
|
|
113
|
+
registerRunAction(editor, monaco, () => runRef.current());
|
|
114
|
+
if (((_a = editor.getModel()) == null ? void 0 : _a.uri.toString()) === SOURCE_MODEL_PATH)
|
|
115
|
+
sourceEditor.current = editor;
|
|
116
|
+
},
|
|
117
|
+
[applyTheme]
|
|
118
|
+
);
|
|
119
|
+
const insertExpression = useCallback((expression) => {
|
|
120
|
+
const editor = sourceEditor.current;
|
|
121
|
+
const selection = editor == null ? void 0 : editor.getSelection();
|
|
122
|
+
if (!editor || !selection) return;
|
|
123
|
+
editor.executeEdits("object-graph", [
|
|
124
|
+
{ range: selection, text: expression, forceMoveMarkers: true }
|
|
125
|
+
]);
|
|
126
|
+
editor.focus();
|
|
127
|
+
}, []);
|
|
128
|
+
const catalogue = language.catalogue ? activeSpec[language.catalogue].functions : [];
|
|
129
|
+
return /* @__PURE__ */ jsxs("div", { className: `flex h-full min-h-0 ${className ?? ""}`, children: [
|
|
130
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-h-0 w-1/2 flex-col border-r border-border", children: /* @__PURE__ */ jsx(
|
|
131
|
+
VerticalSplit,
|
|
132
|
+
{
|
|
133
|
+
storageKey: "expressions:editor-split",
|
|
134
|
+
defaultTopHeight: rowsToPaneHeight(language.editorRows),
|
|
135
|
+
top: /* @__PURE__ */ jsx(
|
|
136
|
+
EditorPane,
|
|
137
|
+
{
|
|
138
|
+
label: "Expression",
|
|
139
|
+
actions: /* @__PURE__ */ jsx(RunControls, { evaluator }),
|
|
140
|
+
hint: forLanguage.length > 0 ? /* @__PURE__ */ jsx(
|
|
141
|
+
Combobox,
|
|
142
|
+
{
|
|
143
|
+
options: forLanguage.map((example) => ({
|
|
144
|
+
value: example.name,
|
|
145
|
+
label: example.name
|
|
146
|
+
})),
|
|
147
|
+
value: "",
|
|
148
|
+
allowCustomValue: false,
|
|
149
|
+
placeholder: "Load an example…",
|
|
150
|
+
ariaLabel: "Load an example",
|
|
151
|
+
className: "w-56",
|
|
152
|
+
onChange: (name) => {
|
|
153
|
+
const example = forLanguage.find(
|
|
154
|
+
(candidate) => candidate.name === name
|
|
155
|
+
);
|
|
156
|
+
if (example)
|
|
157
|
+
update({
|
|
158
|
+
source: example.source,
|
|
159
|
+
input: example.input
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
) : void 0,
|
|
164
|
+
children: /* @__PURE__ */ jsx(
|
|
165
|
+
MonacoEditor,
|
|
166
|
+
{
|
|
167
|
+
value: state.source,
|
|
168
|
+
onChange: (source) => update({ source: source ?? "" }),
|
|
169
|
+
language: language.editorLanguage,
|
|
170
|
+
path: SOURCE_MODEL_PATH,
|
|
171
|
+
height: "100%",
|
|
172
|
+
beforeMount: registerLanguages,
|
|
173
|
+
onMount: onEditorMount
|
|
174
|
+
}
|
|
175
|
+
)
|
|
176
|
+
}
|
|
177
|
+
),
|
|
178
|
+
bottom: /* @__PURE__ */ jsx(
|
|
179
|
+
EditorPane,
|
|
180
|
+
{
|
|
181
|
+
label: "Input",
|
|
182
|
+
hint: /* @__PURE__ */ jsx(
|
|
183
|
+
"span",
|
|
184
|
+
{
|
|
185
|
+
className: `truncate text-[11px] ${parsedInput.error ? "text-destructive" : "text-muted-foreground/70"}`,
|
|
186
|
+
title: parsedInput.error ?? void 0,
|
|
187
|
+
children: parsedInput.error ?? "YAML or JSON"
|
|
188
|
+
}
|
|
189
|
+
),
|
|
190
|
+
children: /* @__PURE__ */ jsx(
|
|
191
|
+
MonacoEditor,
|
|
192
|
+
{
|
|
193
|
+
value: state.input,
|
|
194
|
+
onChange: (input) => update({ input: input ?? "" }),
|
|
195
|
+
language: "yaml",
|
|
196
|
+
path: INPUT_MODEL_PATH,
|
|
197
|
+
height: "100%",
|
|
198
|
+
onMount: onEditorMount
|
|
199
|
+
}
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
)
|
|
203
|
+
}
|
|
204
|
+
) }),
|
|
205
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-h-0 w-1/2 flex-col", children: [
|
|
206
|
+
/* @__PURE__ */ jsx("div", { className: "border-b border-border px-4", children: /* @__PURE__ */ jsx(
|
|
207
|
+
Tabs,
|
|
208
|
+
{
|
|
209
|
+
tabs: [
|
|
210
|
+
{ id: "result", label: "Result" },
|
|
211
|
+
{ id: "graph", label: "Object graph" },
|
|
212
|
+
{ id: "tokens", label: "Tokens" },
|
|
213
|
+
...language.catalogue ? [{ id: "spec", label: "Functions", count: catalogue.length }] : []
|
|
214
|
+
],
|
|
215
|
+
value: outputTab,
|
|
216
|
+
onChange: setOutputTab
|
|
217
|
+
}
|
|
218
|
+
) }),
|
|
219
|
+
/* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1", children: [
|
|
220
|
+
outputTab === "result" ? /* @__PURE__ */ jsx(
|
|
221
|
+
ResultPanel,
|
|
222
|
+
{
|
|
223
|
+
response: evaluator.response,
|
|
224
|
+
pending: evaluator.pending,
|
|
225
|
+
stale: evaluator.stale,
|
|
226
|
+
onRun: evaluator.run
|
|
227
|
+
}
|
|
228
|
+
) : null,
|
|
229
|
+
outputTab === "graph" ? /* @__PURE__ */ jsx(
|
|
230
|
+
GraphPanel,
|
|
231
|
+
{
|
|
232
|
+
document: parsedInput.value,
|
|
233
|
+
languageId: language.editorLanguage,
|
|
234
|
+
onInsert: insertExpression
|
|
235
|
+
}
|
|
236
|
+
) : null,
|
|
237
|
+
outputTab === "tokens" ? /* @__PURE__ */ jsx(
|
|
238
|
+
TokensPanel,
|
|
239
|
+
{
|
|
240
|
+
source: state.source,
|
|
241
|
+
languageId: language.editorLanguage
|
|
242
|
+
}
|
|
243
|
+
) : null,
|
|
244
|
+
outputTab === "spec" && language.catalogue ? /* @__PURE__ */ jsx(SpecPanel, { flavour: language.catalogue, spec: activeSpec }) : null
|
|
245
|
+
] })
|
|
246
|
+
] })
|
|
247
|
+
] });
|
|
248
|
+
}
|
|
249
|
+
function EditorPane({
|
|
250
|
+
label,
|
|
251
|
+
hint,
|
|
252
|
+
actions,
|
|
253
|
+
children
|
|
254
|
+
}) {
|
|
255
|
+
return /* @__PURE__ */ jsxs("section", { className: "flex h-full min-h-0 flex-col bg-background", children: [
|
|
256
|
+
/* @__PURE__ */ jsxs("header", { className: "flex h-[33px] shrink-0 items-center justify-between gap-2 px-4 py-2", children: [
|
|
257
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
|
|
258
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: label }),
|
|
259
|
+
hint
|
|
260
|
+
] }),
|
|
261
|
+
actions
|
|
262
|
+
] }),
|
|
263
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 [&_[data-slot=monaco-editor]]:h-full [&_[data-slot=monaco-editor]]:rounded-none [&_[data-slot=monaco-editor]]:border-0 [&_[data-slot=monaco-editor]]:border-t", children })
|
|
264
|
+
] });
|
|
265
|
+
}
|
|
266
|
+
function useMarkers(response) {
|
|
267
|
+
useEffect(() => {
|
|
268
|
+
const model = monacoEditor.editor.getModels().find((candidate) => candidate.uri.toString() === SOURCE_MODEL_PATH);
|
|
269
|
+
if (!model) return;
|
|
270
|
+
const error = response == null ? void 0 : response.error;
|
|
271
|
+
if (!(error == null ? void 0 : error.line)) {
|
|
272
|
+
monacoEditor.editor.setModelMarkers(model, "expressions", []);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const column = error.column ?? 1;
|
|
276
|
+
monacoEditor.editor.setModelMarkers(model, "expressions", [
|
|
277
|
+
{
|
|
278
|
+
severity: monacoEditor.MarkerSeverity.Error,
|
|
279
|
+
message: error.message,
|
|
280
|
+
startLineNumber: error.line,
|
|
281
|
+
startColumn: column,
|
|
282
|
+
endLineNumber: error.line,
|
|
283
|
+
endColumn: column + 1
|
|
284
|
+
}
|
|
285
|
+
]);
|
|
286
|
+
}, [response]);
|
|
287
|
+
}
|
|
288
|
+
export {
|
|
289
|
+
ExpressionPlayground
|
|
290
|
+
};
|
|
291
|
+
//# sourceMappingURL=ExpressionPlayground.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpressionPlayground.js","sources":["../../../src/expressions/playground/ExpressionPlayground.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Combobox } from \"../../components/Combobox\";\nimport { Tabs } from \"../../layout/Tabs\";\nimport { MonacoEditor } from \"../../monaco/MonacoEditor\";\nimport type { Monaco } from \"@monaco-editor/react\";\nimport * as monacoEditor from \"monaco-editor\";\n\nimport {\n mergeSpec,\n registerGomplateLanguages,\n spec as packagedSpec,\n} from \"../lang/index.ts\";\nimport type { GomplateSpec, RegisteredLanguages } from \"../lang/index.ts\";\nimport { DEFAULT_API_BASE, fetchExamples, fetchSpec } from \"./api.ts\";\nimport type { EvalResponse, Example } from \"./api.ts\";\nimport { LANGUAGES, languageById } from \"./languages.ts\";\nimport type { PlaygroundLanguage } from \"./languages.ts\";\nimport { GraphPanel } from \"./panels/GraphPanel.tsx\";\nimport { ResultPanel } from \"./panels/ResultPanel.tsx\";\nimport { SpecPanel } from \"./panels/SpecPanel.tsx\";\nimport { TokensPanel } from \"./panels/TokensPanel.tsx\";\nimport { RunControls } from \"./RunControls.tsx\";\nimport { registerRunAction } from \"./runAction.ts\";\nimport { useEditorTheme } from \"./useEditorTheme.ts\";\nimport { useEvaluator } from \"./useEvaluator.ts\";\nimport { useParsedInput } from \"./useParsedInput.ts\";\nimport { VerticalSplit } from \"./VerticalSplit.tsx\";\nimport { rowsToPaneHeight } from \"./verticalSplitModel\";\n\n/** What the author is editing. Hosts persist this wherever suits them. */\nexport interface PlaygroundState {\n language: string;\n source: string;\n input: string;\n}\n\nexport interface ExpressionPlaygroundProps {\n /**\n * Where the host mounted the playground API. Defaults to `/api`; a host\n * serving it behind a prefix passes that instead.\n */\n apiBase?: string;\n /** Languages offered. Defaults to everything gomplate evaluates. */\n languages?: PlaygroundLanguage[];\n /**\n * Samples to offer. Fetched from the server when omitted, so a host that\n * configured `Options.Examples` needs no prop at all.\n */\n examples?: Example[];\n /** Controlled state. Pair with `onChange`. */\n value?: PlaygroundState;\n onChange?: (state: PlaygroundState) => void;\n /** Starting state when uncontrolled. */\n defaultValue?: PlaygroundState;\n className?: string;\n}\n\nconst SOURCE_MODEL_PATH = \"inmemory://expressions/source\";\nconst INPUT_MODEL_PATH = \"inmemory://expressions/input.yaml\";\n\nconst EMPTY_STATE: PlaygroundState = { language: \"cel\", source: \"\", input: \"\" };\n\n/**\n * An editor for one expression, the document it runs against, and its result.\n *\n * Deliberately shell-less: it renders the editors and the output panels and\n * nothing around them, so a host frames it with its own navigation. gomplate's\n * playground wraps it in an AppShell with a language rail; an app embedding it\n * in a drawer wraps it in nothing at all.\n *\n * Highlighting, completion and hover come from the catalogue the *server*\n * reports, so a host's own functions are first-class here without this\n * component knowing anything about them.\n */\nexport function ExpressionPlayground({\n apiBase = DEFAULT_API_BASE,\n languages: offered = LANGUAGES,\n examples,\n value,\n onChange,\n defaultValue,\n className,\n}: ExpressionPlaygroundProps) {\n const [uncontrolled, setUncontrolled] = useState<PlaygroundState>(\n () => defaultValue ?? { ...EMPTY_STATE, language: offered[0]?.id ?? \"cel\" },\n );\n const state = value ?? uncontrolled;\n\n const update = useCallback(\n (patch: Partial<PlaygroundState>) => {\n const next = { ...state, ...patch };\n if (!value) setUncontrolled(next);\n onChange?.(next);\n },\n [state, value, onChange],\n );\n\n const language = useMemo(\n () => languageById(state.language, offered),\n [state.language, offered],\n );\n const [outputTab, setOutputTab] = useState(\"result\");\n\n const evaluator = useEvaluator(apiBase, {\n language: language.evalLanguage,\n source: state.source,\n input: state.input,\n });\n\n // Completion reads the document through a ref: languages are registered once,\n // before the first editor mounts, while the input keeps being edited after.\n const parsedInput = useParsedInput(state.input);\n const environmentRef = useRef<unknown>(undefined);\n environmentRef.current = parsedInput.value;\n\n const [served, setServed] = useState<GomplateSpec>();\n const servedRef = useRef<GomplateSpec>(undefined);\n servedRef.current = served;\n const activeSpec = useMemo(() => mergeSpec(packagedSpec, served), [served]);\n\n const [fetched, setFetched] = useState<Example[]>();\n const available = examples ?? fetched ?? [];\n const forLanguage = available.filter(\n (example) => example.language === language.evalLanguage,\n );\n\n // Registration must happen before the first model is created, or Monaco\n // resolves the language id to plaintext and never revisits it. Which of the\n // two lands first is a race -- Monaco loads slowly, the fetch returns fast --\n // so both paths apply the catalogue.\n const registered = useRef<RegisteredLanguages | null>(null);\n const registerLanguages = useCallback((monaco: Monaco) => {\n const current = servedRef.current;\n registered.current = registerGomplateLanguages(monaco, {\n environment: () => environmentRef.current,\n ...(current ? { spec: current } : {}),\n });\n }, []);\n\n useEffect(() => {\n const controller = new AbortController();\n void fetchSpec(apiBase, controller.signal).then((next) => {\n if (!controller.signal.aborted) setServed(next);\n });\n return () => controller.abort();\n }, [apiBase]);\n\n useEffect(() => {\n if (served) registered.current?.setSpec(served);\n }, [served]);\n\n useEffect(() => {\n if (examples) return;\n const controller = new AbortController();\n void fetchExamples(apiBase, controller.signal).then((next) => {\n if (!controller.signal.aborted && next) setFetched(next);\n });\n return () => controller.abort();\n }, [apiBase, examples]);\n\n useMarkers(evaluator.response);\n const applyTheme = useEditorTheme();\n\n useEffect(() => {\n if (outputTab === \"spec\" && !language.catalogue) setOutputTab(\"result\");\n }, [language.catalogue, outputTab]);\n\n // The Monaco action is registered once per editor, so it has to reach the\n // current `run` through a ref rather than capturing it.\n const runRef = useRef(evaluator.run);\n runRef.current = evaluator.run;\n const sourceEditor = useRef<Parameters<typeof registerRunAction>[0] | null>(\n null,\n );\n const onEditorMount = useCallback(\n (editor: Parameters<typeof registerRunAction>[0], monaco: Monaco) => {\n applyTheme();\n registerRunAction(editor, monaco, () => runRef.current());\n if (editor.getModel()?.uri.toString() === SOURCE_MODEL_PATH)\n sourceEditor.current = editor;\n },\n [applyTheme],\n );\n\n /** Writes a path from the object graph where the author last left the caret. */\n const insertExpression = useCallback((expression: string) => {\n const editor = sourceEditor.current;\n const selection = editor?.getSelection();\n if (!editor || !selection) return;\n editor.executeEdits(\"object-graph\", [\n { range: selection, text: expression, forceMoveMarkers: true },\n ]);\n editor.focus();\n }, []);\n\n const catalogue = language.catalogue\n ? activeSpec[language.catalogue].functions\n : [];\n\n return (\n <div className={`flex h-full min-h-0 ${className ?? \"\"}`}>\n <div className=\"flex min-h-0 w-1/2 flex-col border-r border-border\">\n <VerticalSplit\n storageKey=\"expressions:editor-split\"\n defaultTopHeight={rowsToPaneHeight(language.editorRows)}\n top={\n <EditorPane\n label=\"Expression\"\n actions={<RunControls evaluator={evaluator} />}\n hint={\n forLanguage.length > 0 ? (\n <Combobox\n options={forLanguage.map((example) => ({\n value: example.name,\n label: example.name,\n }))}\n value=\"\"\n allowCustomValue={false}\n placeholder=\"Load an example…\"\n ariaLabel=\"Load an example\"\n className=\"w-56\"\n onChange={(name) => {\n const example = forLanguage.find(\n (candidate) => candidate.name === name,\n );\n if (example)\n update({\n source: example.source,\n input: example.input,\n });\n }}\n />\n ) : undefined\n }\n >\n <MonacoEditor\n value={state.source}\n onChange={(source) => update({ source: source ?? \"\" })}\n language={language.editorLanguage}\n path={SOURCE_MODEL_PATH}\n height=\"100%\"\n beforeMount={registerLanguages}\n onMount={onEditorMount}\n />\n </EditorPane>\n }\n bottom={\n <EditorPane\n label=\"Input\"\n hint={\n <span\n className={`truncate text-[11px] ${\n parsedInput.error\n ? \"text-destructive\"\n : \"text-muted-foreground/70\"\n }`}\n title={parsedInput.error ?? undefined}\n >\n {parsedInput.error ?? \"YAML or JSON\"}\n </span>\n }\n >\n <MonacoEditor\n value={state.input}\n onChange={(input) => update({ input: input ?? \"\" })}\n language=\"yaml\"\n path={INPUT_MODEL_PATH}\n height=\"100%\"\n onMount={onEditorMount}\n />\n </EditorPane>\n }\n />\n </div>\n\n <div className=\"flex min-h-0 w-1/2 flex-col\">\n <div className=\"border-b border-border px-4\">\n <Tabs\n tabs={[\n { id: \"result\", label: \"Result\" },\n { id: \"graph\", label: \"Object graph\" },\n { id: \"tokens\", label: \"Tokens\" },\n ...(language.catalogue\n ? [{ id: \"spec\", label: \"Functions\", count: catalogue.length }]\n : []),\n ]}\n value={outputTab}\n onChange={setOutputTab}\n />\n </div>\n\n <div className=\"min-h-0 flex-1\">\n {outputTab === \"result\" ? (\n <ResultPanel\n response={evaluator.response}\n pending={evaluator.pending}\n stale={evaluator.stale}\n onRun={evaluator.run}\n />\n ) : null}\n {outputTab === \"graph\" ? (\n <GraphPanel\n document={parsedInput.value}\n languageId={language.editorLanguage}\n onInsert={insertExpression}\n />\n ) : null}\n {outputTab === \"tokens\" ? (\n <TokensPanel\n source={state.source}\n languageId={language.editorLanguage}\n />\n ) : null}\n {outputTab === \"spec\" && language.catalogue ? (\n <SpecPanel flavour={language.catalogue} spec={activeSpec} />\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n\nfunction EditorPane({\n label,\n hint,\n actions,\n children,\n}: {\n label: string;\n hint?: React.ReactNode;\n actions?: React.ReactNode;\n children: React.ReactNode;\n}) {\n return (\n <section className=\"flex h-full min-h-0 flex-col bg-background\">\n <header className=\"flex h-[33px] shrink-0 items-center justify-between gap-2 px-4 py-2\">\n <div className=\"flex items-baseline gap-2\">\n <h2 className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {label}\n </h2>\n {hint}\n </div>\n {actions}\n </header>\n <div className=\"min-h-0 flex-1 [&_[data-slot=monaco-editor]]:h-full [&_[data-slot=monaco-editor]]:rounded-none [&_[data-slot=monaco-editor]]:border-0 [&_[data-slot=monaco-editor]]:border-t\">\n {children}\n </div>\n </section>\n );\n}\n\n/**\n * Mirrors a compile error onto the editor as a marker, so the position the\n * server reported is visible where the mistake is rather than only in the\n * result panel.\n */\nfunction useMarkers(response: EvalResponse | null) {\n useEffect(() => {\n const model = monacoEditor.editor\n .getModels()\n .find((candidate) => candidate.uri.toString() === SOURCE_MODEL_PATH);\n if (!model) return;\n\n const error = response?.error;\n if (!error?.line) {\n monacoEditor.editor.setModelMarkers(model, \"expressions\", []);\n return;\n }\n\n const column = error.column ?? 1;\n monacoEditor.editor.setModelMarkers(model, \"expressions\", [\n {\n severity: monacoEditor.MarkerSeverity.Error,\n message: error.message,\n startLineNumber: error.line,\n startColumn: column,\n endLineNumber: error.line,\n endColumn: column + 1,\n },\n ]);\n }, [response]);\n}\n"],"names":["packagedSpec"],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const button = require("../../components/button.cjs");
|
|
6
|
+
const Switch = require("../../components/Switch.cjs");
|
|
7
|
+
const runShortcut = require("./runShortcut.cjs");
|
|
8
|
+
const UiPlay = require("../../icons/components/UiPlay.cjs");
|
|
9
|
+
function RunControls({ evaluator }) {
|
|
10
|
+
useGlobalRunShortcut(evaluator.run);
|
|
11
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
12
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13
|
+
Switch.Switch,
|
|
14
|
+
{
|
|
15
|
+
checked: evaluator.autoRun,
|
|
16
|
+
onChange: evaluator.setAutoRun,
|
|
17
|
+
label: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "Auto-run" })
|
|
18
|
+
}
|
|
19
|
+
),
|
|
20
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
21
|
+
button.Button,
|
|
22
|
+
{
|
|
23
|
+
onClick: evaluator.run,
|
|
24
|
+
loading: evaluator.pending,
|
|
25
|
+
variant: evaluator.stale ? "default" : "outline",
|
|
26
|
+
size: "sm",
|
|
27
|
+
className: "[&_svg]:size-3.5",
|
|
28
|
+
title: `Run (${runShortcut.RUN_SHORTCUT_LABEL})`,
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ jsxRuntime.jsx(UiPlay.UiPlay, { className: "mr-1.5" }),
|
|
31
|
+
"Run",
|
|
32
|
+
/* @__PURE__ */ jsxRuntime.jsx("kbd", { className: "ml-2 rounded border border-current/25 px-1 text-[10px] leading-4 opacity-70", children: runShortcut.RUN_SHORTCUT_LABEL })
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
] });
|
|
37
|
+
}
|
|
38
|
+
function useGlobalRunShortcut(run) {
|
|
39
|
+
react.useEffect(() => {
|
|
40
|
+
const onKeyDown = (event) => {
|
|
41
|
+
if (event.key !== "Enter") return;
|
|
42
|
+
if (!(event.metaKey || event.ctrlKey)) return;
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
run();
|
|
45
|
+
};
|
|
46
|
+
window.addEventListener("keydown", onKeyDown);
|
|
47
|
+
return () => window.removeEventListener("keydown", onKeyDown);
|
|
48
|
+
}, [run]);
|
|
49
|
+
}
|
|
50
|
+
exports.RunControls = RunControls;
|
|
51
|
+
//# sourceMappingURL=RunControls.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunControls.cjs","sources":["../../../src/expressions/playground/RunControls.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { Switch } from \"../../components/Switch\";\nimport { UiPlay } from \"../../icons\";\nimport { RUN_SHORTCUT_LABEL } from \"./runShortcut\";\nimport type { Evaluator } from \"./useEvaluator.ts\";\n\ninterface RunControlsProps {\n evaluator: Evaluator;\n}\n\nexport function RunControls({ evaluator }: RunControlsProps) {\n useGlobalRunShortcut(evaluator.run);\n\n return (\n <div className=\"flex items-center gap-3\">\n <Switch\n checked={evaluator.autoRun}\n onChange={evaluator.setAutoRun}\n label={<span className=\"text-xs text-muted-foreground\">Auto-run</span>}\n />\n <Button\n onClick={evaluator.run}\n // No `loadingLabel`: Button renders it whenever it is defined, not only\n // while loading, so it would replace \"Run\" permanently.\n loading={evaluator.pending}\n // A stale result is the case the button exists for, so make it the one\n // that stands out; otherwise it is a quiet re-run control.\n variant={evaluator.stale ? \"default\" : \"outline\"}\n size=\"sm\"\n className=\"[&_svg]:size-3.5\"\n title={`Run (${RUN_SHORTCUT_LABEL})`}\n >\n <UiPlay className=\"mr-1.5\" />\n Run\n <kbd className=\"ml-2 rounded border border-current/25 px-1 text-[10px] leading-4 opacity-70\">\n {RUN_SHORTCUT_LABEL}\n </kbd>\n </Button>\n </div>\n );\n}\n\n/**\n * Cmd/Ctrl+Enter outside the editors.\n *\n * Monaco swallows keystrokes while it has focus, so the editors register the\n * same accelerator as a Monaco action of their own (see `runAction`). This\n * covers the rest of the page.\n */\nfunction useGlobalRunShortcut(run: () => void) {\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Enter\") return;\n if (!(event.metaKey || event.ctrlKey)) return;\n event.preventDefault();\n run();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [run]);\n}\n"],"names":["jsxs","jsx","Switch","Button","RUN_SHORTCUT_LABEL","UiPlay","useEffect"],"mappings":";;;;;;;;AAWO,SAAS,YAAY,EAAE,aAA+B;AAC3D,uBAAqB,UAAU,GAAG;AAElC,SACEA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAACC,OAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,UAAU;AAAA,QACnB,UAAU,UAAU;AAAA,QACpB,OAAOD,2BAAAA,IAAC,QAAA,EAAK,WAAU,iCAAgC,UAAA,WAAA,CAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjED,2BAAAA;AAAAA,MAACG,OAAAA;AAAAA,MAAA;AAAA,QACC,SAAS,UAAU;AAAA,QAGnB,SAAS,UAAU;AAAA,QAGnB,SAAS,UAAU,QAAQ,YAAY;AAAA,QACvC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,OAAO,QAAQC,YAAAA,kBAAkB;AAAA,QAEjC,UAAA;AAAA,UAAAH,2BAAAA,IAACI,OAAAA,QAAA,EAAO,WAAU,SAAA,CAAS;AAAA,UAAE;AAAA,UAE7BJ,2BAAAA,IAAC,OAAA,EAAI,WAAU,+EACZ,UAAAG,YAAAA,mBAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AASA,SAAS,qBAAqB,KAAiB;AAC7CE,QAAAA,UAAU,MAAM;AACd,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,QAAS;AAC3B,UAAI,EAAE,MAAM,WAAW,MAAM,SAAU;AACvC,YAAM,eAAA;AACN,UAAA;AAAA,IACF;AACA,WAAO,iBAAiB,WAAW,SAAS;AAC5C,WAAO,MAAM,OAAO,oBAAoB,WAAW,SAAS;AAAA,EAC9D,GAAG,CAAC,GAAG,CAAC;AACV;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunControls.d.ts","sourceRoot":"","sources":["../../../src/expressions/playground/RunControls.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,UAAU,gBAAgB;IACxB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,gBAAgB,+BA8B1D"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { Button } from "../../components/button.js";
|
|
4
|
+
import { Switch } from "../../components/Switch.js";
|
|
5
|
+
import { RUN_SHORTCUT_LABEL } from "./runShortcut.js";
|
|
6
|
+
import { UiPlay } from "../../icons/components/UiPlay.js";
|
|
7
|
+
function RunControls({ evaluator }) {
|
|
8
|
+
useGlobalRunShortcut(evaluator.run);
|
|
9
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
10
|
+
/* @__PURE__ */ jsx(
|
|
11
|
+
Switch,
|
|
12
|
+
{
|
|
13
|
+
checked: evaluator.autoRun,
|
|
14
|
+
onChange: evaluator.setAutoRun,
|
|
15
|
+
label: /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "Auto-run" })
|
|
16
|
+
}
|
|
17
|
+
),
|
|
18
|
+
/* @__PURE__ */ jsxs(
|
|
19
|
+
Button,
|
|
20
|
+
{
|
|
21
|
+
onClick: evaluator.run,
|
|
22
|
+
loading: evaluator.pending,
|
|
23
|
+
variant: evaluator.stale ? "default" : "outline",
|
|
24
|
+
size: "sm",
|
|
25
|
+
className: "[&_svg]:size-3.5",
|
|
26
|
+
title: `Run (${RUN_SHORTCUT_LABEL})`,
|
|
27
|
+
children: [
|
|
28
|
+
/* @__PURE__ */ jsx(UiPlay, { className: "mr-1.5" }),
|
|
29
|
+
"Run",
|
|
30
|
+
/* @__PURE__ */ jsx("kbd", { className: "ml-2 rounded border border-current/25 px-1 text-[10px] leading-4 opacity-70", children: RUN_SHORTCUT_LABEL })
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
] });
|
|
35
|
+
}
|
|
36
|
+
function useGlobalRunShortcut(run) {
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const onKeyDown = (event) => {
|
|
39
|
+
if (event.key !== "Enter") return;
|
|
40
|
+
if (!(event.metaKey || event.ctrlKey)) return;
|
|
41
|
+
event.preventDefault();
|
|
42
|
+
run();
|
|
43
|
+
};
|
|
44
|
+
window.addEventListener("keydown", onKeyDown);
|
|
45
|
+
return () => window.removeEventListener("keydown", onKeyDown);
|
|
46
|
+
}, [run]);
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
RunControls
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=RunControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunControls.js","sources":["../../../src/expressions/playground/RunControls.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { Button } from \"../../components/button\";\nimport { Switch } from \"../../components/Switch\";\nimport { UiPlay } from \"../../icons\";\nimport { RUN_SHORTCUT_LABEL } from \"./runShortcut\";\nimport type { Evaluator } from \"./useEvaluator.ts\";\n\ninterface RunControlsProps {\n evaluator: Evaluator;\n}\n\nexport function RunControls({ evaluator }: RunControlsProps) {\n useGlobalRunShortcut(evaluator.run);\n\n return (\n <div className=\"flex items-center gap-3\">\n <Switch\n checked={evaluator.autoRun}\n onChange={evaluator.setAutoRun}\n label={<span className=\"text-xs text-muted-foreground\">Auto-run</span>}\n />\n <Button\n onClick={evaluator.run}\n // No `loadingLabel`: Button renders it whenever it is defined, not only\n // while loading, so it would replace \"Run\" permanently.\n loading={evaluator.pending}\n // A stale result is the case the button exists for, so make it the one\n // that stands out; otherwise it is a quiet re-run control.\n variant={evaluator.stale ? \"default\" : \"outline\"}\n size=\"sm\"\n className=\"[&_svg]:size-3.5\"\n title={`Run (${RUN_SHORTCUT_LABEL})`}\n >\n <UiPlay className=\"mr-1.5\" />\n Run\n <kbd className=\"ml-2 rounded border border-current/25 px-1 text-[10px] leading-4 opacity-70\">\n {RUN_SHORTCUT_LABEL}\n </kbd>\n </Button>\n </div>\n );\n}\n\n/**\n * Cmd/Ctrl+Enter outside the editors.\n *\n * Monaco swallows keystrokes while it has focus, so the editors register the\n * same accelerator as a Monaco action of their own (see `runAction`). This\n * covers the rest of the page.\n */\nfunction useGlobalRunShortcut(run: () => void) {\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Enter\") return;\n if (!(event.metaKey || event.ctrlKey)) return;\n event.preventDefault();\n run();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [run]);\n}\n"],"names":[],"mappings":";;;;;;AAWO,SAAS,YAAY,EAAE,aAA+B;AAC3D,uBAAqB,UAAU,GAAG;AAElC,SACE,qBAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,UAAU;AAAA,QACnB,UAAU,UAAU;AAAA,QACpB,OAAO,oBAAC,QAAA,EAAK,WAAU,iCAAgC,UAAA,WAAA,CAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS,UAAU;AAAA,QAGnB,SAAS,UAAU;AAAA,QAGnB,SAAS,UAAU,QAAQ,YAAY;AAAA,QACvC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,OAAO,QAAQ,kBAAkB;AAAA,QAEjC,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAO,WAAU,SAAA,CAAS;AAAA,UAAE;AAAA,UAE7B,oBAAC,OAAA,EAAI,WAAU,+EACZ,UAAA,mBAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AASA,SAAS,qBAAqB,KAAiB;AAC7C,YAAU,MAAM;AACd,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,QAAS;AAC3B,UAAI,EAAE,MAAM,WAAW,MAAM,SAAU;AACvC,YAAM,eAAA;AACN,UAAA;AAAA,IACF;AACA,WAAO,iBAAiB,WAAW,SAAS;AAC5C,WAAO,MAAM,OAAO,oBAAoB,WAAW,SAAS;AAAA,EAC9D,GAAG,CAAC,GAAG,CAAC;AACV;"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const verticalSplitModel = require("./verticalSplitModel.cjs");
|
|
6
|
+
function VerticalSplit({
|
|
7
|
+
top,
|
|
8
|
+
bottom,
|
|
9
|
+
defaultTopHeight,
|
|
10
|
+
minTop = verticalSplitModel.rowsToPaneHeight(2),
|
|
11
|
+
minBottom = 96,
|
|
12
|
+
storageKey
|
|
13
|
+
}) {
|
|
14
|
+
const container = react.useRef(null);
|
|
15
|
+
const [topHeight, setTopHeight] = react.useState(
|
|
16
|
+
() => readStored(storageKey) ?? defaultTopHeight
|
|
17
|
+
);
|
|
18
|
+
const [dragging, setDragging] = react.useState(false);
|
|
19
|
+
const hasStoredSize = react.useRef(readStored(storageKey) !== null);
|
|
20
|
+
react.useEffect(() => {
|
|
21
|
+
if (!hasStoredSize.current) setTopHeight(defaultTopHeight);
|
|
22
|
+
}, [defaultTopHeight]);
|
|
23
|
+
const clamp = react.useCallback(
|
|
24
|
+
(height) => {
|
|
25
|
+
var _a;
|
|
26
|
+
const available = ((_a = container.current) == null ? void 0 : _a.getBoundingClientRect().height) ?? 0;
|
|
27
|
+
const upperBound = Math.max(minTop, available - minBottom);
|
|
28
|
+
return Math.round(Math.max(minTop, Math.min(upperBound, height)));
|
|
29
|
+
},
|
|
30
|
+
[minTop, minBottom]
|
|
31
|
+
);
|
|
32
|
+
const commit = react.useCallback(
|
|
33
|
+
(height) => {
|
|
34
|
+
const next = clamp(height);
|
|
35
|
+
setTopHeight(next);
|
|
36
|
+
hasStoredSize.current = true;
|
|
37
|
+
if (storageKey) window.localStorage.setItem(storageKey, String(next));
|
|
38
|
+
},
|
|
39
|
+
[clamp, storageKey]
|
|
40
|
+
);
|
|
41
|
+
const onPointerDown = react.useCallback(
|
|
42
|
+
(event) => {
|
|
43
|
+
var _a;
|
|
44
|
+
event.preventDefault();
|
|
45
|
+
const rect = (_a = container.current) == null ? void 0 : _a.getBoundingClientRect();
|
|
46
|
+
if (!rect) return;
|
|
47
|
+
setDragging(true);
|
|
48
|
+
const onMove = (moveEvent) => commit(moveEvent.clientY - rect.top);
|
|
49
|
+
const onUp = () => {
|
|
50
|
+
setDragging(false);
|
|
51
|
+
document.removeEventListener("pointermove", onMove);
|
|
52
|
+
document.removeEventListener("pointerup", onUp);
|
|
53
|
+
};
|
|
54
|
+
document.addEventListener("pointermove", onMove);
|
|
55
|
+
document.addEventListener("pointerup", onUp);
|
|
56
|
+
},
|
|
57
|
+
[commit]
|
|
58
|
+
);
|
|
59
|
+
const onKeyDown = react.useCallback(
|
|
60
|
+
(event) => {
|
|
61
|
+
const step = event.shiftKey ? verticalSplitModel.EDITOR_LINE_HEIGHT * 5 : verticalSplitModel.EDITOR_LINE_HEIGHT;
|
|
62
|
+
if (event.key === "ArrowUp") {
|
|
63
|
+
event.preventDefault();
|
|
64
|
+
commit(topHeight - step);
|
|
65
|
+
} else if (event.key === "ArrowDown") {
|
|
66
|
+
event.preventDefault();
|
|
67
|
+
commit(topHeight + step);
|
|
68
|
+
} else if (event.key === "Home") {
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
commit(minTop);
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
[commit, topHeight, minTop]
|
|
74
|
+
);
|
|
75
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: container, className: "flex h-full min-h-0 flex-col", children: [
|
|
76
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
77
|
+
"div",
|
|
78
|
+
{
|
|
79
|
+
className: "min-h-0 shrink-0 overflow-hidden",
|
|
80
|
+
style: { height: topHeight },
|
|
81
|
+
children: top
|
|
82
|
+
}
|
|
83
|
+
),
|
|
84
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
+
"div",
|
|
86
|
+
{
|
|
87
|
+
role: "separator",
|
|
88
|
+
"aria-orientation": "horizontal",
|
|
89
|
+
"aria-label": "Resize the expression editor",
|
|
90
|
+
"aria-valuenow": topHeight,
|
|
91
|
+
tabIndex: 0,
|
|
92
|
+
onPointerDown,
|
|
93
|
+
onKeyDown,
|
|
94
|
+
className: `group relative h-1.5 shrink-0 cursor-row-resize bg-border transition-colors hover:bg-primary/40 focus-visible:bg-primary/60 focus-visible:outline-none ${dragging ? "bg-primary/60" : ""}`,
|
|
95
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute inset-x-0 -top-1 -bottom-1" })
|
|
96
|
+
}
|
|
97
|
+
),
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: bottom })
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
function readStored(key) {
|
|
102
|
+
if (!key || typeof window === "undefined") return null;
|
|
103
|
+
const raw = window.localStorage.getItem(key);
|
|
104
|
+
if (raw === null) return null;
|
|
105
|
+
const parsed = Number.parseInt(raw, 10);
|
|
106
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
107
|
+
}
|
|
108
|
+
exports.VerticalSplit = VerticalSplit;
|
|
109
|
+
//# sourceMappingURL=VerticalSplit.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerticalSplit.cjs","sources":["../../../src/expressions/playground/VerticalSplit.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { EDITOR_LINE_HEIGHT, rowsToPaneHeight } from \"./verticalSplitModel\";\n\nexport interface VerticalSplitProps {\n top: ReactNode;\n bottom: ReactNode;\n /** Top-pane height in pixels, used until the reader drags the divider. */\n defaultTopHeight: number;\n /** Smallest the top pane may be dragged. Defaults to two rows. */\n minTop?: number;\n /** Smallest the bottom pane may be dragged. */\n minBottom?: number;\n /** localStorage key persisting the dragged height. */\n storageKey?: string;\n}\n\n/**\n * A vertically stacked, resizable pair of panes.\n *\n * clicky-ui's SplitPane only splits horizontally, and the two editors stack, so\n * the divider here is its own component. Sizing is in pixels rather than a\n * percentage because the useful size of the expression editor is a number of\n * rows, which a percentage of a varying viewport does not express.\n */\nexport function VerticalSplit({\n top,\n bottom,\n defaultTopHeight,\n minTop = rowsToPaneHeight(2),\n minBottom = 96,\n storageKey,\n}: VerticalSplitProps) {\n const container = useRef<HTMLDivElement>(null);\n const [topHeight, setTopHeight] = useState(\n () => readStored(storageKey) ?? defaultTopHeight,\n );\n const [dragging, setDragging] = useState(false);\n\n // Only follow the language's default while the reader has not chosen a size:\n // a dragged divider is a decision, and switching language should not undo it.\n const hasStoredSize = useRef(readStored(storageKey) !== null);\n useEffect(() => {\n if (!hasStoredSize.current) setTopHeight(defaultTopHeight);\n }, [defaultTopHeight]);\n\n const clamp = useCallback(\n (height: number) => {\n const available = container.current?.getBoundingClientRect().height ?? 0;\n const upperBound = Math.max(minTop, available - minBottom);\n return Math.round(Math.max(minTop, Math.min(upperBound, height)));\n },\n [minTop, minBottom],\n );\n\n const commit = useCallback(\n (height: number) => {\n const next = clamp(height);\n setTopHeight(next);\n hasStoredSize.current = true;\n if (storageKey) window.localStorage.setItem(storageKey, String(next));\n },\n [clamp, storageKey],\n );\n\n const onPointerDown = useCallback(\n (event: React.PointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n const rect = container.current?.getBoundingClientRect();\n if (!rect) return;\n\n setDragging(true);\n const onMove = (moveEvent: PointerEvent) =>\n commit(moveEvent.clientY - rect.top);\n const onUp = () => {\n setDragging(false);\n document.removeEventListener(\"pointermove\", onMove);\n document.removeEventListener(\"pointerup\", onUp);\n };\n document.addEventListener(\"pointermove\", onMove);\n document.addEventListener(\"pointerup\", onUp);\n },\n [commit],\n );\n\n // A separator that can only be dragged is unusable without a mouse, and this\n // one gates access to the input editor.\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const step = event.shiftKey ? EDITOR_LINE_HEIGHT * 5 : EDITOR_LINE_HEIGHT;\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n commit(topHeight - step);\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault();\n commit(topHeight + step);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n commit(minTop);\n }\n },\n [commit, topHeight, minTop],\n );\n\n return (\n <div ref={container} className=\"flex h-full min-h-0 flex-col\">\n <div\n className=\"min-h-0 shrink-0 overflow-hidden\"\n style={{ height: topHeight }}\n >\n {top}\n </div>\n\n <div\n role=\"separator\"\n aria-orientation=\"horizontal\"\n aria-label=\"Resize the expression editor\"\n aria-valuenow={topHeight}\n tabIndex={0}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n className={`group relative h-1.5 shrink-0 cursor-row-resize bg-border transition-colors hover:bg-primary/40 focus-visible:bg-primary/60 focus-visible:outline-none ${\n dragging ? \"bg-primary/60\" : \"\"\n }`}\n >\n {/* A 6px strip is a small target; widen the grab area without moving\n anything by overflowing an invisible band above and below it. */}\n <span className=\"absolute inset-x-0 -top-1 -bottom-1\" />\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-hidden\">{bottom}</div>\n </div>\n );\n}\n\nfunction readStored(key: string | undefined): number | null {\n if (!key || typeof window === \"undefined\") return null;\n const raw = window.localStorage.getItem(key);\n if (raw === null) return null;\n const parsed = Number.parseInt(raw, 10);\n return Number.isFinite(parsed) ? parsed : null;\n}\n"],"names":["rowsToPaneHeight","useRef","useState","useEffect","useCallback","EDITOR_LINE_HEIGHT","jsxs","jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface VerticalSplitProps {
|
|
3
|
+
top: ReactNode;
|
|
4
|
+
bottom: ReactNode;
|
|
5
|
+
/** Top-pane height in pixels, used until the reader drags the divider. */
|
|
6
|
+
defaultTopHeight: number;
|
|
7
|
+
/** Smallest the top pane may be dragged. Defaults to two rows. */
|
|
8
|
+
minTop?: number;
|
|
9
|
+
/** Smallest the bottom pane may be dragged. */
|
|
10
|
+
minBottom?: number;
|
|
11
|
+
/** localStorage key persisting the dragged height. */
|
|
12
|
+
storageKey?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A vertically stacked, resizable pair of panes.
|
|
16
|
+
*
|
|
17
|
+
* clicky-ui's SplitPane only splits horizontally, and the two editors stack, so
|
|
18
|
+
* the divider here is its own component. Sizing is in pixels rather than a
|
|
19
|
+
* percentage because the useful size of the expression editor is a number of
|
|
20
|
+
* rows, which a percentage of a varying viewport does not express.
|
|
21
|
+
*/
|
|
22
|
+
export declare function VerticalSplit({ top, bottom, defaultTopHeight, minTop, minBottom, storageKey, }: VerticalSplitProps): import("react").JSX.Element;
|
|
23
|
+
//# sourceMappingURL=VerticalSplit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VerticalSplit.d.ts","sourceRoot":"","sources":["../../../src/expressions/playground/VerticalSplit.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,MAAM,EACN,gBAAgB,EAChB,MAA4B,EAC5B,SAAc,EACd,UAAU,GACX,EAAE,kBAAkB,+BAqGpB"}
|