@workbench-kit/react 0.0.2-prototype.0.1.2 → 0.0.2-prototype.0.2.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/package.json +31 -23
- package/src/brand/TilepaperAppIcon.tsx +181 -0
- package/src/brand/index.ts +2 -0
- package/src/brand/tilepaper-app-icon-geometry.ts +201 -0
- package/src/icons/WorkbenchIcon.tsx +57 -0
- package/src/icons/WorkbenchIconContext.tsx +25 -0
- package/src/icons/file-icon.ts +154 -0
- package/src/icons/index.ts +17 -0
- package/src/icons/resolveWorkbenchIcon.ts +48 -0
- package/src/icons/types.ts +28 -0
- package/src/index.ts +261 -71
- package/src/jdw/JdwPreview.tsx +165 -8
- package/src/jdw/JdwPreviewViewport.tsx +190 -0
- package/src/jdw/JsonCodeEditorPane.tsx +165 -15
- package/src/jdw/builtins/renderBuiltinWidgetLeaf.tsx +101 -0
- package/src/jdw/createBuiltinJdwRegistry.ts +330 -5
- package/src/jdw/cssRenderBackend.tsx +96 -7
- package/src/jdw/document.ts +0 -3
- package/src/jdw/fixtures/jdw-sample-screens.ts +10 -8
- package/src/jdw/index.ts +9 -4
- package/src/jdw/jdw-preview-viewport.css +41 -0
- package/src/jdw/renderJdw.tsx +49 -8
- package/src/json-config/JsonConfigWorkbench.tsx +11 -14
- package/src/layout/ViewEmptyState.tsx +14 -0
- package/src/layout/WorkbenchCanvas.tsx +113 -6
- package/src/layout/WorkbenchLayout.tsx +3 -0
- package/src/layout/WorkbenchLayoutBase.tsx +43 -2
- package/src/layout/WorkbenchMediaPreviewViewport.tsx +122 -0
- package/src/layout/WorkbenchPropertyOverrideLabel.tsx +90 -0
- package/src/layout/WorkbenchPropertyPanel.tsx +153 -17
- package/src/layout/WorkbenchPropertySearch.tsx +51 -0
- package/src/layout/WorkbenchTree.tsx +9 -10
- package/src/layout/canvas/canvas-drag-ghost.css +21 -0
- package/src/layout/canvas/canvas-drag-preview-frame.css +15 -0
- package/src/layout/canvas/canvas-drop-indicator.css +16 -0
- package/src/layout/canvas/canvas-frame-handle.css +37 -0
- package/src/layout/canvas/canvas-frame-surface.css +24 -0
- package/src/layout/canvas/canvas-guide-block.css +17 -0
- package/src/layout/canvas/canvas-guide-layer.css +6 -0
- package/src/layout/canvas/canvas-guide-line.css +22 -0
- package/src/layout/canvas/canvas-item-badge.css +23 -0
- package/src/layout/canvas/canvas-item-frame.css +54 -0
- package/src/layout/canvas/canvas-pane-surface.css +9 -0
- package/src/layout/canvas/canvas-placeholder.css +21 -0
- package/src/layout/canvas/canvas-resize-frame.css +9 -0
- package/src/layout/canvas/canvas-resize-handle.css +74 -0
- package/src/layout/canvas/canvas-resize-preview.css +11 -0
- package/src/layout/canvas/canvas-selection-marquee.css +14 -0
- package/src/layout/canvas/canvas-viewport.css +18 -0
- package/src/layout/canvas/index.css +19 -0
- package/src/layout/canvas/preview-canvas.css +144 -0
- package/src/layout/editor/editor-body.css +9 -0
- package/src/layout/editor/editor-bottom-panel.css +44 -0
- package/src/layout/editor/editor-frame.css +14 -0
- package/src/layout/editor/editor-viewport.css +7 -0
- package/src/layout/editor/floating-menu.css +91 -0
- package/src/layout/editor/index.css +10 -0
- package/src/layout/editor/parse-error.css +9 -0
- package/src/layout/editor/problem-item.css +52 -0
- package/src/layout/editor/problem-list.css +7 -0
- package/src/layout/editor/render-surface.css +13 -0
- package/src/layout/fillScrollContract.ts +49 -0
- package/src/layout/fullscreen/fullscreen-backdrop.css +31 -0
- package/src/layout/fullscreen/fullscreen-button.css +44 -0
- package/src/layout/fullscreen/fullscreen-carousel.css +20 -0
- package/src/layout/fullscreen/fullscreen-content.css +8 -0
- package/src/layout/fullscreen/fullscreen-empty.css +16 -0
- package/src/layout/fullscreen/fullscreen-header.css +77 -0
- package/src/layout/fullscreen/fullscreen-hero.css +41 -0
- package/src/layout/fullscreen/fullscreen-nav-button.css +29 -0
- package/src/layout/fullscreen/fullscreen-option.css +83 -0
- package/src/layout/fullscreen/fullscreen-pill-row.css +6 -0
- package/src/layout/fullscreen/fullscreen-pill.css +10 -0
- package/src/layout/fullscreen/fullscreen-root.css +11 -0
- package/src/layout/fullscreen/index.css +13 -0
- package/src/layout/index.ts +156 -0
- package/src/layout/layout-base/banner.css +32 -0
- package/src/layout/layout-base/center.css +7 -0
- package/src/layout/layout-base/column.css +7 -0
- package/src/layout/layout-base/divider.css +5 -0
- package/src/layout/layout-base/empty.css +12 -0
- package/src/layout/layout-base/fill-scroll.css +36 -0
- package/src/layout/layout-base/fill.css +18 -0
- package/src/layout/layout-base/index.css +13 -0
- package/src/layout/layout-base/pane.css +6 -0
- package/src/layout/layout-base/panel-scroll.css +5 -0
- package/src/layout/layout-base/panel-surface.css +14 -0
- package/src/layout/layout-base/root.css +9 -0
- package/src/layout/layout-base/section-title.css +8 -0
- package/src/layout/layout.css +10 -0
- package/src/layout/layoutHelpers.ts +4 -2
- package/src/layout/media/index.css +2 -0
- package/src/layout/media/media-preview-viewport.css +69 -0
- package/src/layout/{Panel.tsx → panel/Panel.tsx} +29 -40
- package/src/layout/panel/TemplateGallery.tsx +90 -0
- package/src/layout/panel/WorkbenchAuthoringShell.tsx +57 -0
- package/src/layout/panel/WorkbenchLabeledPane.tsx +81 -0
- package/src/layout/panel/WorkbenchSidebarStack.tsx +15 -0
- package/src/layout/panel/filter-bar.css +59 -0
- package/src/layout/panel/index.css +7 -0
- package/src/layout/panel/index.ts +70 -0
- package/src/layout/panel/preview-pane.css +63 -0
- package/src/layout/panel/template-gallery.css +131 -0
- package/src/layout/panel/workbench-authoring-shell.css +48 -0
- package/src/layout/panel/workbench-labeled-pane.css +69 -0
- package/src/layout/panel/workbench-sidebar-stack.css +18 -0
- package/src/layout/property/color-input.css +8 -0
- package/src/layout/property/color-row.css +6 -0
- package/src/layout/property/index.css +15 -0
- package/src/layout/property/property-card.css +8 -0
- package/src/layout/property/property-grid.css +24 -0
- package/src/layout/property/property-hint.css +4 -0
- package/src/layout/property/property-inline.css +10 -0
- package/src/layout/property/property-key-value.css +29 -0
- package/src/layout/property/property-override-label.css +34 -0
- package/src/layout/property/property-panel.css +20 -0
- package/src/layout/property/property-row.css +17 -0
- package/src/layout/property/property-search.css +43 -0
- package/src/layout/property/property-section.css +97 -0
- package/src/layout/property/property-stack.css +11 -0
- package/src/layout/property/property-toggle.css +14 -0
- package/src/layout/propertyFieldFilter.ts +84 -0
- package/src/layout/sidebar/SideBarViewFrame.tsx +235 -0
- package/src/layout/sidebar/SideBarViewTabStrip.tsx +60 -0
- package/src/layout/sidebar/SideBarViewTitleMenu.tsx +75 -0
- package/src/layout/sidebar/SidebarActionIconBar.tsx +242 -0
- package/src/layout/sidebar/SidebarSectionNestingContext.tsx +21 -0
- package/src/layout/sidebar/SidebarSlotChrome.tsx +32 -0
- package/src/layout/sidebar/SidebarToolbar.tsx +10 -0
- package/src/layout/sidebar/WorkbenchActionSidebar.tsx +73 -0
- package/src/layout/{WorkbenchSidebarActions.tsx → sidebar/WorkbenchSidebarActions.tsx} +105 -51
- package/src/layout/sidebar/WorkbenchSidebarSectionStack.tsx +165 -0
- package/src/layout/sidebar/index.css +5 -0
- package/src/layout/sidebar/index.ts +55 -0
- package/src/layout/sidebar/sidebar-chrome.css +95 -0
- package/src/layout/sidebar/sidebar-section-stack.css +25 -0
- package/src/layout/sidebar/sidebar-section.css +124 -0
- package/src/layout/sidebar/sidebar-view.css +290 -0
- package/src/layout/tree/drag-preview.css +25 -0
- package/src/layout/tree/index.css +10 -0
- package/src/layout/tree/template-glyph.css +96 -0
- package/src/layout/tree/tree-action.css +20 -0
- package/src/layout/tree/tree-drag-overlay.css +13 -0
- package/src/layout/tree/tree-drop-line.css +17 -0
- package/src/layout/tree/tree-drop-zone.css +13 -0
- package/src/layout/tree/tree-expander.css +23 -0
- package/src/layout/tree/tree-item.css +93 -0
- package/src/layout/tree/tree.css +49 -0
- package/src/layout/usePreviewViewport.ts +428 -0
- package/src/modal/ConfirmDialog.tsx +1 -1
- package/src/modal/Modal.tsx +148 -305
- package/src/modal/ModalResizeHandles.tsx +40 -0
- package/src/modal/ModalTitlebar.tsx +86 -0
- package/src/modal/modal.css +291 -0
- package/src/modal/modalContainer.ts +36 -0
- package/src/modal/modalPosition.ts +36 -0
- package/src/modal/modalSize.ts +84 -0
- package/src/modal/modalTypes.ts +13 -0
- package/src/modal/useModalContainerViewport.ts +41 -0
- package/src/modal/useModalDrag.ts +118 -0
- package/src/modal/useModalResize.ts +122 -0
- package/src/modal/useModalWindowFrame.ts +122 -0
- package/src/overlay/ContextMenu.tsx +28 -50
- package/src/overlay/clampFixedOverlayPosition.ts +22 -0
- package/src/overlay/context-menu.css +127 -0
- package/src/overlay/index.ts +31 -0
- package/src/overlay/measureAnchoredOverlayPanel.ts +107 -0
- package/src/overlay/overlay.css +2 -0
- package/src/overlay/pointerPassthroughRegion.ts +83 -0
- package/src/overlay/useAnchoredOverlayPanel.ts +222 -0
- package/src/overlay/useClampedFixedOverlayPosition.ts +27 -0
- package/src/overlay/useContextMenuState.ts +59 -0
- package/src/overlay/useFixedOverlayDismiss.ts +49 -0
- package/src/overlay/usePointerPassthroughRegion.ts +85 -0
- package/src/primitives/{AbsoluteBox.tsx → absolute-box/AbsoluteBox.tsx} +1 -1
- package/src/primitives/absolute-box/index.ts +1 -0
- package/src/primitives/{Badge.tsx → badge/Badge.tsx} +4 -2
- package/src/primitives/badge/badge.css +20 -0
- package/src/primitives/badge/index.ts +1 -0
- package/src/primitives/{Button.tsx → button/Button.tsx} +3 -2
- package/src/primitives/button/button.css +76 -0
- package/src/primitives/button/index.ts +1 -0
- package/src/primitives/catalog-browse-card/CatalogBrowseCard.tsx +121 -0
- package/src/primitives/catalog-browse-card/catalog-browse-card.css +175 -0
- package/src/primitives/catalog-browse-card/index.ts +1 -0
- package/src/primitives/catalog-browse-pane/CatalogBrowseFacetChips.tsx +59 -0
- package/src/primitives/catalog-browse-pane/CatalogBrowsePane.tsx +360 -0
- package/src/primitives/catalog-browse-pane/catalog-browse-facet-chips.css +8 -0
- package/src/primitives/catalog-browse-pane/catalog-browse-pane.css +84 -0
- package/src/primitives/catalog-browse-pane/filterCatalogBrowseItems.ts +27 -0
- package/src/primitives/catalog-browse-pane/index.ts +3 -0
- package/src/primitives/catalog-filter-overlay/CatalogFilterOverlay.tsx +73 -0
- package/src/primitives/catalog-filter-overlay/catalog-filter-overlay.css +65 -0
- package/src/primitives/catalog-filter-overlay/index.ts +1 -0
- package/src/primitives/checkbox/Checkbox.tsx +40 -0
- package/src/primitives/checkbox/checkbox.css +81 -0
- package/src/primitives/checkbox/index.ts +1 -0
- package/src/primitives/chip/Chip.tsx +43 -0
- package/src/primitives/chip/chip.css +110 -0
- package/src/primitives/chip/index.ts +2 -0
- package/src/primitives/clearable-text-input/ClearableTextInput.tsx +78 -0
- package/src/primitives/clearable-text-input/clearable-text-input.css +15 -0
- package/src/primitives/clearable-text-input/index.ts +1 -0
- package/src/primitives/codicon/Codicon.tsx +20 -0
- package/src/primitives/codicon/index.ts +1 -0
- package/src/primitives/{EmptyState.tsx → empty-state/EmptyState.tsx} +9 -3
- package/src/primitives/empty-state/empty-state.css +20 -0
- package/src/primitives/empty-state/index.ts +1 -0
- package/src/primitives/external-link-button/ExternalLinkButton.tsx +56 -0
- package/src/primitives/external-link-button/index.ts +1 -0
- package/src/primitives/{Field.tsx → field/Field.tsx} +2 -1
- package/src/primitives/field/field.css +51 -0
- package/src/primitives/field/index.ts +1 -0
- package/src/primitives/file-icon/FileIcon.tsx +21 -0
- package/src/primitives/file-icon/index.ts +1 -0
- package/src/primitives/{IconButton.tsx → icon-button/IconButton.tsx} +6 -4
- package/src/primitives/icon-button/icon-button.css +46 -0
- package/src/primitives/icon-button/index.ts +1 -0
- package/src/primitives/index.ts +210 -50
- package/src/primitives/library-detail-layout/LibraryDetailLayout.tsx +135 -0
- package/src/primitives/library-detail-layout/index.ts +1 -0
- package/src/primitives/library-detail-layout/library-detail-layout.css +169 -0
- package/src/primitives/library-facet-filter-panel/LibraryFacetFilterPanel.tsx +454 -0
- package/src/primitives/library-facet-filter-panel/index.ts +1 -0
- package/src/primitives/library-facet-filter-panel/library-facet-filter-panel.css +205 -0
- package/src/primitives/library-facet-filter-strip/LibraryFacetFilterStrip.tsx +527 -0
- package/src/primitives/library-facet-filter-strip/index.ts +1 -0
- package/src/primitives/library-facet-filter-strip/library-facet-filter-strip.css +31 -0
- package/src/primitives/{List.tsx → list/List.tsx} +15 -6
- package/src/primitives/list/index.ts +1 -0
- package/src/primitives/list/list-empty-state.css +10 -0
- package/src/primitives/list/list-item.css +93 -0
- package/src/primitives/list/list.css +6 -0
- package/src/primitives/number-input/NumberInput.tsx +235 -0
- package/src/primitives/number-input/index.ts +1 -0
- package/src/primitives/number-input/number-input.css +105 -0
- package/src/primitives/panel-loading/PanelLoading.tsx +29 -0
- package/src/primitives/panel-loading/index.ts +1 -0
- package/src/primitives/panel-loading/panel-loading.css +16 -0
- package/src/primitives/panel-surface/panel-surface.css +77 -0
- package/src/primitives/primitives.css +36 -0
- package/src/primitives/record-media-hero/RecordMediaHero.tsx +81 -0
- package/src/primitives/record-media-hero/index.ts +1 -0
- package/src/primitives/record-media-hero/record-media-hero.css +84 -0
- package/src/primitives/scroll-area/ScrollArea.tsx +200 -0
- package/src/primitives/scroll-area/index.ts +1 -0
- package/src/primitives/scroll-area/scroll-area-overlay.css +69 -0
- package/src/primitives/scroll-area-infinite-load/ScrollAreaInfiniteSentinel.tsx +22 -0
- package/src/primitives/scroll-area-infinite-load/index.ts +2 -0
- package/src/primitives/scroll-area-infinite-load/scroll-area-infinite-sentinel.css +6 -0
- package/src/primitives/scroll-area-infinite-load/useScrollAreaInfiniteLoad.ts +84 -0
- package/src/primitives/searchable-multi-select/SearchableMultiSelect.tsx +378 -0
- package/src/primitives/searchable-multi-select/index.ts +9 -0
- package/src/primitives/searchable-multi-select/overlay.ts +125 -0
- package/src/primitives/searchable-multi-select/searchable-multi-select.css +129 -0
- package/src/primitives/select/Select.tsx +21 -3
- package/src/primitives/select/overlay.ts +23 -4
- package/src/primitives/select/select.app.css +5 -2
- package/src/primitives/select/select.css +49 -12
- package/src/primitives/styles.css +3 -952
- package/src/primitives/tabbed-panels/TabbedPanels.tsx +68 -0
- package/src/primitives/tabbed-panels/index.ts +2 -0
- package/src/primitives/tabbed-panels/tabbed-panels.css +58 -0
- package/src/primitives/{TextArea.tsx → text-area/TextArea.tsx} +2 -1
- package/src/primitives/text-area/index.ts +1 -0
- package/src/primitives/{TextInput.tsx → text-input/TextInput.tsx} +2 -1
- package/src/primitives/text-input/index.ts +1 -0
- package/src/primitives/text-input/input.css +54 -0
- package/src/primitives/{Toolbar.tsx → toolbar/Toolbar.tsx} +1 -1
- package/src/primitives/toolbar/index.ts +1 -0
- package/src/primitives/visually-hidden/visually-hidden.css +11 -0
- package/src/primitives/{WorkbenchEditor.tsx → workbench-editor/WorkbenchEditor.tsx} +81 -43
- package/src/primitives/workbench-editor/button-group.css +10 -0
- package/src/primitives/workbench-editor/editor-tabs.css +201 -0
- package/src/primitives/workbench-editor/index.ts +1 -0
- package/src/primitives/workbench-editor/resizable-panels.css +53 -0
- package/src/primitives/workbench-editor/segmented-control.css +98 -0
- package/src/primitives/workbench-media-slot/WorkbenchMediaPlaceholder.tsx +25 -0
- package/src/primitives/workbench-media-slot/WorkbenchMediaSlot.tsx +60 -0
- package/src/primitives/workbench-media-slot/index.ts +2 -0
- package/src/primitives/workbench-media-slot/media-slot.css +72 -0
- package/src/primitives/workbench-thumbnail/WorkbenchThumbnail.tsx +38 -0
- package/src/primitives/workbench-thumbnail/index.ts +1 -0
- package/src/primitives/workbench-thumbnail/thumbnail.css +69 -0
- package/src/scrollbars.css +77 -2
- package/src/styles.css +14 -7735
- package/src/test-utils/workbenchMonacoMock.tsx +37 -0
- package/src/utils/dragMime.ts +89 -0
- package/src/utils/useWorkbenchMediaImage.ts +37 -0
- package/src/widget-asset/WidgetAssetEditor.tsx +9 -7
- package/src/widget-asset/WidgetAssetModeControls.tsx +1 -1
- package/src/widget-asset/WidgetAssetWorkbench.tsx +5 -6
- package/src/widget-studio/create-widget-studio-workspace-editor.tsx +1 -2
- package/src/widget-studio/index.ts +4 -1
- package/src/widget-studio/resolve-widget-studio-asset-catalog.ts +27 -10
- package/src/widget-tree/WidgetAssetPalette.tsx +35 -7
- package/src/widget-tree/WidgetInspectorPanel.tsx +53 -3
- package/src/widget-tree/WidgetSourceEditor.tsx +90 -3
- package/src/widget-tree/WidgetTreeCanvasPreview.tsx +875 -0
- package/src/widget-tree/WidgetTreeLab.tsx +411 -83
- package/src/widget-tree/WidgetTreeModeControls.tsx +30 -1
- package/src/widget-tree/WidgetTreeSidePanel.tsx +24 -34
- package/src/widget-tree/WidgetTreeView.tsx +711 -11
- package/src/widget-tree/WidgetTreeWorkbench.tsx +59 -15
- package/src/widget-tree/WidgetTreeWorkspaceShell.tsx +26 -8
- package/src/widget-tree/index.ts +22 -4
- package/src/widget-tree/widget-placement-asset-dnd.ts +35 -0
- package/src/widget-tree/widget-tree-document.ts +3 -9
- package/src/widget-tree/widget-tree-editor-state.ts +40 -0
- package/src/widget-tree/widget-tree-layout.ts +48 -3
- package/src/widget-tree/widget-tree-play-helpers.ts +69 -58
- package/src/workbench/ActivityBar.tsx +128 -21
- package/src/workbench/ArtifactShell.tsx +8 -8
- package/src/workbench/CommandGroupShell.tsx +131 -0
- package/src/workbench/CommandList.tsx +167 -0
- package/src/workbench/CommandPalette.tsx +194 -596
- package/src/workbench/ConfirmationFlow.tsx +3 -5
- package/src/workbench/MarkdownPreview.tsx +8 -12
- package/src/workbench/ShortcutCommandBridge.tsx +1 -4
- package/src/workbench/SplitView.tsx +385 -36
- package/src/workbench/StatusBar.tsx +4 -2
- package/src/workbench/StructuredArtifactEditor.tsx +3 -3
- package/src/workbench/Timeline.tsx +2 -7
- package/src/workbench/WorkbenchCanvasShell.defaults.ts +106 -0
- package/src/workbench/WorkbenchCanvasShell.model.ts +46 -0
- package/src/workbench/WorkbenchCanvasShell.tsx +32 -146
- package/src/workbench/WorkbenchDesktopTitleBar.tsx +126 -0
- package/src/workbench/WorkbenchEditorTabs.tsx +52 -0
- package/src/workbench/WorkbenchModalPortal.tsx +52 -0
- package/src/workbench/WorkbenchPlatformContext.tsx +31 -0
- package/src/workbench/WorkbenchShell.tsx +144 -26
- package/src/workbench/WorkbenchShellTitleBarLayoutControls.tsx +80 -0
- package/src/workbench/WorkbenchStandaloneShell.tsx +327 -41
- package/src/workbench/WorkbenchThemeProvider.tsx +142 -0
- package/src/workbench/WorkbenchViewEditor.tsx +75 -0
- package/src/workbench/WorkbenchViewSidebar.tsx +85 -0
- package/src/workbench/WorkbenchWindowChromeControls.tsx +290 -0
- package/src/workbench/activityBarOrder.ts +98 -0
- package/src/workbench/appearanceLabels.ts +28 -0
- package/src/workbench/auth/WorkbenchLoginView.tsx +4 -6
- package/src/workbench/auth/auth-flows.css +440 -0
- package/src/workbench/auth/auth.css +3 -0
- package/src/workbench/auth/profile-modals.css +115 -0
- package/src/workbench/bootstrap/WorkbenchBootstrapGate.tsx +45 -0
- package/src/workbench/bootstrap/WorkbenchBootstrapView.tsx +100 -0
- package/src/workbench/bootstrap/index.ts +12 -0
- package/src/workbench/bootstrap/useWorkbenchBootstrap.ts +130 -0
- package/src/workbench/chat/ChatCommandProposalCard.tsx +115 -0
- package/src/workbench/chat/ChatComposer.tsx +32 -34
- package/src/workbench/chat/ChatConversationBar.tsx +134 -0
- package/src/workbench/chat/ChatHistoryMenu.tsx +171 -0
- package/src/workbench/chat/ChatHistoryMenuRow.tsx +74 -0
- package/src/workbench/chat/ChatMessageCollapsible.tsx +115 -0
- package/src/workbench/chat/ChatMessageItem.tsx +293 -19
- package/src/workbench/chat/ChatMessageList.tsx +109 -24
- package/src/workbench/chat/ChatPanel.tsx +132 -19
- package/src/workbench/chat/ChatPhasedRunProgress.tsx +202 -0
- package/src/workbench/chat/ChatRenameDialog.tsx +77 -0
- package/src/workbench/chat/chat-conversation.css +273 -0
- package/src/workbench/chat/chat-ui.css +1124 -0
- package/src/workbench/chat/chat.css +3 -0
- package/src/workbench/chat/chatConversation.ts +46 -0
- package/src/workbench/chat/chatHistoryRowMenuItems.ts +29 -0
- package/src/workbench/chat/chatMessageMeta.tsx +252 -0
- package/src/workbench/chat/chatScroll.ts +22 -0
- package/src/workbench/chat/index.ts +47 -1
- package/src/workbench/chat/slashCommand.ts +5 -7
- package/src/workbench/chat/types.ts +35 -0
- package/src/workbench/chat/useCancelRuntimeOnUnmount.ts +60 -0
- package/src/workbench/chat/useChatPrependPagination.ts +233 -0
- package/src/workbench/chat/useChatRuntimeState.ts +3 -15
- package/src/workbench/chat/useSlashCommandSuggest.ts +76 -23
- package/src/workbench/chrome/index.css +6 -0
- package/src/workbench/chrome/workbench-desktop-titlebar.css +60 -0
- package/src/workbench/chrome/workbench-host.css +85 -0
- package/src/workbench/chrome/workbench-layout-regions.css +42 -0
- package/src/workbench/chrome/workbench-platform-chrome.css +142 -0
- package/src/workbench/chrome/workbench-shell-titlebar.css +124 -0
- package/src/workbench/command-execution-policy.ts +61 -0
- package/src/workbench/command-model.ts +275 -0
- package/src/workbench/command-palette/command-palette.css +156 -0
- package/src/workbench/commands.ts +62 -6
- package/src/workbench/editor-tabs/index.ts +22 -0
- package/src/workbench/editor-tabs-dnd.ts +162 -0
- package/src/workbench/editorTabContextMenu.ts +111 -0
- package/src/workbench/hardReset.ts +64 -0
- package/src/workbench/index.ts +234 -2
- package/src/workbench/jdw/jdw-editors.css +4 -0
- package/src/workbench/jdw/jdw.css +2 -0
- package/src/workbench/management/AccountManagementPanel.tsx +82 -0
- package/src/workbench/management/CommandInspectorPanel.tsx +127 -0
- package/src/workbench/management/CommandManagementPanel.tsx +129 -0
- package/src/workbench/management/CommandManagementSidebar.tsx +318 -0
- package/src/workbench/management/ExtensionManagementPanel.tsx +498 -0
- package/src/workbench/management/ExtensionManagementSidebar.tsx +492 -0
- package/src/workbench/management/IntegrationCommandActions.tsx +78 -0
- package/src/workbench/management/IntegrationSettingsSurface.tsx +290 -0
- package/src/workbench/management/IntegrationsShell.tsx +53 -0
- package/src/workbench/management/KeybindingCaptureField.tsx +142 -0
- package/src/workbench/management/KeybindingManagementPanel.tsx +120 -0
- package/src/workbench/management/LibraryCatalogPickerDialog.tsx +208 -0
- package/src/workbench/management/LibraryFacetFilterDialog.tsx +62 -0
- package/src/workbench/management/ManagementCard.tsx +89 -0
- package/src/workbench/management/ManagementFilterChips.tsx +41 -0
- package/src/workbench/management/ManagementGroup.tsx +56 -0
- package/src/workbench/management/ManagementPanelControls.tsx +43 -0
- package/src/workbench/management/ManagementPanelFrame.tsx +109 -0
- package/src/workbench/management/WorkbenchDialogFrame.tsx +148 -0
- package/src/workbench/management/WorkbenchNotice.tsx +211 -0
- package/src/workbench/management/build-command-management-groups.ts +157 -0
- package/src/workbench/management/command-inspector-uri.ts +26 -0
- package/src/workbench/management/extension-category-display.ts +42 -0
- package/src/workbench/management/format-command-run-state.ts +19 -0
- package/src/workbench/management/index.ts +130 -0
- package/src/workbench/management/integration-command-action.ts +25 -0
- package/src/workbench/management/library-catalog-picker-dialog.css +56 -0
- package/src/workbench/management/library-facet-filter-dialog.css +8 -0
- package/src/workbench/management/management-panel.css +444 -0
- package/src/workbench/management/management.css +4 -0
- package/src/workbench/management/types.ts +126 -0
- package/src/workbench/markdownRemarkPlugins.ts +4 -0
- package/src/workbench/schema/index.ts +0 -1
- package/src/workbench/settings/NavigationPanel.tsx +41 -2
- package/src/workbench/settings/SchemaForm.tsx +20 -7
- package/src/workbench/settings/SectionTabPanel.tsx +172 -0
- package/src/workbench/settings/SectionedPanel.tsx +40 -286
- package/src/workbench/settings/StructuredDataForm.tsx +106 -26
- package/src/workbench/settings/StructuredDataSchemaPanel.tsx +345 -93
- package/src/workbench/settings/StructuredDataTableView.tsx +2 -2
- package/src/workbench/settings/WorkbenchPanelRegion.tsx +1 -1
- package/src/workbench/settings/WorkbenchSettingsModal.tsx +116 -62
- package/src/workbench/settings/WorkbenchSettingsNav.tsx +3 -3
- package/src/workbench/settings/extensionSettingsForm.ts +34 -0
- package/src/workbench/settings/index.ts +36 -1
- package/src/workbench/settings/navigation-panel.css +59 -0
- package/src/workbench/settings/panel-region.css +3 -2
- package/src/workbench/settings/schema-form.css +36 -0
- package/src/workbench/settings/schemaFormSettingSpec.ts +177 -0
- package/src/workbench/settings/schemaFormSettingsCategory.tsx +21 -0
- package/src/workbench/settings/section-tab-panel.css +157 -0
- package/src/workbench/settings/sectionScrollSpyDom.ts +139 -0
- package/src/workbench/settings/sectioned-panel.css +162 -0
- package/src/workbench/settings/sectionedPanelScrollSpy.ts +158 -28
- package/src/workbench/settings/settings-responsive.css +58 -0
- package/src/workbench/settings/settings.css +11 -0
- package/src/workbench/settings/settingsCommit.tsx +55 -0
- package/src/workbench/settings/structured-data-form.css +114 -0
- package/src/workbench/settings/structured-data-schema-panel.css +33 -19
- package/src/workbench/settings/structuredDataFormModel.ts +140 -0
- package/src/workbench/settings/structuredDataSchema.ts +111 -658
- package/src/workbench/settings/structuredDataSchemaDate.ts +197 -0
- package/src/workbench/settings/structuredDataSchemaField.ts +105 -0
- package/src/workbench/settings/structuredDataSchemaSection.ts +74 -0
- package/src/workbench/settings/structuredDataSchemaTable.ts +120 -0
- package/src/workbench/settings/structuredDataSchemaTypes.ts +308 -0
- package/src/workbench/settings/structuredDataSchemaValidation.ts +166 -0
- package/src/workbench/settings/useSectionScrollSpy.ts +420 -0
- package/src/workbench/settings/workbench-settings-modal.css +273 -0
- package/src/workbench/shell/activity-bar.css +245 -0
- package/src/workbench/shell/confirmation-flow.css +87 -0
- package/src/workbench/shell/index.css +5 -0
- package/src/workbench/shell/split-view.css +188 -0
- package/src/workbench/shell/status-bar.css +141 -0
- package/src/workbench/shell.ts +133 -2
- package/src/workbench/shellPresets.ts +36 -0
- package/src/workbench/shellState.ts +16 -23
- package/src/workbench/shellViewModel.ts +160 -0
- package/src/workbench/sidebarViewPlacementDnd.ts +61 -0
- package/src/workbench/standalone.ts +9 -9
- package/src/workbench/status.ts +10 -6
- package/src/workbench/theme.ts +8 -2
- package/src/workbench/themePresets.ts +191 -0
- package/src/workbench/useDeferredWorkbenchMount.ts +71 -0
- package/src/workbench/useEditorTabsStripDnd.ts +262 -0
- package/src/workbench/useWorkbenchAppearanceDocumentSync.tsx +17 -0
- package/src/workbench/useWorkbenchEditorTabContextMenu.tsx +66 -0
- package/src/workbench/useWorkbenchSidebarActionBarDnd.ts +227 -0
- package/src/workbench/useWorkbenchSidebarLayout.tsx +232 -0
- package/src/workbench/useWorkbenchSidebarViewPlacementDropZone.ts +194 -0
- package/src/workbench/useWorkbenchStandaloneShellStateSync.tsx +112 -0
- package/src/workbench/views/action-list.css +144 -0
- package/src/workbench/views/artifact-preview.css +184 -0
- package/src/workbench/views/command-inspector.css +98 -0
- package/src/workbench/views/command-list.css +356 -0
- package/src/workbench/views/commands-sidebar.css +51 -0
- package/src/workbench/views/extensions-sidebar.css +175 -0
- package/src/workbench/views/multi-provider-explorer.css +182 -0
- package/src/workbench/views/search.css +10 -0
- package/src/workbench/views/timeline.css +239 -0
- package/src/workbench/views/view-hosts.css +37 -0
- package/src/workbench/views/view-sidebar.css +21 -0
- package/src/workbench/views/views.css +12 -0
- package/src/workbench/widgets/widget-tree.css +598 -0
- package/src/workbench/widgets/widgets.css +2 -0
- package/src/workbench/workbench-chrome.css +4 -0
- package/src/workbench/workbenchContextMenu.ts +18 -0
- package/src/workbench/workbenchModalViewState.ts +52 -0
- package/src/workbench/workbenchOverlaysContext.tsx +21 -0
- package/src/workbench/workbenchPlatformChrome.ts +40 -0
- package/src/workbench/workbenchSidebarLayoutContext.ts +46 -0
- package/src/workbench/workbenchStandaloneShellReactContext.tsx +80 -0
- package/src/workbench/workbenchViewRouteState.ts +151 -0
- package/src/workbench/workspace/WorkspaceDraftsContext.tsx +59 -71
- package/src/workbench/workspace/WorkspaceEditor.tsx +27 -123
- package/src/workbench/workspace/WorkspaceEditorPanel.tsx +67 -8
- package/src/workbench/workspace/WorkspaceExplorer.tsx +149 -51
- package/src/workbench/workspace/WorkspaceExplorerPanel.tsx +73 -0
- package/src/workbench/workspace/WorkspaceFileIcon.tsx +4 -160
- package/src/workbench/workspace/WorkspacePathLabel.tsx +42 -0
- package/src/workbench/workspace/WorkspaceSearchPanel.tsx +18 -15
- package/src/workbench/workspace/WorkspaceSearchResults.tsx +6 -2
- package/src/workbench/workspace/build-workspace-explorer-nodes.ts +44 -0
- package/src/workbench/workspace/createVirtualWorkspaceExplorerPort.ts +141 -0
- package/src/workbench/workspace/explorer-tree-style.ts +18 -0
- package/src/workbench/workspace/index.ts +45 -32
- package/src/workbench/workspace/json-config-workbench.css +57 -0
- package/src/workbench/workspace/monaco-panel.css +71 -0
- package/src/workbench/workspace/path.ts +2 -0
- package/src/workbench/workspace/useWorkspaceExplorerController.ts +490 -0
- package/src/workbench/workspace/workspace-editor.css +235 -0
- package/src/workbench/workspace/workspace-explorer-panel.css +33 -0
- package/src/workbench/workspace/workspace.css +5 -0
- package/src/workbench/workspace/workspaceExplorerController.ts +193 -0
- package/src/workbench/workspace/workspaceJsonDiagnostics.ts +2 -2
- package/src/workbench-menu-surfaces.css +57 -0
- package/src/jdw/builtins/renderBuiltinWidgetNode.tsx +0 -126
- package/src/layout/SideBarViewFrame.tsx +0 -367
- package/src/primitives/Checkbox.tsx +0 -21
- package/src/primitives/NumberInput.tsx +0 -38
- package/src/primitives/ScrollArea.tsx +0 -42
- package/src/primitives/Select.tsx +0 -1
- package/src/primitives/StatusBar.tsx +0 -46
- package/src/primitives/WorkbenchChrome.tsx +0 -424
- package/src/workbench/workspace/MultiProviderExplorer.tsx +0 -625
|
@@ -1,15 +1,121 @@
|
|
|
1
|
-
import type { ComponentPropsWithRef, FormEvent, ReactNode } from 'react';
|
|
2
1
|
import {
|
|
3
2
|
asWorkbenchStructuredDataRecord,
|
|
4
3
|
getWorkbenchStructuredDataValue,
|
|
5
4
|
isWorkbenchStructuredDataRecord,
|
|
6
5
|
setWorkbenchStructuredDataPathOrRootValue,
|
|
7
6
|
setWorkbenchStructuredDataValue,
|
|
8
|
-
type WorkbenchStructuredDataPath,
|
|
9
|
-
type WorkbenchStructuredDataRecord,
|
|
10
7
|
} from '@workbench-kit/workspace';
|
|
8
|
+
import type {
|
|
9
|
+
WorkbenchStructuredDataRecord,
|
|
10
|
+
WorkbenchStructuredDataSchemaDocument,
|
|
11
|
+
WorkbenchStructuredDataSchemaFieldDefinition,
|
|
12
|
+
WorkbenchStructuredDataSchemaSectionAliases,
|
|
13
|
+
WorkbenchStructuredDataSchemaSectionSummary,
|
|
14
|
+
} from './structuredDataSchemaTypes';
|
|
15
|
+
import {
|
|
16
|
+
formatWorkbenchStructuredDataSchemaLabel,
|
|
17
|
+
getWorkbenchStructuredDataSchemaFieldDefaultValue,
|
|
18
|
+
} from './structuredDataSchemaField';
|
|
19
|
+
import {
|
|
20
|
+
getWorkbenchStructuredDataSchemaFieldDataPath,
|
|
21
|
+
getWorkbenchStructuredDataSchemaFieldDefinition,
|
|
22
|
+
getWorkbenchStructuredDataSchemaSectionFieldLabel,
|
|
23
|
+
getWorkbenchStructuredDataSchemaSectionPath,
|
|
24
|
+
} from './structuredDataSchemaSection';
|
|
25
|
+
import {
|
|
26
|
+
createWorkbenchStructuredDataSchemaEmptyRow,
|
|
27
|
+
getWorkbenchStructuredDataSchemaTableColumns,
|
|
28
|
+
} from './structuredDataSchemaTable';
|
|
29
|
+
export {
|
|
30
|
+
coerceWorkbenchStructuredDataFormFieldValue,
|
|
31
|
+
getWorkbenchStructuredDataFormErrors,
|
|
32
|
+
getWorkbenchStructuredDataFormFieldDefaultValue,
|
|
33
|
+
getWorkbenchStructuredDataFormFieldError,
|
|
34
|
+
getWorkbenchStructuredDataFormFields,
|
|
35
|
+
isWorkbenchStructuredDataFormSubmittable,
|
|
36
|
+
normalizeWorkbenchStructuredDataFormData,
|
|
37
|
+
} from './structuredDataFormModel';
|
|
11
38
|
|
|
12
|
-
export
|
|
39
|
+
export {
|
|
40
|
+
booleanWorkbenchStructuredDataSchemaFieldValue,
|
|
41
|
+
coerceWorkbenchStructuredDataSchemaFieldValue,
|
|
42
|
+
formatWorkbenchStructuredDataSchemaLabel,
|
|
43
|
+
formatWorkbenchStructuredDataSchemaValue,
|
|
44
|
+
getWorkbenchStructuredDataSchemaFieldControl,
|
|
45
|
+
getWorkbenchStructuredDataSchemaFieldDefaultValue,
|
|
46
|
+
stringifyWorkbenchStructuredDataSchemaFieldValue,
|
|
47
|
+
} from './structuredDataSchemaField';
|
|
48
|
+
export {
|
|
49
|
+
coerceWorkbenchStructuredDataSchemaDateValue,
|
|
50
|
+
fromWorkbenchStructuredDataHtmlDateInputValue,
|
|
51
|
+
inferWorkbenchStructuredDataSchemaDateFormat,
|
|
52
|
+
isWorkbenchStructuredDataSchemaDateField,
|
|
53
|
+
normalizeWorkbenchStructuredDataSchemaDateFormat,
|
|
54
|
+
parseWorkbenchStructuredDataSchemaDateValue,
|
|
55
|
+
resolveWorkbenchStructuredDataSchemaDateFormat,
|
|
56
|
+
toWorkbenchStructuredDataHtmlDateInputValue,
|
|
57
|
+
WORKBENCH_STRUCTURED_DATA_HTML_DATE_FORMAT,
|
|
58
|
+
} from './structuredDataSchemaDate';
|
|
59
|
+
export {
|
|
60
|
+
buildWorkbenchStructuredDataSchemaSelectOptions,
|
|
61
|
+
hasWorkbenchStructuredDataSchemaSelectOptions,
|
|
62
|
+
isWorkbenchStructuredDataSchemaColorField,
|
|
63
|
+
shouldUseWorkbenchStructuredDataSchemaRadioControl,
|
|
64
|
+
validateWorkbenchStructuredDataSchemaFieldValue,
|
|
65
|
+
} from './structuredDataSchemaValidation';
|
|
66
|
+
export {
|
|
67
|
+
getWorkbenchStructuredDataSchemaFieldDataPath,
|
|
68
|
+
getWorkbenchStructuredDataSchemaFieldDefinition,
|
|
69
|
+
getWorkbenchStructuredDataSchemaSectionAnchorId,
|
|
70
|
+
getWorkbenchStructuredDataSchemaSectionId,
|
|
71
|
+
getWorkbenchStructuredDataSchemaSectionPath,
|
|
72
|
+
slugWorkbenchStructuredDataSchemaAnchor,
|
|
73
|
+
} from './structuredDataSchemaSection';
|
|
74
|
+
export {
|
|
75
|
+
appendWorkbenchStructuredDataSchemaTableRow,
|
|
76
|
+
createWorkbenchStructuredDataSchemaEmptyRow,
|
|
77
|
+
getWorkbenchStructuredDataSchemaTableCellPath,
|
|
78
|
+
getWorkbenchStructuredDataSchemaTableColumns,
|
|
79
|
+
getWorkbenchStructuredDataSchemaTablePath,
|
|
80
|
+
getWorkbenchStructuredDataSchemaTableRowKey,
|
|
81
|
+
getWorkbenchStructuredDataSchemaTableRows,
|
|
82
|
+
removeWorkbenchStructuredDataSchemaTableRow,
|
|
83
|
+
} from './structuredDataSchemaTable';
|
|
84
|
+
|
|
85
|
+
export type {
|
|
86
|
+
WorkbenchStructuredDataFieldType,
|
|
87
|
+
WorkbenchStructuredDataFieldValue,
|
|
88
|
+
WorkbenchStructuredDataFormCancelContext,
|
|
89
|
+
WorkbenchStructuredDataFormCheckboxField,
|
|
90
|
+
WorkbenchStructuredDataFormErrors,
|
|
91
|
+
WorkbenchStructuredDataFormField,
|
|
92
|
+
WorkbenchStructuredDataFormFieldBase,
|
|
93
|
+
WorkbenchStructuredDataFormFieldChangeContext,
|
|
94
|
+
WorkbenchStructuredDataFormNumberField,
|
|
95
|
+
WorkbenchStructuredDataFormOption,
|
|
96
|
+
WorkbenchStructuredDataFormProps,
|
|
97
|
+
WorkbenchStructuredDataFormSection,
|
|
98
|
+
WorkbenchStructuredDataFormSelectField,
|
|
99
|
+
WorkbenchStructuredDataFormSubmitContext,
|
|
100
|
+
WorkbenchStructuredDataFormTextArrayField,
|
|
101
|
+
WorkbenchStructuredDataFormTextField,
|
|
102
|
+
WorkbenchStructuredDataPath,
|
|
103
|
+
WorkbenchStructuredDataRecord,
|
|
104
|
+
WorkbenchStructuredDataSchemaDocument,
|
|
105
|
+
WorkbenchStructuredDataSchemaFieldControl,
|
|
106
|
+
WorkbenchStructuredDataSchemaFieldDefinition,
|
|
107
|
+
WorkbenchStructuredDataSchemaFieldInputProps,
|
|
108
|
+
WorkbenchStructuredDataSchemaSectionAliases,
|
|
109
|
+
WorkbenchStructuredDataSchemaSectionSummary,
|
|
110
|
+
WorkbenchStructuredDataSchemaTableColumnInput,
|
|
111
|
+
WorkbenchStructuredDataSchemaTableDefinition,
|
|
112
|
+
WorkbenchStructuredDataSchemaTableRowKeyInput,
|
|
113
|
+
WorkbenchStructuredDataTable,
|
|
114
|
+
WorkbenchStructuredDataTableCellContext,
|
|
115
|
+
WorkbenchStructuredDataTableColumn,
|
|
116
|
+
WorkbenchStructuredDataTableRow,
|
|
117
|
+
WorkbenchStructuredDataTextArrayInputProps,
|
|
118
|
+
} from './structuredDataSchemaTypes';
|
|
13
119
|
export {
|
|
14
120
|
asWorkbenchStructuredDataRecord,
|
|
15
121
|
getWorkbenchStructuredDataValue,
|
|
@@ -18,435 +124,6 @@ export {
|
|
|
18
124
|
setWorkbenchStructuredDataValue,
|
|
19
125
|
};
|
|
20
126
|
|
|
21
|
-
export type WorkbenchStructuredDataFieldType =
|
|
22
|
-
| 'checkbox'
|
|
23
|
-
| 'number'
|
|
24
|
-
| 'select'
|
|
25
|
-
| 'text'
|
|
26
|
-
| 'text-array';
|
|
27
|
-
|
|
28
|
-
export type WorkbenchStructuredDataFieldValue = boolean | number | string | readonly string[];
|
|
29
|
-
|
|
30
|
-
export type WorkbenchStructuredDataFormErrors = Record<string, ReactNode>;
|
|
31
|
-
|
|
32
|
-
export type WorkbenchStructuredDataSchemaFieldControl =
|
|
33
|
-
| 'checkbox'
|
|
34
|
-
| 'date'
|
|
35
|
-
| 'number'
|
|
36
|
-
| 'select'
|
|
37
|
-
| 'text'
|
|
38
|
-
| 'textarea';
|
|
39
|
-
|
|
40
|
-
export interface WorkbenchStructuredDataSchemaFieldDefinition {
|
|
41
|
-
default?: unknown;
|
|
42
|
-
description?: string | undefined;
|
|
43
|
-
enum?: readonly (boolean | number | string)[] | undefined;
|
|
44
|
-
format?: string | undefined;
|
|
45
|
-
items?: {
|
|
46
|
-
type?: string | undefined;
|
|
47
|
-
};
|
|
48
|
-
markdownDescription?: string | undefined;
|
|
49
|
-
title?: string | undefined;
|
|
50
|
-
type?: string | undefined;
|
|
51
|
-
ui?: {
|
|
52
|
-
control?: WorkbenchStructuredDataSchemaFieldControl | string | undefined;
|
|
53
|
-
placeholder?: string | undefined;
|
|
54
|
-
rows?: number | undefined;
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export interface WorkbenchStructuredDataSchemaSectionSummary {
|
|
59
|
-
columns?: readonly string[] | undefined;
|
|
60
|
-
dataPath?: string | undefined;
|
|
61
|
-
fieldCount?: number | undefined;
|
|
62
|
-
fields?: readonly string[] | undefined;
|
|
63
|
-
id?: string | undefined;
|
|
64
|
-
sectionKey?: string | undefined;
|
|
65
|
-
title?: string | undefined;
|
|
66
|
-
type?: string | undefined;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export interface WorkbenchStructuredDataSchemaTableDefinition {
|
|
70
|
-
items?: Record<string, WorkbenchStructuredDataSchemaFieldDefinition> | undefined;
|
|
71
|
-
title?: string | undefined;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export interface WorkbenchStructuredDataSchemaDocument {
|
|
75
|
-
activePattern?: string | undefined;
|
|
76
|
-
pattern?: string | undefined;
|
|
77
|
-
patterns?: readonly {
|
|
78
|
-
pattern: string;
|
|
79
|
-
sections?: readonly WorkbenchStructuredDataSchemaSectionSummary[] | undefined;
|
|
80
|
-
}[];
|
|
81
|
-
sampleDraft?: unknown;
|
|
82
|
-
sampleDrafts?: Record<string, unknown> | undefined;
|
|
83
|
-
schema?: {
|
|
84
|
-
properties?: Record<string, WorkbenchStructuredDataSchemaFieldDefinition> | undefined;
|
|
85
|
-
sections?: readonly WorkbenchStructuredDataSchemaSectionSummary[] | undefined;
|
|
86
|
-
tables?: Record<string, WorkbenchStructuredDataSchemaTableDefinition> | undefined;
|
|
87
|
-
};
|
|
88
|
-
ui?: {
|
|
89
|
-
patterns?: Record<
|
|
90
|
-
string,
|
|
91
|
-
{
|
|
92
|
-
label?: string | undefined;
|
|
93
|
-
sections?: readonly WorkbenchStructuredDataSchemaSectionSummary[] | undefined;
|
|
94
|
-
}
|
|
95
|
-
>;
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export type WorkbenchStructuredDataSchemaSectionAliases = Record<
|
|
100
|
-
string,
|
|
101
|
-
readonly WorkbenchStructuredDataPath[]
|
|
102
|
-
>;
|
|
103
|
-
|
|
104
|
-
export interface WorkbenchStructuredDataSchemaTableColumnInput {
|
|
105
|
-
maxColumns?: number | undefined;
|
|
106
|
-
preferredColumns?: readonly string[] | undefined;
|
|
107
|
-
rows: readonly WorkbenchStructuredDataRecord[];
|
|
108
|
-
schemaColumns?: readonly string[] | undefined;
|
|
109
|
-
sectionColumns?: readonly string[] | undefined;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export interface WorkbenchStructuredDataSchemaTableRowKeyInput {
|
|
113
|
-
row: WorkbenchStructuredDataRecord;
|
|
114
|
-
rowIndex: number;
|
|
115
|
-
value: unknown;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export interface WorkbenchStructuredDataFormOption {
|
|
119
|
-
disabled?: boolean;
|
|
120
|
-
label: ReactNode;
|
|
121
|
-
value: string;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export interface WorkbenchStructuredDataFormFieldBase {
|
|
125
|
-
defaultValue?: WorkbenchStructuredDataFieldValue;
|
|
126
|
-
description?: ReactNode;
|
|
127
|
-
disabled?: boolean;
|
|
128
|
-
id: string;
|
|
129
|
-
label: ReactNode;
|
|
130
|
-
metadata?: Record<string, unknown>;
|
|
131
|
-
path: WorkbenchStructuredDataPath;
|
|
132
|
-
readOnly?: boolean;
|
|
133
|
-
required?: boolean;
|
|
134
|
-
validationMessage?: ReactNode;
|
|
135
|
-
validate?: (
|
|
136
|
-
value: WorkbenchStructuredDataFieldValue,
|
|
137
|
-
data: WorkbenchStructuredDataRecord,
|
|
138
|
-
field: WorkbenchStructuredDataFormField,
|
|
139
|
-
) => ReactNode | undefined;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
export interface WorkbenchStructuredDataFormTextField extends WorkbenchStructuredDataFormFieldBase {
|
|
143
|
-
autocomplete?: string;
|
|
144
|
-
monospace?: boolean;
|
|
145
|
-
placeholder?: string;
|
|
146
|
-
type: 'text';
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export interface WorkbenchStructuredDataFormNumberField extends WorkbenchStructuredDataFormFieldBase {
|
|
150
|
-
max?: number;
|
|
151
|
-
min?: number;
|
|
152
|
-
placeholder?: string;
|
|
153
|
-
step?: number;
|
|
154
|
-
type: 'number';
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
export interface WorkbenchStructuredDataFormSelectField extends WorkbenchStructuredDataFormFieldBase {
|
|
158
|
-
emptyOptionLabel?: ReactNode;
|
|
159
|
-
options: readonly WorkbenchStructuredDataFormOption[];
|
|
160
|
-
type: 'select';
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export interface WorkbenchStructuredDataFormCheckboxField extends WorkbenchStructuredDataFormFieldBase {
|
|
164
|
-
type: 'checkbox';
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
export interface WorkbenchStructuredDataFormTextArrayField extends WorkbenchStructuredDataFormFieldBase {
|
|
168
|
-
addLabel?: ReactNode;
|
|
169
|
-
emptyLabel?: ReactNode;
|
|
170
|
-
itemLabel?: string;
|
|
171
|
-
itemPlaceholder?: string;
|
|
172
|
-
maxItems?: number;
|
|
173
|
-
minItems?: number;
|
|
174
|
-
removeLabel?: string;
|
|
175
|
-
type: 'text-array';
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
export interface WorkbenchStructuredDataTextArrayInputProps extends Omit<
|
|
179
|
-
ComponentPropsWithRef<'div'>,
|
|
180
|
-
'children' | 'onChange'
|
|
181
|
-
> {
|
|
182
|
-
addLabel?: ReactNode | undefined;
|
|
183
|
-
ariaDescribedBy?: string | undefined;
|
|
184
|
-
ariaLabel: string;
|
|
185
|
-
disabled?: boolean | undefined;
|
|
186
|
-
emptyLabel?: ReactNode | undefined;
|
|
187
|
-
maxItems?: number | undefined;
|
|
188
|
-
minItems?: number | undefined;
|
|
189
|
-
placeholder?: string | undefined;
|
|
190
|
-
readOnly?: boolean | undefined;
|
|
191
|
-
removeLabel?: string | undefined;
|
|
192
|
-
value?: unknown;
|
|
193
|
-
onValueChange?: ((value: string[]) => void) | undefined;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
export interface WorkbenchStructuredDataSchemaFieldInputProps {
|
|
197
|
-
addTextArrayLabel?: ReactNode | undefined;
|
|
198
|
-
checkboxClassName?: string | undefined;
|
|
199
|
-
className?: string | undefined;
|
|
200
|
-
definition?: WorkbenchStructuredDataSchemaFieldDefinition | undefined;
|
|
201
|
-
fieldPath: string;
|
|
202
|
-
readOnly?: boolean | undefined;
|
|
203
|
-
removeTextArrayLabel?: string | undefined;
|
|
204
|
-
textareaClassName?: string | undefined;
|
|
205
|
-
textArrayClassName?: string | undefined;
|
|
206
|
-
value: unknown;
|
|
207
|
-
onValueChange?: ((value: unknown) => void) | undefined;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
export type WorkbenchStructuredDataFormField =
|
|
211
|
-
| WorkbenchStructuredDataFormCheckboxField
|
|
212
|
-
| WorkbenchStructuredDataFormNumberField
|
|
213
|
-
| WorkbenchStructuredDataFormSelectField
|
|
214
|
-
| WorkbenchStructuredDataFormTextArrayField
|
|
215
|
-
| WorkbenchStructuredDataFormTextField;
|
|
216
|
-
|
|
217
|
-
export interface WorkbenchStructuredDataTableColumn {
|
|
218
|
-
align?: 'end' | 'start';
|
|
219
|
-
id: string;
|
|
220
|
-
label: ReactNode;
|
|
221
|
-
path?: WorkbenchStructuredDataPath;
|
|
222
|
-
render?: (context: WorkbenchStructuredDataTableCellContext) => ReactNode;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
export interface WorkbenchStructuredDataTableRow {
|
|
226
|
-
data: WorkbenchStructuredDataRecord;
|
|
227
|
-
id: string;
|
|
228
|
-
label?: ReactNode;
|
|
229
|
-
metadata?: Record<string, unknown>;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
export interface WorkbenchStructuredDataTableCellContext {
|
|
233
|
-
column: WorkbenchStructuredDataTableColumn;
|
|
234
|
-
row: WorkbenchStructuredDataTableRow;
|
|
235
|
-
value: unknown;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
export interface WorkbenchStructuredDataTable {
|
|
239
|
-
columns: readonly WorkbenchStructuredDataTableColumn[];
|
|
240
|
-
description?: ReactNode;
|
|
241
|
-
emptyLabel?: ReactNode;
|
|
242
|
-
id: string;
|
|
243
|
-
label?: ReactNode;
|
|
244
|
-
rows: readonly WorkbenchStructuredDataTableRow[];
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
export interface WorkbenchStructuredDataFormSection {
|
|
248
|
-
count?: number;
|
|
249
|
-
description?: ReactNode;
|
|
250
|
-
fields?: readonly WorkbenchStructuredDataFormField[];
|
|
251
|
-
id: string;
|
|
252
|
-
tables?: readonly WorkbenchStructuredDataTable[];
|
|
253
|
-
title: ReactNode;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
export interface WorkbenchStructuredDataFormFieldChangeContext {
|
|
257
|
-
data: WorkbenchStructuredDataRecord;
|
|
258
|
-
field: WorkbenchStructuredDataFormField;
|
|
259
|
-
fieldId: string;
|
|
260
|
-
path: WorkbenchStructuredDataPath;
|
|
261
|
-
value: WorkbenchStructuredDataFieldValue;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
export interface WorkbenchStructuredDataFormSubmitContext {
|
|
265
|
-
data: WorkbenchStructuredDataRecord;
|
|
266
|
-
event: FormEvent<HTMLFormElement>;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
export interface WorkbenchStructuredDataFormCancelContext {
|
|
270
|
-
data: WorkbenchStructuredDataRecord;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
export interface WorkbenchStructuredDataFormProps extends Omit<
|
|
274
|
-
ComponentPropsWithRef<'form'>,
|
|
275
|
-
'children' | 'defaultValue' | 'onCancel' | 'onChange' | 'onSubmit'
|
|
276
|
-
> {
|
|
277
|
-
ariaLabel: string;
|
|
278
|
-
cancelLabel?: ReactNode;
|
|
279
|
-
data?: WorkbenchStructuredDataRecord;
|
|
280
|
-
defaultData?: WorkbenchStructuredDataRecord;
|
|
281
|
-
disabled?: boolean;
|
|
282
|
-
emptyLabel?: ReactNode;
|
|
283
|
-
errors?: WorkbenchStructuredDataFormErrors;
|
|
284
|
-
onCancel?: (context: WorkbenchStructuredDataFormCancelContext) => void;
|
|
285
|
-
onDataChange?: (
|
|
286
|
-
data: WorkbenchStructuredDataRecord,
|
|
287
|
-
context: WorkbenchStructuredDataFormFieldChangeContext,
|
|
288
|
-
) => void;
|
|
289
|
-
onFieldChange?: (context: WorkbenchStructuredDataFormFieldChangeContext) => void;
|
|
290
|
-
onSubmit?: (
|
|
291
|
-
data: WorkbenchStructuredDataRecord,
|
|
292
|
-
context: WorkbenchStructuredDataFormSubmitContext,
|
|
293
|
-
) => void;
|
|
294
|
-
readOnly?: boolean;
|
|
295
|
-
sections: readonly WorkbenchStructuredDataFormSection[];
|
|
296
|
-
showActions?: boolean;
|
|
297
|
-
submitLabel?: ReactNode;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
const EMPTY_RECORD: WorkbenchStructuredDataRecord = {};
|
|
301
|
-
|
|
302
|
-
export function getWorkbenchStructuredDataFormFieldDefaultValue(
|
|
303
|
-
field: WorkbenchStructuredDataFormField,
|
|
304
|
-
): WorkbenchStructuredDataFieldValue {
|
|
305
|
-
if (field.defaultValue !== undefined) {
|
|
306
|
-
return coerceWorkbenchStructuredDataFormFieldValue(field, field.defaultValue);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
if (field.type === 'checkbox') return false;
|
|
310
|
-
if (field.type === 'text-array') return [];
|
|
311
|
-
return '';
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
export function coerceWorkbenchStructuredDataFormFieldValue(
|
|
315
|
-
field: WorkbenchStructuredDataFormField,
|
|
316
|
-
value: unknown,
|
|
317
|
-
): WorkbenchStructuredDataFieldValue {
|
|
318
|
-
if (field.type === 'checkbox') return Boolean(value);
|
|
319
|
-
if (field.type === 'text-array') {
|
|
320
|
-
if (Array.isArray(value)) {
|
|
321
|
-
return value.map((item) => (item === null || item === undefined ? '' : String(item)));
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
if (value === '' || value === null || value === undefined) return [];
|
|
325
|
-
return [String(value)];
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
if (field.type === 'number') {
|
|
329
|
-
if (value === '' || value === null || value === undefined) return '';
|
|
330
|
-
const numericValue = Number(value);
|
|
331
|
-
return Number.isFinite(numericValue) ? numericValue : '';
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
return value === null || value === undefined ? '' : String(value);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
export function getWorkbenchStructuredDataSchemaFieldControl(
|
|
338
|
-
definition: WorkbenchStructuredDataSchemaFieldDefinition | undefined,
|
|
339
|
-
): WorkbenchStructuredDataSchemaFieldControl {
|
|
340
|
-
if (definition?.ui?.control) {
|
|
341
|
-
return definition.ui.control as WorkbenchStructuredDataSchemaFieldControl;
|
|
342
|
-
}
|
|
343
|
-
if (definition?.enum?.length) return 'select';
|
|
344
|
-
if (definition?.type === 'array') return 'textarea';
|
|
345
|
-
if (definition?.type === 'boolean') return 'checkbox';
|
|
346
|
-
if (definition?.type === 'number' || definition?.type === 'integer') return 'number';
|
|
347
|
-
if (definition?.format === 'date') return 'date';
|
|
348
|
-
return 'text';
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
export function getWorkbenchStructuredDataSchemaFieldDefaultValue(
|
|
352
|
-
definition: WorkbenchStructuredDataSchemaFieldDefinition | undefined,
|
|
353
|
-
) {
|
|
354
|
-
if (definition?.default !== undefined) return definition.default;
|
|
355
|
-
if (definition?.type === 'array') return [];
|
|
356
|
-
if (definition?.type === 'boolean') return false;
|
|
357
|
-
if (definition?.type === 'number' || definition?.type === 'integer') return 0;
|
|
358
|
-
return '';
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
export function stringifyWorkbenchStructuredDataSchemaFieldValue(
|
|
362
|
-
value: unknown,
|
|
363
|
-
definition: WorkbenchStructuredDataSchemaFieldDefinition | undefined,
|
|
364
|
-
) {
|
|
365
|
-
if (Array.isArray(value)) return value.join('\n');
|
|
366
|
-
if (value === null || value === undefined) return '';
|
|
367
|
-
if (definition?.type === 'object') return JSON.stringify(value, null, 2);
|
|
368
|
-
return String(value);
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
export function booleanWorkbenchStructuredDataSchemaFieldValue(value: unknown) {
|
|
372
|
-
return value === true || value === 'true' || value === 'Y';
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
export function coerceWorkbenchStructuredDataSchemaFieldValue(
|
|
376
|
-
rawValue: string,
|
|
377
|
-
definition: WorkbenchStructuredDataSchemaFieldDefinition | undefined,
|
|
378
|
-
): unknown {
|
|
379
|
-
if (definition?.type === 'array') {
|
|
380
|
-
return rawValue.split('\n');
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
if (definition?.type === 'number' || definition?.type === 'integer') {
|
|
384
|
-
if (rawValue.trim() === '') return null;
|
|
385
|
-
const numericValue = Number(rawValue);
|
|
386
|
-
return Number.isFinite(numericValue) ? numericValue : rawValue;
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
if (definition?.enum?.length) {
|
|
390
|
-
return definition.enum.find((option) => String(option) === rawValue) ?? rawValue;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
return rawValue;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
export function formatWorkbenchStructuredDataSchemaValue(value: unknown) {
|
|
397
|
-
if (value === null || value === undefined || value === '') return '-';
|
|
398
|
-
if (Array.isArray(value)) return value.join('\n');
|
|
399
|
-
if (typeof value === 'boolean') return value ? 'Y' : 'N';
|
|
400
|
-
if (typeof value === 'object') return JSON.stringify(value, null, 2);
|
|
401
|
-
return String(value);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
export function getWorkbenchStructuredDataSchemaSectionId(
|
|
405
|
-
section: WorkbenchStructuredDataSchemaSectionSummary,
|
|
406
|
-
) {
|
|
407
|
-
return section.id ?? section.sectionKey;
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
export function getWorkbenchStructuredDataSchemaSectionPath(
|
|
411
|
-
section: WorkbenchStructuredDataSchemaSectionSummary,
|
|
412
|
-
) {
|
|
413
|
-
const dataPath = section.dataPath;
|
|
414
|
-
if (dataPath !== undefined) {
|
|
415
|
-
return dataPath.trim();
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
return section.sectionKey || section.id || '';
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
export function formatWorkbenchStructuredDataSchemaLabel(value: string) {
|
|
422
|
-
return value.replace(/_/g, ' ');
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
export function getWorkbenchStructuredDataSchemaFieldDataPath(
|
|
426
|
-
section: WorkbenchStructuredDataSchemaSectionSummary,
|
|
427
|
-
fieldPath: string,
|
|
428
|
-
) {
|
|
429
|
-
if (fieldPath.includes('.')) return fieldPath;
|
|
430
|
-
const sectionPath = getWorkbenchStructuredDataSchemaSectionPath(section);
|
|
431
|
-
return sectionPath ? `${sectionPath}.${fieldPath}` : fieldPath;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
export function getWorkbenchStructuredDataSchemaFieldDefinition({
|
|
435
|
-
fieldPath,
|
|
436
|
-
properties,
|
|
437
|
-
section,
|
|
438
|
-
}: {
|
|
439
|
-
fieldPath: string;
|
|
440
|
-
properties?: Record<string, WorkbenchStructuredDataSchemaFieldDefinition> | undefined;
|
|
441
|
-
section: WorkbenchStructuredDataSchemaSectionSummary;
|
|
442
|
-
}) {
|
|
443
|
-
const sectionPath = getWorkbenchStructuredDataSchemaSectionPath(section);
|
|
444
|
-
return (
|
|
445
|
-
properties?.[fieldPath] ??
|
|
446
|
-
(sectionPath ? properties?.[`${sectionPath}.${fieldPath}`] : undefined)
|
|
447
|
-
);
|
|
448
|
-
}
|
|
449
|
-
|
|
450
127
|
export function getWorkbenchStructuredDataSchemaDocumentSections(
|
|
451
128
|
schema: WorkbenchStructuredDataSchemaDocument | null | undefined,
|
|
452
129
|
pattern: string,
|
|
@@ -493,7 +170,7 @@ export function getWorkbenchStructuredDataSchemaDocumentFieldLabel(
|
|
|
493
170
|
) {
|
|
494
171
|
return (
|
|
495
172
|
getWorkbenchStructuredDataSchemaDocumentFieldDefinition(schema, section, fieldPath)?.title ??
|
|
496
|
-
|
|
173
|
+
getWorkbenchStructuredDataSchemaSectionFieldLabel(fieldPath)
|
|
497
174
|
);
|
|
498
175
|
}
|
|
499
176
|
|
|
@@ -545,103 +222,6 @@ export function getWorkbenchStructuredDataSchemaDocumentSectionValue({
|
|
|
545
222
|
return null;
|
|
546
223
|
}
|
|
547
224
|
|
|
548
|
-
export function getWorkbenchStructuredDataSchemaTableRows(
|
|
549
|
-
value: unknown,
|
|
550
|
-
): WorkbenchStructuredDataRecord[] {
|
|
551
|
-
if (Array.isArray(value)) {
|
|
552
|
-
return value.map((item) => asWorkbenchStructuredDataRecord(item) ?? { value: item });
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
const record = asWorkbenchStructuredDataRecord(value);
|
|
556
|
-
if (!record) return [];
|
|
557
|
-
|
|
558
|
-
const objectEntries = Object.entries(record).filter(([, entry]) =>
|
|
559
|
-
asWorkbenchStructuredDataRecord(entry),
|
|
560
|
-
);
|
|
561
|
-
if (!objectEntries.length) return [];
|
|
562
|
-
|
|
563
|
-
return objectEntries.map(([key, entry]) => ({
|
|
564
|
-
id: key,
|
|
565
|
-
...(asWorkbenchStructuredDataRecord(entry) ?? {}),
|
|
566
|
-
}));
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
export function getWorkbenchStructuredDataSchemaTablePath(
|
|
570
|
-
section: WorkbenchStructuredDataSchemaSectionSummary,
|
|
571
|
-
) {
|
|
572
|
-
const tablePath = getWorkbenchStructuredDataSchemaSectionPath(section);
|
|
573
|
-
return tablePath ? tablePath.split('.') : [];
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
export function getWorkbenchStructuredDataSchemaTableRowKey({
|
|
577
|
-
row,
|
|
578
|
-
rowIndex,
|
|
579
|
-
value,
|
|
580
|
-
}: WorkbenchStructuredDataSchemaTableRowKeyInput) {
|
|
581
|
-
return Array.isArray(value) ? String(rowIndex) : String(row.id ?? rowIndex);
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
export function getWorkbenchStructuredDataSchemaTableCellPath({
|
|
585
|
-
column,
|
|
586
|
-
rowKey,
|
|
587
|
-
section,
|
|
588
|
-
}: {
|
|
589
|
-
column: string;
|
|
590
|
-
rowKey: string;
|
|
591
|
-
section: WorkbenchStructuredDataSchemaSectionSummary;
|
|
592
|
-
}) {
|
|
593
|
-
return [...getWorkbenchStructuredDataSchemaTablePath(section), rowKey, column];
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
export function removeWorkbenchStructuredDataSchemaTableRow({
|
|
597
|
-
rowIndex,
|
|
598
|
-
rowKey,
|
|
599
|
-
value,
|
|
600
|
-
}: {
|
|
601
|
-
rowIndex: number;
|
|
602
|
-
rowKey: string;
|
|
603
|
-
value: unknown;
|
|
604
|
-
}) {
|
|
605
|
-
if (Array.isArray(value)) return value.filter((_, index) => index !== rowIndex);
|
|
606
|
-
|
|
607
|
-
const nextRecord = { ...(asWorkbenchStructuredDataRecord(value) ?? {}) };
|
|
608
|
-
delete nextRecord[rowKey];
|
|
609
|
-
return nextRecord;
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
export function appendWorkbenchStructuredDataSchemaTableRow({
|
|
613
|
-
row,
|
|
614
|
-
rowKey,
|
|
615
|
-
value,
|
|
616
|
-
}: {
|
|
617
|
-
row: WorkbenchStructuredDataRecord;
|
|
618
|
-
rowKey: string;
|
|
619
|
-
value: unknown;
|
|
620
|
-
}) {
|
|
621
|
-
if (Array.isArray(value)) return [...value, row];
|
|
622
|
-
|
|
623
|
-
return {
|
|
624
|
-
...(asWorkbenchStructuredDataRecord(value) ?? {}),
|
|
625
|
-
[rowKey]: { ...row, id: rowKey },
|
|
626
|
-
};
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
export function getWorkbenchStructuredDataSchemaTableColumns({
|
|
630
|
-
maxColumns = 6,
|
|
631
|
-
preferredColumns = [],
|
|
632
|
-
rows,
|
|
633
|
-
schemaColumns = [],
|
|
634
|
-
sectionColumns = [],
|
|
635
|
-
}: WorkbenchStructuredDataSchemaTableColumnInput) {
|
|
636
|
-
if (sectionColumns.length) return [...sectionColumns];
|
|
637
|
-
if (schemaColumns.length) return [...schemaColumns];
|
|
638
|
-
|
|
639
|
-
const keys = Array.from(new Set(rows.flatMap((row) => Object.keys(row))));
|
|
640
|
-
const preferred = preferredColumns.filter((column) => keys.includes(column));
|
|
641
|
-
const remaining = keys.filter((column) => !preferred.includes(column));
|
|
642
|
-
return [...preferred, ...remaining].slice(0, maxColumns);
|
|
643
|
-
}
|
|
644
|
-
|
|
645
225
|
export function getWorkbenchStructuredDataSchemaDocumentTableColumns({
|
|
646
226
|
maxColumns,
|
|
647
227
|
preferredColumns,
|
|
@@ -668,19 +248,6 @@ export function getWorkbenchStructuredDataSchemaDocumentTableColumns({
|
|
|
668
248
|
});
|
|
669
249
|
}
|
|
670
250
|
|
|
671
|
-
export function createWorkbenchStructuredDataSchemaEmptyRow({
|
|
672
|
-
columns,
|
|
673
|
-
getDefinition,
|
|
674
|
-
}: {
|
|
675
|
-
columns: readonly string[];
|
|
676
|
-
getDefinition: (column: string) => WorkbenchStructuredDataSchemaFieldDefinition | undefined;
|
|
677
|
-
}) {
|
|
678
|
-
return columns.reduce<WorkbenchStructuredDataRecord>((row, column) => {
|
|
679
|
-
row[column] = getWorkbenchStructuredDataSchemaFieldDefaultValue(getDefinition(column));
|
|
680
|
-
return row;
|
|
681
|
-
}, {});
|
|
682
|
-
}
|
|
683
|
-
|
|
684
251
|
export function createWorkbenchStructuredDataSchemaDocumentEmptyRow({
|
|
685
252
|
columns,
|
|
686
253
|
schema,
|
|
@@ -754,29 +321,6 @@ export function createWorkbenchStructuredDataSchemaFallbackSection({
|
|
|
754
321
|
};
|
|
755
322
|
}
|
|
756
323
|
|
|
757
|
-
export function slugWorkbenchStructuredDataSchemaAnchor(value: string | undefined) {
|
|
758
|
-
return (
|
|
759
|
-
value
|
|
760
|
-
?.toLowerCase()
|
|
761
|
-
.replace(/[^a-z0-9_-]+/g, '-')
|
|
762
|
-
.replace(/^-+|-+$/g, '') || 'section'
|
|
763
|
-
);
|
|
764
|
-
}
|
|
765
|
-
|
|
766
|
-
export function getWorkbenchStructuredDataSchemaSectionAnchorId({
|
|
767
|
-
index,
|
|
768
|
-
panelId,
|
|
769
|
-
section,
|
|
770
|
-
}: {
|
|
771
|
-
index: number;
|
|
772
|
-
panelId: string;
|
|
773
|
-
section: WorkbenchStructuredDataSchemaSectionSummary;
|
|
774
|
-
}) {
|
|
775
|
-
return `${panelId}-section-${index}-${slugWorkbenchStructuredDataSchemaAnchor(
|
|
776
|
-
getWorkbenchStructuredDataSchemaSectionId(section) ?? section.title,
|
|
777
|
-
)}`;
|
|
778
|
-
}
|
|
779
|
-
|
|
780
324
|
export function getWorkbenchStructuredDataSchemaDocumentPanelData({
|
|
781
325
|
data,
|
|
782
326
|
pattern,
|
|
@@ -793,94 +337,3 @@ export function getWorkbenchStructuredDataSchemaDocumentPanelData({
|
|
|
793
337
|
createWorkbenchStructuredDataSchemaDocumentSampleData(schema, pattern)
|
|
794
338
|
);
|
|
795
339
|
}
|
|
796
|
-
|
|
797
|
-
export function getWorkbenchStructuredDataFormFields(
|
|
798
|
-
sections: readonly WorkbenchStructuredDataFormSection[],
|
|
799
|
-
) {
|
|
800
|
-
return sections.flatMap((section) => section.fields ?? []);
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
export function normalizeWorkbenchStructuredDataFormData(
|
|
804
|
-
sections: readonly WorkbenchStructuredDataFormSection[],
|
|
805
|
-
data: WorkbenchStructuredDataRecord = EMPTY_RECORD,
|
|
806
|
-
): WorkbenchStructuredDataRecord {
|
|
807
|
-
return getWorkbenchStructuredDataFormFields(sections).reduce<WorkbenchStructuredDataRecord>(
|
|
808
|
-
(nextData, field) => {
|
|
809
|
-
const value = getWorkbenchStructuredDataValue(nextData, field.path);
|
|
810
|
-
return setWorkbenchStructuredDataValue(
|
|
811
|
-
nextData,
|
|
812
|
-
field.path,
|
|
813
|
-
value === undefined
|
|
814
|
-
? getWorkbenchStructuredDataFormFieldDefaultValue(field)
|
|
815
|
-
: coerceWorkbenchStructuredDataFormFieldValue(field, value),
|
|
816
|
-
);
|
|
817
|
-
},
|
|
818
|
-
{ ...data },
|
|
819
|
-
);
|
|
820
|
-
}
|
|
821
|
-
|
|
822
|
-
export function getWorkbenchStructuredDataFormFieldError({
|
|
823
|
-
data,
|
|
824
|
-
field,
|
|
825
|
-
value,
|
|
826
|
-
}: {
|
|
827
|
-
data: WorkbenchStructuredDataRecord;
|
|
828
|
-
field: WorkbenchStructuredDataFormField;
|
|
829
|
-
value: WorkbenchStructuredDataFieldValue;
|
|
830
|
-
}) {
|
|
831
|
-
if (field.validationMessage) return field.validationMessage;
|
|
832
|
-
if (field.required && isWorkbenchStructuredDataFormEmptyValue(value)) {
|
|
833
|
-
return 'This field is required.';
|
|
834
|
-
}
|
|
835
|
-
|
|
836
|
-
return field.validate?.(value, data, field);
|
|
837
|
-
}
|
|
838
|
-
|
|
839
|
-
export function getWorkbenchStructuredDataFormErrors(
|
|
840
|
-
sections: readonly WorkbenchStructuredDataFormSection[],
|
|
841
|
-
data: WorkbenchStructuredDataRecord = EMPTY_RECORD,
|
|
842
|
-
): WorkbenchStructuredDataFormErrors {
|
|
843
|
-
const normalizedData = normalizeWorkbenchStructuredDataFormData(sections, data);
|
|
844
|
-
|
|
845
|
-
return getWorkbenchStructuredDataFormFields(sections).reduce<WorkbenchStructuredDataFormErrors>(
|
|
846
|
-
(errors, field) => {
|
|
847
|
-
const value = coerceWorkbenchStructuredDataFormFieldValue(
|
|
848
|
-
field,
|
|
849
|
-
getWorkbenchStructuredDataValue(normalizedData, field.path),
|
|
850
|
-
);
|
|
851
|
-
const error = getWorkbenchStructuredDataFormFieldError({
|
|
852
|
-
data: normalizedData,
|
|
853
|
-
field,
|
|
854
|
-
value,
|
|
855
|
-
});
|
|
856
|
-
|
|
857
|
-
if (isRenderableWorkbenchStructuredDataFormError(error)) {
|
|
858
|
-
errors[field.id] = error;
|
|
859
|
-
}
|
|
860
|
-
|
|
861
|
-
return errors;
|
|
862
|
-
},
|
|
863
|
-
{},
|
|
864
|
-
);
|
|
865
|
-
}
|
|
866
|
-
|
|
867
|
-
export function isWorkbenchStructuredDataFormSubmittable({
|
|
868
|
-
disabled = false,
|
|
869
|
-
errors = {},
|
|
870
|
-
readOnly = false,
|
|
871
|
-
}: {
|
|
872
|
-
disabled?: boolean;
|
|
873
|
-
errors?: WorkbenchStructuredDataFormErrors;
|
|
874
|
-
readOnly?: boolean;
|
|
875
|
-
}) {
|
|
876
|
-
return !disabled && !readOnly && Object.keys(errors).length === 0;
|
|
877
|
-
}
|
|
878
|
-
|
|
879
|
-
function isWorkbenchStructuredDataFormEmptyValue(value: WorkbenchStructuredDataFieldValue) {
|
|
880
|
-
if (Array.isArray(value)) return value.length === 0;
|
|
881
|
-
return value === '' || value === false;
|
|
882
|
-
}
|
|
883
|
-
|
|
884
|
-
function isRenderableWorkbenchStructuredDataFormError(error: ReactNode) {
|
|
885
|
-
return error !== undefined && error !== null && error !== false && error !== '';
|
|
886
|
-
}
|