@workbench-kit/react 0.0.2-prototype.0.2.2 → 0.0.2-prototype.0.2.20

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.
Files changed (169) hide show
  1. package/README.md +125 -0
  2. package/package.json +27 -20
  3. package/src/index.ts +60 -29
  4. package/src/jdw/JsonCodeEditorPane.tsx +7 -6
  5. package/src/jdw/builtins/renderBuiltinWidgetLeaf.tsx +1 -3
  6. package/src/jdw/createBuiltinJdwRegistry.ts +1 -4
  7. package/src/jdw/cssRenderBackend.tsx +1 -4
  8. package/src/json-config/JsonConfigWorkbench.tsx +1 -1
  9. package/src/layout/index.ts +11 -0
  10. package/src/layout/sidebar/SideBarTree.tsx +301 -0
  11. package/src/layout/sidebar/SidebarActionIconBar.tsx +3 -3
  12. package/src/layout/sidebar/WorkbenchSidebarActions.tsx +1 -1
  13. package/src/layout/sidebar/index.ts +13 -0
  14. package/src/modal/Modal.tsx +55 -25
  15. package/src/modal/ModalTitlebar.tsx +8 -8
  16. package/src/modal/modalPosition.ts +3 -6
  17. package/src/modal/useModalFocusTrap.ts +142 -0
  18. package/src/modal/useModalWindowFrame.ts +2 -2
  19. package/src/overlay/ContextMenu.tsx +112 -5
  20. package/src/overlay/context-menu.css +4 -2
  21. package/src/overlay/measureAnchoredOverlayPanel.ts +4 -6
  22. package/src/overlay/usePointerPassthroughRegion.ts +2 -0
  23. package/src/primitives/absolute-box/AbsoluteBox.tsx +4 -4
  24. package/src/primitives/button/Button.tsx +4 -4
  25. package/src/primitives/catalog-browse-card/CatalogBrowseCard.tsx +6 -6
  26. package/src/primitives/catalog-browse-pane/CatalogBrowsePane.tsx +15 -15
  27. package/src/primitives/catalog-filter-overlay/CatalogFilterOverlay.tsx +2 -2
  28. package/src/primitives/checkbox/Checkbox.tsx +1 -1
  29. package/src/primitives/chip/Chip.tsx +2 -2
  30. package/src/primitives/codicon/Codicon.tsx +1 -1
  31. package/src/primitives/file-icon/FileIcon.tsx +1 -1
  32. package/src/primitives/icon-button/IconButton.tsx +1 -1
  33. package/src/primitives/index.ts +5 -0
  34. package/src/primitives/library-detail-layout/LibraryDetailLayout.tsx +123 -9
  35. package/src/primitives/library-detail-layout/index.ts +5 -0
  36. package/src/primitives/library-detail-layout/library-detail-layout.css +57 -0
  37. package/src/primitives/library-detail-layout/resolve-hero-cover-media.ts +80 -0
  38. package/src/primitives/library-facet-filter-panel/LibraryFacetFilterPanel.tsx +12 -12
  39. package/src/primitives/library-facet-filter-strip/LibraryFacetFilterStrip.tsx +4 -4
  40. package/src/primitives/number-input/NumberInput.tsx +5 -5
  41. package/src/primitives/record-media-hero/RecordMediaHero.tsx +10 -6
  42. package/src/primitives/scroll-area/ScrollArea.tsx +5 -5
  43. package/src/primitives/scroll-area-infinite-load/useScrollAreaInfiniteLoad.ts +5 -5
  44. package/src/primitives/searchable-multi-select/SearchableMultiSelect.tsx +7 -7
  45. package/src/primitives/select/Select.tsx +1 -13
  46. package/src/primitives/text-area/TextArea.tsx +1 -1
  47. package/src/primitives/text-input/TextInput.tsx +1 -1
  48. package/src/primitives/workbench-media-slot/WorkbenchMediaPlaceholder.tsx +2 -2
  49. package/src/primitives/workbench-media-slot/WorkbenchMediaSlot.tsx +16 -10
  50. package/src/primitives/workbench-thumbnail/WorkbenchThumbnail.tsx +4 -4
  51. package/src/styles.css +1 -2
  52. package/src/test-utils/workbenchMonacoMock.tsx +20 -0
  53. package/src/utils/clamp.ts +4 -0
  54. package/src/utils/normalizeKeyToken.ts +13 -0
  55. package/src/utils/readNumber.ts +4 -0
  56. package/src/widget-tree/WidgetTreeCanvasPreview.tsx +1 -4
  57. package/src/widget-tree/WidgetTreeWorkspaceShell.tsx +2 -2
  58. package/src/workbench/chat/ChatCommandProposalCard.tsx +4 -4
  59. package/src/workbench/chat/ChatConversationBar.tsx +3 -3
  60. package/src/workbench/chat/ChatHistoryMenu.tsx +1 -1
  61. package/src/workbench/chat/ChatMessageCollapsible.tsx +4 -0
  62. package/src/workbench/chat/ChatMessageItem.tsx +68 -10
  63. package/src/workbench/chat/ChatMessageList.tsx +1 -1
  64. package/src/workbench/chat/ChatPanel.tsx +32 -23
  65. package/src/workbench/chat/ChatPhasedRunProgress.tsx +86 -13
  66. package/src/workbench/chat/ChatRenameDialog.tsx +1 -1
  67. package/src/workbench/chat/chat-conversation.css +2 -2
  68. package/src/workbench/chat/chat-ui.css +8 -0
  69. package/src/workbench/chat/chatConversation.ts +2 -2
  70. package/src/workbench/chat/chatMessageMeta.tsx +4 -4
  71. package/src/workbench/chat/index.ts +1 -0
  72. package/src/workbench/chat/types.ts +7 -7
  73. package/src/workbench/chat/useCancelRuntimeOnUnmount.ts +4 -4
  74. package/src/workbench/chat/useChatPrependPagination.ts +10 -10
  75. package/src/workbench/chat/useSlashCommandSuggest.ts +1 -1
  76. package/src/workbench/{WorkbenchModalPortal.tsx → chrome/WorkbenchModalPortal.tsx} +1 -1
  77. package/src/workbench/chrome/workbench-chrome.css +4 -0
  78. package/src/workbench/{CommandGroupShell.tsx → commands/CommandGroupShell.tsx} +2 -2
  79. package/src/workbench/{CommandList.tsx → commands/CommandList.tsx} +5 -5
  80. package/src/workbench/{CommandPalette.tsx → commands/CommandPalette.tsx} +16 -42
  81. package/src/workbench/{ConfirmationFlow.tsx → commands/ConfirmationFlow.tsx} +5 -5
  82. package/src/workbench/{ShortcutCommandBridge.tsx → commands/ShortcutCommandBridge.tsx} +1 -13
  83. package/src/workbench/commands/WorkbenchQuickOpen.tsx +462 -0
  84. package/src/workbench/{command-model.ts → commands/command-model.ts} +5 -1
  85. package/src/workbench/commands/command-ui.ts +3 -0
  86. package/src/workbench/{commands.ts → commands/commands.ts} +1 -1
  87. package/src/workbench/commands/createWorkspaceFilesQuickOpenProvider.ts +86 -0
  88. package/src/workbench/commands/quick-open-model.ts +66 -0
  89. package/src/workbench/{WorkbenchEditorTabs.tsx → editor/WorkbenchEditorTabs.tsx} +1 -1
  90. package/src/workbench/{editor-tabs-dnd.ts → editor/editor-tabs-dnd.ts} +1 -1
  91. package/src/workbench/{editorTabContextMenu.ts → editor/editorTabContextMenu.ts} +2 -2
  92. package/src/workbench/{useEditorTabsStripDnd.ts → editor/useEditorTabsStripDnd.ts} +1 -1
  93. package/src/workbench/{useWorkbenchEditorTabContextMenu.tsx → editor/useWorkbenchEditorTabContextMenu.tsx} +1 -1
  94. package/src/workbench/editor-tabs/index.ts +9 -9
  95. package/src/workbench/index.ts +110 -74
  96. package/src/workbench/management/ExtensionManagementPanel.tsx +32 -36
  97. package/src/workbench/management/ExtensionManagementSidebar.tsx +19 -35
  98. package/src/workbench/management/IntegrationSettingsSurface.tsx +2 -5
  99. package/src/workbench/management/IntegrationsShell.tsx +1 -1
  100. package/src/workbench/management/KeybindingCaptureField.tsx +1 -9
  101. package/src/workbench/management/WorkbenchDialogFrame.tsx +2 -2
  102. package/src/workbench/management/WorkbenchNotice.tsx +2 -5
  103. package/src/workbench/management/createWorkbenchNotify.tsx +88 -0
  104. package/src/workbench/management/extension-install-approval.ts +72 -0
  105. package/src/workbench/management/extension-management-filters.ts +38 -0
  106. package/src/workbench/management/index.ts +14 -0
  107. package/src/workbench/management/management.css +28 -0
  108. package/src/workbench/management/types.ts +14 -1
  109. package/src/workbench/management/useWorkbenchNotify.ts +10 -0
  110. package/src/workbench/{MarkdownPreview.tsx → markdown/MarkdownPreview.tsx} +22 -7
  111. package/src/workbench/markdown/markdownRemarkPlugins.ts +12 -0
  112. package/src/workbench/markdown/sanitizeMarkdownHref.ts +29 -0
  113. package/src/workbench/settings/StructuredDataForm.tsx +1 -4
  114. package/src/workbench/settings/structuredDataFormModel.ts +2 -1
  115. package/src/workbench/{ActivityBar.tsx → shell/ActivityBar.tsx} +8 -8
  116. package/src/workbench/{ArtifactShell.tsx → shell/ArtifactShell.tsx} +25 -25
  117. package/src/workbench/{SplitView.tsx → shell/SplitView.tsx} +3 -3
  118. package/src/workbench/{StatusBar.tsx → shell/StatusBar.tsx} +8 -8
  119. package/src/workbench/{StructuredArtifactEditor.tsx → shell/StructuredArtifactEditor.tsx} +9 -9
  120. package/src/workbench/{Timeline.tsx → shell/Timeline.tsx} +77 -20
  121. package/src/workbench/{WorkbenchCanvasShell.defaults.ts → shell/WorkbenchCanvasShell.defaults.ts} +1 -1
  122. package/src/workbench/{WorkbenchCanvasShell.model.ts → shell/WorkbenchCanvasShell.model.ts} +5 -5
  123. package/src/workbench/{WorkbenchCanvasShell.tsx → shell/WorkbenchCanvasShell.tsx} +6 -6
  124. package/src/workbench/{WorkbenchDesktopTitleBar.tsx → shell/WorkbenchDesktopTitleBar.tsx} +15 -15
  125. package/src/workbench/{WorkbenchShell.tsx → shell/WorkbenchShell.tsx} +45 -6
  126. package/src/workbench/{WorkbenchShellTitleBarLayoutControls.tsx → shell/WorkbenchShellTitleBarLayoutControls.tsx} +16 -19
  127. package/src/workbench/{WorkbenchStandaloneShell.tsx → shell/WorkbenchStandaloneShell.tsx} +4 -4
  128. package/src/workbench/{WorkbenchViewEditor.tsx → shell/WorkbenchViewEditor.tsx} +7 -7
  129. package/src/workbench/{WorkbenchViewSidebar.tsx → shell/WorkbenchViewSidebar.tsx} +7 -7
  130. package/src/workbench/{WorkbenchWindowChromeControls.tsx → shell/WorkbenchWindowChromeControls.tsx} +18 -15
  131. package/src/workbench/shell/activity-bar.css +47 -0
  132. package/src/workbench/{shell.ts → shell/shell.ts} +18 -12
  133. package/src/workbench/{shellViewModel.ts → shell/shellViewModel.ts} +3 -3
  134. package/src/workbench/{standalone.ts → shell/standalone.ts} +14 -2
  135. package/src/workbench/{useDeferredWorkbenchMount.ts → shell/useDeferredWorkbenchMount.ts} +3 -3
  136. package/src/workbench/{useWorkbenchAppearanceDocumentSync.tsx → shell/useWorkbenchAppearanceDocumentSync.tsx} +1 -1
  137. package/src/workbench/{useWorkbenchSidebarActionBarDnd.ts → shell/useWorkbenchSidebarActionBarDnd.ts} +1 -1
  138. package/src/workbench/{useWorkbenchSidebarViewPlacementDropZone.ts → shell/useWorkbenchSidebarViewPlacementDropZone.ts} +2 -2
  139. package/src/workbench/{workbenchViewRouteState.ts → shell/workbenchViewRouteState.ts} +4 -4
  140. package/src/workbench/{WorkbenchThemeProvider.tsx → theme/WorkbenchThemeProvider.tsx} +4 -4
  141. package/src/workbench/{theme.ts → theme/theme.ts} +1 -1
  142. package/src/workbench/{themePresets.ts → theme/themePresets.ts} +3 -2
  143. package/src/workbench/views/view-hosts.css +3 -3
  144. package/src/workbench/workspace/WorkspaceEditorPanel.tsx +1 -1
  145. package/src/workbench/workspace/WorkspaceExplorer.tsx +104 -3
  146. package/src/workbench/workspace/workspaceExplorerKeyboard.ts +109 -0
  147. package/src/workbench/workspace/workspaceJsonDiagnostics.ts +6 -5
  148. package/src/workbench/jdw/jdw-editors.css +0 -4
  149. package/src/workbench/jdw/jdw.css +0 -2
  150. package/src/workbench/markdownRemarkPlugins.ts +0 -4
  151. package/src/workbench/workbench-chrome.css +0 -4
  152. /package/src/workbench/{WorkbenchPlatformContext.tsx → chrome/WorkbenchPlatformContext.tsx} +0 -0
  153. /package/src/workbench/{workbenchModalViewState.ts → chrome/workbenchModalViewState.ts} +0 -0
  154. /package/src/workbench/{workbenchOverlaysContext.tsx → chrome/workbenchOverlaysContext.tsx} +0 -0
  155. /package/src/workbench/{workbenchPlatformChrome.ts → chrome/workbenchPlatformChrome.ts} +0 -0
  156. /package/src/workbench/{command-execution-policy.ts → commands/command-execution-policy.ts} +0 -0
  157. /package/src/workbench/{keyboard.ts → commands/keyboard.ts} +0 -0
  158. /package/src/workbench/{workbenchContextMenu.ts → commands/workbenchContextMenu.ts} +0 -0
  159. /package/src/workbench/{activityBarOrder.ts → shell/activityBarOrder.ts} +0 -0
  160. /package/src/workbench/{appearanceLabels.ts → shell/appearanceLabels.ts} +0 -0
  161. /package/src/workbench/{hardReset.ts → shell/hardReset.ts} +0 -0
  162. /package/src/workbench/{shellPresets.ts → shell/shellPresets.ts} +0 -0
  163. /package/src/workbench/{shellState.ts → shell/shellState.ts} +0 -0
  164. /package/src/workbench/{sidebarViewPlacementDnd.ts → shell/sidebarViewPlacementDnd.ts} +0 -0
  165. /package/src/workbench/{status.ts → shell/status.ts} +0 -0
  166. /package/src/workbench/{useWorkbenchSidebarLayout.tsx → shell/useWorkbenchSidebarLayout.tsx} +0 -0
  167. /package/src/workbench/{useWorkbenchStandaloneShellStateSync.tsx → shell/useWorkbenchStandaloneShellStateSync.tsx} +0 -0
  168. /package/src/workbench/{workbenchSidebarLayoutContext.ts → shell/workbenchSidebarLayoutContext.ts} +0 -0
  169. /package/src/workbench/{workbenchStandaloneShellReactContext.tsx → shell/workbenchStandaloneShellReactContext.tsx} +0 -0
