taet-ui 0.0.0-stage → 0.6.0-rc.4

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 (496) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/CONTRIBUTING.md +15 -0
  3. package/LICENSE +21 -0
  4. package/README.md +178 -2
  5. package/SECURITY.md +37 -0
  6. package/THIRD_PARTY_NOTICES.md +45 -0
  7. package/docs/AI_CONTEXT.md +23 -0
  8. package/docs/AI_MAP.md +19 -0
  9. package/docs/AI_REFERENCE.md +7 -0
  10. package/docs/BUILD.md +42 -0
  11. package/docs/CHARTS.md +129 -0
  12. package/docs/COLLECTION_JSON.md +111 -0
  13. package/docs/COMPONENT_TYPES.md +20 -0
  14. package/docs/CONTROL_TYPES.md +142 -0
  15. package/docs/DATA_MODEL_TYPES.md +273 -0
  16. package/docs/EXTENSIONS.md +13 -0
  17. package/docs/FORM_JSON.md +88 -0
  18. package/docs/GRID_COLUMN_LAYOUT.md +111 -0
  19. package/docs/GRID_COMMON_CONTRACT.md +95 -0
  20. package/docs/GRID_EDITOR_MATRIX.md +139 -0
  21. package/docs/GRID_EDITOR_TYPES.md +334 -0
  22. package/docs/GRID_JSON.md +123 -0
  23. package/docs/GRID_MENUS.md +79 -0
  24. package/docs/GRID_STATE_TYPES.md +181 -0
  25. package/docs/GRID_TRANSFER.md +120 -0
  26. package/docs/GRID_TYPES.md +406 -0
  27. package/docs/INPUT_TYPES.md +731 -0
  28. package/docs/INTEGRATION_RECIPES.md +144 -0
  29. package/docs/LLM_GUIDE.md +31 -0
  30. package/docs/MIGRATION.md +10 -0
  31. package/docs/MUTATIONS.md +59 -0
  32. package/docs/NATIVE_ACCEPTANCE.md +49 -0
  33. package/docs/README.md +103 -0
  34. package/docs/RELEASE.md +35 -0
  35. package/docs/SOURCE_MIGRATION.md +19 -0
  36. package/docs/STABLE_API.md +235 -0
  37. package/docs/TAET_MIGRATION.md +61 -0
  38. package/docs/TIERS.md +172 -0
  39. package/docs/TREE_GRID_MOVE.md +106 -0
  40. package/docs/TYPES.md +185 -0
  41. package/docs/VERIFICATION.md +499 -0
  42. package/docs/VERSIONING.md +24 -0
  43. package/docs/index.html +15 -0
  44. package/docs/src/ComponentPage.js +164 -0
  45. package/docs/src/DocsShell.js +256 -0
  46. package/docs/src/ExampleHost.js +66 -0
  47. package/docs/src/docs.css +300 -0
  48. package/docs/src/docsCatalog.js +114 -0
  49. package/docs/src/main.js +8 -0
  50. package/docs/src/pages/AdditionalInputs.pages.js +190 -0
  51. package/docs/src/pages/ApplicationExtras.pages.js +95 -0
  52. package/docs/src/pages/Applications.pages.js +251 -0
  53. package/docs/src/pages/Button.page.js +117 -0
  54. package/docs/src/pages/ButtonVariants.pages.js +192 -0
  55. package/docs/src/pages/ChannelColorPicker.pages.js +28 -0
  56. package/docs/src/pages/Charts.pages.js +99 -0
  57. package/docs/src/pages/CollectionJSON.pages.js +79 -0
  58. package/docs/src/pages/Composition.page.js +106 -0
  59. package/docs/src/pages/EdgeActionLayer.page.js +59 -0
  60. package/docs/src/pages/EventsMutations.page.js +124 -0
  61. package/docs/src/pages/FileUpload.page.js +58 -0
  62. package/docs/src/pages/FinancialCharts.page.js +26 -0
  63. package/docs/src/pages/Form.page.js +129 -0
  64. package/docs/src/pages/FormJSON.page.js +40 -0
  65. package/docs/src/pages/Grid.page.js +221 -0
  66. package/docs/src/pages/GridJSON.page.js +37 -0
  67. package/docs/src/pages/IconButton.page.js +47 -0
  68. package/docs/src/pages/IconsShortcuts.pages.js +61 -0
  69. package/docs/src/pages/InputControls.pages.js +238 -0
  70. package/docs/src/pages/Layout.pages.js +205 -0
  71. package/docs/src/pages/LazyLoading.page.js +101 -0
  72. package/docs/src/pages/LifecycleOwnership.page.js +105 -0
  73. package/docs/src/pages/List.pages.js +231 -0
  74. package/docs/src/pages/ObjectModel.page.js +79 -0
  75. package/docs/src/pages/PropertyGrid.page.js +94 -0
  76. package/docs/src/pages/RemainingInputs.pages.js +51 -0
  77. package/docs/src/pages/ScrollingLabel.page.js +21 -0
  78. package/docs/src/pages/SelectInput.page.js +132 -0
  79. package/docs/src/pages/TextDisplay.pages.js +158 -0
  80. package/docs/src/pages/TextInput.page.js +96 -0
  81. package/docs/src/pages/ThemeDesigner.page.js +18 -0
  82. package/docs/src/pages/ThemesDensity.page.js +113 -0
  83. package/docs/src/pages/ToggleButton.page.js +61 -0
  84. package/docs/src/pages/ToggleIconButton.page.js +34 -0
  85. package/docs/src/pages/TreeExplorer.page.js +49 -0
  86. package/docs/src/pages/getting-started.pages.js +75 -0
  87. package/docs/src/pages/inputExamples.js +39 -0
  88. package/docs/src/pages/pageHelpers.js +16 -0
  89. package/examples/ai-recipes/01-basic-form.js +23 -0
  90. package/examples/ai-recipes/02-validation-form.js +32 -0
  91. package/examples/ai-recipes/03-select-input.js +21 -0
  92. package/examples/ai-recipes/04-toolbar-commands.js +30 -0
  93. package/examples/ai-recipes/05-grid-readonly.js +21 -0
  94. package/examples/ai-recipes/06-property-grid.js +35 -0
  95. package/examples/ai-recipes/07-dock-layout.js +30 -0
  96. package/examples/ai-recipes/08-master-detail.js +29 -0
  97. package/examples/ai-recipes/09-grid-workbench.js +399 -0
  98. package/examples/ai-recipes/10-color-picker.js +10 -0
  99. package/examples/ai-recipes/11-grid-editor-matrix.js +115 -0
  100. package/examples/ai-recipes/12-integration-contracts.d.ts +26 -0
  101. package/examples/ai-recipes/12-integration-contracts.js +244 -0
  102. package/examples/ai-recipes/README.md +36 -0
  103. package/examples/ai-recipes/integration-contracts.app.js +3 -0
  104. package/examples/ai-recipes/integration-contracts.css +6 -0
  105. package/examples/ai-recipes/integration-contracts.html +6 -0
  106. package/examples/basic-form/app.js +19 -0
  107. package/examples/basic-form/index.html +8 -0
  108. package/examples/grid-editors/README.md +42 -0
  109. package/examples/grid-editors/index.html +5 -0
  110. package/examples/grid-editors/matrix.css +23 -0
  111. package/examples/grid-editors/matrix.js +2 -0
  112. package/examples/grid-transfer/README.md +44 -0
  113. package/examples/grid-transfer/app.js +65 -0
  114. package/examples/grid-transfer/index.html +1 -0
  115. package/examples/grid-transfer/transfer.css +7 -0
  116. package/examples/grid-transfer/transfer.js +2 -0
  117. package/examples/grid-workbench/README.md +43 -0
  118. package/examples/grid-workbench/index.html +15 -0
  119. package/examples/grid-workbench/workbench.css +17 -0
  120. package/examples/grid-workbench/workbench.js +4 -0
  121. package/examples/tauri-minimal/Cargo.lock +4392 -0
  122. package/examples/tauri-minimal/Cargo.toml +14 -0
  123. package/examples/tauri-minimal/LICENSE +21 -0
  124. package/examples/tauri-minimal/README.md +43 -0
  125. package/examples/tauri-minimal/build.rs +5 -0
  126. package/examples/tauri-minimal/icons/icon.ico +0 -0
  127. package/examples/tauri-minimal/prepare.mjs +19 -0
  128. package/examples/tauri-minimal/src/main.rs +20 -0
  129. package/examples/tauri-minimal/tauri.conf.json +45 -0
  130. package/examples/tauri-minimal/web/app.css +2 -0
  131. package/examples/tauri-minimal/web/app.js +12 -0
  132. package/examples/tauri-minimal/web/index.html +1 -0
  133. package/examples/tree-move/README.md +15 -0
  134. package/examples/tree-move/app.js +46 -0
  135. package/examples/tree-move/index.html +1 -0
  136. package/examples/tree-move/move.css +5 -0
  137. package/examples/tree-move/move.js +2 -0
  138. package/examples/webview-standalone/README.md +8 -0
  139. package/examples/webview-standalone/example-esm.html +5 -0
  140. package/examples/webview-standalone/example.js +20 -0
  141. package/examples/webview-standalone/index.html +5 -0
  142. package/package.json +128 -4
  143. package/provenance/grid-candidate.json +244 -0
  144. package/provenance/source-snapshot.json +4610 -0
  145. package/spec/00-core-contracts.md +150 -0
  146. package/spec/01-control-lifecycle.md +284 -0
  147. package/spec/02-event-bus.md +357 -0
  148. package/spec/03-value-api.md +507 -0
  149. package/spec/04-data-store.md +592 -0
  150. package/spec/05-selection-model.md +402 -0
  151. package/spec/06-commands.md +527 -0
  152. package/spec/07-property-model.md +405 -0
  153. package/spec/08-import-export-model.md +399 -0
  154. package/spec/09-validation-errors.md +273 -0
  155. package/spec/10-focus-active-context.md +114 -0
  156. package/spec/11-disposables.md +100 -0
  157. package/spec/12-history-undo-redo.md +136 -0
  158. package/spec/13-dirty-state.md +62 -0
  159. package/spec/14-density-theme.md +201 -0
  160. package/spec/15-shortcut-manager.md +61 -0
  161. package/spec/16-host-bridge.md +58 -0
  162. package/spec/17-update-scheduler.md +68 -0
  163. package/spec/18-object-composition.md +157 -0
  164. package/spec/19-container-hierarchy.md +149 -0
  165. package/spec/20-size-resize.md +99 -0
  166. package/spec/21-text-input-api-audit.md +391 -0
  167. package/spec/22-interactive-control.md +178 -0
  168. package/spec/23-button-api-audit.md +369 -0
  169. package/spec/24-layout-api-audit.md +254 -0
  170. package/spec/25-panel-api-audit.md +165 -0
  171. package/spec/26-form-api-audit.md +217 -0
  172. package/spec/27-editor-control-contract.md +247 -0
  173. package/spec/28-date-time-input-api-audit.md +120 -0
  174. package/spec/29-property-grid-api-audit.md +154 -0
  175. package/spec/30-grid-filter-status-api.md +267 -0
  176. package/spec/31-grid-cell-editor-api.md +267 -0
  177. package/spec/32-grid-rendering.md +88 -0
  178. package/spec/32-shared-visual-primitives.md +71 -0
  179. package/spec/33-mdi-connectors.md +131 -0
  180. package/spec/34-icon-system.md +78 -0
  181. package/spec/34-readable-content.md +22 -0
  182. package/spec/35-multi-select-dropdown.md +50 -0
  183. package/spec/36-tabbar-overflow.md +55 -0
  184. package/spec/38-color-picker.md +63 -0
  185. package/spec/39-tree-node-drag-drop.md +76 -0
  186. package/spec/accordion.md +36 -0
  187. package/spec/channel-color-pickers.md +39 -0
  188. package/spec/edge-action-layer.md +138 -0
  189. package/spec/file-upload.md +142 -0
  190. package/spec/grid-remote-loading.md +24 -0
  191. package/spec/hiding-side-panel.md +30 -0
  192. package/spec/scrolling-label.md +50 -0
  193. package/spec/theme-applicator.md +63 -0
  194. package/spec/theme-designer.md +127 -0
  195. package/spec/trackbar-presentation.md +43 -0
  196. package/spec/tree-explorer.md +123 -0
  197. package/src/advanced/index.d.ts +17 -0
  198. package/src/advanced/index.js +15 -0
  199. package/src/components/index.d.ts +6 -0
  200. package/src/components/index.js +4 -0
  201. package/src/core/BaseControl.d.ts +135 -0
  202. package/src/core/BaseControl.js +821 -0
  203. package/src/core/CharacterRangeSelectionModel.d.ts +27 -0
  204. package/src/core/CharacterRangeSelectionModel.js +236 -0
  205. package/src/core/CommandRegistry.d.ts +34 -0
  206. package/src/core/CommandRegistry.js +354 -0
  207. package/src/core/DataStore.d.ts +79 -0
  208. package/src/core/DataStore.js +517 -0
  209. package/src/core/DataView.d.ts +79 -0
  210. package/src/core/DataView.js +481 -0
  211. package/src/core/DisposableBag.d.ts +17 -0
  212. package/src/core/DisposableBag.js +69 -0
  213. package/src/core/DocumentState.js +95 -0
  214. package/src/core/EventBus.d.ts +17 -0
  215. package/src/core/EventBus.js +129 -0
  216. package/src/core/GridColumnModel.d.ts +52 -0
  217. package/src/core/GridColumnModel.js +157 -0
  218. package/src/core/GridDataProvider.d.ts +35 -0
  219. package/src/core/GridDataProvider.js +52 -0
  220. package/src/core/GridFilterModel.d.ts +64 -0
  221. package/src/core/GridFilterModel.js +538 -0
  222. package/src/core/GridGroupModel.d.ts +64 -0
  223. package/src/core/GridGroupModel.js +95 -0
  224. package/src/core/GridSearchModel.d.ts +42 -0
  225. package/src/core/GridSearchModel.js +103 -0
  226. package/src/core/IconRegistry.d.ts +11 -0
  227. package/src/core/IconRegistry.js +136 -0
  228. package/src/core/LifecycleError.d.ts +8 -0
  229. package/src/core/LifecycleError.js +9 -0
  230. package/src/core/OverlayManager.d.ts +20 -0
  231. package/src/core/OverlayManager.js +152 -0
  232. package/src/core/RangeSelectionModel.d.ts +42 -0
  233. package/src/core/RangeSelectionModel.js +130 -0
  234. package/src/core/SelectionModel.d.ts +31 -0
  235. package/src/core/SelectionModel.js +122 -0
  236. package/src/core/ShortcutManager.d.ts +19 -0
  237. package/src/core/ShortcutManager.js +361 -0
  238. package/src/core/StaticContextProvider.js +74 -0
  239. package/src/core/TreeDataView.d.ts +79 -0
  240. package/src/core/TreeDataView.js +490 -0
  241. package/src/core/contracts.d.ts +30 -0
  242. package/src/core/index.d.ts +44 -0
  243. package/src/core/index.js +18 -0
  244. package/src/core/mutationOptions.d.ts +3 -0
  245. package/src/core/mutationOptions.js +44 -0
  246. package/src/core/pointerTracking.js +41 -0
  247. package/src/core/projectionBuild.js +45 -0
  248. package/src/core/projectionDependencies.js +22 -0
  249. package/src/core/selectionMutationGuard.js +3 -0
  250. package/src/core/validators.d.ts +4 -0
  251. package/src/core/validators.js +60 -0
  252. package/src/core/viewFilterBinding.js +54 -0
  253. package/src/core/viewSortBinding.js +15 -0
  254. package/src/foundation/index.d.ts +12 -0
  255. package/src/foundation/index.js +9 -0
  256. package/src/ui/Accordion.js +177 -0
  257. package/src/ui/Button.js +222 -0
  258. package/src/ui/CMYKColorPicker.d.ts +8 -0
  259. package/src/ui/CMYKColorPicker.js +9 -0
  260. package/src/ui/Chart.d.ts +39 -0
  261. package/src/ui/Chart.js +227 -0
  262. package/src/ui/CheckBox.d.ts +18 -0
  263. package/src/ui/CheckBox.js +135 -0
  264. package/src/ui/CheckButton.js +417 -0
  265. package/src/ui/CheckLetter.d.ts +21 -0
  266. package/src/ui/CheckLetter.js +76 -0
  267. package/src/ui/CircularSlider.d.ts +9 -0
  268. package/src/ui/CircularSlider.js +66 -0
  269. package/src/ui/CodeBlock.js +154 -0
  270. package/src/ui/CollectionPortProvider.js +63 -0
  271. package/src/ui/ColorPicker.d.ts +37 -0
  272. package/src/ui/ColorPicker.js +551 -0
  273. package/src/ui/ConnectorLayer.js +371 -0
  274. package/src/ui/ConnectorModel.js +75 -0
  275. package/src/ui/DateTimeInput.d.ts +74 -0
  276. package/src/ui/DateTimeInput.js +1583 -0
  277. package/src/ui/Dialog.js +250 -0
  278. package/src/ui/DockGroup.js +345 -0
  279. package/src/ui/DockLayout.js +1993 -0
  280. package/src/ui/DockPanel.js +289 -0
  281. package/src/ui/DropDownList.d.ts +5 -0
  282. package/src/ui/DropDownList.js +8 -0
  283. package/src/ui/EdgeActionLayer.d.ts +40 -0
  284. package/src/ui/EdgeActionLayer.js +279 -0
  285. package/src/ui/EditorControl.d.ts +114 -0
  286. package/src/ui/EditorControl.js +516 -0
  287. package/src/ui/FieldGroup.js +66 -0
  288. package/src/ui/FilePicker.d.ts +53 -0
  289. package/src/ui/FilePicker.js +354 -0
  290. package/src/ui/FileUpload.d.ts +42 -0
  291. package/src/ui/FileUpload.js +207 -0
  292. package/src/ui/Form.js +1042 -0
  293. package/src/ui/FormDefinition.d.ts +18 -0
  294. package/src/ui/FormDefinition.js +82 -0
  295. package/src/ui/Gauge.d.ts +8 -0
  296. package/src/ui/Gauge.js +48 -0
  297. package/src/ui/Grid.d.ts +109 -0
  298. package/src/ui/Grid.js +4699 -0
  299. package/src/ui/GridColumnReorderController.js +113 -0
  300. package/src/ui/GridColumnResizer.js +132 -0
  301. package/src/ui/GridCore.d.ts +44 -0
  302. package/src/ui/GridCore.js +625 -0
  303. package/src/ui/GridDefinition.d.ts +35 -0
  304. package/src/ui/GridDefinition.js +67 -0
  305. package/src/ui/GridEditors.d.ts +65 -0
  306. package/src/ui/GridEditors.js +318 -0
  307. package/src/ui/GridExporters.d.ts +32 -0
  308. package/src/ui/GridExporters.js +50 -0
  309. package/src/ui/GridKeyboardController.js +63 -0
  310. package/src/ui/GridPortProvider.js +73 -0
  311. package/src/ui/GridPrimitives.js +60 -0
  312. package/src/ui/GridRowReorderController.js +108 -0
  313. package/src/ui/GridRowTransferController.js +152 -0
  314. package/src/ui/GridSelectionController.js +85 -0
  315. package/src/ui/GridTreeMove.js +290 -0
  316. package/src/ui/GridVirtualRenderer.js +67 -0
  317. package/src/ui/GridWindowRenderer.js +357 -0
  318. package/src/ui/HeaderAction.js +62 -0
  319. package/src/ui/HidingSidePanel.d.ts +23 -0
  320. package/src/ui/HidingSidePanel.js +223 -0
  321. package/src/ui/Icon.js +52 -0
  322. package/src/ui/IconButton.js +29 -0
  323. package/src/ui/LabelText.js +81 -0
  324. package/src/ui/Layout.js +848 -0
  325. package/src/ui/List.d.ts +45 -0
  326. package/src/ui/List.js +557 -0
  327. package/src/ui/ListPortProvider.js +29 -0
  328. package/src/ui/LogPanel.js +43 -0
  329. package/src/ui/MapperWindow.js +101 -0
  330. package/src/ui/MdiWindow.js +226 -0
  331. package/src/ui/MdiWorkspace.js +99 -0
  332. package/src/ui/Menu.js +915 -0
  333. package/src/ui/MessageBox.js +34 -0
  334. package/src/ui/MultiSelectDropDown.d.ts +56 -0
  335. package/src/ui/MultiSelectDropDown.js +226 -0
  336. package/src/ui/NumberInput.d.ts +56 -0
  337. package/src/ui/NumberInput.js +238 -0
  338. package/src/ui/OptionList.d.ts +25 -0
  339. package/src/ui/OptionList.js +211 -0
  340. package/src/ui/Panel.js +372 -0
  341. package/src/ui/Popup.js +170 -0
  342. package/src/ui/ProgressBar.d.ts +29 -0
  343. package/src/ui/ProgressBar.js +223 -0
  344. package/src/ui/PropertyDescription.js +104 -0
  345. package/src/ui/PropertyGrid.js +813 -0
  346. package/src/ui/PropertyGridDefinition.d.ts +15 -0
  347. package/src/ui/PropertyGridDefinition.js +56 -0
  348. package/src/ui/PropertyInspector.js +111 -0
  349. package/src/ui/RGBColorPicker.d.ts +3 -0
  350. package/src/ui/RGBColorPicker.js +5 -0
  351. package/src/ui/RadioGroup.d.ts +50 -0
  352. package/src/ui/RadioGroup.js +526 -0
  353. package/src/ui/RadioLetter.d.ts +10 -0
  354. package/src/ui/RadioLetter.js +21 -0
  355. package/src/ui/ReadonlyText.js +18 -0
  356. package/src/ui/ScrollingLabel.d.ts +16 -0
  357. package/src/ui/ScrollingLabel.js +77 -0
  358. package/src/ui/SelectInput.d.ts +102 -0
  359. package/src/ui/SelectInput.js +974 -0
  360. package/src/ui/StaticPortProvider.js +144 -0
  361. package/src/ui/StatusText.js +18 -0
  362. package/src/ui/StepProgressBar.d.ts +69 -0
  363. package/src/ui/StepProgressBar.js +711 -0
  364. package/src/ui/Switch.d.ts +33 -0
  365. package/src/ui/Switch.js +250 -0
  366. package/src/ui/TabBar.js +929 -0
  367. package/src/ui/TextArea.d.ts +60 -0
  368. package/src/ui/TextArea.js +326 -0
  369. package/src/ui/TextField.js +364 -0
  370. package/src/ui/TextInput.d.ts +41 -0
  371. package/src/ui/TextInput.js +3 -0
  372. package/src/ui/TextLayout.js +379 -0
  373. package/src/ui/ThemeApplicator.d.ts +20 -0
  374. package/src/ui/ThemeApplicator.js +83 -0
  375. package/src/ui/ThemeDesigner.d.ts +41 -0
  376. package/src/ui/ThemeDesigner.js +53 -0
  377. package/src/ui/ToggleIconButton.js +33 -0
  378. package/src/ui/ToolButton.js +113 -0
  379. package/src/ui/Toolbar.js +153 -0
  380. package/src/ui/Tooltip.js +139 -0
  381. package/src/ui/TrackBar.d.ts +54 -0
  382. package/src/ui/TrackBar.js +460 -0
  383. package/src/ui/TreeDefinition.d.ts +13 -0
  384. package/src/ui/TreeDefinition.js +12 -0
  385. package/src/ui/TreeExplorer.d.ts +53 -0
  386. package/src/ui/TreeExplorer.js +321 -0
  387. package/src/ui/TreeGrid.d.ts +57 -0
  388. package/src/ui/TreeGrid.js +2977 -0
  389. package/src/ui/TreeGridDefinition.d.ts +11 -0
  390. package/src/ui/TreeGridDefinition.js +25 -0
  391. package/src/ui/TreeList.js +643 -0
  392. package/src/ui/TreeListPortProvider.js +8 -0
  393. package/src/ui/TreeNodeDragController.js +501 -0
  394. package/src/ui/advanced-contracts.d.ts +110 -0
  395. package/src/ui/all.d.ts +2 -0
  396. package/src/ui/all.js +2 -0
  397. package/src/ui/application-contracts.d.ts +165 -0
  398. package/src/ui/channelColorPicker.js +77 -0
  399. package/src/ui/chartGeometry.js +112 -0
  400. package/src/ui/collection-contracts.d.ts +103 -0
  401. package/src/ui/container-contracts.d.ts +118 -0
  402. package/src/ui/definitionEditors.js +58 -0
  403. package/src/ui/definitionValidation.js +58 -0
  404. package/src/ui/dense.css +2 -0
  405. package/src/ui/display-contracts.d.ts +135 -0
  406. package/src/ui/experimental.d.ts +219 -0
  407. package/src/ui/experimental.js +85 -0
  408. package/src/ui/fileUploadQueue.js +191 -0
  409. package/src/ui/fonts/NotoSans-OFL.txt +93 -0
  410. package/src/ui/fonts/NotoSans-variable.woff2 +0 -0
  411. package/src/ui/fonts/README.md +24 -0
  412. package/src/ui/grid-api.d.ts +20 -0
  413. package/src/ui/grid-api.js +22 -0
  414. package/src/ui/grid-columns.d.ts +45 -0
  415. package/src/ui/grid-controllers.d.ts +62 -0
  416. package/src/ui/grid-editor-contracts.d.ts +131 -0
  417. package/src/ui/grid-editor-options.d.ts +153 -0
  418. package/src/ui/grid-events.d.ts +102 -0
  419. package/src/ui/grid-options.d.ts +129 -0
  420. package/src/ui/gridEditorFactory.js +7 -0
  421. package/src/ui/gridEditorLifecycle.js +198 -0
  422. package/src/ui/gridIntrinsicWidth.js +33 -0
  423. package/src/ui/gridSelectionState.js +86 -0
  424. package/src/ui/gridStringCompare.js +7 -0
  425. package/src/ui/gridWindowGeometry.js +60 -0
  426. package/src/ui/icons/core-icons.js +81 -0
  427. package/src/ui/index.d.ts +125 -0
  428. package/src/ui/index.js +32 -0
  429. package/src/ui/input-choice-contracts.d.ts +14 -0
  430. package/src/ui/inputs.d.ts +51 -0
  431. package/src/ui/inputs.js +24 -0
  432. package/src/ui/itemGeometry.js +41 -0
  433. package/src/ui/localize.js +5 -0
  434. package/src/ui/overlayGeometry.js +12 -0
  435. package/src/ui/resourceModel.js +94 -0
  436. package/src/ui/styles/accordion.css +62 -0
  437. package/src/ui/styles/base.css +62 -0
  438. package/src/ui/styles/buttons.css +244 -0
  439. package/src/ui/styles/charts.css +41 -0
  440. package/src/ui/styles/choice-letter.css +69 -0
  441. package/src/ui/styles/circular-slider.css +10 -0
  442. package/src/ui/styles/code-block.css +64 -0
  443. package/src/ui/styles/color-picker.css +266 -0
  444. package/src/ui/styles/display.css +35 -0
  445. package/src/ui/styles/dock.css +400 -0
  446. package/src/ui/styles/edge-action-layer.css +21 -0
  447. package/src/ui/styles/editors.css +1955 -0
  448. package/src/ui/styles/file-upload.css +26 -0
  449. package/src/ui/styles/fonts.css +8 -0
  450. package/src/ui/styles/form.css +107 -0
  451. package/src/ui/styles/grid.css +1149 -0
  452. package/src/ui/styles/header-actions.css +75 -0
  453. package/src/ui/styles/hiding-side-panel.css +40 -0
  454. package/src/ui/styles/icons.css +8 -0
  455. package/src/ui/styles/layout.css +162 -0
  456. package/src/ui/styles/lists.css +257 -0
  457. package/src/ui/styles/mdi.css +199 -0
  458. package/src/ui/styles/menu.css +123 -0
  459. package/src/ui/styles/overlay.css +113 -0
  460. package/src/ui/styles/property-grid.css +309 -0
  461. package/src/ui/styles/scrollbars.css +63 -0
  462. package/src/ui/styles/scrolling-label.css +4 -0
  463. package/src/ui/styles/tabs.css +337 -0
  464. package/src/ui/styles/text-layout.css +137 -0
  465. package/src/ui/styles/tokens.css +255 -0
  466. package/src/ui/styles/toolbar.css +23 -0
  467. package/src/ui/styles/trackbar-presentation.css +32 -0
  468. package/src/ui/styles/tree-explorer.css +16 -0
  469. package/src/ui/styles/tree-grid.css +29 -0
  470. package/src/ui/svg.js +6 -0
  471. package/src/ui/taet-ui.css +38 -0
  472. package/src/ui/theme-designer/base-color.js +28 -0
  473. package/src/ui/theme-designer/color-math.js +41 -0
  474. package/src/ui/theme-designer/editor-model.js +20 -0
  475. package/src/ui/theme-designer/editor.js +135 -0
  476. package/src/ui/theme-designer/foreground-resolver.js +68 -0
  477. package/src/ui/theme-designer/harmony.js +15 -0
  478. package/src/ui/theme-designer/host-api.js +14 -0
  479. package/src/ui/theme-designer/notice.js +49 -0
  480. package/src/ui/theme-designer/preset-toolbar.js +58 -0
  481. package/src/ui/theme-designer/preview.js +70 -0
  482. package/src/ui/theme-designer/reference-tokens.js +147 -0
  483. package/src/ui/theme-designer/role-distribution.js +19 -0
  484. package/src/ui/theme-designer/scope-model.js +70 -0
  485. package/src/ui/theme-designer/serialization.js +41 -0
  486. package/src/ui/theme-designer/stack-model.js +14 -0
  487. package/src/ui/theme-designer/stack.js +38 -0
  488. package/src/ui/theme-designer/template.js +5 -0
  489. package/src/ui/theme-designer/theme-generator.js +138 -0
  490. package/src/ui/theme-designer/theme-presets.js +10 -0
  491. package/src/ui/theme-designer/theme-scopes.js +81 -0
  492. package/src/ui/theme-designer/wheel-geometry.js +20 -0
  493. package/src/ui/theme-designer/wheel-spectrum.js +28 -0
  494. package/src/ui/theme-designer/wheel.js +46 -0
  495. package/src/ui/treeDefinitionSupport.js +52 -0
  496. package/src/ui/treeExpansion.js +44 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,97 @@
