@workbench-kit/react 0.0.2-prototype.0.2.6 → 0.0.2-prototype.0.2.8
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 +87 -0
- package/package.json +20 -18
- package/src/brand/TilepaperAppIcon.tsx +181 -181
- package/src/brand/index.ts +2 -2
- package/src/brand/tilepaper-app-icon-geometry.ts +201 -201
- package/src/icons/WorkbenchIcon.tsx +57 -57
- package/src/icons/WorkbenchIconContext.tsx +25 -25
- package/src/icons/file-icon.ts +154 -154
- package/src/icons/index.ts +17 -17
- package/src/icons/resolveWorkbenchIcon.ts +48 -48
- package/src/icons/types.ts +28 -28
- package/src/index.ts +735 -735
- package/src/jdw/JdwPreview.tsx +195 -195
- package/src/jdw/JdwPreviewViewport.tsx +190 -190
- package/src/jdw/JsonCodeEditorPane.tsx +425 -424
- package/src/jdw/builtins/renderBuiltinWidgetLeaf.tsx +130 -130
- package/src/jdw/createBuiltinJdwRegistry.ts +436 -436
- package/src/jdw/cssRenderBackend.tsx +223 -223
- package/src/jdw/document.ts +35 -35
- package/src/jdw/fixtures/jdw-fixtures.ts +52 -52
- package/src/jdw/fixtures/jdw-sample-screens.ts +524 -524
- package/src/jdw/index.ts +50 -50
- package/src/jdw/jdw-preview-viewport.css +41 -41
- package/src/jdw/parse.ts +1 -1
- package/src/jdw/renderJdw.tsx +73 -73
- package/src/json-config/JsonConfigWorkbench.tsx +313 -313
- package/src/json-config/index.ts +6 -6
- package/src/json-config/json-config-editor-state.ts +42 -42
- package/src/layout/ViewEmptyState.tsx +14 -14
- package/src/layout/WorkbenchCanvas.tsx +956 -956
- package/src/layout/WorkbenchFullscreen.tsx +368 -368
- package/src/layout/WorkbenchLayout.tsx +8 -8
- package/src/layout/WorkbenchLayoutBase.tsx +335 -335
- package/src/layout/WorkbenchMediaPreviewViewport.tsx +122 -122
- package/src/layout/WorkbenchPropertyOverrideLabel.tsx +90 -90
- package/src/layout/WorkbenchPropertyPanel.tsx +633 -633
- package/src/layout/WorkbenchPropertySearch.tsx +51 -51
- package/src/layout/WorkbenchTree.tsx +350 -350
- package/src/layout/canvas/canvas-drag-ghost.css +21 -21
- package/src/layout/canvas/canvas-drag-preview-frame.css +15 -15
- package/src/layout/canvas/canvas-drop-indicator.css +16 -16
- package/src/layout/canvas/canvas-frame-handle.css +37 -37
- package/src/layout/canvas/canvas-frame-surface.css +24 -24
- package/src/layout/canvas/canvas-guide-block.css +17 -17
- package/src/layout/canvas/canvas-guide-layer.css +6 -6
- package/src/layout/canvas/canvas-guide-line.css +22 -22
- package/src/layout/canvas/canvas-item-badge.css +23 -23
- package/src/layout/canvas/canvas-item-frame.css +54 -54
- package/src/layout/canvas/canvas-pane-surface.css +9 -9
- package/src/layout/canvas/canvas-placeholder.css +21 -21
- package/src/layout/canvas/canvas-resize-frame.css +9 -9
- package/src/layout/canvas/canvas-resize-handle.css +74 -74
- package/src/layout/canvas/canvas-resize-preview.css +11 -11
- package/src/layout/canvas/canvas-selection-marquee.css +14 -14
- package/src/layout/canvas/canvas-viewport.css +18 -18
- package/src/layout/canvas/index.css +19 -19
- package/src/layout/canvas/preview-canvas.css +144 -144
- package/src/layout/editor/editor-body.css +9 -9
- package/src/layout/editor/editor-bottom-panel.css +44 -44
- package/src/layout/editor/editor-frame.css +14 -14
- package/src/layout/editor/editor-viewport.css +7 -7
- package/src/layout/editor/floating-menu.css +91 -91
- package/src/layout/editor/index.css +10 -10
- package/src/layout/editor/parse-error.css +9 -9
- package/src/layout/editor/problem-item.css +52 -52
- package/src/layout/editor/problem-list.css +7 -7
- package/src/layout/editor/render-surface.css +13 -13
- package/src/layout/fillScrollContract.ts +49 -49
- package/src/layout/fullscreen/fullscreen-backdrop.css +31 -31
- package/src/layout/fullscreen/fullscreen-button.css +44 -44
- package/src/layout/fullscreen/fullscreen-carousel.css +20 -20
- package/src/layout/fullscreen/fullscreen-content.css +8 -8
- package/src/layout/fullscreen/fullscreen-empty.css +16 -16
- package/src/layout/fullscreen/fullscreen-header.css +77 -77
- package/src/layout/fullscreen/fullscreen-hero.css +41 -41
- package/src/layout/fullscreen/fullscreen-nav-button.css +29 -29
- package/src/layout/fullscreen/fullscreen-option.css +83 -83
- package/src/layout/fullscreen/fullscreen-pill-row.css +6 -6
- package/src/layout/fullscreen/fullscreen-pill.css +10 -10
- package/src/layout/fullscreen/fullscreen-root.css +11 -11
- package/src/layout/fullscreen/index.css +13 -13
- package/src/layout/index.ts +156 -156
- package/src/layout/layout-base/banner.css +32 -32
- package/src/layout/layout-base/center.css +7 -7
- package/src/layout/layout-base/column.css +7 -7
- package/src/layout/layout-base/divider.css +5 -5
- package/src/layout/layout-base/empty.css +12 -12
- package/src/layout/layout-base/fill-scroll.css +36 -36
- package/src/layout/layout-base/fill.css +18 -18
- package/src/layout/layout-base/index.css +13 -13
- package/src/layout/layout-base/pane.css +6 -6
- package/src/layout/layout-base/panel-scroll.css +5 -5
- package/src/layout/layout-base/panel-surface.css +14 -14
- package/src/layout/layout-base/root.css +9 -9
- package/src/layout/layout-base/section-title.css +8 -8
- package/src/layout/layout.css +10 -10
- package/src/layout/layoutHelpers.ts +27 -27
- package/src/layout/media/index.css +2 -2
- package/src/layout/media/media-preview-viewport.css +69 -69
- package/src/layout/panel/Panel.tsx +161 -161
- package/src/layout/panel/TemplateGallery.tsx +90 -90
- package/src/layout/panel/WorkbenchAuthoringShell.tsx +57 -57
- package/src/layout/panel/WorkbenchLabeledPane.tsx +81 -81
- package/src/layout/panel/WorkbenchSidebarStack.tsx +15 -15
- package/src/layout/panel/filter-bar.css +59 -59
- package/src/layout/panel/index.css +7 -7
- package/src/layout/panel/index.ts +70 -70
- package/src/layout/panel/preview-pane.css +63 -63
- package/src/layout/panel/template-gallery.css +131 -131
- package/src/layout/panel/workbench-authoring-shell.css +48 -48
- package/src/layout/panel/workbench-labeled-pane.css +69 -69
- package/src/layout/panel/workbench-sidebar-stack.css +18 -18
- package/src/layout/property/color-input.css +8 -8
- package/src/layout/property/color-row.css +6 -6
- package/src/layout/property/index.css +15 -15
- package/src/layout/property/property-card.css +8 -8
- package/src/layout/property/property-grid.css +24 -24
- package/src/layout/property/property-hint.css +4 -4
- package/src/layout/property/property-inline.css +10 -10
- package/src/layout/property/property-key-value.css +29 -29
- package/src/layout/property/property-override-label.css +34 -34
- package/src/layout/property/property-panel.css +20 -20
- package/src/layout/property/property-row.css +17 -17
- package/src/layout/property/property-search.css +43 -43
- package/src/layout/property/property-section.css +97 -97
- package/src/layout/property/property-stack.css +11 -11
- package/src/layout/property/property-toggle.css +14 -14
- package/src/layout/propertyFieldFilter.ts +84 -84
- package/src/layout/sidebar/SideBarViewFrame.tsx +235 -235
- package/src/layout/sidebar/SideBarViewTabStrip.tsx +60 -60
- package/src/layout/sidebar/SideBarViewTitleMenu.tsx +75 -75
- package/src/layout/sidebar/SidebarActionIconBar.tsx +242 -242
- package/src/layout/sidebar/SidebarSectionNestingContext.tsx +21 -21
- package/src/layout/sidebar/SidebarSlotChrome.tsx +32 -32
- package/src/layout/sidebar/SidebarToolbar.tsx +10 -10
- package/src/layout/sidebar/WorkbenchActionSidebar.tsx +73 -73
- package/src/layout/sidebar/WorkbenchSidebarActions.tsx +328 -328
- package/src/layout/sidebar/WorkbenchSidebarSectionStack.tsx +165 -165
- package/src/layout/sidebar/index.css +5 -5
- package/src/layout/sidebar/index.ts +55 -55
- package/src/layout/sidebar/sidebar-chrome.css +95 -95
- package/src/layout/sidebar/sidebar-section-stack.css +25 -25
- package/src/layout/sidebar/sidebar-section.css +124 -124
- package/src/layout/sidebar/sidebar-view.css +290 -290
- package/src/layout/tree/drag-preview.css +25 -25
- package/src/layout/tree/index.css +10 -10
- package/src/layout/tree/template-glyph.css +96 -96
- package/src/layout/tree/tree-action.css +20 -20
- package/src/layout/tree/tree-drag-overlay.css +13 -13
- package/src/layout/tree/tree-drop-line.css +17 -17
- package/src/layout/tree/tree-drop-zone.css +13 -13
- package/src/layout/tree/tree-expander.css +23 -23
- package/src/layout/tree/tree-item.css +93 -93
- package/src/layout/tree/tree.css +49 -49
- package/src/layout/usePreviewViewport.ts +428 -428
- package/src/modal/ConfirmDialog.tsx +61 -61
- package/src/modal/Modal.tsx +243 -213
- package/src/modal/ModalResizeHandles.tsx +40 -40
- package/src/modal/ModalTitlebar.tsx +86 -86
- package/src/modal/modal.css +291 -291
- package/src/modal/modalContainer.ts +36 -36
- package/src/modal/modalPosition.ts +36 -36
- package/src/modal/modalSize.ts +84 -84
- package/src/modal/modalTypes.ts +13 -13
- package/src/modal/useModalContainerViewport.ts +41 -41
- package/src/modal/useModalDrag.ts +118 -118
- package/src/modal/useModalFocusTrap.ts +142 -0
- package/src/modal/useModalResize.ts +122 -122
- package/src/modal/useModalWindowFrame.ts +122 -122
- package/src/overlay/ContextMenu.tsx +124 -124
- package/src/overlay/clampFixedOverlayPosition.ts +22 -22
- package/src/overlay/context-menu.css +127 -127
- package/src/overlay/index.ts +31 -31
- package/src/overlay/measureAnchoredOverlayPanel.ts +107 -107
- package/src/overlay/overlay.css +2 -2
- package/src/overlay/pointerPassthroughRegion.ts +83 -83
- package/src/overlay/useAnchoredOverlayPanel.ts +222 -222
- package/src/overlay/useClampedFixedOverlayPosition.ts +27 -27
- package/src/overlay/useContextMenuState.ts +59 -59
- package/src/overlay/useFixedOverlayDismiss.ts +49 -49
- package/src/overlay/usePointerPassthroughRegion.ts +87 -87
- package/src/primitives/absolute-box/AbsoluteBox.tsx +46 -46
- package/src/primitives/absolute-box/index.ts +1 -1
- package/src/primitives/badge/Badge.tsx +14 -14
- package/src/primitives/badge/badge.css +20 -20
- package/src/primitives/badge/index.ts +1 -1
- package/src/primitives/button/Button.tsx +45 -45
- package/src/primitives/button/button.css +76 -76
- package/src/primitives/button/index.ts +1 -1
- package/src/primitives/catalog-browse-card/CatalogBrowseCard.tsx +121 -121
- package/src/primitives/catalog-browse-card/catalog-browse-card.css +175 -175
- package/src/primitives/catalog-browse-card/index.ts +1 -1
- package/src/primitives/catalog-browse-pane/CatalogBrowseFacetChips.tsx +59 -59
- package/src/primitives/catalog-browse-pane/CatalogBrowsePane.tsx +360 -360
- package/src/primitives/catalog-browse-pane/catalog-browse-facet-chips.css +8 -8
- package/src/primitives/catalog-browse-pane/catalog-browse-pane.css +84 -84
- package/src/primitives/catalog-browse-pane/filterCatalogBrowseItems.ts +27 -27
- package/src/primitives/catalog-browse-pane/index.ts +3 -3
- package/src/primitives/catalog-filter-overlay/CatalogFilterOverlay.tsx +73 -73
- package/src/primitives/catalog-filter-overlay/catalog-filter-overlay.css +65 -65
- package/src/primitives/catalog-filter-overlay/index.ts +1 -1
- package/src/primitives/checkbox/Checkbox.tsx +40 -40
- package/src/primitives/checkbox/checkbox.css +81 -81
- package/src/primitives/checkbox/index.ts +1 -1
- package/src/primitives/chip/Chip.tsx +43 -43
- package/src/primitives/chip/chip.css +110 -110
- package/src/primitives/chip/index.ts +2 -2
- package/src/primitives/clearable-text-input/ClearableTextInput.tsx +78 -78
- package/src/primitives/clearable-text-input/clearable-text-input.css +15 -15
- package/src/primitives/clearable-text-input/index.ts +1 -1
- package/src/primitives/codicon/Codicon.tsx +20 -20
- package/src/primitives/codicon/index.ts +1 -1
- package/src/primitives/empty-state/EmptyState.tsx +33 -33
- package/src/primitives/empty-state/empty-state.css +20 -20
- package/src/primitives/empty-state/index.ts +1 -1
- package/src/primitives/external-link-button/ExternalLinkButton.tsx +56 -56
- package/src/primitives/external-link-button/index.ts +1 -1
- package/src/primitives/field/Field.tsx +39 -39
- package/src/primitives/field/field.css +51 -51
- package/src/primitives/field/index.ts +1 -1
- package/src/primitives/file-icon/FileIcon.tsx +21 -21
- package/src/primitives/file-icon/index.ts +1 -1
- package/src/primitives/icon-button/IconButton.tsx +37 -37
- package/src/primitives/icon-button/icon-button.css +46 -46
- package/src/primitives/icon-button/index.ts +1 -1
- package/src/primitives/index.ts +265 -265
- package/src/primitives/library-detail-layout/LibraryDetailLayout.tsx +135 -135
- package/src/primitives/library-detail-layout/index.ts +1 -1
- package/src/primitives/library-detail-layout/library-detail-layout.css +169 -169
- package/src/primitives/library-facet-filter-panel/LibraryFacetFilterPanel.tsx +454 -454
- package/src/primitives/library-facet-filter-panel/index.ts +1 -1
- package/src/primitives/library-facet-filter-panel/library-facet-filter-panel.css +205 -205
- package/src/primitives/library-facet-filter-strip/LibraryFacetFilterStrip.tsx +527 -527
- package/src/primitives/library-facet-filter-strip/index.ts +1 -1
- package/src/primitives/library-facet-filter-strip/library-facet-filter-strip.css +31 -31
- package/src/primitives/list/List.tsx +120 -120
- package/src/primitives/list/index.ts +1 -1
- package/src/primitives/list/list-empty-state.css +10 -10
- package/src/primitives/list/list-item.css +93 -93
- package/src/primitives/list/list.css +6 -6
- package/src/primitives/number-input/NumberInput.tsx +235 -235
- package/src/primitives/number-input/index.ts +1 -1
- package/src/primitives/number-input/number-input.css +105 -105
- package/src/primitives/panel-loading/PanelLoading.tsx +29 -29
- package/src/primitives/panel-loading/index.ts +1 -1
- package/src/primitives/panel-loading/panel-loading.css +16 -16
- package/src/primitives/panel-surface/panel-surface.css +77 -77
- package/src/primitives/primitives.css +36 -36
- package/src/primitives/record-media-hero/RecordMediaHero.tsx +81 -81
- package/src/primitives/record-media-hero/index.ts +1 -1
- package/src/primitives/record-media-hero/record-media-hero.css +84 -84
- package/src/primitives/scroll-area/ScrollArea.tsx +200 -200
- package/src/primitives/scroll-area/index.ts +1 -1
- package/src/primitives/scroll-area/scroll-area-overlay.css +69 -69
- package/src/primitives/scroll-area-infinite-load/ScrollAreaInfiniteSentinel.tsx +22 -22
- package/src/primitives/scroll-area-infinite-load/index.ts +2 -2
- package/src/primitives/scroll-area-infinite-load/scroll-area-infinite-sentinel.css +6 -6
- package/src/primitives/scroll-area-infinite-load/useScrollAreaInfiniteLoad.ts +84 -84
- package/src/primitives/searchable-multi-select/SearchableMultiSelect.tsx +378 -378
- package/src/primitives/searchable-multi-select/index.ts +9 -9
- package/src/primitives/searchable-multi-select/overlay.ts +125 -125
- package/src/primitives/searchable-multi-select/searchable-multi-select.css +129 -129
- package/src/primitives/select/Select.tsx +284 -284
- package/src/primitives/select/index.ts +2 -2
- package/src/primitives/select/options.ts +38 -38
- package/src/primitives/select/overlay.ts +82 -82
- package/src/primitives/select/select.app.css +12 -12
- package/src/primitives/select/select.css +177 -177
- package/src/primitives/select/types.ts +18 -18
- package/src/primitives/styles.css +6 -6
- package/src/primitives/tabbed-panels/TabbedPanels.tsx +68 -68
- package/src/primitives/tabbed-panels/index.ts +2 -2
- package/src/primitives/tabbed-panels/tabbed-panels.css +58 -58
- package/src/primitives/text-area/TextArea.tsx +37 -37
- package/src/primitives/text-area/index.ts +1 -1
- package/src/primitives/text-input/TextInput.tsx +34 -34
- package/src/primitives/text-input/index.ts +1 -1
- package/src/primitives/text-input/input.css +54 -54
- package/src/primitives/toolbar/Toolbar.tsx +8 -8
- package/src/primitives/toolbar/index.ts +1 -1
- package/src/primitives/visually-hidden/visually-hidden.css +11 -11
- package/src/primitives/workbench-editor/WorkbenchEditor.tsx +432 -432
- package/src/primitives/workbench-editor/button-group.css +10 -10
- package/src/primitives/workbench-editor/editor-tabs.css +201 -201
- package/src/primitives/workbench-editor/index.ts +1 -1
- package/src/primitives/workbench-editor/resizable-panels.css +53 -53
- package/src/primitives/workbench-editor/segmented-control.css +98 -98
- package/src/primitives/workbench-media-slot/WorkbenchMediaPlaceholder.tsx +25 -25
- package/src/primitives/workbench-media-slot/WorkbenchMediaSlot.tsx +60 -60
- package/src/primitives/workbench-media-slot/index.ts +2 -2
- package/src/primitives/workbench-media-slot/media-slot.css +72 -72
- package/src/primitives/workbench-thumbnail/WorkbenchThumbnail.tsx +38 -38
- package/src/primitives/workbench-thumbnail/index.ts +1 -1
- package/src/primitives/workbench-thumbnail/thumbnail.css +69 -69
- package/src/scrollbars.css +144 -144
- package/src/styles.css +16 -17
- package/src/test-utils/workbenchMonacoMock.tsx +37 -37
- package/src/utils/codicon.ts +17 -17
- package/src/utils/dragMime.ts +89 -89
- package/src/utils/useWorkbenchMediaImage.ts +37 -37
- package/src/widget-asset/WidgetAssetEditor.tsx +142 -142
- package/src/widget-asset/WidgetAssetMetadataForm.tsx +82 -82
- package/src/widget-asset/WidgetAssetModeControls.tsx +42 -42
- package/src/widget-asset/WidgetAssetSourceEditor.tsx +50 -50
- package/src/widget-asset/WidgetAssetWorkbench.tsx +111 -111
- package/src/widget-asset/index.ts +17 -17
- package/src/widget-asset/widget-asset-document.ts +37 -37
- package/src/widget-asset/widget-asset-mode.ts +3 -3
- package/src/widget-studio/builtin-widget-asset-catalog.ts +12 -12
- package/src/widget-studio/create-widget-studio-workspace-editor.tsx +78 -78
- package/src/widget-studio/index.ts +10 -10
- package/src/widget-studio/resolve-widget-studio-asset-catalog.ts +43 -43
- package/src/widget-tree/WidgetAssetPalette.tsx +105 -105
- package/src/widget-tree/WidgetInspectorPanel.tsx +316 -316
- package/src/widget-tree/WidgetSourceEditor.tsx +143 -143
- package/src/widget-tree/WidgetTreeCanvasPreview.tsx +875 -875
- package/src/widget-tree/WidgetTreeLab.tsx +600 -600
- package/src/widget-tree/WidgetTreeModeControls.tsx +73 -73
- package/src/widget-tree/WidgetTreeSidePanel.tsx +39 -39
- package/src/widget-tree/WidgetTreeView.tsx +797 -797
- package/src/widget-tree/WidgetTreeWorkbench.tsx +155 -155
- package/src/widget-tree/WidgetTreeWorkspaceShell.tsx +172 -172
- package/src/widget-tree/demo-registry.ts +32 -32
- package/src/widget-tree/demo-widget-assets.ts +4 -4
- package/src/widget-tree/index.ts +45 -45
- package/src/widget-tree/widget-placement-asset-dnd.ts +35 -35
- package/src/widget-tree/widget-tree-document.ts +14 -14
- package/src/widget-tree/widget-tree-editor-state.ts +40 -40
- package/src/widget-tree/widget-tree-layout.ts +76 -76
- package/src/widget-tree/widget-tree-mode.ts +7 -7
- package/src/widget-tree/widget-tree-play-helpers.ts +85 -85
- package/src/workbench/auth/WorkbenchAuthGate.tsx +61 -61
- package/src/workbench/auth/WorkbenchLoginView.tsx +633 -633
- package/src/workbench/auth/auth-flows.css +440 -440
- package/src/workbench/auth/auth.css +3 -3
- package/src/workbench/auth/index.ts +19 -19
- package/src/workbench/auth/profile-modals.css +115 -115
- package/src/workbench/bootstrap/WorkbenchBootstrapGate.tsx +45 -45
- package/src/workbench/bootstrap/WorkbenchBootstrapView.tsx +100 -100
- package/src/workbench/bootstrap/index.ts +12 -12
- package/src/workbench/bootstrap/useWorkbenchBootstrap.ts +130 -130
- package/src/workbench/chat/ChatCommandProposalCard.tsx +115 -115
- package/src/workbench/chat/ChatComposer.tsx +163 -163
- package/src/workbench/chat/ChatConversationBar.tsx +134 -134
- package/src/workbench/chat/ChatHistoryMenu.tsx +171 -171
- package/src/workbench/chat/ChatHistoryMenuRow.tsx +74 -74
- package/src/workbench/chat/ChatMessageCollapsible.tsx +119 -115
- package/src/workbench/chat/ChatMessageItem.tsx +376 -318
- package/src/workbench/chat/ChatMessageList.tsx +134 -134
- package/src/workbench/chat/ChatPanel.tsx +177 -168
- package/src/workbench/chat/ChatPhasedRunProgress.tsx +275 -202
- package/src/workbench/chat/ChatRenameDialog.tsx +77 -77
- package/src/workbench/chat/chat-conversation.css +273 -273
- package/src/workbench/chat/chat-ui.css +1132 -1124
- package/src/workbench/chat/chat.css +3 -3
- package/src/workbench/chat/chatConversation.ts +46 -46
- package/src/workbench/chat/chatHistoryRowMenuItems.ts +29 -29
- package/src/workbench/chat/chatMessageMeta.tsx +252 -252
- package/src/workbench/chat/chatScroll.ts +22 -22
- package/src/workbench/chat/index.ts +65 -64
- package/src/workbench/chat/slashCommand.ts +26 -26
- package/src/workbench/chat/types.ts +45 -45
- package/src/workbench/chat/useCancelRuntimeOnUnmount.ts +60 -60
- package/src/workbench/chat/useChatPrependPagination.ts +233 -233
- package/src/workbench/chat/useChatRuntimeState.ts +64 -64
- package/src/workbench/chat/useSlashCommandSuggest.ts +154 -154
- package/src/workbench/{WorkbenchModalPortal.tsx → chrome/WorkbenchModalPortal.tsx} +52 -52
- package/src/workbench/{WorkbenchPlatformContext.tsx → chrome/WorkbenchPlatformContext.tsx} +31 -31
- package/src/workbench/chrome/index.css +6 -6
- package/src/workbench/chrome/workbench-chrome.css +4 -0
- package/src/workbench/chrome/workbench-desktop-titlebar.css +60 -60
- package/src/workbench/chrome/workbench-host.css +85 -85
- package/src/workbench/chrome/workbench-layout-regions.css +42 -42
- package/src/workbench/chrome/workbench-platform-chrome.css +142 -142
- package/src/workbench/chrome/workbench-shell-titlebar.css +124 -124
- package/src/workbench/{workbenchModalViewState.ts → chrome/workbenchModalViewState.ts} +52 -52
- package/src/workbench/{workbenchOverlaysContext.tsx → chrome/workbenchOverlaysContext.tsx} +21 -21
- package/src/workbench/{workbenchPlatformChrome.ts → chrome/workbenchPlatformChrome.ts} +40 -40
- package/src/workbench/command-palette/command-palette.css +156 -156
- package/src/workbench/{CommandGroupShell.tsx → commands/CommandGroupShell.tsx} +131 -131
- package/src/workbench/{CommandList.tsx → commands/CommandList.tsx} +167 -167
- package/src/workbench/{CommandPalette.tsx → commands/CommandPalette.tsx} +391 -417
- package/src/workbench/{ConfirmationFlow.tsx → commands/ConfirmationFlow.tsx} +243 -243
- package/src/workbench/{ShortcutCommandBridge.tsx → commands/ShortcutCommandBridge.tsx} +365 -365
- package/src/workbench/{command-execution-policy.ts → commands/command-execution-policy.ts} +61 -61
- package/src/workbench/{command-model.ts → commands/command-model.ts} +279 -275
- package/src/workbench/{commands.ts → commands/commands.ts} +576 -576
- package/src/workbench/{keyboard.ts → commands/keyboard.ts} +53 -53
- package/src/workbench/{workbenchContextMenu.ts → commands/workbenchContextMenu.ts} +18 -18
- package/src/workbench/{WorkbenchEditorTabs.tsx → editor/WorkbenchEditorTabs.tsx} +52 -52
- package/src/workbench/{editor-tabs-dnd.ts → editor/editor-tabs-dnd.ts} +162 -162
- package/src/workbench/{editorTabContextMenu.ts → editor/editorTabContextMenu.ts} +111 -111
- package/src/workbench/{useEditorTabsStripDnd.ts → editor/useEditorTabsStripDnd.ts} +262 -262
- package/src/workbench/{useWorkbenchEditorTabContextMenu.tsx → editor/useWorkbenchEditorTabContextMenu.tsx} +66 -66
- package/src/workbench/editor-tabs/index.ts +22 -22
- package/src/workbench/index.ts +694 -675
- package/src/workbench/management/AccountManagementPanel.tsx +82 -82
- package/src/workbench/management/CommandInspectorPanel.tsx +127 -127
- package/src/workbench/management/CommandManagementPanel.tsx +129 -129
- package/src/workbench/management/CommandManagementSidebar.tsx +318 -318
- package/src/workbench/management/ExtensionManagementPanel.tsx +527 -498
- package/src/workbench/management/ExtensionManagementSidebar.tsx +509 -492
- package/src/workbench/management/IntegrationCommandActions.tsx +78 -78
- package/src/workbench/management/IntegrationSettingsSurface.tsx +290 -290
- package/src/workbench/management/IntegrationsShell.tsx +53 -53
- package/src/workbench/management/KeybindingCaptureField.tsx +142 -142
- package/src/workbench/management/KeybindingManagementPanel.tsx +120 -120
- package/src/workbench/management/LibraryCatalogPickerDialog.tsx +208 -208
- package/src/workbench/management/LibraryFacetFilterDialog.tsx +62 -62
- package/src/workbench/management/ManagementCard.tsx +89 -89
- package/src/workbench/management/ManagementFilterChips.tsx +41 -41
- package/src/workbench/management/ManagementGroup.tsx +56 -56
- package/src/workbench/management/ManagementPanelControls.tsx +43 -43
- package/src/workbench/management/ManagementPanelFrame.tsx +109 -109
- package/src/workbench/management/WorkbenchDialogFrame.tsx +148 -148
- package/src/workbench/management/WorkbenchNotice.tsx +211 -211
- package/src/workbench/management/build-command-management-groups.ts +157 -157
- package/src/workbench/management/command-inspector-uri.ts +26 -26
- package/src/workbench/management/extension-category-display.ts +42 -42
- package/src/workbench/management/extension-install-approval.ts +72 -0
- package/src/workbench/management/format-command-run-state.ts +19 -19
- package/src/workbench/management/index.ts +137 -130
- package/src/workbench/management/integration-command-action.ts +25 -25
- package/src/workbench/management/library-catalog-picker-dialog.css +56 -56
- package/src/workbench/management/library-facet-filter-dialog.css +8 -8
- package/src/workbench/management/management-panel.css +444 -444
- package/src/workbench/management/management.css +4 -4
- package/src/workbench/management/types.ts +139 -126
- package/src/workbench/{MarkdownPreview.tsx → markdown/MarkdownPreview.tsx} +162 -147
- package/src/workbench/markdown/markdownRemarkPlugins.ts +12 -0
- package/src/workbench/markdown/sanitizeMarkdownHref.ts +29 -0
- package/src/workbench/schema/index.ts +47 -47
- package/src/workbench/schema/workbenchDocument.ts +31 -31
- package/src/workbench/schema/workbenchDocumentActions.ts +6 -6
- package/src/workbench/schema/workbenchDocumentAdapter.ts +9 -9
- package/src/workbench/schema/workbenchDocumentPatch.ts +13 -13
- package/src/workbench/schema/workbenchDocumentRenderer.tsx +702 -702
- package/src/workbench/settings/NavigationPanel.tsx +86 -86
- package/src/workbench/settings/SchemaForm.tsx +433 -433
- package/src/workbench/settings/SectionTabPanel.tsx +172 -172
- package/src/workbench/settings/SectionedPanel.tsx +169 -169
- package/src/workbench/settings/StructuredDataForm.tsx +619 -619
- package/src/workbench/settings/StructuredDataSchemaPanel.tsx +811 -811
- package/src/workbench/settings/StructuredDataSchemaPanelEmbed.tsx +21 -21
- package/src/workbench/settings/StructuredDataSchemaPanelFrame.tsx +76 -76
- package/src/workbench/settings/StructuredDataTableView.tsx +127 -127
- package/src/workbench/settings/WorkbenchPanelRegion.tsx +46 -46
- package/src/workbench/settings/WorkbenchSettingsModal.tsx +251 -251
- package/src/workbench/settings/WorkbenchSettingsNav.tsx +57 -57
- package/src/workbench/settings/WorkbenchSettingsSection.tsx +30 -30
- package/src/workbench/settings/extensionSettingsForm.ts +34 -34
- package/src/workbench/settings/index.ts +177 -177
- package/src/workbench/settings/navigation-panel.css +59 -59
- package/src/workbench/settings/panel-region.css +22 -22
- package/src/workbench/settings/schema-form.css +36 -36
- package/src/workbench/settings/schemaFormSettingSpec.ts +177 -177
- package/src/workbench/settings/schemaFormSettingsCategory.tsx +21 -21
- package/src/workbench/settings/section-tab-panel.css +157 -157
- package/src/workbench/settings/sectionScrollSpyDom.ts +139 -139
- package/src/workbench/settings/sectioned-panel.css +162 -162
- package/src/workbench/settings/sectionedPanelScrollSpy.ts +273 -273
- package/src/workbench/settings/settings-responsive.css +58 -58
- package/src/workbench/settings/settings.css +11 -11
- package/src/workbench/settings/settingsCommit.tsx +55 -55
- package/src/workbench/settings/structured-data-form.css +114 -114
- package/src/workbench/settings/structured-data-schema-panel.css +344 -344
- package/src/workbench/settings/structured-data-table-view.css +85 -85
- package/src/workbench/settings/structuredDataFormModel.ts +140 -140
- package/src/workbench/settings/structuredDataSchema.ts +339 -339
- package/src/workbench/settings/structuredDataSchemaDate.ts +197 -197
- package/src/workbench/settings/structuredDataSchemaField.ts +105 -105
- package/src/workbench/settings/structuredDataSchemaSection.ts +74 -74
- package/src/workbench/settings/structuredDataSchemaTable.ts +120 -120
- package/src/workbench/settings/structuredDataSchemaTypes.ts +308 -308
- package/src/workbench/settings/structuredDataSchemaValidation.ts +166 -166
- package/src/workbench/settings/types.ts +16 -16
- package/src/workbench/settings/useSectionScrollSpy.ts +420 -420
- package/src/workbench/settings/workbench-settings-modal.css +273 -273
- package/src/workbench/{ActivityBar.tsx → shell/ActivityBar.tsx} +159 -159
- package/src/workbench/{ArtifactShell.tsx → shell/ArtifactShell.tsx} +397 -397
- package/src/workbench/{SplitView.tsx → shell/SplitView.tsx} +485 -485
- package/src/workbench/{StatusBar.tsx → shell/StatusBar.tsx} +180 -180
- package/src/workbench/{StructuredArtifactEditor.tsx → shell/StructuredArtifactEditor.tsx} +205 -205
- package/src/workbench/{Timeline.tsx → shell/Timeline.tsx} +297 -297
- package/src/workbench/{WorkbenchCanvasShell.defaults.ts → shell/WorkbenchCanvasShell.defaults.ts} +106 -106
- package/src/workbench/{WorkbenchCanvasShell.model.ts → shell/WorkbenchCanvasShell.model.ts} +46 -46
- package/src/workbench/{WorkbenchCanvasShell.tsx → shell/WorkbenchCanvasShell.tsx} +827 -827
- package/src/workbench/{WorkbenchDesktopTitleBar.tsx → shell/WorkbenchDesktopTitleBar.tsx} +126 -126
- package/src/workbench/{WorkbenchShell.tsx → shell/WorkbenchShell.tsx} +192 -192
- package/src/workbench/{WorkbenchShellTitleBarLayoutControls.tsx → shell/WorkbenchShellTitleBarLayoutControls.tsx} +80 -80
- package/src/workbench/{WorkbenchStandaloneShell.tsx → shell/WorkbenchStandaloneShell.tsx} +604 -604
- package/src/workbench/{WorkbenchViewEditor.tsx → shell/WorkbenchViewEditor.tsx} +75 -75
- package/src/workbench/{WorkbenchViewSidebar.tsx → shell/WorkbenchViewSidebar.tsx} +85 -85
- package/src/workbench/{WorkbenchWindowChromeControls.tsx → shell/WorkbenchWindowChromeControls.tsx} +293 -290
- package/src/workbench/shell/activity-bar.css +245 -245
- package/src/workbench/{activityBarOrder.ts → shell/activityBarOrder.ts} +98 -98
- package/src/workbench/{appearanceLabels.ts → shell/appearanceLabels.ts} +28 -28
- package/src/workbench/shell/confirmation-flow.css +87 -87
- package/src/workbench/{hardReset.ts → shell/hardReset.ts} +64 -64
- package/src/workbench/shell/index.css +5 -5
- package/src/workbench/{shell.ts → shell/shell.ts} +152 -146
- package/src/workbench/{shellPresets.ts → shell/shellPresets.ts} +36 -36
- package/src/workbench/{shellState.ts → shell/shellState.ts} +196 -196
- package/src/workbench/{shellViewModel.ts → shell/shellViewModel.ts} +160 -160
- package/src/workbench/{sidebarViewPlacementDnd.ts → shell/sidebarViewPlacementDnd.ts} +61 -61
- package/src/workbench/shell/split-view.css +188 -188
- package/src/workbench/{standalone.ts → shell/standalone.ts} +101 -101
- package/src/workbench/shell/status-bar.css +141 -141
- package/src/workbench/{status.ts → shell/status.ts} +133 -133
- package/src/workbench/{useDeferredWorkbenchMount.ts → shell/useDeferredWorkbenchMount.ts} +71 -71
- package/src/workbench/{useWorkbenchAppearanceDocumentSync.tsx → shell/useWorkbenchAppearanceDocumentSync.tsx} +17 -17
- package/src/workbench/{useWorkbenchSidebarActionBarDnd.ts → shell/useWorkbenchSidebarActionBarDnd.ts} +227 -227
- package/src/workbench/{useWorkbenchSidebarLayout.tsx → shell/useWorkbenchSidebarLayout.tsx} +232 -232
- package/src/workbench/{useWorkbenchSidebarViewPlacementDropZone.ts → shell/useWorkbenchSidebarViewPlacementDropZone.ts} +194 -194
- package/src/workbench/{useWorkbenchStandaloneShellStateSync.tsx → shell/useWorkbenchStandaloneShellStateSync.tsx} +112 -112
- package/src/workbench/{workbenchSidebarLayoutContext.ts → shell/workbenchSidebarLayoutContext.ts} +46 -46
- package/src/workbench/{workbenchStandaloneShellReactContext.tsx → shell/workbenchStandaloneShellReactContext.tsx} +80 -80
- package/src/workbench/{workbenchViewRouteState.ts → shell/workbenchViewRouteState.ts} +151 -151
- package/src/workbench/{WorkbenchThemeProvider.tsx → theme/WorkbenchThemeProvider.tsx} +142 -142
- package/src/workbench/{theme.ts → theme/theme.ts} +50 -50
- package/src/workbench/{themePresets.ts → theme/themePresets.ts} +191 -191
- package/src/workbench/views/action-list.css +144 -144
- package/src/workbench/views/artifact-preview.css +184 -184
- package/src/workbench/views/command-inspector.css +98 -98
- package/src/workbench/views/command-list.css +356 -356
- package/src/workbench/views/commands-sidebar.css +51 -51
- package/src/workbench/views/extensions-sidebar.css +175 -175
- package/src/workbench/views/multi-provider-explorer.css +182 -182
- package/src/workbench/views/search.css +10 -10
- package/src/workbench/views/timeline.css +239 -239
- package/src/workbench/views/view-hosts.css +37 -37
- package/src/workbench/views/view-sidebar.css +21 -21
- package/src/workbench/views/views.css +12 -12
- package/src/workbench/widgets/widget-tree.css +598 -598
- package/src/workbench/widgets/widgets.css +2 -2
- package/src/workbench/workspace/WorkspaceDraftsContext.tsx +99 -99
- package/src/workbench/workspace/WorkspaceEditor.tsx +165 -165
- package/src/workbench/workspace/WorkspaceEditorPanel.tsx +393 -393
- package/src/workbench/workspace/WorkspaceExplorer.tsx +630 -630
- package/src/workbench/workspace/WorkspaceExplorerPanel.tsx +73 -73
- package/src/workbench/workspace/WorkspaceFileIcon.tsx +23 -23
- package/src/workbench/workspace/WorkspaceHighlightedText.tsx +22 -22
- package/src/workbench/workspace/WorkspacePathLabel.tsx +42 -42
- package/src/workbench/workspace/WorkspaceSearchPanel.tsx +116 -116
- package/src/workbench/workspace/WorkspaceSearchResults.tsx +51 -51
- package/src/workbench/workspace/build-workspace-explorer-nodes.ts +44 -44
- package/src/workbench/workspace/createVirtualWorkspaceExplorerPort.ts +141 -141
- package/src/workbench/workspace/explorer-tree-style.ts +18 -18
- package/src/workbench/workspace/index.ts +169 -169
- package/src/workbench/workspace/json-config-workbench.css +57 -57
- package/src/workbench/workspace/mimeType.ts +45 -45
- package/src/workbench/workspace/monaco-panel.css +71 -71
- package/src/workbench/workspace/path.ts +12 -12
- package/src/workbench/workspace/search.ts +6 -6
- package/src/workbench/workspace/tree.ts +1 -1
- package/src/workbench/workspace/types.ts +10 -10
- package/src/workbench/workspace/useVirtualWorkspace.ts +111 -111
- package/src/workbench/workspace/useWorkspaceExplorerController.ts +490 -490
- package/src/workbench/workspace/workspace-editor.css +235 -235
- package/src/workbench/workspace/workspace-explorer-panel.css +33 -33
- package/src/workbench/workspace/workspace.css +5 -5
- package/src/workbench/workspace/workspaceExplorerController.ts +193 -193
- package/src/workbench/workspace/workspaceJsonDiagnostics.ts +84 -83
- package/src/workbench-menu-surfaces.css +57 -57
- package/src/workbench/jdw/jdw-editors.css +0 -4
- package/src/workbench/jdw/jdw.css +0 -2
- package/src/workbench/markdownRemarkPlugins.ts +0 -4
- package/src/workbench/workbench-chrome.css +0 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* workbench/management feature styles — Plan A import hub */
|
|
2
|
-
@import './library-catalog-picker-dialog.css';
|
|
3
|
-
@import './library-facet-filter-dialog.css';
|
|
4
|
-
@import './management-panel.css';
|
|
1
|
+
/* workbench/management feature styles — Plan A import hub */
|
|
2
|
+
@import './library-catalog-picker-dialog.css';
|
|
3
|
+
@import './library-facet-filter-dialog.css';
|
|
4
|
+
@import './management-panel.css';
|
|
@@ -1,126 +1,139 @@
|
|
|
1
|
-
export type CommandManagementEntryStatus = 'available' | 'disabled' | 'no-handler';
|
|
2
|
-
|
|
3
|
-
export interface CommandManagementEntry {
|
|
4
|
-
readonly category?: string | undefined;
|
|
5
|
-
readonly description?: string | undefined;
|
|
6
|
-
readonly id: string;
|
|
7
|
-
readonly keybinding?: string | undefined;
|
|
8
|
-
readonly label: string;
|
|
9
|
-
readonly menuSurfaces?: readonly string[] | undefined;
|
|
10
|
-
readonly source: string;
|
|
11
|
-
readonly sourceLabel: string;
|
|
12
|
-
readonly status: CommandManagementEntryStatus;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface CommandManagementGroup {
|
|
16
|
-
readonly entries: readonly CommandManagementEntry[];
|
|
17
|
-
readonly id: string;
|
|
18
|
-
readonly label: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface CommandManagementRunState {
|
|
22
|
-
readonly commandId: string;
|
|
23
|
-
readonly message?: string | undefined;
|
|
24
|
-
readonly status: 'running' | 'success' | 'error';
|
|
25
|
-
readonly timestamp: number;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type AccountManagementEntryStatus = 'active' | 'signed-out' | 'expired';
|
|
29
|
-
|
|
30
|
-
export interface AccountManagementEntry {
|
|
31
|
-
readonly displayName: string;
|
|
32
|
-
readonly email?: string | undefined;
|
|
33
|
-
readonly id: string;
|
|
34
|
-
readonly providerId: string;
|
|
35
|
-
readonly providerLabel?: string | undefined;
|
|
36
|
-
readonly status?: AccountManagementEntryStatus | undefined;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface AccountManagementPanelProps {
|
|
40
|
-
accounts: readonly AccountManagementEntry[];
|
|
41
|
-
activeAccountId?: string | undefined;
|
|
42
|
-
automationHint?: string | undefined;
|
|
43
|
-
className?: string | undefined;
|
|
44
|
-
emptyLabel?: string | undefined;
|
|
45
|
-
onSignOut?: ((accountId: string) => void) | undefined;
|
|
46
|
-
sessionLabel?: string | undefined;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface CommandManagementPanelProps {
|
|
50
|
-
className?: string | undefined;
|
|
51
|
-
emptyLabel?: string | undefined;
|
|
52
|
-
groups: readonly CommandManagementGroup[];
|
|
53
|
-
lastRun?: CommandManagementRunState | undefined;
|
|
54
|
-
onRunCommand?: ((commandId: string) => void | Promise<void>) | undefined;
|
|
55
|
-
query?: string | undefined;
|
|
56
|
-
summaryLabel?: string | undefined;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export type ExtensionManagementEntrySource = 'bundled' | 'installed';
|
|
60
|
-
|
|
61
|
-
export interface ExtensionManagementFeatureItem {
|
|
62
|
-
readonly description?: string | undefined;
|
|
63
|
-
readonly id: string;
|
|
64
|
-
readonly label: string;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export interface ExtensionManagementFeatureSummary {
|
|
68
|
-
readonly capabilities?: {
|
|
69
|
-
readonly provides: readonly string[];
|
|
70
|
-
readonly requires: readonly string[];
|
|
71
|
-
};
|
|
72
|
-
readonly commands?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
73
|
-
readonly documentViews?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
74
|
-
readonly menus?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
75
|
-
readonly permissions?: readonly string[] | undefined;
|
|
76
|
-
readonly settings?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
77
|
-
readonly views?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export interface ExtensionManagementDiagnosticSummary {
|
|
81
|
-
readonly message: string;
|
|
82
|
-
readonly severity: 'error' | 'warning';
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export interface ExtensionInstallPlanSummary {
|
|
86
|
-
readonly blocked: boolean;
|
|
87
|
-
readonly diagnostics?: readonly ExtensionManagementDiagnosticSummary[] | undefined;
|
|
88
|
-
readonly enableExtensionIds?: readonly string[] | undefined;
|
|
89
|
-
readonly installExtensionIds?: readonly string[] | undefined;
|
|
90
|
-
readonly permissions?: readonly string[] | undefined;
|
|
91
|
-
readonly requiresApproval: boolean;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export interface ExtensionManagementEntry {
|
|
95
|
-
readonly category: string;
|
|
96
|
-
readonly description?: string | undefined;
|
|
97
|
-
readonly diagnostics?: readonly ExtensionManagementDiagnosticSummary[] | undefined;
|
|
98
|
-
readonly displayName: string;
|
|
99
|
-
readonly enabled: boolean;
|
|
100
|
-
readonly features?: ExtensionManagementFeatureSummary | undefined;
|
|
101
|
-
readonly id: string;
|
|
102
|
-
readonly installedAt?: string | undefined;
|
|
103
|
-
readonly manifestUrl?: string | undefined;
|
|
104
|
-
readonly source: ExtensionManagementEntrySource;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export interface ExtensionCatalogBrowseEntry {
|
|
108
|
-
readonly category: string;
|
|
109
|
-
readonly description: string;
|
|
110
|
-
readonly displayName: string;
|
|
111
|
-
readonly icon?: string | undefined;
|
|
112
|
-
readonly id: string;
|
|
113
|
-
readonly installPlan?: ExtensionInstallPlanSummary | undefined;
|
|
114
|
-
readonly installed: boolean;
|
|
115
|
-
readonly manifestUrl: string;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export interface
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
1
|
+
export type CommandManagementEntryStatus = 'available' | 'disabled' | 'no-handler';
|
|
2
|
+
|
|
3
|
+
export interface CommandManagementEntry {
|
|
4
|
+
readonly category?: string | undefined;
|
|
5
|
+
readonly description?: string | undefined;
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly keybinding?: string | undefined;
|
|
8
|
+
readonly label: string;
|
|
9
|
+
readonly menuSurfaces?: readonly string[] | undefined;
|
|
10
|
+
readonly source: string;
|
|
11
|
+
readonly sourceLabel: string;
|
|
12
|
+
readonly status: CommandManagementEntryStatus;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface CommandManagementGroup {
|
|
16
|
+
readonly entries: readonly CommandManagementEntry[];
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly label: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface CommandManagementRunState {
|
|
22
|
+
readonly commandId: string;
|
|
23
|
+
readonly message?: string | undefined;
|
|
24
|
+
readonly status: 'running' | 'success' | 'error';
|
|
25
|
+
readonly timestamp: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type AccountManagementEntryStatus = 'active' | 'signed-out' | 'expired';
|
|
29
|
+
|
|
30
|
+
export interface AccountManagementEntry {
|
|
31
|
+
readonly displayName: string;
|
|
32
|
+
readonly email?: string | undefined;
|
|
33
|
+
readonly id: string;
|
|
34
|
+
readonly providerId: string;
|
|
35
|
+
readonly providerLabel?: string | undefined;
|
|
36
|
+
readonly status?: AccountManagementEntryStatus | undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface AccountManagementPanelProps {
|
|
40
|
+
accounts: readonly AccountManagementEntry[];
|
|
41
|
+
activeAccountId?: string | undefined;
|
|
42
|
+
automationHint?: string | undefined;
|
|
43
|
+
className?: string | undefined;
|
|
44
|
+
emptyLabel?: string | undefined;
|
|
45
|
+
onSignOut?: ((accountId: string) => void) | undefined;
|
|
46
|
+
sessionLabel?: string | undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface CommandManagementPanelProps {
|
|
50
|
+
className?: string | undefined;
|
|
51
|
+
emptyLabel?: string | undefined;
|
|
52
|
+
groups: readonly CommandManagementGroup[];
|
|
53
|
+
lastRun?: CommandManagementRunState | undefined;
|
|
54
|
+
onRunCommand?: ((commandId: string) => void | Promise<void>) | undefined;
|
|
55
|
+
query?: string | undefined;
|
|
56
|
+
summaryLabel?: string | undefined;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export type ExtensionManagementEntrySource = 'bundled' | 'installed';
|
|
60
|
+
|
|
61
|
+
export interface ExtensionManagementFeatureItem {
|
|
62
|
+
readonly description?: string | undefined;
|
|
63
|
+
readonly id: string;
|
|
64
|
+
readonly label: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface ExtensionManagementFeatureSummary {
|
|
68
|
+
readonly capabilities?: {
|
|
69
|
+
readonly provides: readonly string[];
|
|
70
|
+
readonly requires: readonly string[];
|
|
71
|
+
};
|
|
72
|
+
readonly commands?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
73
|
+
readonly documentViews?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
74
|
+
readonly menus?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
75
|
+
readonly permissions?: readonly string[] | undefined;
|
|
76
|
+
readonly settings?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
77
|
+
readonly views?: readonly ExtensionManagementFeatureItem[] | undefined;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface ExtensionManagementDiagnosticSummary {
|
|
81
|
+
readonly message: string;
|
|
82
|
+
readonly severity: 'error' | 'warning';
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface ExtensionInstallPlanSummary {
|
|
86
|
+
readonly blocked: boolean;
|
|
87
|
+
readonly diagnostics?: readonly ExtensionManagementDiagnosticSummary[] | undefined;
|
|
88
|
+
readonly enableExtensionIds?: readonly string[] | undefined;
|
|
89
|
+
readonly installExtensionIds?: readonly string[] | undefined;
|
|
90
|
+
readonly permissions?: readonly string[] | undefined;
|
|
91
|
+
readonly requiresApproval: boolean;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface ExtensionManagementEntry {
|
|
95
|
+
readonly category: string;
|
|
96
|
+
readonly description?: string | undefined;
|
|
97
|
+
readonly diagnostics?: readonly ExtensionManagementDiagnosticSummary[] | undefined;
|
|
98
|
+
readonly displayName: string;
|
|
99
|
+
readonly enabled: boolean;
|
|
100
|
+
readonly features?: ExtensionManagementFeatureSummary | undefined;
|
|
101
|
+
readonly id: string;
|
|
102
|
+
readonly installedAt?: string | undefined;
|
|
103
|
+
readonly manifestUrl?: string | undefined;
|
|
104
|
+
readonly source: ExtensionManagementEntrySource;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface ExtensionCatalogBrowseEntry {
|
|
108
|
+
readonly category: string;
|
|
109
|
+
readonly description: string;
|
|
110
|
+
readonly displayName: string;
|
|
111
|
+
readonly icon?: string | undefined;
|
|
112
|
+
readonly id: string;
|
|
113
|
+
readonly installPlan?: ExtensionInstallPlanSummary | undefined;
|
|
114
|
+
readonly installed: boolean;
|
|
115
|
+
readonly manifestUrl: string;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface ExtensionInstallOptions {
|
|
119
|
+
/** Required when the install plan sets `requiresApproval`. */
|
|
120
|
+
readonly approved?: boolean | undefined;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export interface ExtensionManagementPanelProps {
|
|
124
|
+
browseEntries: readonly ExtensionCatalogBrowseEntry[];
|
|
125
|
+
catalogError?: string | undefined;
|
|
126
|
+
catalogLoading?: boolean | undefined;
|
|
127
|
+
className?: string | undefined;
|
|
128
|
+
installedEntries: readonly ExtensionManagementEntry[];
|
|
129
|
+
onInstall?:
|
|
130
|
+
((entry: ExtensionCatalogBrowseEntry, options?: ExtensionInstallOptions) => void) | undefined;
|
|
131
|
+
onToggleEnabled?: ((entry: ExtensionManagementEntry, enabled: boolean) => void) | undefined;
|
|
132
|
+
/**
|
|
133
|
+
* Host-owned durable trust check. When true for an entry, the install confirm
|
|
134
|
+
* prompt is skipped and `{ approved: true }` is used.
|
|
135
|
+
*/
|
|
136
|
+
isInstallTrusted?: ((entry: ExtensionCatalogBrowseEntry) => boolean) | undefined;
|
|
137
|
+
/** Persist trust after the user confirms a permissioned install. */
|
|
138
|
+
onRememberInstallTrust?: ((entry: ExtensionCatalogBrowseEntry) => void) | undefined;
|
|
139
|
+
}
|
|
@@ -1,147 +1,162 @@
|
|
|
1
|
-
import Markdown from 'react-markdown';
|
|
2
|
-
import { Children, isValidElement, type ComponentPropsWithoutRef, type ReactNode } from 'react';
|
|
3
|
-
import { cx } from '
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
.
|
|
147
|
-
|
|
1
|
+
import Markdown from 'react-markdown';
|
|
2
|
+
import { Children, isValidElement, type ComponentPropsWithoutRef, type ReactNode } from 'react';
|
|
3
|
+
import { cx } from '../../utils/cx';
|
|
4
|
+
import {
|
|
5
|
+
workbenchMarkdownRemarkPlugins,
|
|
6
|
+
workbenchMarkdownRehypePlugins,
|
|
7
|
+
} from './markdownRemarkPlugins';
|
|
8
|
+
import { sanitizeMarkdownHref } from './sanitizeMarkdownHref';
|
|
9
|
+
|
|
10
|
+
export interface WorkbenchMarkdownPreviewProps extends ComponentPropsWithoutRef<'article'> {
|
|
11
|
+
source: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function WorkbenchMarkdownPreview({
|
|
15
|
+
className,
|
|
16
|
+
source,
|
|
17
|
+
...props
|
|
18
|
+
}: WorkbenchMarkdownPreviewProps) {
|
|
19
|
+
return (
|
|
20
|
+
<article className={cx('ui-workbench-markdown-preview', className)} {...props}>
|
|
21
|
+
<Markdown
|
|
22
|
+
remarkPlugins={workbenchMarkdownRemarkPlugins}
|
|
23
|
+
rehypePlugins={workbenchMarkdownRehypePlugins}
|
|
24
|
+
components={{
|
|
25
|
+
a: ({ children, href }) => {
|
|
26
|
+
const safeHref = sanitizeMarkdownHref(href);
|
|
27
|
+
if (!safeHref) {
|
|
28
|
+
return <span>{children}</span>;
|
|
29
|
+
}
|
|
30
|
+
return (
|
|
31
|
+
<a
|
|
32
|
+
href={safeHref}
|
|
33
|
+
rel="noreferrer"
|
|
34
|
+
target={safeHref.startsWith('#') ? undefined : '_blank'}
|
|
35
|
+
>
|
|
36
|
+
{children}
|
|
37
|
+
</a>
|
|
38
|
+
);
|
|
39
|
+
},
|
|
40
|
+
code: ({ children, className: codeClassName }) => (
|
|
41
|
+
<code className={cx('ui-workbench-markdown-preview__code', codeClassName)}>
|
|
42
|
+
{children}
|
|
43
|
+
</code>
|
|
44
|
+
),
|
|
45
|
+
pre: ({ children }) => {
|
|
46
|
+
const codeBlock = getMarkdownCodeBlock(children);
|
|
47
|
+
|
|
48
|
+
if (codeBlock?.language === 'mermaid') {
|
|
49
|
+
return <WorkbenchMermaidPreview source={codeBlock.source} />;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return <pre>{children}</pre>;
|
|
53
|
+
},
|
|
54
|
+
}}
|
|
55
|
+
>
|
|
56
|
+
{source}
|
|
57
|
+
</Markdown>
|
|
58
|
+
</article>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function WorkbenchMermaidPreview({ source }: { source: string }) {
|
|
63
|
+
const summary = summarizeMermaidSource(source);
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<figure
|
|
67
|
+
className="ui-workbench-markdown-preview__mermaid"
|
|
68
|
+
data-testid="markdown-mermaid-preview"
|
|
69
|
+
>
|
|
70
|
+
<figcaption className="ui-workbench-markdown-preview__mermaid-header">
|
|
71
|
+
<span className="ui-workbench-markdown-preview__mermaid-title">
|
|
72
|
+
<i aria-hidden className="codicon codicon-git-branch" />
|
|
73
|
+
Mermaid
|
|
74
|
+
</span>
|
|
75
|
+
<span className="ui-workbench-markdown-preview__mermaid-kind">{summary.kind}</span>
|
|
76
|
+
</figcaption>
|
|
77
|
+
<div
|
|
78
|
+
className="ui-workbench-markdown-preview__mermaid-canvas"
|
|
79
|
+
aria-label="Mermaid diagram preview"
|
|
80
|
+
>
|
|
81
|
+
{summary.nodes.length > 0 ? (
|
|
82
|
+
<div className="ui-workbench-markdown-preview__mermaid-flow">
|
|
83
|
+
{summary.nodes.map((node, index) => (
|
|
84
|
+
<span
|
|
85
|
+
key={`${node}-${index}`}
|
|
86
|
+
className="ui-workbench-markdown-preview__mermaid-node"
|
|
87
|
+
>
|
|
88
|
+
{node}
|
|
89
|
+
</span>
|
|
90
|
+
))}
|
|
91
|
+
</div>
|
|
92
|
+
) : (
|
|
93
|
+
<pre className="ui-workbench-markdown-preview__mermaid-source">{source.trim()}</pre>
|
|
94
|
+
)}
|
|
95
|
+
</div>
|
|
96
|
+
</figure>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function getMarkdownCodeBlock(children: ReactNode): { language: string; source: string } | null {
|
|
101
|
+
const [child] = Children.toArray(children);
|
|
102
|
+
if (!isValidElement<{ className?: string | undefined; children?: ReactNode }>(child)) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const className = child.props.className;
|
|
107
|
+
if (typeof className !== 'string') {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const languageMatch = /\blanguage-([a-z0-9_-]+)\b/i.exec(className);
|
|
112
|
+
if (!languageMatch) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
language: languageMatch[1]?.toLowerCase() ?? '',
|
|
118
|
+
source: extractTextContent(child.props.children).replace(/\n$/, ''),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function extractTextContent(value: ReactNode): string {
|
|
123
|
+
return Children.toArray(value)
|
|
124
|
+
.map((child) => {
|
|
125
|
+
if (typeof child === 'string' || typeof child === 'number') {
|
|
126
|
+
return String(child);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (isValidElement<{ children?: ReactNode }>(child)) {
|
|
130
|
+
return extractTextContent(child.props.children);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return '';
|
|
134
|
+
})
|
|
135
|
+
.join('');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function summarizeMermaidSource(source: string): { kind: string; nodes: string[] } {
|
|
139
|
+
const lines = source
|
|
140
|
+
.split(/\r?\n/)
|
|
141
|
+
.map((line) => line.trim())
|
|
142
|
+
.filter(Boolean);
|
|
143
|
+
const declaration = lines[0] ?? 'mermaid';
|
|
144
|
+
const kind = declaration.split(/\s+/)[0] ?? 'mermaid';
|
|
145
|
+
const nodes = lines
|
|
146
|
+
.slice(1)
|
|
147
|
+
.flatMap((line) => line.split(/-->|---|==>|-.->|->/))
|
|
148
|
+
.map((segment) => cleanMermaidNodeLabel(segment))
|
|
149
|
+
.filter((segment) => segment.length > 0)
|
|
150
|
+
.filter((segment, index, all) => all.indexOf(segment) === index)
|
|
151
|
+
.slice(0, 6);
|
|
152
|
+
|
|
153
|
+
return { kind, nodes };
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function cleanMermaidNodeLabel(value: string): string {
|
|
157
|
+
return value
|
|
158
|
+
.replace(/^[A-Za-z0-9_]+(?=\[|\(|\{)/, '')
|
|
159
|
+
.replace(/^[A-Za-z0-9_]+$/, '')
|
|
160
|
+
.replace(/[[\]{}()"]/g, '')
|
|
161
|
+
.trim();
|
|
162
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import remarkGfm from 'remark-gfm';
|
|
2
|
+
import rehypeSanitize from 'rehype-sanitize';
|
|
3
|
+
|
|
4
|
+
/** Shared remark plugins for workbench markdown surfaces (preview, chat, etc.). */
|
|
5
|
+
export const workbenchMarkdownRemarkPlugins = [remarkGfm];
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Default rehype pipeline for untrusted markdown (chat / preview).
|
|
9
|
+
* Strips script/event handlers and dangerous URLs via rehype-sanitize.
|
|
10
|
+
* Hosts that need raw HTML must render outside these kit surfaces.
|
|
11
|
+
*/
|
|
12
|
+
export const workbenchMarkdownRehypePlugins = [rehypeSanitize];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Allowlist markdown link targets for safe preview rendering.
|
|
3
|
+
* Blocks javascript:/data:/vbscript: and other non-navigation schemes.
|
|
4
|
+
*/
|
|
5
|
+
export function sanitizeMarkdownHref(href: string | undefined): string | undefined {
|
|
6
|
+
if (href == null || href.trim() === '') {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const trimmed = href.trim();
|
|
11
|
+
if (trimmed.startsWith('#')) {
|
|
12
|
+
return trimmed;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
const base =
|
|
17
|
+
typeof globalThis.location?.href === 'string' && globalThis.location.href.length > 0
|
|
18
|
+
? globalThis.location.href
|
|
19
|
+
: 'https://workbench.local/';
|
|
20
|
+
const url = new URL(trimmed, base);
|
|
21
|
+
const protocol = url.protocol.toLowerCase();
|
|
22
|
+
if (protocol === 'http:' || protocol === 'https:' || protocol === 'mailto:') {
|
|
23
|
+
return trimmed;
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
} catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|