package/README.md ADDED
@@ -0,0 +1,125 @@
1
+ # `@workbench-kit/react`
2
+
3
+ React primitives and workbench chrome for integrating hosts (browser, desktop
4
+ shells, and other React hosts).
5
+
6
+ Published on npm with the **`prototype`** dist tag.
7
+
8
+ ## Install
9
+
10
+ ```powershell
11
+ pnpm add @workbench-kit/react@prototype @workbench-kit/tokens@prototype
12
+ ```
13
+
14
+ Peer: React 19.
15
+
16
+ ## Styles
17
+
18
+ Import once at app entry:
19
+
20
+ ```ts
21
+ import '@workbench-kit/tokens/styles.css';
22
+ import '@workbench-kit/react/styles.css';
23
+ import '@workbench-kit/react/primitives.css';
24
+ ```
25
+
26
+ ## Quick start
27
+
28
+ ```tsx
29
+ import { WorkbenchShell } from '@workbench-kit/react/workbench/shell';
30
+
31
+ export function AppShell() {
32
+ return (
33
+ <div className="ui-workbench-host-root" style={{ height: '100vh' }}>
34
+ <WorkbenchShell
35
+ activityBar={{
36
+ items: [
37
+ { id: 'explorer', icon: <i className="codicon codicon-files" />, label: 'Explorer' },
38
+ ],
39
+ }}
40
+ rootClassName="ide-root"
41
+ secondaryArea={<main>Editor region</main>}
42
+ statusSections={[]}
43
+ />
44
+ </div>
45
+ );
46
+ }
47
+ ```
48
+
49
+ Full walkthrough: [Getting Started](../../docs/guides/getting-started.md).
50
+
51
+ ## Common subpaths
52
+
53
+ | Subpath | Purpose |
54
+ | ------------------------------------------ | --------------------------------------- |
55
+ | `@workbench-kit/react/primitives` | Buttons, editor chrome, library layouts |
56
+ | `@workbench-kit/react/workbench/shell` | Workbench shell / activity bar |
57
+ | `@workbench-kit/react/workbench/workspace` | Explorer, workspace editor panel |
58
+ | `@workbench-kit/react/workbench/chat` | Chat panel and message surfaces |
59
+ | `@workbench-kit/react/overlay` | Context menus, anchored overlays |
60
+ | `@workbench-kit/react/modal` | Low-level modal frame |
61
+ | `@workbench-kit/react/jdw` | JDW preview bridges |
62
+ | `@workbench-kit/react/styles.css` | Shell chrome CSS |
63
+
64
+ Import **only** through `exports`. Do not deep-import `src/` paths.
65
+
66
+ ## Quick Open providers
67
+
68
+ `WorkbenchQuickOpen` is a file/provider overlay distinct from the command palette.
69
+ Hosts (or `@workbench-kit/shell-react` `WorkbenchCommandHost`) pass pluggable
70
+ providers; the default workspace-files provider wraps
71
+ `searchWorkspaceFiles` from `@workbench-kit/workspace`.
72
+
73
+ ```ts
74
+ import {
75
+ WorkbenchQuickOpen,
76
+ createWorkspaceFilesQuickOpenProvider,
77
+ type QuickOpenProvider,
78
+ } from '@workbench-kit/react/workbench';
79
+
80
+ const providers: QuickOpenProvider[] = [
81
+ createWorkspaceFilesQuickOpenProvider({
82
+ files: workspaceFiles,
83
+ recentPaths: ['src/App.tsx'],
84
+ }),
85
+ ];
86
+ ```
87
+
88
+ Contract:
89
+
90
+ - `provider.search(query, { signal })` returns items (sync or `Promise`); the context is
91
+ optional so simple and existing single-provider implementations can keep a one-argument function
92
+ - Without `providerId`, providers search concurrently and contribute results as they settle;
93
+ final grouping is deterministic by declared provider order, then provider item order
94
+ - A rejected or slow provider does not block results from other providers; query/provider changes
95
+ abort the prior signal and late results are ignored
96
+ - `onProviderError` can observe an isolated provider failure without failing the whole search
97
+ - Every result shows its provider label, and selection reports the matching `providerId`
98
+ - Provider IDs are unique; item IDs only need to be stable within their provider
99
+ - Set `providerId` to restrict the overlay to one provider
100
+ - Empty query → all files, with optional `recentPaths` elevated first
101
+ - Enter selects the active item; Escape closes (modal focus trap)
102
+ - Shell default: Ctrl/Cmd+P opens Quick Open; Ctrl/Cmd+Shift+P opens the command palette
103
+
104
+ ## Learn more
105
+
106
+ | Doc | Purpose |
107
+ | ---------------------------------------------------------------------- | ----------------------------- |
108
+ | [Getting Started](../../docs/guides/getting-started.md) | Install + minimal shell |
109
+ | [Component Map](../../docs/guides/component-map.md) | Surface → Storybook / sample |
110
+ | [Sample Screens](../../docs/guides/sample-screens.md) | Example screen recipes |
111
+ | [Consumer Capabilities](../../docs/workbench/consumer-capabilities.md) | Props / when-to-use contracts |
112
+ | [API Reference](../../docs/guides/api-reference.md) | Package export index |
113
+
114
+ ## Local verification (this monorepo)
115
+
116
+ ```powershell
117
+ pnpm install
118
+ pnpm build:workbench-extensions
119
+ pnpm dev
120
+ pnpm dev:storybook
121
+ ```
122
+
123
+ Storybook stays a curated set of interaction stories — not a full package gallery.
124
+ Demo and story modules under this package are for development; published consumers
125
+ rely on the `exports` map and CSS entry points above.
package/package.json CHANGED
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "name": "@workbench-kit/react",
3
- "version": "0.0.2-prototype.0.2.2",
3
+ "version": "0.0.2-prototype.0.2.20",
4
4
  "private": false,