1
+ # Tæt UI changes
2
+
3
+ ## 0.6.0-rc.4 - release candidate, 2026-11-03
4
+
5
+ - Clean current branding, remove the private historical CI link and update local benchmark/demo identifiers.
6
+ - Export taet-ui-theme v1 files as .taet-theme.json; keep importing the previous v1 format and bare definitions.
7
+ - Prefer taet-ui.theme-editor.v1 storage, fall back to the previous key and write only the current key; opening an editor does not migrate or erase stored data.
8
+ - Expose taetUiDocs and taetThemeEditor while retaining existing host aliases; preserve CSS selectors, CSS imports and cross-version drag MIME contracts.
9
+ - Rename the row-drag plain-text label to Tæt UI rows without changing reorder behavior.
10
+ - Add the real light/dark Atelier desktop showcase, a reproducible host example and documented consumer-trial limitations.
11
+ - Published rc.3 packages, release assets and source history remain unchanged. Publication outcomes are recorded in the matching GitHub prerelease notes.
12
+
13
+ ## 0.6.0-rc.3 — local migration, 2026-11-03
14
+
15
+ - Rename display branding to Tæt UI, package/imports/assets to taet-ui.
16
+ - Preserve the released rc.2 framework scope and zero runtime dependencies.
17
+ - Integrate the accepted PropertyGrid gutter-border and selection-marker CSS patch.
18
+ - Retain legacy CSS selectors, tokens, drag/theme formats and the dense.css alias.
19
+ - Start new history, preserving the original project folders/tags and provenance.
20
+ - Use owned Node HTTP fixtures for browser gates; retain all assertions.
21
+ - Add classic TaetUI IIFE delivery alongside ESM, with minified variants and portable ZIP examples/checksums.
22
+ - Prepare public npm metadata and the next preview channel; publication outcomes are verified separately. See docs/TAET_MIGRATION.md.
23
+
24
+ The following pre-rename changelog is historical and keeps exact released versions.
25
+
26
+ # Changelog
27
+
28
+ ## 0.6.0-rc.2 - preview (2026-11-02)
29
+
30
+ - TreeGrid compares pairs of valid Date values by timestamp. Equal timestamps remain stable within siblings; null placement, locale, and the legacy invalid/mixed-value fallback are unchanged. See `docs/GRID_TYPES.md`.
31
+ - Grid and TreeGrid settings buttons use a deterministic decorative SVG in the existing 10px service gutter. Row markers, drag gestures, menu scope, and keyboard focus remain unchanged.
32
+ - Added checked integration recipes for DTO dialog results, guarded asynchronous work and retry, master/detail context, ownership, application UI snapshots, and resize persistence. No new public runtime API or default policy is introduced.
33
+ - Fixed Switch cell-editor activation on WebKit so the native label default cannot override deliberate application focus. One toggle and callback-safe teardown are preserved. Forwarded private DOM clicks are synthetic (`isTrusted: false`); the original visual-label event is prevented. See `docs/GRID_EDITOR_MATRIX.md`.
34
+ - Browser fixtures await actual Date DOM paint, Mapper port geometry and editor focus before assertions or keyboard injection. Strict behavior assertions and global timeouts are unchanged.
35
+ - Windows CI uses two workers after a recorded `ERR_NO_BUFFER_SPACE` module-load failure. This is a conservative mitigation, not a proven explanation of the historical retained-renderer failure.
36
+ - The feedback base passed full Windows/Linux Node22/24 CI, three-engine compatibility and bundle gates. Its Windows Tauri/WebView2 stand passed 46/46 programmatic checks in each of two launches; the maintainer subsequently reported the manual interactive check passed. Exact inputs and limits are in `docs/VERIFICATION.md` and `docs/NATIVE_ACCEPTANCE.md`. The rc.1 tag and historical failed runs remain unchanged.
37
+
38
+ ## 0.6.0-rc.1 - preview
39
+
40
+ ### Working checkpoint - 2026-11-01
41
+
42
+ User hands-on acceptance confirmed Grid editing/editor fonts, the 10px gutter
43
+ and per-selected-row markers, multi-select, pinning/column reorder, cross-Grid
44
+ move/copy and local TreeGrid node-with-subtree moves. This local checkpoint
45
+ preserves the tested desktop baseline, not a publication or universal readiness
46
+ claim. Tree copy/cross-tree/remote/custom providers remain outside this scope;
47
+ a separate Windows Tauri/WebView2 stand later passed bounded programmatic checks
48
+ and user-observed row/subtree moves. Full physical input/IME and remote CI remain
49
+ unverified. Exact scope: docs/VERIFICATION.md and docs/NATIVE_ACCEPTANCE.md.
50
+
51
+
52
+ Grid column QA: measured multi-pin header/editor geometry, live backward-move
53
+ focus, stale/reentrant drag protection and delta Tree expanded-state restore.
54
+ The optional workbench column mode and editor matrix demonstrate row multi-select
55
+ with per-row markers; Check/Radio now have passive read visuals.
56
+
57
+ Managed overlays now use the common bundled-font tokens. The editor matrix shows
58
+ Switch state using the existing static indicator and explicit transactional edit
59
+ activation, with passive read visuals and no per-row Controls.
60
+
61
+ Grid editor matrix: nine existing factories on Grid/TreeGrid, typed nullable
62
+ Select values, common closed-Select/popup keyboard policy, compact Select/Radio
63
+ geometry, popup resize/focus and callback-safe teardown; live recipe11/example.
64
+ Disabling a table now silently cancels its draft and releases the owned popup.
65
+
66
+ Grid/TreeGrid indicator gutter now defaults to 10px instead of 20px; explicit
67
+ CSS widths and gutter/menu opt-outs remain supported.
68
+
69
+ - Foundation/components/advanced aliases over existing constructors; maturity unchanged.
70
+ - Specialized raster/Painter/StockChart/FlatFile/Spectrum/Pivot delivery deferred.
71
+ Reader must retain its complete pinned 0.5 bundle.
72
+ - Form removes logical slots/values/subscriptions; composition owns children before mount.
73
+ - Stop late callback phases after teardown; ignore focus events during destruction.
74
+ - Reject terminal admission, duplicate/prototype keys and ownership cycles atomically.
75
+ - ShortcutManager respects defaultPrevented/IME, explicit editor opt-in, semantic keys
76
+ and exact Meta priority over portable Ctrl/Cmd fallback.
77
+ - Grid/TreeGrid share silent selection invalidation, safe selection reentry, keyboard
78
+ editing, beforeEditStart/commit metadata and schema reconciliation. Legacy APIs remain.
79
+ - Read-only tables no longer import the built-in editor catalog just to check a factory.
80
+ - Desktop tree/table/property workbench demonstrates shared data and edit context.
81
+ - Imported source hashes remain immutable; approved table changes have a separate candidate manifest.
82
+ - Runnable mutation example, exact docs routes, coherent assets and honest provenance.
83
+
84
+ Compatibility: duplicate pending Form slots now fail early; shortcuts in text
85
+ editors require opt-in. Specialized exports are intentionally absent, not emulated.
86
+
87
+ Table compatibility: legacy getSortState return types and Tree string/function
88
+ filters remain. getSortModel returns Rule[] on both. clearAllFilters({search})
89
+ explicitly chooses scope; omission retains each legacy default. Tab/Shift+Tab
90
+ now exit at editable boundaries rather than wrapping; invalid drafts retain focus.
91
+
92
+ - Shared presentation gutter (now 10px by default) carries the selected-row accent and table menu.
93
+ Columns/Best fit all/global clears moved out of local column menus; reset is
94
+ explicitly column layout only. Shared indicatorGutter/gridMenu constructor
95
+ opt-outs preserve compact embedded layouts; data/ARIA/range/export indices stay.
96
+ - At a document edge with no external tabbable, Tab commits and releases table
97
+ focus to the document body consistently in Chromium/Firefox/WebKit.
@@ -0,0 +1,15 @@
1
+ # Contributing
2
+
3
+ Start with README, AGENTS.md, docs/AI_CONTEXT.md and the relevant docs/AI_MAP.md row.
4
+ Read exact declarations and a checked recipe before changing a public contract.
5
+ Runtime stays dependency-free. Preserve ownership/lifecycle, tier and maturity rules.
6
+
7
+ Table changes require explicit approval and review before regenerating the separate
8
+ candidate hashes. The immutable imported snapshot must retain its original bytes.
9
+ Run shared/table regressions when changing shared mechanics.
10
+
11
+ Use npm ci and npm test; then test:all, relevant compatibility/bundle gates and pack
12
+ inspection. Browser binaries are separate development prerequisites. Regenerate
13
+ API inventories after export changes. Keep exact results/limits in docs/VERIFICATION.md.
14
+ Do not commit generated dist/node_modules/reports/caches, binaries or private data.
15
+ Publication is a separate maintainer action. See docs/VERSIONING.md and SECURITY.md.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Edward Aponasko
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,179 @@
1
- # Temporary Holding Version
1
+ # Tæt UI
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Compact desktop UI controls for embedded WebViews. Build screens with live
4
+ JavaScript objects, explicit ownership, events, commands and data models.
5
+ No JSX, virtual DOM, runtime npm dependencies or CDN.
6
+
7
+ **0.6.0-rc.4 is a pre-1.0 release candidate; published rc.3 artifacts remain unchanged.** Grid/TreeGrid and Advanced remain experimental.
8
+ Source packages and standalone WebView ZIPs are separate delivery choices.
9
+ The npm preview channel uses `next`: `npm install taet-ui@next`; publication
10
+ status is recorded in the matching GitHub prerelease notes.
11
+
12
+ Display name: **Tæt UI**. Package and technical names: **taet-ui**.
13
+ Repository: [edward-ap/taet-ui](https://github.com/edward-ap/taet-ui).
14
+ See the [migration inventory](docs/TAET_MIGRATION.md) and [verification](docs/VERIFICATION.md).
15
+
16
+ ## Standalone WebView distribution
17
+
18
+ `npm run distribution` builds/minifies the library and produces versioned ZIPs in
19
+ ignored `distribution/`. Release builds use `npm run distribution -- --release`
20
+ from a clean commit. GitHub prerelease assets include one ZIP for each profile:
21
+ full, components and foundation. Each contains matching CSS/fonts/licenses,
22
+ readable/minified ESM and classic IIFE JavaScript, examples, provenance and SHA-256.
23
+ Use one profile and one JS format in each document. Classic scripts expose `TaetUI`;
24
+ ESM files export named bindings. Both target ES2022 without API polyfills.
25
+
26
+ Each ZIP has a working `index.html` (classic IIFE) and `example-esm.html`. Serve
27
+ through a WebView origin or HTTP; local-file access depends on host policy.
28
+ Node/Python/npm are build/preview tools, not packaged-application dependencies.
29
+ Generated ZIPs and `dist/` stay out of Git. The npm package delivers typed ESM
30
+ source and CSS/font assets for resolver/bundler consumers.
31
+
32
+ ```js
33
+ // Browser application with a resolver/bundler and its CSS loader:
34
+ import {Panel, Form, TextInput, Button} from 'taet-ui';
35
+ import 'taet-ui/taet-ui.css';
36
+ ```
37
+
38
+
39
+ ## Try it
40
+
41
+ Build prerequisites: Node 22+, npm and Python 3.10+ on PATH. They are development
42
+ tools; a packaged application does not need a Node/Python server. Your host
43
+ must provide a compatible system WebView runtime.
44
+
45
+ ```sh
46
+ npm ci
47
+ npm run build
48
+ npm run dev
49
+ ```
50
+
51
+ Open http://127.0.0.1:5173/examples/basic-form/index.html.
52
+ With that server running, also open the [workbench](http://127.0.0.1:5173/examples/grid-workbench/),
53
+ [editor matrix](http://127.0.0.1:5173/examples/grid-editors/), [Grid transfer](http://127.0.0.1:5173/examples/grid-transfer/)
54
+ and [tree movement](http://127.0.0.1:5173/examples/tree-move/).
55
+
56
+ Documentation: http://127.0.0.1:5173/docs/index.html, or run `npm run docs`
57
+ for http://127.0.0.1:5174/docs/index.html.
58
+ If a port is occupied, use `npm run dev -- --port 5641` and the corresponding URL.
59
+ In Windows PowerShell, use `npm.cmd run dev -- --port 5641` if the npm.ps1 shim
60
+ consumes forwarded options. Check `node --version`, `npm --version` and
61
+ `python --version` before starting.
62
+
63
+ ## Desktop showcase
64
+
65
+ [Atelier](https://github.com/edward-ap/taet-ui/tree/main/examples/desktop-showcase) is a runnable dummy IDE made from
66
+ TreeList, DockLayout/DockPanel, MdiWorkspace, PropertyGrid, TabBar, Menu, Toolbar,
67
+ Form and Dialog. Project data and build/run actions are synthetic. These are real
68
+ controls in the same live application, captured in the built-in light/dark themes
69
+ from the rc.4 candidate.
70
+
71
+ ![Light theme: project tree, overlapping MDI documents with Code and Design tabs, live form preview, property inspector and build output](https://raw.githubusercontent.com/edward-ap/taet-ui/main/.github/screenshots/desktop-ide-light.png)
72
+
73
+ *Light theme — the project tree selects the object inspected beside the MDI workspace.*
74
+
75
+ ![Dark theme of the same application with the same selected object, documents, properties and build output](https://raw.githubusercontent.com/edward-ap/taet-ui/main/.github/screenshots/desktop-ide-dark.png)
76
+
77
+ *Dark theme — switched on the same instance without losing edits or window state.*
78
+
79
+ <img src="https://raw.githubusercontent.com/edward-ap/taet-ui/main/.github/screenshots/desktop-ide-dialog.png" width="320" alt="Actual modal Run configuration dialog with program arguments, Cancel and Run preview actions">
80
+
81
+ *The run configuration uses a real modal Dialog and Form; fixed side placement is host CSS.*
82
+
83
+ UI composition uses live objects and explicit ownership. For example, the workspace
84
+ frame is ordinary JavaScript; the complete [example](https://github.com/edward-ap/taet-ui/tree/main/examples/desktop-showcase)
85
+ also wires selection, descriptor setters, commands, tabs and cleanup:
86
+
87
+ ```js
88
+ import {DataStore} from 'taet-ui';
89
+ import {TreeList} from 'taet-ui/components';
90
+ import {DockLayout, DockPanel, MdiWorkspace} from 'taet-ui/advanced';
91
+
92
+ const records = new DataStore();
93
+ records.parse([{id: 'project', parentId: null, text: 'Demo project'}]);
94
+ const dock = new DockLayout('#desktop', {leftSize: 216, rightSize: 268});
95
+ const explorer = dock.addPanel(new DockPanel({id: 'explorer', title: 'Project', area: 'left'}));
96
+ explorer.add(new TreeList({data: records, textField: 'text'}));
97
+ const center = dock.addPanel(new DockPanel({id: 'editor', title: 'Workspace', area: 'center'}));
98
+ center.add(new MdiWorkspace({width: '100%', height: '100%'}));
99
+ const destroy = () => { dock.destroy(); records.destroy(); };
100
+ ```
101
+
102
+ The host supplies data, actions and layout CSS. A WebView can serve the full ESM
103
+ profile with matching local CSS/fonts through its own origin; Node/npm are build
104
+ tools. The example explains the import map and teardown. Desktop APIs retain their
105
+ [experimental maturity](docs/STABLE_API.md); the consumer trial and its API friction
106
+ are described in the [example notes](https://github.com/edward-ap/taet-ui/tree/main/examples/desktop-showcase).
107
+
108
+ ## Use it in a WebView
109
+
110
+ Copy one built profile's JS, matching CSS, `fonts/`, `LICENSE` and
111
+ `THIRD_PARTY_NOTICES.md` into your app. Full is `dist/`; subsets are
112
+ `dist/components/` and `dist/foundation/`. Use one library instance per document.
113
+ Serve modules from a WebView origin/custom protocol or HTTP. Do not assume that
114
+ opening ES modules directly through `file://` works in every host.
115
+
116
+ ```html
117
+ <link rel="stylesheet" href="./taet-ui.min.css">
118
+ <body class="dui-page dui-theme-light-blue">
119
+ <main id="app"></main>
120
+ <script type="module" src="./app.js"></script>
121
+ </body>
122
+ ```
123
+
124
+ ```js
125
+ import {Panel, Form, TextInput, Button} from './taet-ui.min.js';
126
+ const name = new TextInput({name: 'name', label: 'Customer', value: 'Ada'});
127
+ const form = new Form().row(name);
128
+ form.row(new Button({text: 'Save', onClick() { console.log(form.value.get()); }}));
129
+ const screen = new Panel('#app').add(form);
130
+ export function destroy() { screen.destroy(); } // Host calls this when closing.
131
+ ```
132
+
133
+ A source-only [minimal Tauri host](examples/tauri-minimal/README.md) demonstrates
134
+ a compact Form and bounded Rust echo. Its historical pre-rename Windows smoke passed
135
+ 7/7 programmatic checks. A renamed Tæt UI native rebuild, physical input and other OSes remain unverified.
136
+
137
+ For TypeScript or resolver-based apps, `npm pack --pack-destination ..` creates
138
+ the local `taet-ui-0.6.0-rc.4.tgz`. Install that file in your app with
139
+ `npm install ../taet-ui-0.6.0-rc.4.tgz`. Bare package names need a resolver or
140
+ browser import map; installing a tarball does not create native browser URLs.
141
+
142
+ | Import | Scope |
143
+ | --- | --- |
144
+ | `taet-ui/foundation` | Lifecycle, events, commands, models, validators, icons and themes |
145
+ | `taet-ui/components` | Layouts, forms, inputs, lists, tables, properties and indicators |
146
+ | `taet-ui/advanced` | MDI, docking, generic charts, mapping and theme editor |
147
+ | `taet-ui` | Stable root; legacy subpaths remain for retained APIs |
148
+ | `taet-ui/taet-ui.css` | Styles and local font |
149
+
150
+ [Architecture tiers](docs/TIERS.md) and [API maturity](docs/STABLE_API.md) are
151
+ separate. A tier name does not promote an experimental API. For changing a live
152
+ screen, read [mutation/ownership examples](docs/MUTATIONS.md).
153
+
154
+ ## Preview limits
155
+
156
+ Current migration checks are recorded in [verification](docs/VERIFICATION.md).
157
+ Earlier pre-rename results identify their original inputs and are historical evidence.
158
+
159
+ Recorded checks include Windows browser automation and a separate Windows
160
+ Tauri/WebView2 acceptance stand. Programmatic/synthetic input is distinguished
161
+ from physical input in [verification](docs/VERIFICATION.md).
162
+ macOS and Linux native hosts are **not verified**. macOS will be checked in a new
163
+ consumer project after GitHub publication; it is not a blocker for this preview.
164
+ Real IME, screen-reader, native file-dialog and mixed-DPI acceptance remain unverified.
165
+
166
+ Grid row transfer is local and opt-in. Tree subtree movement is inside one local
167
+ tree; cross-tree copy/move and remote/custom providers are outside that contract.
168
+ Raster/Painter/StockChart/FlatFile/Spectrum/Pivot are [deferred extensions](docs/EXTENSIONS.md).
169
+
170
+ For contributors: [setup/checks](CONTRIBUTING.md), [AI entry point](docs/AI_CONTEXT.md),
171
+ [preview version recommendations](docs/VERSIONING.md), [changelog](CHANGELOG.md), [security](SECURITY.md).
172
+ Browser tests additionally require matching Playwright binaries; `npm ci` alone
173
+ does not install them. After npm ci, use `npx playwright install chromium firefox webkit`.
174
+ For selective Windows project flags, use the direct-node commands in
175
+ [release checks](docs/RELEASE.md). Exact remote CI and publication outcomes are
176
+ linked from the matching GitHub prerelease notes.
177
+
178
+ Tæt UI is [MIT](LICENSE). Local Noto Sans is OFL; retain its license and
179
+ [third-party notices](THIRD_PARTY_NOTICES.md) when distributing assets.
package/SECURITY.md ADDED
@@ -0,0 +1,37 @@
1
+ # Security
2
+
3
+ This pre-1.0 project does not currently offer a supported-version security policy. The development HTTP server is for trusted local development, not production hosting.
4
+
5
+ After GitHub publication, use the repository's private vulnerability reporting channel when enabled. Do not post credentials, personal data or exploit details in public issues. The publication checklist requires enabling that channel before advertising it as available.
6
+
7
+ Reports should identify the affected revision, component, reproducible trigger and impact. Use synthetic or anonymized datasets.
8
+
9
+ ## Data and application-code boundaries
10
+
11
+ Built-in TextLayout, CodeBlock, list captions and default Grid cells display text
12
+ as text, not HTML. Imported JSON definitions are data; field identifiers including
13
+ `__proto__` remain own data properties. Regression cases cover these boundaries.
14
+ Custom renderers returning DOM Nodes, factories, validators, icon registrations
15
+ and service callbacks are trusted application code: Tæt UI does not sandbox them.
16
+ Do not construct such callbacks from imported strings or untrusted code.
17
+
18
+ Select/TreeGrid image URLs are assigned to image elements. They can cause network
19
+ requests; applications must decide which origins and image sources are acceptable.
20
+ Text escaping does not provide network isolation. Deploy an appropriate host origin,
21
+ navigation and content policy; the local development server is not that policy.
22
+
23
+ ## Files and exported data
24
+
25
+ Specialized file parsers and preview pipelines are deferred extensions and are not included in this candidate.
26
+
27
+ CSV/TSV exporters preserve raw values by default. For spreadsheet-oriented output,
28
+ use `gridExporters.csv({ escapeFormulas: true })` (also available for TSV and the
29
+ generic delimited exporter). It prefixes formula-like string values and headers
30
+ with an apostrophe, including leading whitespace/control-character cases, while
31
+ preserving numeric values. This changes exported text and is deliberately opt-in.
32
+ It is not a guarantee for every spreadsheet application or subsequent re-export;
33
+ review the receiving application's import policy. Workbook descriptors retain raw
34
+ values and require the downstream writer to choose cell types safely.
35
+
36
+ The current hardening review is a scoped internal audit, not a security certification
37
+ or an exhaustive review of every renderer, host integration and input format.
@@ -0,0 +1,45 @@
1
+ # Third-party notices
2
+
3
+ Tæt UI source is licensed under [MIT](LICENSE). Core has no npm runtime dependencies. No external icon font or icon package is bundled; icons are implemented in the source registry.
4
+
5
+ Development tests use [Playwright](https://github.com/microsoft/playwright), licensed under Apache-2.0. Installed packages and downloaded browser distributions retain their own notices and are not included in the Tæt UI package.
6
+
7
+ Declaration and package-consumer tests use [TypeScript](https://github.com/microsoft/TypeScript), licensed under Apache-2.0. It is a development dependency and is not shipped in the Tæt UI package or required at runtime.
8
+
9
+ New third-party source, artwork or fonts must include attribution and license. This inventory describes the checked-in tree and manifests, not undisclosed historical provenance.
10
+
11
+ ## Default UI font
12
+
13
+ `src/ui/fonts/NotoSans-variable.woff2` is a container-only conversion of the Google
14
+ Fonts Noto Sans upright variable font, bundled locally under SIL OFL 1.1. All
15
+ glyphs, metrics, hinting and variation tables are preserved; no subsetting is used.
16
+ Copyright and full license: `src/ui/fonts/NotoSans-OFL.txt` in source/package
17
+ delivery, or `fonts/NotoSans-OFL.txt` beside a portable bundle.
18
+ Source/conversion provenance is in the repository file `src/ui/fonts/README.md`.
19
+ Runtime WOFF2 SHA-256: `7ed77c38412a34312e975abcd5eb2b2848a596f1921393f925a53a27938eb116`.
20
+ The font license is separate from Tæt UI's MIT license.
21
+
22
+ ## Optional font comparison Lab
23
+
24
+ `examples/labs/fonts/NotoSans-variable.ttf` and `Roboto-variable.ttf` are original
25
+ Google Fonts distributions under SIL OFL 1.1. Their respective copyright and license
26
+ files are `NotoSans-OFL.txt` and `Roboto-OFL.txt` in the same directory; exact sources
27
+ and file hashes are recorded in `sources.json`. The Lab copies are not packaged; the Noto Sans runtime copy is described above.
28
+ Roboto is only used in the comparison. Segoe UI is accessed
29
+ from the host OS only and is not redistributed.
30
+
31
+ ## Theme Designer color math
32
+
33
+ The Theme Designer OKLab conversion uses the public-domain matrix implementation
34
+ by Björn Ottosson (2021 revision), with local JavaScript sRGB transfer functions
35
+ and chroma gamut search. Source and permission: https://bottosson.github.io/posts/oklab/ .
36
+ No color library or new runtime dependency is included.
37
+
38
+ ## Build tool
39
+
40
+ Portable bundles use esbuild (MIT) as a development/build dependency. Its code is
41
+ not a required runtime library in the Tæt UI delivery. Source: https://github.com/evanw/esbuild .
42
+
43
+ An optional Tauri source example has separate Rust host dependencies. Those are
44
+ not Tæt UI JavaScript runtime dependencies; source users retain their upstream
45
+ licenses. A distributed native binary needs its own resolved dependency notice review.
@@ -0,0 +1,23 @@
1
+ # Tæt UI: start here
2
+
3
+ 0.6.0-rc.4 is a dependency-free desktop/WebView preview.
4
+
5
+ 1. Read [LLM_GUIDE](LLM_GUIDE.md), then one [AI_MAP](AI_MAP.md) row.
6
+ 2. Read its exact public .d.ts and one recipe before guessing a method.
7
+ 3. [TIERS](TIERS.md) is architecture; [STABLE_API](STABLE_API.md) is maturity.
8
+ 4. To change existing UI read [MUTATIONS](MUTATIONS.md).
9
+
10
+ Use live controls. Form owns composed rows/columns before mount; general Panel
11
+ must be mounted before add/attach. One child has one owner. Form.remove and owned
12
+ child.destroy forget fields/values/slots. Duplicate keys fail before ownership/mount.
13
+ Fields use .value; collections mutate through DataStore. Silent still synchronizes
14
+ UI/models without semantic events. Options are not reactive property assignments.
15
+ Destroy the owner; release borrowed application services separately. Register
16
+ external cleanup as () => service.destroy(), not the Control object itself.
17
+
18
+ Portable apps use one JS profile with matching CSS/fonts/licenses. Never mix
19
+ source, bundles or separately built profiles in one document. Grid changes require explicit approval and candidate hash updates;
20
+ run regressions after table/shared changes. [Common table contract](GRID_COMMON_CONTRACT.md). Specialized extensions are absent:
21
+ [EXTENSIONS](EXTENSIONS.md). HostBridge/general JSON engine are not supplied.
22
+ Concrete existing JSON factories remain with components. Reports/proposals are not
23
+ shipped implementations. Current work: [ROADMAP](../ROADMAP.md), [checks](VERIFICATION.md).
package/docs/AI_MAP.md ADDED
@@ -0,0 +1,19 @@
1
+ # Task, contract and source map
2
+
3
+ Read one row, exact types and one recipe before changing behavior.
4
+
5
+ | Task | Contract / types | Source / regression |
6
+ | --- | --- | --- |
7
+ | Lifecycle / focus | [control contract](CONTROL_TYPES.md), [BaseControl](../src/core/BaseControl.d.ts) | [BaseControl source](../src/core/BaseControl.js), [regressions](../test/foundation-regressions.test.js) |
8
+ | Form / ownership / live edits | [containers](../src/ui/container-contracts.d.ts), [mutations](MUTATIONS.md) | [Panel](../src/ui/Panel.js), [Form](../src/ui/Form.js), [browser](../browser-tests/foundation-regressions.spec.js), [recipe](../examples/ai-recipes/01-basic-form.js) |
9
+ | Events / values / validation | [inputs](INPUT_TYPES.md), [EditorControl types](../src/ui/EditorControl.d.ts) | [EventBus](../src/core/EventBus.js), [EditorControl](../src/ui/EditorControl.js), [recipe](../examples/ai-recipes/02-validation-form.js) |
10
+ | Data / projections / selection | [model contracts](DATA_MODEL_TYPES.md), [core types](../src/core/index.d.ts) | [DataStore](../src/core/DataStore.js), [DataView](../src/core/DataView.js), [TreeDataView](../src/core/TreeDataView.js) |
11
+ | Commands / shortcuts | [command types](../src/core/CommandRegistry.d.ts), [keyboard](../spec/15-shortcut-manager.md) | [ShortcutManager](../src/core/ShortcutManager.js), [recipe](../examples/ai-recipes/04-toolbar-commands.js) |
12
+ | Theme service / editor | [applicator](../src/ui/ThemeApplicator.d.ts), [designer](../src/ui/ThemeDesigner.d.ts) | [applicator source](../src/ui/ThemeApplicator.js), [browser](../browser-tests/theme-applicator.spec.js) |
13
+ | Existing JSON factories | [Form](FORM_JSON.md), [Grid](GRID_JSON.md), [collections](COLLECTION_JSON.md) | FormDefinition/GridDefinition/TreeDefinition and their existing regressions |
14
+ | Grid / TreeGrid | [guide](GRID_TYPES.md), [menu/gutter](GRID_MENUS.md), [layout/selection](GRID_COLUMN_LAYOUT.md), [row transfer](GRID_TRANSFER.md), [subtree move](TREE_GRID_MOVE.md), [editors](GRID_EDITOR_MATRIX.md), [exact entry](../src/ui/grid-api.d.ts) | [Grid](../src/ui/Grid.js), [TreeGrid](../src/ui/TreeGrid.js), [candidate-hash guard](../scripts/check-package-boundaries.js), [recipe](../examples/ai-recipes/05-grid-readonly.js) |
15
+ | Lists / properties / inputs | [collections](../src/ui/collection-contracts.d.ts), [inputs](../src/ui/inputs.d.ts) | [PropertyGrid](../src/ui/PropertyGrid.js), [List](../src/ui/List.js), [recipe](../examples/ai-recipes/06-property-grid.js) |
16
+ | Existing Advanced | [entry](../src/advanced/index.d.ts), [Chart](CHARTS.md) | MDI/docking/mapping, Chart/Gauge, ThemeDesigner; no new advanced features here |
17
+
18
+ Current [tiers](TIERS.md), [maturity](STABLE_API.md), [build](BUILD.md),
19
+ [release gates](RELEASE.md), [verification](VERIFICATION.md), [extensions](EXTENSIONS.md).
@@ -0,0 +1,7 @@
1
+ # Focused lookup
2
+
3
+ Use [AI_MAP](AI_MAP.md) for exact declarations, not duplicated signatures.
4
+ [Mutations](MUTATIONS.md), [inputs](INPUT_TYPES.md), [models](DATA_MODEL_TYPES.md),
5
+ [Grid](GRID_TYPES.md), [editors](GRID_EDITOR_TYPES.md), [tiers](TIERS.md),
6
+ [maturity](STABLE_API.md), [delivery](BUILD.md), [native limits](NATIVE_ACCEPTANCE.md)
7
+ and [extensions](EXTENSIONS.md) are current. History is retained in the archive.
package/docs/BUILD.md ADDED
@@ -0,0 +1,42 @@
1
+ # Portable delivery
2
+
3
+ From a source checkout run npm ci and npm run build. Exact-pinned esbuild is
4
+ build-only. Runtime does not require Node/Python or a server.
5
+
6
+ Dist contains readable/minified ESM/CSS/maps, fonts/NotoSans-variable.woff2 + OFL,
7
+ LICENSE/notices/README, size-report and full/components/foundation metafiles.
8
+ The full profile is dist/; alternatives are dist/components/ and dist/foundation/.
9
+ Full contains retained stable/experimental APIs plus Advanced. Components contains
10
+ foundation+ordinary controls; Foundation has no component constructors.
11
+
12
+ Use one profile per document with matching CSS/fonts/notices. Profiles are separate
13
+ library instances. Complete shared CSS/fonts are retained deliberately; no unsafe
14
+ style purging. Specialized workers/reader profile are not shipped.
15
+
16
+ ES2022 is a syntax target, not API polyfills. Use HTTP/WebView origin, not file://
17
+ as a portability assumption. Maps embed sources and can be omitted from production.
18
+ Bundles do not flatten declarations; typed users use package entries.
19
+
20
+ size-report includes hashes, compression estimates, modules and source provenance.
21
+ Git state may be not-versioned/uncommitted/dirty/clean; no clean commit is invented.
22
+ Content SHA-256, immutable imported snapshot hash and approved Grid candidate
23
+ manifest hash identify pre-commit builds.
24
+ Run check-bundle.js and test:bundle. Native limits: [NATIVE_ACCEPTANCE](NATIVE_ACCEPTANCE.md).
25
+
26
+ ## Standalone release archives
27
+
28
+ Each profile now has readable/minified ESM (`taet-ui[.min].js`) and classic IIFE
29
+ (`taet-ui.global[.min].js`, global `TaetUI`) plus matching CSS and source maps.
30
+ These are alternative instances: use one profile/format in a document.
31
+ `npm run distribution` builds and packages full/components/foundation ZIPs in
32
+ ignored distribution/. `npm run distribution -- --release` requires a clean
33
+ commit and matching current build provenance. Archives include a working classic
34
+ and ESM example, fonts/OFL, MIT/notices, PROVENANCE.json and SHA256SUMS.txt.
35
+ Source maps embed public framework code. Keep them for debugging or omit them
36
+ from a deployed host; JS/CSS/fonts/licenses must remain together.
37
+
38
+ The automated browser harness uses scripts/test-server.js (Node built-in HTTP).
39
+ It serves exact Buffer bytes/Content-Length and only binds loopback. The runner
40
+ checks its own child PID in readiness responses and reports fixture stderr.
41
+ The existing Python dev/docs server remains available. No app runtime server is
42
+ required by either portable format. Source npm exports remain typed ESM.
package/docs/CHARTS.md ADDED
@@ -0,0 +1,129 @@
1
+ # Charts (experimental)
2
+
3
+ `Chart` and `Gauge` are exported by `taet-ui/experimental`, `taet-ui/all` and the
4
+ full portable bundle. They are original Tæt UI implementations, with no runtime
5
+ dependencies. DHTMLX's locally supplied public declarations were inspected for
6
+ feature vocabulary; no proprietary renderer or source was incorporated.
7
+
8
+ ```js
9
+ import { Chart, Gauge } from './taet-ui.min.js';
10
+ const chart = new Chart('#plot', {
11
+ label: 'Monthly orders', type: 'spline', markers: true, height: 320,
12
+ categoryField: 'month',
13
+ series: [{ id: 'orders', valueField: 'count', label: 'Orders' }]
14
+ });
15
+ chart.data.parse([{ id: 1, month: 'January', count: 42 },
16
+ { id: 2, month: 'February', count: 58 }]);
17
+ chart.events.on('itemClick', ({ item, seriesId, value }) => {
18
+ // Host-owned action, e.g. navigate to the selected month.
19
+ });
20
+ const gauge = new Gauge('#capacity', { label: 'Capacity', min: 0, max: 200,
21
+ value: 136, textMode: 'value', width: 280 });
22
+ gauge.value.set(150);
23
+ // On teardown: chart.destroy(); gauge.destroy();
24
+ ```
25
+
26
+ Link the matching bundle CSS once. The docs workbench itself uses source modules.
27
+
28
+ ## Models and presentation
29
+
30
+ | Requested presentation | API |
31
+ | --- | --- |
32
+ | Basic / BasicMarkers | `type: 'line'`, `markers: false / true` |
33
+ | Spline / SplineMarkers | `type: 'spline'`, `markers: false / true` |
34
+ | Column | `type: 'column'` (grouped vertical columns) |
35
+ | StackedColumn | `type: 'stackedColumn'` |
36
+ | StackedColumn 100% | `type: 'stackedColumn100'` |
37
+ | Bar | `type: 'bar'` (grouped horizontal bars) |
38
+ | Gauge | Separate `Gauge`, sharing ProgressBar's value/range contract |
39
+
40
+ Each record is a category, in store order; series read numeric fields from it.
41
+ Only finite **numbers** are measurements: missing/non-numeric values create gaps,
42
+ not zeros. Spline uses monotone cubic Hermite interpolation and splits at gaps.
43
+ An isolated point needs markers to be visible without hover/focus. The X axis is
44
+ categorical even when its label looks like a timestamp; intervals are equally spaced.
45
+
46
+ Columns and bars always include zero; Line/Spline/Area can use `includeZero:false`.
47
+ Positive/negative stack accumulators are separate.
48
+ 100% stacks normalize positive and negative totals independently to +100/-100;
49
+ zero totals stay zero. Hidden series do not contribute. Tooltips/events retain
50
+ raw values. If a raw stack sum overflows the finite numeric range, the chart
51
+ shows an error message instead of emitting invalid SVG geometry.
52
+
53
+ `data` is an owned DataStore unless a store is supplied. Normal parse/update/clear/
54
+ batch operations invalidate the display, including `silent` writes. A borrowed
55
+ store survives chart destruction. `getSeries()` returns detached descriptors;
56
+ use `setSeries`, `setType`, `setMarkers` and `setSeriesVisible` to change configuration.
57
+ IDs and valueField strings are required for each series; IDs must be unique.
58
+
59
+ `seriesVisibilityChange` reports `seriesId`, `visible`, `origin`, `userAction`;
60
+ `silent` suppresses this event but still repaints. `itemClick` reports `item`, typed
61
+ `id`, `seriesId`, raw `value` and `category`, with user mutation metadata.
62
+
63
+ ## Rendering, theme and interaction
64
+
65
+ - SVG paths, bars and markers; native SVG title tooltips. Labels are plain text.
66
+ - Automatic container resize handling. Default height is 320px; minimum plotted
67
+ viewBox is 240x140. Very small containers scale that viewBox down.
68
+ - One pending animation-frame callback coalesces invalidations. No idle frame loop,
69
+ animation, polling, document-level pointer handler or network request.
70
+ - SVG is O(records × visible series); this is not a virtualized or decimated renderer.
71
+ V1 targets small/medium datasets. Thousands of SVG points require host measurement.
72
+ - Theme tokens control background, text, gridlines and the first accent series.
73
+ Series 2–6 have distinct fallback colors; override `--dui-chart-series-1` … `-6`
74
+ on the chart or use a series `color`. Colors repeat after six series. No claim of
75
+ automatic palette contrast or colorblind-safe differentiation.
76
+ - Legend entries are keyboard buttons. One Tab stop enters plotted values; arrows
77
+ and Home/End navigate, Enter/Space activates. Each point has an accessible label.
78
+ Disabled charts ignore point activation and disable the legend.
79
+ - Gauge is a read-only meter (not progress completion and not CircularSlider).
80
+ Range clamping, clean/reset, silent updates and formatting follow ProgressBar.
81
+ Theme controls its track/needle/arc; `--dui-gauge-color` overrides the arc.
82
+
83
+ ## Deliberate v1 limits and verification entry points
84
+
85
+ No mixed-type charts, pie/radar, numeric/time X scales, fixed axis bounds,
86
+ zoom/pan, decimation, remote paging, HTML formatter injection or image export.
87
+ Native tooltip timing and real screen-reader speech are not browser-test guarantees.
88
+
89
+ See `test/chart.test.js` (math/model), `browser-tests/charts.spec.js` (rendering,
90
+ interaction/lifetime), `test/types/chart-consumer.ts` (installed declarations),
91
+ `npm run test:charts` (Chromium/Firefox/WebKit). Live examples: Components → Charts
92
+ and `/examples/labs/charts.html`. Public declarations: Chart.d.ts and Gauge.d.ts.
93
+
94
+ ## Financial and area charts
95
+
96
+ `type:'candlestick'` draws Japanese candles, including doji (open equals close).
97
+ `wickCaps:true` adds horizontal caps at high/low; `setWickCaps` toggles them.
98
+ `type:'ohlc'` draws the low/high stem, open tick left and close tick right.
99
+
100
+ ```js
101
+ const prices = new Chart('#prices', {
102
+ type: 'candlestick', wickCaps: true,
103
+ series: [{ id: 'price', label: 'Price',
104
+ ohlc: { open: 'o', high: 'h', low: 'l', close: 'c' } }]
105
+ });
106
+ prices.data.parse([{ id: 1, label: 'Monday', o: 102, h: 108, l: 100, c: 106 }]);
107
+ ```
108
+
109
+ `series.ohlc` maps all four fields, and supplies its close field as valueField
110
+ when omitted. Without an explicit OHLC mapping, financial types use standard
111
+ `open/high/low` fields and the series valueField as close. All four must be finite
112
+ numbers, with low <= open/close <= high. Invalid records are skipped in place;
113
+ no silent correction or filling. Event `value` is close; `itemClick.ohlc` supplies
114
+ all four numeric values. Tooltip/accessibility text also contains all four.
115
+
116
+ Financial axes default to low/high extents plus 5% padding, not zero; use
117
+ `includeZero:true` to include zero explicitly. Flat ranges receive a nonzero span.
118
+ Direction is close versus open: rising/falling/doji. CSS tokens `--dui-chart-up`,
119
+ `--dui-chart-down`, `--dui-chart-neutral` customize those colors independently of
120
+ series colors. Negative prices are supported.
121
+
122
+ `type:'area'` fills each contiguous line segment separately. Default baseline is
123
+ zero; with `includeZero:false` it is the closest plotted bound to zero. This is
124
+ a truncated price axis, not a claim that the shaded area represents total value.
125
+ Missing values leave unfilled gaps. Series overlap translucently rather than stack.
126
+ `markers:true` also works for Area. No animation, calendars, automatic time sorting,
127
+ market aggregation or indicators are introduced. See Components → Charts → Financial Charts.
128
+
129
+ For interactive time-based price/volume charts, use separate StockChart (deferred extension; see [extension boundaries](EXTENSIONS.md)). Categorical Chart retains its existing contract.