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

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