5
+ "sideEffects": [
6
+ "**/*.css"
7
+ ],
5
8
  "type": "module",
6
9
  "exports": {
7
10
  ".": "./src/index.ts",
@@ -20,17 +23,20 @@
20
23
  "./workbench/management": "./src/workbench/management/index.ts",
21
24
  "./workbench/settings": "./src/workbench/settings/index.ts",
22
25
  "./workbench": "./src/workbench/index.ts",
23
- "./workbench/activityBarOrder": "./src/workbench/activityBarOrder.ts",
24
- "./workbench/markdown-preview": "./src/workbench/MarkdownPreview.tsx",
25
- "./workbench/shell": "./src/workbench/shell.ts",
26
- "./workbench/theme-provider": "./src/workbench/WorkbenchThemeProvider.tsx",
27
- "./workbench/themePresets": "./src/workbench/themePresets.ts",
28
- "./workbench/split-view": "./src/workbench/SplitView.tsx",
26
+ "./workbench/activityBarOrder": "./src/workbench/shell/activityBarOrder.ts",
27
+ "./workbench/command-ui": "./src/workbench/commands/command-ui.ts",
28
+ "./workbench/markdown-preview": "./src/workbench/markdown/MarkdownPreview.tsx",
29
+ "./workbench/shell": "./src/workbench/shell/shell.ts",
30
+ "./workbench/standalone": "./src/workbench/shell/standalone.ts",
31
+ "./workbench/theme": "./src/workbench/theme/theme.ts",
32
+ "./workbench/theme-provider": "./src/workbench/theme/WorkbenchThemeProvider.tsx",
33
+ "./workbench/themePresets": "./src/workbench/theme/themePresets.ts",
34
+ "./workbench/split-view": "./src/workbench/shell/SplitView.tsx",
29
35
  "./workbench/workspace": "./src/workbench/workspace/index.ts",
30
36
  "./workbench/workspace/editor": "./src/workbench/workspace/WorkspaceEditor.tsx",
31
37
  "./workbench/workspace/explorer": "./src/workbench/workspace/WorkspaceExplorer.tsx",
32
38
  "./workbench/workspace/file-icon": "./src/icons/file-icon.ts",
33
- "./workbench/commands": "./src/workbench/commands.ts",
39
+ "./workbench/commands": "./src/workbench/commands/commands.ts",
34
40
  "./jdw": "./src/jdw/index.ts",
35
41
  "./jdw/document": "./src/jdw/document.ts",
36
42
  "./jdw/parse": "./src/jdw/parse.ts",
@@ -54,18 +60,18 @@
54
60
  "!src/**/*.stories.tsx"
55
61
  ],
