@workbench-kit/react 0.0.2-prototype.0.2.4 → 0.0.2-prototype.0.2.6
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 +10 -10
- 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 +424 -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 +213 -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/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 +17 -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/ActivityBar.tsx +159 -159
- package/src/workbench/ArtifactShell.tsx +397 -397
- package/src/workbench/CommandGroupShell.tsx +131 -131
- package/src/workbench/CommandList.tsx +167 -167
- package/src/workbench/CommandPalette.tsx +417 -417
- package/src/workbench/ConfirmationFlow.tsx +243 -243
- package/src/workbench/MarkdownPreview.tsx +147 -147
- package/src/workbench/ShortcutCommandBridge.tsx +365 -365
- package/src/workbench/SplitView.tsx +485 -485
- package/src/workbench/StatusBar.tsx +180 -180
- package/src/workbench/StructuredArtifactEditor.tsx +205 -205
- package/src/workbench/Timeline.tsx +297 -297
- package/src/workbench/WorkbenchCanvasShell.defaults.ts +106 -106
- package/src/workbench/WorkbenchCanvasShell.model.ts +46 -46
- package/src/workbench/WorkbenchCanvasShell.tsx +827 -827
- package/src/workbench/WorkbenchDesktopTitleBar.tsx +126 -126
- package/src/workbench/WorkbenchEditorTabs.tsx +52 -52
- package/src/workbench/WorkbenchModalPortal.tsx +52 -52
- package/src/workbench/WorkbenchPlatformContext.tsx +31 -31
- package/src/workbench/WorkbenchShell.tsx +192 -192
- package/src/workbench/WorkbenchShellTitleBarLayoutControls.tsx +80 -80
- package/src/workbench/WorkbenchStandaloneShell.tsx +604 -604
- package/src/workbench/WorkbenchThemeProvider.tsx +142 -142
- package/src/workbench/WorkbenchViewEditor.tsx +75 -75
- package/src/workbench/WorkbenchViewSidebar.tsx +85 -85
- package/src/workbench/WorkbenchWindowChromeControls.tsx +290 -290
- package/src/workbench/activityBarOrder.ts +98 -98
- package/src/workbench/appearanceLabels.ts +28 -28
- 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 +115 -115
- package/src/workbench/chat/ChatMessageItem.tsx +318 -318
- package/src/workbench/chat/ChatMessageList.tsx +134 -134
- package/src/workbench/chat/ChatPanel.tsx +168 -168
- package/src/workbench/chat/ChatPhasedRunProgress.tsx +202 -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 +1124 -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 +64 -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/chrome/index.css +6 -6
- 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/command-execution-policy.ts +61 -61
- package/src/workbench/command-model.ts +275 -275
- package/src/workbench/command-palette/command-palette.css +156 -156
- package/src/workbench/commands.ts +576 -576
- package/src/workbench/editor-tabs/index.ts +22 -22
- package/src/workbench/editor-tabs-dnd.ts +162 -162
- package/src/workbench/editorTabContextMenu.ts +111 -111
- package/src/workbench/hardReset.ts +64 -64
- package/src/workbench/index.ts +675 -675
- package/src/workbench/jdw/jdw-editors.css +4 -4
- package/src/workbench/jdw/jdw.css +2 -2
- package/src/workbench/keyboard.ts +53 -53
- 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 +498 -498
- package/src/workbench/management/ExtensionManagementSidebar.tsx +492 -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/format-command-run-state.ts +19 -19
- package/src/workbench/management/index.ts +130 -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 +126 -126
- package/src/workbench/markdownRemarkPlugins.ts +4 -4
- 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/shell/activity-bar.css +245 -245
- package/src/workbench/shell/confirmation-flow.css +87 -87
- package/src/workbench/shell/index.css +5 -5
- package/src/workbench/shell/split-view.css +188 -188
- package/src/workbench/shell/status-bar.css +141 -141
- package/src/workbench/shell.ts +146 -146
- package/src/workbench/shellPresets.ts +36 -36
- package/src/workbench/shellState.ts +196 -196
- package/src/workbench/shellViewModel.ts +160 -160
- package/src/workbench/sidebarViewPlacementDnd.ts +61 -61
- package/src/workbench/standalone.ts +101 -101
- package/src/workbench/status.ts +133 -133
- package/src/workbench/theme.ts +50 -50
- package/src/workbench/themePresets.ts +191 -191
- package/src/workbench/useDeferredWorkbenchMount.ts +71 -71
- package/src/workbench/useEditorTabsStripDnd.ts +262 -262
- package/src/workbench/useWorkbenchAppearanceDocumentSync.tsx +17 -17
- package/src/workbench/useWorkbenchEditorTabContextMenu.tsx +66 -66
- package/src/workbench/useWorkbenchSidebarActionBarDnd.ts +227 -227
- package/src/workbench/useWorkbenchSidebarLayout.tsx +232 -232
- package/src/workbench/useWorkbenchSidebarViewPlacementDropZone.ts +194 -194
- package/src/workbench/useWorkbenchStandaloneShellStateSync.tsx +112 -112
- 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/workbench-chrome.css +4 -4
- package/src/workbench/workbenchContextMenu.ts +18 -18
- package/src/workbench/workbenchModalViewState.ts +52 -52
- package/src/workbench/workbenchOverlaysContext.tsx +21 -21
- package/src/workbench/workbenchPlatformChrome.ts +40 -40
- package/src/workbench/workbenchSidebarLayoutContext.ts +46 -46
- package/src/workbench/workbenchStandaloneShellReactContext.tsx +80 -80
- package/src/workbench/workbenchViewRouteState.ts +151 -151
- 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 +83 -83
- package/src/workbench-menu-surfaces.css +57 -57
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
export type AnchoredOverlayPlacement = 'side' | 'below' | 'above';
|
|
2
|
-
|
|
3
|
-
export interface MeasureAnchoredOverlayPanelOptions {
|
|
4
|
-
readonly panelWidthPx?: number;
|
|
5
|
-
readonly viewportPaddingPx?: number;
|
|
6
|
-
readonly anchorGapPx?: number;
|
|
7
|
-
readonly maxHeightRatio?: number;
|
|
8
|
-
readonly sidePreferTriggerLeftRatio?: number;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface AnchoredOverlayPanelRect {
|
|
12
|
-
readonly top: number;
|
|
13
|
-
readonly left: number;
|
|
14
|
-
readonly width: number;
|
|
15
|
-
readonly maxHeight: number;
|
|
16
|
-
readonly placement: AnchoredOverlayPlacement;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const DEFAULT_PANEL_WIDTH_PX = 360;
|
|
20
|
-
const DEFAULT_VIEWPORT_PADDING_PX = 8;
|
|
21
|
-
const DEFAULT_ANCHOR_GAP_PX = 6;
|
|
22
|
-
const DEFAULT_MAX_HEIGHT_RATIO = 0.72;
|
|
23
|
-
const DEFAULT_SIDE_PREFER_TRIGGER_LEFT_RATIO = 0.42;
|
|
24
|
-
/** Assumed minimum panel height when clamping side placement into the viewport. */
|
|
25
|
-
const SIDE_MIN_VISIBLE_HEIGHT_PX = 240;
|
|
26
|
-
/** Prefer below when at least this many pixels are available under the trigger. */
|
|
27
|
-
const BELOW_MIN_SPACE_PX = 12;
|
|
28
|
-
|
|
29
|
-
function clamp(value: number, min: number, max: number): number {
|
|
30
|
-
return Math.min(Math.max(value, min), max);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Measure a panel-sized overlay anchored to a trigger element.
|
|
35
|
-
* Prefers a side flyout when the trigger sits in the left portion of the
|
|
36
|
-
* viewport and there is room; otherwise places below or above.
|
|
37
|
-
*/
|
|
38
|
-
export function measureAnchoredOverlayPanel(
|
|
39
|
-
trigger: HTMLElement,
|
|
40
|
-
options: MeasureAnchoredOverlayPanelOptions = {},
|
|
41
|
-
): AnchoredOverlayPanelRect {
|
|
42
|
-
const panelWidthPx = options.panelWidthPx ?? DEFAULT_PANEL_WIDTH_PX;
|
|
43
|
-
const viewportPaddingPx = options.viewportPaddingPx ?? DEFAULT_VIEWPORT_PADDING_PX;
|
|
44
|
-
const anchorGapPx = options.anchorGapPx ?? DEFAULT_ANCHOR_GAP_PX;
|
|
45
|
-
const maxHeightRatio = options.maxHeightRatio ?? DEFAULT_MAX_HEIGHT_RATIO;
|
|
46
|
-
const sidePreferTriggerLeftRatio =
|
|
47
|
-
options.sidePreferTriggerLeftRatio ?? DEFAULT_SIDE_PREFER_TRIGGER_LEFT_RATIO;
|
|
48
|
-
|
|
49
|
-
const viewportWidth = window.innerWidth;
|
|
50
|
-
const viewportHeight = window.innerHeight;
|
|
51
|
-
const triggerRect = trigger.getBoundingClientRect();
|
|
52
|
-
|
|
53
|
-
const maxHeight = Math.min(
|
|
54
|
-
viewportHeight * maxHeightRatio,
|
|
55
|
-
viewportHeight - viewportPaddingPx * 2,
|
|
56
|
-
);
|
|
57
|
-
const width = Math.min(panelWidthPx, viewportWidth - viewportPaddingPx * 2);
|
|
58
|
-
|
|
59
|
-
const spaceRight = Math.max(0, viewportWidth - triggerRect.right - viewportPaddingPx);
|
|
60
|
-
const spaceBelow = Math.max(0, viewportHeight - triggerRect.bottom - viewportPaddingPx);
|
|
61
|
-
const spaceAbove = Math.max(0, triggerRect.top - viewportPaddingPx);
|
|
62
|
-
|
|
63
|
-
const preferSide =
|
|
64
|
-
triggerRect.left < sidePreferTriggerLeftRatio * viewportWidth && spaceRight >= width;
|
|
65
|
-
|
|
66
|
-
if (preferSide) {
|
|
67
|
-
const minVisibleHeight = Math.min(SIDE_MIN_VISIBLE_HEIGHT_PX, maxHeight);
|
|
68
|
-
const top = clamp(
|
|
69
|
-
triggerRect.top,
|
|
70
|
-
viewportPaddingPx,
|
|
71
|
-
viewportHeight - viewportPaddingPx - minVisibleHeight,
|
|
72
|
-
);
|
|
73
|
-
return {
|
|
74
|
-
placement: 'side',
|
|
75
|
-
top,
|
|
76
|
-
left: triggerRect.right + anchorGapPx,
|
|
77
|
-
width,
|
|
78
|
-
maxHeight,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Align the panel's right edge toward the trigger's right, then clamp.
|
|
83
|
-
const left = clamp(
|
|
84
|
-
triggerRect.right - width,
|
|
85
|
-
viewportPaddingPx,
|
|
86
|
-
viewportWidth - viewportPaddingPx - width,
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
if (spaceBelow >= BELOW_MIN_SPACE_PX || spaceBelow >= spaceAbove) {
|
|
90
|
-
return {
|
|
91
|
-
placement: 'below',
|
|
92
|
-
top: triggerRect.bottom + anchorGapPx,
|
|
93
|
-
left,
|
|
94
|
-
width,
|
|
95
|
-
maxHeight,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const aboveHeight = Math.min(maxHeight, spaceAbove);
|
|
100
|
-
return {
|
|
101
|
-
placement: 'above',
|
|
102
|
-
top: triggerRect.top - anchorGapPx - aboveHeight,
|
|
103
|
-
left,
|
|
104
|
-
width,
|
|
105
|
-
maxHeight,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
1
|
+
export type AnchoredOverlayPlacement = 'side' | 'below' | 'above';
|
|
2
|
+
|
|
3
|
+
export interface MeasureAnchoredOverlayPanelOptions {
|
|
4
|
+
readonly panelWidthPx?: number;
|
|
5
|
+
readonly viewportPaddingPx?: number;
|
|
6
|
+
readonly anchorGapPx?: number;
|
|
7
|
+
readonly maxHeightRatio?: number;
|
|
8
|
+
readonly sidePreferTriggerLeftRatio?: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface AnchoredOverlayPanelRect {
|
|
12
|
+
readonly top: number;
|
|
13
|
+
readonly left: number;
|
|
14
|
+
readonly width: number;
|
|
15
|
+
readonly maxHeight: number;
|
|
16
|
+
readonly placement: AnchoredOverlayPlacement;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const DEFAULT_PANEL_WIDTH_PX = 360;
|
|
20
|
+
const DEFAULT_VIEWPORT_PADDING_PX = 8;
|
|
21
|
+
const DEFAULT_ANCHOR_GAP_PX = 6;
|
|
22
|
+
const DEFAULT_MAX_HEIGHT_RATIO = 0.72;
|
|
23
|
+
const DEFAULT_SIDE_PREFER_TRIGGER_LEFT_RATIO = 0.42;
|
|
24
|
+
/** Assumed minimum panel height when clamping side placement into the viewport. */
|
|
25
|
+
const SIDE_MIN_VISIBLE_HEIGHT_PX = 240;
|
|
26
|
+
/** Prefer below when at least this many pixels are available under the trigger. */
|
|
27
|
+
const BELOW_MIN_SPACE_PX = 12;
|
|
28
|
+
|
|
29
|
+
function clamp(value: number, min: number, max: number): number {
|
|
30
|
+
return Math.min(Math.max(value, min), max);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Measure a panel-sized overlay anchored to a trigger element.
|
|
35
|
+
* Prefers a side flyout when the trigger sits in the left portion of the
|
|
36
|
+
* viewport and there is room; otherwise places below or above.
|
|
37
|
+
*/
|
|
38
|
+
export function measureAnchoredOverlayPanel(
|
|
39
|
+
trigger: HTMLElement,
|
|
40
|
+
options: MeasureAnchoredOverlayPanelOptions = {},
|
|
41
|
+
): AnchoredOverlayPanelRect {
|
|
42
|
+
const panelWidthPx = options.panelWidthPx ?? DEFAULT_PANEL_WIDTH_PX;
|
|
43
|
+
const viewportPaddingPx = options.viewportPaddingPx ?? DEFAULT_VIEWPORT_PADDING_PX;
|
|
44
|
+
const anchorGapPx = options.anchorGapPx ?? DEFAULT_ANCHOR_GAP_PX;
|
|
45
|
+
const maxHeightRatio = options.maxHeightRatio ?? DEFAULT_MAX_HEIGHT_RATIO;
|
|
46
|
+
const sidePreferTriggerLeftRatio =
|
|
47
|
+
options.sidePreferTriggerLeftRatio ?? DEFAULT_SIDE_PREFER_TRIGGER_LEFT_RATIO;
|
|
48
|
+
|
|
49
|
+
const viewportWidth = window.innerWidth;
|
|
50
|
+
const viewportHeight = window.innerHeight;
|
|
51
|
+
const triggerRect = trigger.getBoundingClientRect();
|
|
52
|
+
|
|
53
|
+
const maxHeight = Math.min(
|
|
54
|
+
viewportHeight * maxHeightRatio,
|
|
55
|
+
viewportHeight - viewportPaddingPx * 2,
|
|
56
|
+
);
|
|
57
|
+
const width = Math.min(panelWidthPx, viewportWidth - viewportPaddingPx * 2);
|
|
58
|
+
|
|
59
|
+
const spaceRight = Math.max(0, viewportWidth - triggerRect.right - viewportPaddingPx);
|
|
60
|
+
const spaceBelow = Math.max(0, viewportHeight - triggerRect.bottom - viewportPaddingPx);
|
|
61
|
+
const spaceAbove = Math.max(0, triggerRect.top - viewportPaddingPx);
|
|
62
|
+
|
|
63
|
+
const preferSide =
|
|
64
|
+
triggerRect.left < sidePreferTriggerLeftRatio * viewportWidth && spaceRight >= width;
|
|
65
|
+
|
|
66
|
+
if (preferSide) {
|
|
67
|
+
const minVisibleHeight = Math.min(SIDE_MIN_VISIBLE_HEIGHT_PX, maxHeight);
|
|
68
|
+
const top = clamp(
|
|
69
|
+
triggerRect.top,
|
|
70
|
+
viewportPaddingPx,
|
|
71
|
+
viewportHeight - viewportPaddingPx - minVisibleHeight,
|
|
72
|
+
);
|
|
73
|
+
return {
|
|
74
|
+
placement: 'side',
|
|
75
|
+
top,
|
|
76
|
+
left: triggerRect.right + anchorGapPx,
|
|
77
|
+
width,
|
|
78
|
+
maxHeight,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Align the panel's right edge toward the trigger's right, then clamp.
|
|
83
|
+
const left = clamp(
|
|
84
|
+
triggerRect.right - width,
|
|
85
|
+
viewportPaddingPx,
|
|
86
|
+
viewportWidth - viewportPaddingPx - width,
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
if (spaceBelow >= BELOW_MIN_SPACE_PX || spaceBelow >= spaceAbove) {
|
|
90
|
+
return {
|
|
91
|
+
placement: 'below',
|
|
92
|
+
top: triggerRect.bottom + anchorGapPx,
|
|
93
|
+
left,
|
|
94
|
+
width,
|
|
95
|
+
maxHeight,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const aboveHeight = Math.min(maxHeight, spaceAbove);
|
|
100
|
+
return {
|
|
101
|
+
placement: 'above',
|
|
102
|
+
top: triggerRect.top - anchorGapPx - aboveHeight,
|
|
103
|
+
left,
|
|
104
|
+
width,
|
|
105
|
+
maxHeight,
|
|
106
|
+
};
|
|
107
|
+
}
|
package/src/overlay/overlay.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/* Overlay surfaces */
|
|
2
|
-
@import './context-menu.css';
|
|
1
|
+
/* Overlay surfaces */
|
|
2
|
+
@import './context-menu.css';
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
export interface PointerPassthroughPort {
|
|
2
|
-
setPointerPassthrough(enabled: boolean): void | Promise<void>;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export interface PointerOverHitRegionOptions {
|
|
6
|
-
readonly hitSelectors: readonly string[];
|
|
7
|
-
readonly controlSelectors?: readonly string[];
|
|
8
|
-
readonly root?: HTMLElement | null;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Returns true when `target` matches any host-provided hit/control selector
|
|
13
|
-
* (and, when `root` is set, lies inside that root).
|
|
14
|
-
*/
|
|
15
|
-
export function isPointerOverHitRegion(
|
|
16
|
-
target: EventTarget | null,
|
|
17
|
-
options: PointerOverHitRegionOptions,
|
|
18
|
-
): boolean {
|
|
19
|
-
if (!(target instanceof Element)) {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const root = options.root ?? null;
|
|
24
|
-
if (root !== null && !root.contains(target)) {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const selectors = [...options.hitSelectors, ...(options.controlSelectors ?? [])];
|
|
29
|
-
for (const selector of selectors) {
|
|
30
|
-
if (selector.length === 0) {
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
if (target.closest(selector) !== null) {
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface PointerPassthroughControllerOptions extends PointerOverHitRegionOptions {
|
|
41
|
-
readonly enabled: boolean;
|
|
42
|
-
readonly port: PointerPassthroughPort;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface PointerPassthroughController {
|
|
46
|
-
handlePointerTarget(target: EventTarget | null): void;
|
|
47
|
-
/** Force the next decision to notify the port even if unchanged. */
|
|
48
|
-
reset(): void;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Pure controller for overlay click-through: when the pointer is outside
|
|
53
|
-
* host-provided selectors, ask the port to enable passthrough.
|
|
54
|
-
* Pair with platform `applyWindowResidency(..., 'click-through')` on the main side.
|
|
55
|
-
*/
|
|
56
|
-
export function createPointerPassthroughController(
|
|
57
|
-
options: PointerPassthroughControllerOptions,
|
|
58
|
-
): PointerPassthroughController {
|
|
59
|
-
let lastPassthrough: boolean | null = null;
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
reset() {
|
|
63
|
-
lastPassthrough = null;
|
|
64
|
-
},
|
|
65
|
-
handlePointerTarget(target: EventTarget | null) {
|
|
66
|
-
if (!options.enabled) {
|
|
67
|
-
if (lastPassthrough !== false) {
|
|
68
|
-
lastPassthrough = false;
|
|
69
|
-
void options.port.setPointerPassthrough(false);
|
|
70
|
-
}
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const overHit = isPointerOverHitRegion(target, options);
|
|
75
|
-
const passthrough = !overHit;
|
|
76
|
-
if (passthrough === lastPassthrough) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
lastPassthrough = passthrough;
|
|
80
|
-
void options.port.setPointerPassthrough(passthrough);
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
}
|
|
1
|
+
export interface PointerPassthroughPort {
|
|
2
|
+
setPointerPassthrough(enabled: boolean): void | Promise<void>;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export interface PointerOverHitRegionOptions {
|
|
6
|
+
readonly hitSelectors: readonly string[];
|
|
7
|
+
readonly controlSelectors?: readonly string[];
|
|
8
|
+
readonly root?: HTMLElement | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Returns true when `target` matches any host-provided hit/control selector
|
|
13
|
+
* (and, when `root` is set, lies inside that root).
|
|
14
|
+
*/
|
|
15
|
+
export function isPointerOverHitRegion(
|
|
16
|
+
target: EventTarget | null,
|
|
17
|
+
options: PointerOverHitRegionOptions,
|
|
18
|
+
): boolean {
|
|
19
|
+
if (!(target instanceof Element)) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const root = options.root ?? null;
|
|
24
|
+
if (root !== null && !root.contains(target)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const selectors = [...options.hitSelectors, ...(options.controlSelectors ?? [])];
|
|
29
|
+
for (const selector of selectors) {
|
|
30
|
+
if (selector.length === 0) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (target.closest(selector) !== null) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface PointerPassthroughControllerOptions extends PointerOverHitRegionOptions {
|
|
41
|
+
readonly enabled: boolean;
|
|
42
|
+
readonly port: PointerPassthroughPort;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface PointerPassthroughController {
|
|
46
|
+
handlePointerTarget(target: EventTarget | null): void;
|
|
47
|
+
/** Force the next decision to notify the port even if unchanged. */
|
|
48
|
+
reset(): void;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Pure controller for overlay click-through: when the pointer is outside
|
|
53
|
+
* host-provided selectors, ask the port to enable passthrough.
|
|
54
|
+
* Pair with platform `applyWindowResidency(..., 'click-through')` on the main side.
|
|
55
|
+
*/
|
|
56
|
+
export function createPointerPassthroughController(
|
|
57
|
+
options: PointerPassthroughControllerOptions,
|
|
58
|
+
): PointerPassthroughController {
|
|
59
|
+
let lastPassthrough: boolean | null = null;
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
reset() {
|
|
63
|
+
lastPassthrough = null;
|
|
64
|
+
},
|
|
65
|
+
handlePointerTarget(target: EventTarget | null) {
|
|
66
|
+
if (!options.enabled) {
|
|
67
|
+
if (lastPassthrough !== false) {
|
|
68
|
+
lastPassthrough = false;
|
|
69
|
+
void options.port.setPointerPassthrough(false);
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const overHit = isPointerOverHitRegion(target, options);
|
|
75
|
+
const passthrough = !overHit;
|
|
76
|
+
if (passthrough === lastPassthrough) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
lastPassthrough = passthrough;
|
|
80
|
+
void options.port.setPointerPassthrough(passthrough);
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|