56
62
  "dependencies": {
57
- "@dnd-kit/core": "^6.3.1",
58
63
  "@vscode/codicons": "^0.0.45",
59
64
  "remark-gfm": "^4.0.1",
60
- "@workbench-kit/adapters": "0.0.2-prototype.0.2.2",
61
- "@workbench-kit/contracts": "0.0.2-prototype.0.2.2",
62
- "@workbench-kit/jdw": "0.0.2-prototype.0.2.2",
63
- "@workbench-kit/monaco": "0.0.2-prototype.0.2.2",
64
- "@workbench-kit/services": "0.0.2-prototype.0.2.2",
65
- "@workbench-kit/platform": "0.0.2-prototype.0.2.2",
66
- "@workbench-kit/tokens": "0.0.2-prototype.0.2.2",
67
- "@workbench-kit/runtime": "0.0.2-prototype.0.2.2",
68
- "@workbench-kit/workspace": "0.0.2-prototype.0.2.2"
65
+ "rehype-sanitize": "^6.0.0",
66
+ "@workbench-kit/contracts": "0.0.2-prototype.0.2.20",
67
+ "@workbench-kit/platform": "0.0.2-prototype.0.2.20",
68
+ "@workbench-kit/jdw": "0.0.2-prototype.0.2.20",
69
+ "@workbench-kit/adapters": "0.0.2-prototype.0.2.20",
70
+ "@workbench-kit/monaco": "0.0.2-prototype.0.2.20",
71
+ "@workbench-kit/runtime": "0.0.2-prototype.0.2.20",
72
+ "@workbench-kit/services": "0.0.2-prototype.0.2.20",
73
+ "@workbench-kit/workspace": "0.0.2-prototype.0.2.20",
74
+ "@workbench-kit/tokens": "0.0.2-prototype.0.2.20"
69
75
  },
70
76
  "peerDependencies": {
71
77
  "react": "^19.0.0",
@@ -88,7 +94,8 @@
88
94
  "directory": "packages/react"
89
95
  },
90
96
  "scripts": {
91
- "test": "pnpm exec vitest run --config ../../vitest.config.ts src/widget-tree",
92
- "typecheck": "tsc -p tsconfig.json --noEmit"
97
+ "test": "pnpm exec vitest run --config ../../vitest.config.ts src",
98
+ "typecheck": "tsc -p tsconfig.json --noEmit",
99
+ "typecheck:exact-optional": "tsc -p typecheck-exact-optional/tsconfig.emit.json && tsc -p typecheck-exact-optional/tsconfig.json --noEmit"
93
100
  }
94
101
  }
package/src/index.ts CHANGED
@@ -20,7 +20,7 @@ export type {
20
20
  WorkbenchIconRenderProps,
21
21
  WorkbenchIconResolver,
22
22
  } from './icons';
23
- export { commandMenuItemsToContextMenuItems } from './workbench/commands';
23
+ export { commandMenuItemsToContextMenuItems } from './workbench/commands/commands';
24
24
  export {
25
25
  WorkbenchArtifactModeControls,
26
26
  WorkbenchArtifactPreview,
@@ -31,7 +31,7 @@ export {
31
31
  getWorkbenchPreviewRenderer,
32
32
  getWorkbenchPreviewRendererMatch,
33
33
  selectWorkbenchPreviewRenderer,
34
- } from './workbench/ArtifactShell';
34
+ } from './workbench/shell/ArtifactShell';
35
35
  export type {
36
36
  WorkbenchArtifactDescriptor,
37
37
  WorkbenchArtifactMode,
@@ -44,7 +44,7 @@ export type {
44
44
  WorkbenchPreviewRendererContext,
45
45
  WorkbenchPreviewRendererMatch,
46
46
  WorkbenchPreviewRendererMatchReason,
47
- } from './workbench/ArtifactShell';
47
+ } from './workbench/shell/ArtifactShell';
48
48
  export {
49
49
  WorkbenchCommandGroupShell,
50
50
  WorkbenchCommandList,
@@ -58,7 +58,16 @@ export {
58
58
  getWorkbenchCommandStatusLabel,
59
59
  groupWorkbenchCommands,
60
60
  isWorkbenchCommandRunnable,
61
- } from './workbench/CommandPalette';
61
+ } from './workbench/commands/CommandPalette';
62
+ export {
63
+ DEFAULT_QUICK_OPEN_SEARCH_DEBOUNCE_MS,
64
+ WORKSPACE_FILES_QUICK_OPEN_PROVIDER_ID,
65
+ WorkbenchQuickOpen,
66
+ createWorkspaceFilesQuickOpenProvider,
67
+ getNextQuickOpenItemIndex,
68
+ isQuickOpenItemSelectable,
69
+ resolveQuickOpenItemPath,
70
+ } from './workbench/commands/WorkbenchQuickOpen';
62
71
  export {
63
72
  WorkbenchShortcutCommandBridge,
64
73
  getWorkbenchShortcutCommandBindings,
@@ -66,7 +75,7 @@ export {
66
75
  matchesWorkbenchShortcut,
67
76
  runWorkbenchShortcutCommand,
68
77
  useWorkbenchShortcutCommands,
69
- } from './workbench/ShortcutCommandBridge';
78
+ } from './workbench/commands/ShortcutCommandBridge';
70
79
  export type {
71
80
  WorkbenchCommandDescriptor,
72
81
  WorkbenchCommandDescriptorOverrides,
@@ -86,7 +95,15 @@ export type {
86
95
  WorkbenchCommandSideEffect,
87
96
  WorkbenchCommandStatus,
88
97
  WorkbenchCommandSuggestProps,
89
- } from './workbench/CommandPalette';
98
+ } from './workbench/commands/CommandPalette';
99
+ export type {
100
+ CreateWorkspaceFilesQuickOpenProviderOptions,
101
+ QuickOpenItem,
102
+ QuickOpenProvider,
103
+ QuickOpenSearchContext,
104
+ QuickOpenSelectContext,
105
+ WorkbenchQuickOpenProps,
106
+ } from './workbench/commands/WorkbenchQuickOpen';
90
107
  export type {
91
108
  UseWorkbenchShortcutCommandsOptions,
92
109
  WorkbenchShortcutCommandBinding,
@@ -98,7 +115,7 @@ export type {
98
115
  WorkbenchShortcutEventLike,
99
116
  WorkbenchShortcutMatchInput,
100
117
  WorkbenchShortcutPlatform,
101
- } from './workbench/ShortcutCommandBridge';
118
+ } from './workbench/commands/ShortcutCommandBridge';
102
119
  export {
103
120
  WorkbenchConfirmationFlow,
104
121
  getWorkbenchConfirmationButtonVariant,
@@ -107,7 +124,7 @@ export {
107
124
  getWorkbenchConfirmationStatus,
108
125
  getWorkbenchConfirmationVariant,
109
126
  isWorkbenchConfirmationActionDisabled,
110
- } from './workbench/ConfirmationFlow';
127
+ } from './workbench/commands/ConfirmationFlow';
111
128
  export type {
112
129
  WorkbenchConfirmationAction,
113
130
  WorkbenchConfirmationCancelContext,
@@ -118,7 +135,7 @@ export type {
118
135
  WorkbenchConfirmationReason,
119
136
  WorkbenchConfirmationSideEffect,
120
137
  WorkbenchConfirmationVariant,
121
- } from './workbench/ConfirmationFlow';
138
+ } from './workbench/commands/ConfirmationFlow';
122
139
  export {
123
140
  WorkbenchAuthGate,
124
141
  WorkbenchLoginBrandMark,
@@ -161,7 +178,7 @@ export {
161
178
  getWorkbenchTimelineEventLabel,
162
179
  getWorkbenchTimelineEventStatus,
163
180
  getWorkbenchTimelineMetadataEntries,
164
- } from './workbench/Timeline';
181
+ } from './workbench/shell/Timeline';
165
182
  export type {
166
183
  WorkbenchTimelineEvent,
167
184
  WorkbenchTimelineEventKind,
@@ -173,7 +190,7 @@ export type {
173
190
  WorkbenchTimelineRenderMetadata,
174
191
  WorkbenchTimelineRenderPayload,
175
192
  WorkbenchTimelineVariant,
176
- } from './workbench/Timeline';
193
+ } from './workbench/shell/Timeline';
177
194
  export { ConfirmDialog } from './modal/ConfirmDialog';
178
195
  export type { ConfirmDialogProps } from './modal/ConfirmDialog';
179
196
  export { ContextMenu } from './overlay/ContextMenu';
@@ -216,12 +233,12 @@ export {
216
233
  isWorkbenchStatusDisabled,
217
234
  isWorkbenchStatusUnavailable,
218
235
  workbenchStatusFromLifecycleStatus,
219
- } from './workbench/status';
236
+ } from './workbench/shell/status';
220
237
  export type {
221
238
  WorkbenchStatus,
222
239
  WorkbenchStatusDescriptor,
223
240
  WorkbenchStatusVariant,
224
- } from './workbench/status';
241
+ } from './workbench/shell/status';
225
242
  export {
226
243
  FilterBar,
227
244
  FilterBarActiveChips,
@@ -276,6 +293,7 @@ export {
276
293
  SideBarHeaderControl,
277
294
  SideBarList,
278
295
  SideBarListItem,
296
+ SideBarTree,
279
297
  SideBarViewFrame,
280
298
  SideBarRow,
281
299
  SidebarActionIconBar,
@@ -286,12 +304,20 @@ export {
286
304
  WorkbenchSidebarSection,
287
305
  WorkbenchSidebarSectionHeader,
288
306
  WorkbenchSidebarSectionStack,
307
+ flattenVisibleSideBarTreeItems,
308
+ isSideBarTreeBranch,
309
+ selectSideBarTreeIds,
310
+ toggleSideBarTreeId,
289
311
  useSidebarSectionBaseDepth,
290
312
  } from './layout/sidebar';
291
313
  export type {
292
314
  SideBarHeaderControlProps,
293
315
  SideBarListItemProps,
294
316
  SideBarListProps,
317
+ SideBarTreeItem,
318
+ SideBarTreeProps,
319
+ SideBarTreeSelectionMode,
320
+ SideBarTreeVisibleNode,
295
321
  SideBarViewFrameProps,
296
322
  SideBarRowProps,
297
323
  SidebarActionIconBarProps,
@@ -567,7 +593,7 @@ export {
567
593
  StatusBar as WorkbenchStatusBar,
568
594
  StatusBarItem as WorkbenchStatusBarItem,
569
595
  StatusBarSection as WorkbenchStatusBarSection,
570
- } from './workbench/StatusBar';
596
+ } from './workbench/shell/StatusBar';
571
597
  export type {
572
598
  StatusBarItemModel as WorkbenchStatusBarItemModel,
573
599
  StatusBarItemProps as WorkbenchStatusBarItemProps,
@@ -575,7 +601,7 @@ export type {
575
601
  StatusBarSectionAlign as WorkbenchStatusBarSectionAlign,
576
602
  StatusBarSectionModel as WorkbenchStatusBarSectionModel,
577
603
  StatusBarSectionProps as WorkbenchStatusBarSectionProps,
578
- } from './workbench/StatusBar';
604
+ } from './workbench/shell/StatusBar';
579
605
  export { AbsoluteBox } from './primitives';
580
606
  export type { AbsoluteBoxProps, WorkbenchRect } from './primitives';
581
607
  export { Badge } from './primitives';
@@ -643,8 +669,13 @@ export type {
643
669
  } from './primitives';
644
670
  export { CatalogFilterOverlay } from './primitives';
645
671
  export type { CatalogFilterOverlayProps } from './primitives';
646
- export { LibraryDetailLayout } from './primitives';
647
- export type { LibraryDetailLayoutMode, LibraryDetailLayoutProps } from './primitives';
672
+ export { LibraryDetailLayout, resolveLibraryDetailHeroCoverMedia } from './primitives';
673
+ export type {
674
+ LibraryDetailLayoutMode,
675
+ LibraryDetailLayoutProps,
676
+ ResolveLibraryDetailHeroCoverMediaInput,
677
+ ResolvedLibraryDetailHeroCoverMedia,
678
+ } from './primitives';
648
679
  export { WorkbenchMediaPlaceholder } from './primitives';
649
680
  export type { WorkbenchMediaPlaceholderProps } from './primitives';
650
681
  export { WorkbenchMediaSlot } from './primitives';
@@ -685,8 +716,8 @@ export type {
685
716
  WorkspaceDraftsContextValue,
686
717
  WorkspaceDraftsProviderProps,
687
718
  } from './workbench/workspace/WorkspaceDraftsContext';
688
- export { StructuredArtifactEditor } from './workbench/StructuredArtifactEditor';
689
- export type { StructuredArtifactEditorProps } from './workbench/StructuredArtifactEditor';
719
+ export { StructuredArtifactEditor } from './workbench/shell/StructuredArtifactEditor';
720
+ export type { StructuredArtifactEditorProps } from './workbench/shell/StructuredArtifactEditor';
690
721
  export { createStringDragMime, createTypedDragMime } from './utils/dragMime';
691
722
  export type { TypedDragMime, TypedDragMimeOptions } from './utils/dragMime';
692
723
  export {
@@ -698,29 +729,29 @@ export {
698
729
  readEditorTabDragPayload,
699
730
  resolveEditorTabDropTarget,
700
731
  resolveEditorTabStripDropTarget,
701
- } from './workbench/editor-tabs-dnd';
702
- export type { EditorTabDragPayload, EditorTabDropTarget } from './workbench/editor-tabs-dnd';
703
- export { useEditorTabsStripDnd } from './workbench/useEditorTabsStripDnd';
732
+ } from './workbench/editor/editor-tabs-dnd';
733
+ export type { EditorTabDragPayload, EditorTabDropTarget } from './workbench/editor/editor-tabs-dnd';
734
+ export { useEditorTabsStripDnd } from './workbench/editor/useEditorTabsStripDnd';
704
735
  export type {
705
736
  UseEditorTabsStripDndOptions,
706
737
  UseEditorTabsStripDndResult,
707
- } from './workbench/useEditorTabsStripDnd';
708
- export { WorkbenchEditorTabs } from './workbench/WorkbenchEditorTabs';
709
- export type { WorkbenchEditorTabsProps } from './workbench/WorkbenchEditorTabs';
738
+ } from './workbench/editor/useEditorTabsStripDnd';
739
+ export { WorkbenchEditorTabs } from './workbench/editor/WorkbenchEditorTabs';
740
+ export type { WorkbenchEditorTabsProps } from './workbench/editor/WorkbenchEditorTabs';
710
741
  export {
711
742
  createWorkbenchStandaloneEditorTabCommandContext,
712
743
  createWorkbenchStandaloneEditorTabContextMenuItems,
713
744
  isWorkbenchEditorTabClosable,
714
- } from './workbench/editorTabContextMenu';
745
+ } from './workbench/editor/editorTabContextMenu';
715
746
  export type {
716
747
  CreateWorkbenchStandaloneEditorTabCommandContextInput,
717
748
  WorkbenchStandaloneEditorTabLike,
718
- } from './workbench/editorTabContextMenu';
719
- export { useWorkbenchEditorTabContextMenu } from './workbench/useWorkbenchEditorTabContextMenu';
749
+ } from './workbench/editor/editorTabContextMenu';
750
+ export { useWorkbenchEditorTabContextMenu } from './workbench/editor/useWorkbenchEditorTabContextMenu';
720
751
  export type {
721
752
  UseWorkbenchEditorTabContextMenuOptions,
722
753
  UseWorkbenchEditorTabContextMenuResult,
723
- } from './workbench/useWorkbenchEditorTabContextMenu';
754
+ } from './workbench/editor/useWorkbenchEditorTabContextMenu';
724
755
  export {
725
756
  clampPreviewViewportZoom,
726
757
  computePreviewViewportFitScale,
@@ -20,7 +20,7 @@ import {
20
20
  StatusBar as WorkbenchStatusBar,
21
21
  StatusBarItem as WorkbenchStatusBarItem,
22
22
  StatusBarSection as WorkbenchStatusBarSection,
23
- } from '../workbench/StatusBar';
23
+ } from '../workbench/shell/StatusBar';
24
24
  import { WorkspaceEditor, type WorkspaceEditorTheme } from '../workbench/workspace/WorkspaceEditor';
25
25
  import type { WorkspaceFile } from '../workbench/workspace/types';
26
26
 
@@ -245,11 +245,12 @@ export function JsonCodeEditorPane({
245
245
  const configureJsonSchema = (monaco: WorkbenchMonaco, path: string) => {
246
246
  if (!jsonSchema) return;
247
247
 
248
- const jsonDefaults = (
249
- monaco.languages.json as unknown as {
250
- jsonDefaults?: { setDiagnosticsOptions: (options: unknown) => void };
251
- }
252
- ).jsonDefaults;
248
+ const jsonLanguage = monaco.languages.json as unknown as
249
+ | {
250
+ jsonDefaults?: { setDiagnosticsOptions: (options: unknown) => void };
251
+ }
252
+ | undefined;
253
+ const jsonDefaults = jsonLanguage?.jsonDefaults;
253
254
  if (!jsonDefaults) return;
254
255
 
255
256
  jsonDefaults.setDiagnosticsOptions({
@@ -1,9 +1,7 @@
1
1
  import { createElement, type CSSProperties, type ReactNode } from 'react';
2
2
  import type { GenericWidget } from '@workbench-kit/jdw';
3
3
 
4
- function readNumber(value: unknown): number | undefined {
5
- return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
6
- }
4
+ import { readNumber } from '../../utils/readNumber';
7
5
 
8
6
  function readString(value: unknown): string | undefined {
9
7
  return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
@@ -10,6 +10,7 @@ import {
10
10
  type GenericWidget,
11
11
  } from '@workbench-kit/jdw';
12
12
 
13
+ import { readNumber } from '../utils/readNumber';
13
14
  import { renderBuiltinWidgetLeaf } from './builtins/renderBuiltinWidgetLeaf.js';
14
15
 
15
16
  const LAYOUT_INSPECTOR = [
@@ -73,10 +74,6 @@ function build(widget: WidgetTypeShape) {
73
74
  return renderBuiltinWidgetLeaf(widget as GenericWidget);
74
75
  }
75
76
 
76
- function readNumber(value: unknown): number | undefined {
77
- return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
78
- }
79
-
80
77
  function readString(value: unknown): string | undefined {
81
78
  return typeof value === 'string' && value.trim().length > 0 ? value : undefined;
82
79
  }
@@ -22,6 +22,7 @@ import {
22
22
  type WidgetPath,
23
23
  } from '@workbench-kit/jdw';
24
24
 
25
+ import { readNumber } from '../utils/readNumber';
25
26
  import { renderBuiltinWidgetLeaf } from './builtins/renderBuiltinWidgetLeaf.js';
26
27
  import { BUILTIN_JDW_REGISTRY } from './createBuiltinJdwRegistry.js';
27
28
  export interface CssRenderBackendOptions {
@@ -45,10 +46,6 @@ const LAYOUT_CONTAINER_TYPES = new Set([
45
46
  'sized_box',
46
47
  ]);
47
48
 
48
- function readNumber(value: unknown): number | undefined {
49
- return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
50
- }
51
-
52
49
  function renderFromRegistry(
53
50
  registry: WidgetRegistryContract<unknown>,
54
51
  widget: GenericWidget,
@@ -9,7 +9,7 @@ import { IconButton } from '../primitives/icon-button';
9
9
  import { Toolbar } from '../primitives/toolbar';
10
10
  import { JsonCodeEditorPane, JsonConfigValidationBanner } from '../jdw/JsonCodeEditorPane.js';
11
11
  import { JdwPreview } from '../jdw/JdwPreview.js';
12
- import { SplitView } from '../workbench/SplitView';
12
+ import { SplitView } from '../workbench/shell/SplitView';
13
13
  import { WorkbenchStructuredDataSchemaPanel } from '../workbench/settings/StructuredDataSchemaPanel';
14
14
  import { type WorkbenchStructuredDataSchemaDocument } from '../workbench/settings/StructuredDataForm';
15
15
  import { type WorkspaceEditorTheme } from '../workbench/workspace/WorkspaceEditor';
@@ -56,6 +56,7 @@ export {
56
56
  SideBarListItem,
57
57
  SideBarRow,
58
58
  SideBarScrollSpacer,
59
+ SideBarTree,
59
60
  SideBarViewFrame,
60
61
  SideBarViewTabStrip,
61
62
  SideBarViewTitleMenu,
@@ -68,7 +69,11 @@ export {
68
69
  WorkbenchSidebarSection,
69
70
  WorkbenchSidebarSectionHeader,
70
71
  WorkbenchSidebarSectionStack,
72
+ flattenVisibleSideBarTreeItems,
73
+ isSideBarTreeBranch,
74
+ selectSideBarTreeIds,
71
75
  sideBarTreeDepthStyle,
76
+ toggleSideBarTreeId,
72
77
  useSidebarSectionBaseDepth,
73
78
  } from './sidebar';
74
79
  export type {
@@ -77,6 +82,10 @@ export type {
77
82
  SideBarListProps,
78
83
  SideBarRowProps,
79
84
  SideBarScrollSpacerProps,
85
+ SideBarTreeItem,
86
+ SideBarTreeProps,
87
+ SideBarTreeSelectionMode,
88
+ SideBarTreeVisibleNode,
80
89
  SideBarViewFrameProps,
81
90
  SideBarViewTabDescriptor,
82
91
  SideBarViewTabStripProps,
@@ -142,6 +151,8 @@ export type {
142
151
  } from './propertyFieldFilter';
143
152
  export { WorkbenchMediaPreviewViewport } from './WorkbenchMediaPreviewViewport';
144
153
  export type { WorkbenchMediaPreviewViewportProps } from './WorkbenchMediaPreviewViewport';
154
+ export { WorkbenchPreviewCanvas } from './WorkbenchCanvas';
155
+ export type { WorkbenchPreviewCanvasProps } from './WorkbenchCanvas';
145
156
  export {
146
157
  clampPreviewViewportZoom,
147
158
  computePreviewViewportFitScale,