@motifx-community/ui 0.0.0-stage → 0.1.0-beta.1

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 (1197) hide show
  1. package/CHANGELOG.md +1821 -0
  2. package/LICENSE +21 -0
  3. package/README.md +139 -3
  4. package/dist/components/accordion/Accordion.d.ts +100 -0
  5. package/dist/components/accordion/AccordionItem.d.ts +66 -0
  6. package/dist/components/accordion/accordion-chevron.d.ts +2 -0
  7. package/dist/components/accordion/accordion-expanded-event-args.d.ts +9 -0
  8. package/dist/components/accordion/accordion-expanding-event-args.d.ts +10 -0
  9. package/dist/components/accordion/accordion-item-props.d.ts +25 -0
  10. package/dist/components/accordion/accordion-props.d.ts +38 -0
  11. package/dist/components/accordion/accordion-variant.d.ts +2 -0
  12. package/dist/components/accordion/index.d.ts +8 -0
  13. package/dist/components/actionsheet/ActionSheet.d.ts +61 -0
  14. package/dist/components/actionsheet/action-sheet-props.d.ts +17 -0
  15. package/dist/components/actionsheet/index.d.ts +2 -0
  16. package/dist/components/avatar/Avatar.d.ts +54 -0
  17. package/dist/components/avatar/AvatarGroup.d.ts +41 -0
  18. package/dist/components/avatar/avatar-group-layout.d.ts +2 -0
  19. package/dist/components/avatar/avatar-group-props.d.ts +17 -0
  20. package/dist/components/avatar/avatar-props.d.ts +25 -0
  21. package/dist/components/avatar/avatar-shape.d.ts +2 -0
  22. package/dist/components/avatar/avatar-size.d.ts +2 -0
  23. package/dist/components/avatar/avatar-status.d.ts +2 -0
  24. package/dist/components/avatar/avatar-tone.d.ts +2 -0
  25. package/dist/components/avatar/index.d.ts +11 -0
  26. package/dist/components/avatar/initials-of.d.ts +6 -0
  27. package/dist/components/avatar/tone-of-name.d.ts +3 -0
  28. package/dist/components/badge/Badge.d.ts +53 -0
  29. package/dist/components/badge/badge-position.d.ts +2 -0
  30. package/dist/components/badge/badge-props.d.ts +27 -0
  31. package/dist/components/badge/badge-tone.d.ts +2 -0
  32. package/dist/components/badge/badge-variant.d.ts +2 -0
  33. package/dist/components/badge/index.d.ts +5 -0
  34. package/dist/components/breadcrumb/Breadcrumb.d.ts +56 -0
  35. package/dist/components/breadcrumb/breadcrumb-item-click-event-args.d.ts +10 -0
  36. package/dist/components/breadcrumb/breadcrumb-item.d.ts +13 -0
  37. package/dist/components/breadcrumb/breadcrumb-props.d.ts +21 -0
  38. package/dist/components/breadcrumb/index.d.ts +4 -0
  39. package/dist/components/button/Button.d.ts +117 -0
  40. package/dist/components/button/button-props.d.ts +45 -0
  41. package/dist/components/button/button-size.d.ts +3 -0
  42. package/dist/components/button/button-tone.d.ts +2 -0
  43. package/dist/components/button/button-variant.d.ts +2 -0
  44. package/dist/components/buttongroup/ButtonGroup.d.ts +79 -0
  45. package/dist/components/buttongroup/button-group-item-click-event-args.d.ts +8 -0
  46. package/dist/components/buttongroup/button-group-item.d.ts +15 -0
  47. package/dist/components/buttongroup/button-group-props.d.ts +36 -0
  48. package/dist/components/buttongroup/button-group-selection.d.ts +2 -0
  49. package/dist/components/buttongroup/button-group-value-changed-event-args.d.ts +8 -0
  50. package/dist/components/buttongroup/index.d.ts +6 -0
  51. package/dist/components/calendar/Calendar.d.ts +70 -0
  52. package/dist/components/calendar/calendar-props.d.ts +26 -0
  53. package/dist/components/calendar/calendar-view.d.ts +2 -0
  54. package/dist/components/calendar/index.d.ts +3 -0
  55. package/dist/components/card/Card.d.ts +92 -0
  56. package/dist/components/card/card-orientation.d.ts +2 -0
  57. package/dist/components/card/card-props.d.ts +44 -0
  58. package/dist/components/card/card-selected-changed-event-args.d.ts +7 -0
  59. package/dist/components/card/card-variant.d.ts +2 -0
  60. package/dist/components/card/index.d.ts +5 -0
  61. package/dist/components/checkbox/CheckBox.d.ts +34 -0
  62. package/dist/components/checkbox/ToggleField.d.ts +26 -0
  63. package/dist/components/checkbox/check-box-props.d.ts +7 -0
  64. package/dist/components/checkbox/index.d.ts +5 -0
  65. package/dist/components/checkbox/label-position.d.ts +2 -0
  66. package/dist/components/checkbox/toggle-field-props.d.ts +10 -0
  67. package/dist/components/chip/Chip.d.ts +86 -0
  68. package/dist/components/chip/ChipGroup.d.ts +45 -0
  69. package/dist/components/chip/chip-group-props.d.ts +16 -0
  70. package/dist/components/chip/chip-group-selection.d.ts +2 -0
  71. package/dist/components/chip/chip-group-value-changed-event-args.d.ts +8 -0
  72. package/dist/components/chip/chip-props.d.ts +34 -0
  73. package/dist/components/chip/chip-remove-event-args.d.ts +7 -0
  74. package/dist/components/chip/chip-selected-changed-event-args.d.ts +7 -0
  75. package/dist/components/chip/chip-tone.d.ts +2 -0
  76. package/dist/components/chip/chip-variant.d.ts +2 -0
  77. package/dist/components/chip/index.d.ts +10 -0
  78. package/dist/components/colorbox/ColorBox.d.ts +55 -0
  79. package/dist/components/colorbox/color-box-apply.d.ts +2 -0
  80. package/dist/components/colorbox/color-box-props.d.ts +15 -0
  81. package/dist/components/colorbox/index.d.ts +3 -0
  82. package/dist/components/colorpicker/ColorPicker.d.ts +66 -0
  83. package/dist/components/colorpicker/color-changed-event-args.d.ts +8 -0
  84. package/dist/components/colorpicker/color-picker-props.d.ts +17 -0
  85. package/dist/components/colorpicker/index.d.ts +4 -0
  86. package/dist/components/combobox/Autocomplete.d.ts +17 -0
  87. package/dist/components/combobox/ComboBox.d.ts +103 -0
  88. package/dist/components/combobox/combo-box-props.d.ts +37 -0
  89. package/dist/components/combobox/index.d.ts +3 -0
  90. package/dist/components/contextmenu/ContextMenu.d.ts +96 -0
  91. package/dist/components/contextmenu/attach-context-menu.d.ts +12 -0
  92. package/dist/components/contextmenu/context-menu-opening-event-args.d.ts +16 -0
  93. package/dist/components/contextmenu/context-menu-presentation.d.ts +2 -0
  94. package/dist/components/contextmenu/context-menu-props.d.ts +30 -0
  95. package/dist/components/contextmenu/context-menu-target.d.ts +3 -0
  96. package/dist/components/contextmenu/index.d.ts +6 -0
  97. package/dist/components/datagrid/DataGrid.d.ts +1194 -0
  98. package/dist/components/datagrid/band-cell-context.d.ts +7 -0
  99. package/dist/components/datagrid/band-layout.d.ts +7 -0
  100. package/dist/components/datagrid/built-in-action.d.ts +3 -0
  101. package/dist/components/datagrid/cell-context.d.ts +14 -0
  102. package/dist/components/datagrid/column-features.d.ts +68 -0
  103. package/dist/components/datagrid/column-filter.d.ts +20 -0
  104. package/dist/components/datagrid/column-layout.d.ts +10 -0
  105. package/dist/components/datagrid/column-option-name.d.ts +7 -0
  106. package/dist/components/datagrid/column-resize-mode.d.ts +2 -0
  107. package/dist/components/datagrid/column-type.d.ts +2 -0
  108. package/dist/components/datagrid/data-grid-props.d.ts +353 -0
  109. package/dist/components/datagrid/detail-context.d.ts +13 -0
  110. package/dist/components/datagrid/editor-context.d.ts +26 -0
  111. package/dist/components/datagrid/grid-action-item.d.ts +4 -0
  112. package/dist/components/datagrid/grid-action-location.d.ts +2 -0
  113. package/dist/components/datagrid/grid-action-ran-event-args.d.ts +17 -0
  114. package/dist/components/datagrid/grid-action-run.d.ts +10 -0
  115. package/dist/components/datagrid/grid-action-running-event-args.d.ts +13 -0
  116. package/dist/components/datagrid/grid-action.d.ts +55 -0
  117. package/dist/components/datagrid/grid-adaptive-detail-row-preparing-event-args.d.ts +14 -0
  118. package/dist/components/datagrid/grid-adaptive-detail.d.ts +25 -0
  119. package/dist/components/datagrid/grid-adaptive-form-options.d.ts +10 -0
  120. package/dist/components/datagrid/grid-adaptive-row-expanded-event-args.d.ts +7 -0
  121. package/dist/components/datagrid/grid-adaptive-row-expanding-event-args.d.ts +8 -0
  122. package/dist/components/datagrid/grid-band.d.ts +38 -0
  123. package/dist/components/datagrid/grid-bar-action.d.ts +14 -0
  124. package/dist/components/datagrid/grid-built-in-actions.d.ts +14 -0
  125. package/dist/components/datagrid/grid-cell-click-event-args.d.ts +16 -0
  126. package/dist/components/datagrid/grid-cell-extend-keys.d.ts +22 -0
  127. package/dist/components/datagrid/grid-cell-point.d.ts +10 -0
  128. package/dist/components/datagrid/grid-cell-prepared-event-args.d.ts +13 -0
  129. package/dist/components/datagrid/grid-cell-range.d.ts +11 -0
  130. package/dist/components/datagrid/grid-cell-selection-changed-event-args.d.ts +7 -0
  131. package/dist/components/datagrid/grid-cell-selection-changing-event-args.d.ts +9 -0
  132. package/dist/components/datagrid/grid-cell-summary-item.d.ts +2 -0
  133. package/dist/components/datagrid/grid-cell-summary.d.ts +14 -0
  134. package/dist/components/datagrid/grid-cell-value.d.ts +9 -0
  135. package/dist/components/datagrid/grid-changes.d.ts +10 -0
  136. package/dist/components/datagrid/grid-column-form-item.d.ts +16 -0
  137. package/dist/components/datagrid/grid-column-item.d.ts +4 -0
  138. package/dist/components/datagrid/grid-column.d.ts +190 -0
  139. package/dist/components/datagrid/grid-content-ready-event-args.d.ts +5 -0
  140. package/dist/components/datagrid/grid-context-menu-preparing-event-args.d.ts +15 -0
  141. package/dist/components/datagrid/grid-copying-event-args.d.ts +13 -0
  142. package/dist/components/datagrid/grid-custom-summary-info.d.ts +17 -0
  143. package/dist/components/datagrid/grid-data-error-event-args.d.ts +8 -0
  144. package/dist/components/datagrid/grid-date-interval.d.ts +2 -0
  145. package/dist/components/datagrid/grid-edit-canceled-event-args.d.ts +4 -0
  146. package/dist/components/datagrid/grid-edit-canceling-event-args.d.ts +8 -0
  147. package/dist/components/datagrid/grid-edit-form.d.ts +22 -0
  148. package/dist/components/datagrid/grid-edit-popup.d.ts +22 -0
  149. package/dist/components/datagrid/grid-editing-cell.d.ts +6 -0
  150. package/dist/components/datagrid/grid-editing-start-event-args.d.ts +14 -0
  151. package/dist/components/datagrid/grid-editor-prepared-event-args.d.ts +18 -0
  152. package/dist/components/datagrid/grid-editor-preparing-event-args.d.ts +19 -0
  153. package/dist/components/datagrid/grid-export-cell.d.ts +26 -0
  154. package/dist/components/datagrid/grid-export-options.d.ts +35 -0
  155. package/dist/components/datagrid/grid-export-settings.d.ts +19 -0
  156. package/dist/components/datagrid/grid-export-texts.d.ts +11 -0
  157. package/dist/components/datagrid/grid-exported-event-args.d.ts +8 -0
  158. package/dist/components/datagrid/grid-exporting-event-args.d.ts +17 -0
  159. package/dist/components/datagrid/grid-filter-builder-closed-event-args.d.ts +6 -0
  160. package/dist/components/datagrid/grid-filter-builder-closing-event-args.d.ts +10 -0
  161. package/dist/components/datagrid/grid-filter-builder-opened-event-args.d.ts +7 -0
  162. package/dist/components/datagrid/grid-filter-builder-opening-event-args.d.ts +6 -0
  163. package/dist/components/datagrid/grid-filter-builder-options.d.ts +7 -0
  164. package/dist/components/datagrid/grid-filter-builder-popup.d.ts +22 -0
  165. package/dist/components/datagrid/grid-filter-changed-event-args.d.ts +12 -0
  166. package/dist/components/datagrid/grid-filter-changing-event-args.d.ts +15 -0
  167. package/dist/components/datagrid/grid-filter-operator.d.ts +2 -0
  168. package/dist/components/datagrid/grid-filter-panel-text-info.d.ts +6 -0
  169. package/dist/components/datagrid/grid-filter-value.d.ts +9 -0
  170. package/dist/components/datagrid/grid-filters.d.ts +3 -0
  171. package/dist/components/datagrid/grid-focused-cell-changed-event-args.d.ts +6 -0
  172. package/dist/components/datagrid/grid-focused-cell-changing-event-args.d.ts +13 -0
  173. package/dist/components/datagrid/grid-focused-row-changed-event-args.d.ts +7 -0
  174. package/dist/components/datagrid/grid-focused-row-changing-event-args.d.ts +7 -0
  175. package/dist/components/datagrid/grid-group-dropping-event-args.d.ts +11 -0
  176. package/dist/components/datagrid/grid-group-summary-item.d.ts +12 -0
  177. package/dist/components/datagrid/grid-grouping-changed-event-args.d.ts +7 -0
  178. package/dist/components/datagrid/grid-grouping-changing-event-args.d.ts +10 -0
  179. package/dist/components/datagrid/grid-header-filter-interval.d.ts +7 -0
  180. package/dist/components/datagrid/grid-header-filter-items-request.d.ts +12 -0
  181. package/dist/components/datagrid/grid-header-filter-items.d.ts +7 -0
  182. package/dist/components/datagrid/grid-init-new-row-event-args.d.ts +9 -0
  183. package/dist/components/datagrid/grid-key-handling-event-args.d.ts +11 -0
  184. package/dist/components/datagrid/grid-layout-changing-event-args.d.ts +7 -0
  185. package/dist/components/datagrid/grid-layout.d.ts +16 -0
  186. package/dist/components/datagrid/grid-load-panel.d.ts +11 -0
  187. package/dist/components/datagrid/grid-lookup.d.ts +47 -0
  188. package/dist/components/datagrid/grid-master-detail.d.ts +38 -0
  189. package/dist/components/datagrid/grid-mode.d.ts +2 -0
  190. package/dist/components/datagrid/grid-more-rows-loaded-event-args.d.ts +6 -0
  191. package/dist/components/datagrid/grid-more-rows-loading-event-args.d.ts +6 -0
  192. package/dist/components/datagrid/grid-option-changed-event-args.d.ts +14 -0
  193. package/dist/components/datagrid/grid-page-changed-event-args.d.ts +5 -0
  194. package/dist/components/datagrid/grid-page-changing-event-args.d.ts +6 -0
  195. package/dist/components/datagrid/grid-page-size-changed-event-args.d.ts +5 -0
  196. package/dist/components/datagrid/grid-page-size-changing-event-args.d.ts +6 -0
  197. package/dist/components/datagrid/grid-pasting-event-args.d.ts +7 -0
  198. package/dist/components/datagrid/grid-row-click-event-args.d.ts +13 -0
  199. package/dist/components/datagrid/grid-row-drag-event-args.d.ts +36 -0
  200. package/dist/components/datagrid/grid-row-dragging.d.ts +71 -0
  201. package/dist/components/datagrid/grid-row-drop-event-args.d.ts +9 -0
  202. package/dist/components/datagrid/grid-row-expanded-event-args.d.ts +10 -0
  203. package/dist/components/datagrid/grid-row-expanding-event-args.d.ts +15 -0
  204. package/dist/components/datagrid/grid-row-extend-keys.d.ts +7 -0
  205. package/dist/components/datagrid/grid-row-inserted-event-args.d.ts +6 -0
  206. package/dist/components/datagrid/grid-row-inserting-event-args.d.ts +7 -0
  207. package/dist/components/datagrid/grid-row-prepared-event-args.d.ts +14 -0
  208. package/dist/components/datagrid/grid-row-removed-event-args.d.ts +5 -0
  209. package/dist/components/datagrid/grid-row-removing-event-args.d.ts +6 -0
  210. package/dist/components/datagrid/grid-row-type.d.ts +2 -0
  211. package/dist/components/datagrid/grid-row-updated-event-args.d.ts +7 -0
  212. package/dist/components/datagrid/grid-row-updating-event-args.d.ts +9 -0
  213. package/dist/components/datagrid/grid-row-validating-event-args.d.ts +22 -0
  214. package/dist/components/datagrid/grid-saved-event-args.d.ts +7 -0
  215. package/dist/components/datagrid/grid-saving-event-args.d.ts +10 -0
  216. package/dist/components/datagrid/grid-search-text-changed-event-args.d.ts +4 -0
  217. package/dist/components/datagrid/grid-search-text-changing-event-args.d.ts +6 -0
  218. package/dist/components/datagrid/grid-selection-changed-event-args.d.ts +7 -0
  219. package/dist/components/datagrid/grid-selection-changing-event-args.d.ts +9 -0
  220. package/dist/components/datagrid/grid-selection.d.ts +16 -0
  221. package/dist/components/datagrid/grid-settings-props.d.ts +6 -0
  222. package/dist/components/datagrid/grid-settings.d.ts +354 -0
  223. package/dist/components/datagrid/grid-sheet-cell.d.ts +9 -0
  224. package/dist/components/datagrid/grid-sheet-column.d.ts +14 -0
  225. package/dist/components/datagrid/grid-sheet-merge.d.ts +9 -0
  226. package/dist/components/datagrid/grid-sheet-options.d.ts +24 -0
  227. package/dist/components/datagrid/grid-sheet-row.d.ts +8 -0
  228. package/dist/components/datagrid/grid-sheet.d.ts +24 -0
  229. package/dist/components/datagrid/grid-sort-changed-event-args.d.ts +7 -0
  230. package/dist/components/datagrid/grid-sort-changing-event-args.d.ts +9 -0
  231. package/dist/components/datagrid/grid-state-value.d.ts +19 -0
  232. package/dist/components/datagrid/grid-summary-changed-event-args.d.ts +7 -0
  233. package/dist/components/datagrid/grid-summary-item.d.ts +37 -0
  234. package/dist/components/datagrid/grid-summary-text-info.d.ts +7 -0
  235. package/dist/components/datagrid/grid-summary-texts.d.ts +15 -0
  236. package/dist/components/datagrid/grid-summary-type.d.ts +2 -0
  237. package/dist/components/datagrid/grid-summary-value.d.ts +10 -0
  238. package/dist/components/datagrid/grid-summary.d.ts +25 -0
  239. package/dist/components/datagrid/grid-toolbar-item-click-event-args.d.ts +9 -0
  240. package/dist/components/datagrid/grid-toolbar-item-name.d.ts +6 -0
  241. package/dist/components/datagrid/grid-toolbar-item.d.ts +34 -0
  242. package/dist/components/datagrid/grid-toolbar-preparing-event-args.d.ts +9 -0
  243. package/dist/components/datagrid/grid-toolbar.d.ts +15 -0
  244. package/dist/components/datagrid/grid-validation-callback-args.d.ts +13 -0
  245. package/dist/components/datagrid/grid-validation-rule.d.ts +74 -0
  246. package/dist/components/datagrid/grid-values-request.d.ts +13 -0
  247. package/dist/components/datagrid/grid-values-result.d.ts +6 -0
  248. package/dist/components/datagrid/grid-visible-row.d.ts +12 -0
  249. package/dist/components/datagrid/group-cell-context.d.ts +22 -0
  250. package/dist/components/datagrid/header-cell-context.d.ts +9 -0
  251. package/dist/components/datagrid/index.d.ts +161 -0
  252. package/dist/components/datagrid/layout-storage.d.ts +6 -0
  253. package/dist/components/datagrid/list-option.d.ts +5 -0
  254. package/dist/components/datagrid/model/ActionRunner.d.ts +28 -0
  255. package/dist/components/datagrid/model/ActionSets.d.ts +64 -0
  256. package/dist/components/datagrid/model/AdaptiveRow.d.ts +24 -0
  257. package/dist/components/datagrid/model/CellFormatter.d.ts +41 -0
  258. package/dist/components/datagrid/model/CellRanges.d.ts +88 -0
  259. package/dist/components/datagrid/model/CellRules.d.ts +34 -0
  260. package/dist/components/datagrid/model/ColumnModel.d.ts +251 -0
  261. package/dist/components/datagrid/model/ColumnWindow.d.ts +32 -0
  262. package/dist/components/datagrid/model/DetailRows.d.ts +42 -0
  263. package/dist/components/datagrid/model/ExtraHeights.d.ts +33 -0
  264. package/dist/components/datagrid/model/FilterModel.d.ts +113 -0
  265. package/dist/components/datagrid/model/FilterValues.d.ts +47 -0
  266. package/dist/components/datagrid/model/GridClipboard.d.ts +42 -0
  267. package/dist/components/datagrid/model/GridData.d.ts +193 -0
  268. package/dist/components/datagrid/model/GridEvents.d.ts +157 -0
  269. package/dist/components/datagrid/model/GridExport.d.ts +70 -0
  270. package/dist/components/datagrid/model/GridGroups.d.ts +61 -0
  271. package/dist/components/datagrid/model/GridModel.d.ts +475 -0
  272. package/dist/components/datagrid/model/GridNotices.d.ts +22 -0
  273. package/dist/components/datagrid/model/GridRowsAdapter.d.ts +19 -0
  274. package/dist/components/datagrid/model/GridSearch.d.ts +68 -0
  275. package/dist/components/datagrid/model/GridSummaries.d.ts +91 -0
  276. package/dist/components/datagrid/model/GroupView.d.ts +40 -0
  277. package/dist/components/datagrid/model/LayoutStore.d.ts +16 -0
  278. package/dist/components/datagrid/model/LiveOptions.d.ts +15 -0
  279. package/dist/components/datagrid/model/LookupTexts.d.ts +72 -0
  280. package/dist/components/datagrid/model/LookupValues.d.ts +23 -0
  281. package/dist/components/datagrid/model/RowDragOptions.d.ts +28 -0
  282. package/dist/components/datagrid/model/RowSelection.d.ts +86 -0
  283. package/dist/components/datagrid/model/ScrollGeometry.d.ts +84 -0
  284. package/dist/components/datagrid/model/Switches.d.ts +36 -0
  285. package/dist/components/datagrid/model/ValueIntervals.d.ts +27 -0
  286. package/dist/components/datagrid/model/ValueListAdapter.d.ts +17 -0
  287. package/dist/components/datagrid/model/action-entry.d.ts +22 -0
  288. package/dist/components/datagrid/model/action-target.d.ts +16 -0
  289. package/dist/components/datagrid/model/adaptive-detail-values.d.ts +11 -0
  290. package/dist/components/datagrid/model/added-row.d.ts +6 -0
  291. package/dist/components/datagrid/model/adjustment.d.ts +10 -0
  292. package/dist/components/datagrid/model/band-node.d.ts +8 -0
  293. package/dist/components/datagrid/model/builder-fields.d.ts +10 -0
  294. package/dist/components/datagrid/model/cell-corner.d.ts +8 -0
  295. package/dist/components/datagrid/model/cell-range-entry.d.ts +7 -0
  296. package/dist/components/datagrid/model/cell-value.d.ts +3 -0
  297. package/dist/components/datagrid/model/clipboard-content.d.ts +11 -0
  298. package/dist/components/datagrid/model/column-feature-names.d.ts +2 -0
  299. package/dist/components/datagrid/model/column-zone.d.ts +3 -0
  300. package/dist/components/datagrid/model/data-state.d.ts +11 -0
  301. package/dist/components/datagrid/model/date-like.d.ts +2 -0
  302. package/dist/components/datagrid/model/day-condition.d.ts +6 -0
  303. package/dist/components/datagrid/model/default-settings.d.ts +2 -0
  304. package/dist/components/datagrid/model/delimited-text.d.ts +4 -0
  305. package/dist/components/datagrid/model/export-table.d.ts +20 -0
  306. package/dist/components/datagrid/model/filter-tree-node.d.ts +11 -0
  307. package/dist/components/datagrid/model/filter-value-state.d.ts +8 -0
  308. package/dist/components/datagrid/model/formula-guard.d.ts +2 -0
  309. package/dist/components/datagrid/model/grid-data-options.d.ts +42 -0
  310. package/dist/components/datagrid/model/grid-state.d.ts +41 -0
  311. package/dist/components/datagrid/model/group-item-entry.d.ts +11 -0
  312. package/dist/components/datagrid/model/group-level.d.ts +12 -0
  313. package/dist/components/datagrid/model/group-node.d.ts +21 -0
  314. package/dist/components/datagrid/model/group-nodes.d.ts +7 -0
  315. package/dist/components/datagrid/model/html-table.d.ts +2 -0
  316. package/dist/components/datagrid/model/list-separator.d.ts +2 -0
  317. package/dist/components/datagrid/model/lookup-cell.d.ts +7 -0
  318. package/dist/components/datagrid/model/master-detail-values.d.ts +16 -0
  319. package/dist/components/datagrid/model/nothing-entered.d.ts +3 -0
  320. package/dist/components/datagrid/model/option-of.d.ts +6 -0
  321. package/dist/components/datagrid/model/parse-date-text.d.ts +6 -0
  322. package/dist/components/datagrid/model/paste-result.d.ts +9 -0
  323. package/dist/components/datagrid/model/placed-item.d.ts +19 -0
  324. package/dist/components/datagrid/model/range-box.d.ts +8 -0
  325. package/dist/components/datagrid/model/range-look.d.ts +18 -0
  326. package/dist/components/datagrid/model/read-field.d.ts +5 -0
  327. package/dist/components/datagrid/model/row-dragging-values.d.ts +24 -0
  328. package/dist/components/datagrid/model/row-run.d.ts +2 -0
  329. package/dist/components/datagrid/model/row-status.d.ts +2 -0
  330. package/dist/components/datagrid/model/rows-sorting.d.ts +7 -0
  331. package/dist/components/datagrid/model/run-panel.d.ts +7 -0
  332. package/dist/components/datagrid/model/same-value.d.ts +2 -0
  333. package/dist/components/datagrid/model/sticky-offset.d.ts +8 -0
  334. package/dist/components/datagrid/model/stored-layout.d.ts +15 -0
  335. package/dist/components/datagrid/model/summary-part.d.ts +7 -0
  336. package/dist/components/datagrid/model/text-ranges.d.ts +6 -0
  337. package/dist/components/datagrid/model/value-list.d.ts +12 -0
  338. package/dist/components/datagrid/model/value-loader.d.ts +8 -0
  339. package/dist/components/datagrid/new-row-options.d.ts +8 -0
  340. package/dist/components/datagrid/row-change.d.ts +7 -0
  341. package/dist/components/datagrid/row-state.d.ts +17 -0
  342. package/dist/components/datagrid/selection-mode.d.ts +2 -0
  343. package/dist/components/datagrid/sticky-side.d.ts +2 -0
  344. package/dist/components/datagrid/view/ActionWidths.d.ts +23 -0
  345. package/dist/components/datagrid/view/AdaptiveForm.d.ts +38 -0
  346. package/dist/components/datagrid/view/BandRows.d.ts +43 -0
  347. package/dist/components/datagrid/view/BarButtons.d.ts +53 -0
  348. package/dist/components/datagrid/view/CellEditor.d.ts +83 -0
  349. package/dist/components/datagrid/view/CellTip.d.ts +24 -0
  350. package/dist/components/datagrid/view/ColumnMenu.d.ts +59 -0
  351. package/dist/components/datagrid/view/ColumnStyles.d.ts +31 -0
  352. package/dist/components/datagrid/view/DetailRow.d.ts +56 -0
  353. package/dist/components/datagrid/view/DragSelect.d.ts +50 -0
  354. package/dist/components/datagrid/view/EditForm.d.ts +59 -0
  355. package/dist/components/datagrid/view/FilterBuilderWindow.d.ts +26 -0
  356. package/dist/components/datagrid/view/FilterCell.d.ts +42 -0
  357. package/dist/components/datagrid/view/FilterPanel.d.ts +21 -0
  358. package/dist/components/datagrid/view/FilterRow.d.ts +29 -0
  359. package/dist/components/datagrid/view/GridBody.d.ts +216 -0
  360. package/dist/components/datagrid/view/GridPager.d.ts +69 -0
  361. package/dist/components/datagrid/view/GridRow.d.ts +95 -0
  362. package/dist/components/datagrid/view/GridToolbar.d.ts +79 -0
  363. package/dist/components/datagrid/view/GroupFooterRow.d.ts +32 -0
  364. package/dist/components/datagrid/view/GroupPanel.d.ts +41 -0
  365. package/dist/components/datagrid/view/GroupRow.d.ts +62 -0
  366. package/dist/components/datagrid/view/HeaderFilter.d.ts +55 -0
  367. package/dist/components/datagrid/view/HeaderRow.d.ts +72 -0
  368. package/dist/components/datagrid/view/MenuPopup.d.ts +19 -0
  369. package/dist/components/datagrid/view/RowActions.d.ts +30 -0
  370. package/dist/components/datagrid/view/RowDrag.d.ts +79 -0
  371. package/dist/components/datagrid/view/TotalRow.d.ts +28 -0
  372. package/dist/components/datagrid/view/action-button.d.ts +10 -0
  373. package/dist/components/datagrid/view/adaptive-form-host.d.ts +8 -0
  374. package/dist/components/datagrid/view/check-mark.d.ts +4 -0
  375. package/dist/components/datagrid/view/column-node.d.ts +7 -0
  376. package/dist/components/datagrid/view/detail-host.d.ts +12 -0
  377. package/dist/components/datagrid/view/drag-handle.d.ts +2 -0
  378. package/dist/components/datagrid/view/drag-select-host.d.ts +20 -0
  379. package/dist/components/datagrid/view/drop-place.d.ts +16 -0
  380. package/dist/components/datagrid/view/edit-form-host.d.ts +11 -0
  381. package/dist/components/datagrid/view/editor-host.d.ts +7 -0
  382. package/dist/components/datagrid/view/editor-kind.d.ts +2 -0
  383. package/dist/components/datagrid/view/editor-value.d.ts +8 -0
  384. package/dist/components/datagrid/view/expand-button.d.ts +4 -0
  385. package/dist/components/datagrid/view/export-command.d.ts +8 -0
  386. package/dist/components/datagrid/view/export-values.d.ts +7 -0
  387. package/dist/components/datagrid/view/filter-builder-window-host.d.ts +15 -0
  388. package/dist/components/datagrid/view/filter-panel-host.d.ts +8 -0
  389. package/dist/components/datagrid/view/form-values.d.ts +9 -0
  390. package/dist/components/datagrid/view/ghost-target.d.ts +2 -0
  391. package/dist/components/datagrid/view/group-panel-host.d.ts +15 -0
  392. package/dist/components/datagrid/view/header-host.d.ts +24 -0
  393. package/dist/components/datagrid/view/next-frame.d.ts +4 -0
  394. package/dist/components/datagrid/view/operator-texts.d.ts +6 -0
  395. package/dist/components/datagrid/view/pager-host.d.ts +11 -0
  396. package/dist/components/datagrid/view/place-in-order.d.ts +6 -0
  397. package/dist/components/datagrid/view/popup-values.d.ts +12 -0
  398. package/dist/components/datagrid/view/resolved-action.d.ts +16 -0
  399. package/dist/components/datagrid/view/row-drag-host.d.ts +14 -0
  400. package/dist/components/datagrid/view/row-drop-place.d.ts +15 -0
  401. package/dist/components/datagrid/view/row-notices.d.ts +14 -0
  402. package/dist/components/datagrid/view/summary-cell.d.ts +8 -0
  403. package/dist/components/datagrid/view/toolbar-host.d.ts +32 -0
  404. package/dist/components/datagrid/view/toolbar-values.d.ts +7 -0
  405. package/dist/components/datebox/DateBox.d.ts +77 -0
  406. package/dist/components/datebox/date-box-props.d.ts +26 -0
  407. package/dist/components/datebox/index.d.ts +2 -0
  408. package/dist/components/drawer/Drawer.d.ts +68 -0
  409. package/dist/components/drawer/drawer-mode.d.ts +2 -0
  410. package/dist/components/drawer/drawer-props.d.ts +23 -0
  411. package/dist/components/drawer/drawer-side.d.ts +2 -0
  412. package/dist/components/drawer/index.d.ts +4 -0
  413. package/dist/components/dropdown/DropDown.d.ts +110 -0
  414. package/dist/components/dropdown/drop-down-item.d.ts +10 -0
  415. package/dist/components/dropdown/drop-down-props.d.ts +41 -0
  416. package/dist/components/dropdown/index.d.ts +3 -0
  417. package/dist/components/filterbuilder/FilterBuilder.d.ts +158 -0
  418. package/dist/components/filterbuilder/FilterBuilderModel.d.ts +79 -0
  419. package/dist/components/filterbuilder/default-operations.d.ts +4 -0
  420. package/dist/components/filterbuilder/filter-builder-condition.d.ts +12 -0
  421. package/dist/components/filterbuilder/filter-builder-custom-operation.d.ts +35 -0
  422. package/dist/components/filterbuilder/filter-builder-data-type.d.ts +2 -0
  423. package/dist/components/filterbuilder/filter-builder-editor-context.d.ts +15 -0
  424. package/dist/components/filterbuilder/filter-builder-editor-prepared-event-args.d.ts +14 -0
  425. package/dist/components/filterbuilder/filter-builder-editor-preparing-event-args.d.ts +21 -0
  426. package/dist/components/filterbuilder/filter-builder-field.d.ts +39 -0
  427. package/dist/components/filterbuilder/filter-builder-group-operation.d.ts +2 -0
  428. package/dist/components/filterbuilder/filter-builder-group.d.ts +10 -0
  429. package/dist/components/filterbuilder/filter-builder-item-added-event-args.d.ts +10 -0
  430. package/dist/components/filterbuilder/filter-builder-item-adding-event-args.d.ts +11 -0
  431. package/dist/components/filterbuilder/filter-builder-item-change.d.ts +2 -0
  432. package/dist/components/filterbuilder/filter-builder-item-changed-event-args.d.ts +11 -0
  433. package/dist/components/filterbuilder/filter-builder-item-changing-event-args.d.ts +13 -0
  434. package/dist/components/filterbuilder/filter-builder-item-removed-event-args.d.ts +10 -0
  435. package/dist/components/filterbuilder/filter-builder-item-removing-event-args.d.ts +11 -0
  436. package/dist/components/filterbuilder/filter-builder-item.d.ts +3 -0
  437. package/dist/components/filterbuilder/filter-builder-lookup.d.ts +13 -0
  438. package/dist/components/filterbuilder/filter-builder-model-options.d.ts +14 -0
  439. package/dist/components/filterbuilder/filter-builder-operation.d.ts +3 -0
  440. package/dist/components/filterbuilder/filter-builder-props.d.ts +57 -0
  441. package/dist/components/filterbuilder/filter-builder-value-changed-event-args.d.ts +9 -0
  442. package/dist/components/filterbuilder/filter-builder-value-info.d.ts +7 -0
  443. package/dist/components/filterbuilder/filter-text.d.ts +8 -0
  444. package/dist/components/filterbuilder/index.d.ts +27 -0
  445. package/dist/components/form/MxForm.d.ts +195 -0
  446. package/dist/components/form/confirm.d.ts +10 -0
  447. package/dist/components/form/form-close-reason.d.ts +2 -0
  448. package/dist/components/form/form-closed-event-args.d.ts +8 -0
  449. package/dist/components/form/form-closing-event-args.d.ts +10 -0
  450. package/dist/components/form/form-event-args.d.ts +5 -0
  451. package/dist/components/form/form-host.d.ts +3 -0
  452. package/dist/components/form/form-props.d.ts +68 -0
  453. package/dist/components/form/form-result.d.ts +2 -0
  454. package/dist/components/form/form-start-position.d.ts +2 -0
  455. package/dist/components/form/form-window-state.d.ts +1 -0
  456. package/dist/components/form/index.d.ts +15 -0
  457. package/dist/components/form/message-box-button.d.ts +10 -0
  458. package/dist/components/form/message-box-options.d.ts +18 -0
  459. package/dist/components/form/message-box-tone.d.ts +2 -0
  460. package/dist/components/form/message-box.d.ts +10 -0
  461. package/dist/components/formlayout/FormLayout.d.ts +78 -0
  462. package/dist/components/formlayout/form-editor-factory.d.ts +3 -0
  463. package/dist/components/formlayout/form-editor-type.d.ts +2 -0
  464. package/dist/components/formlayout/form-item.d.ts +44 -0
  465. package/dist/components/formlayout/form-layout-props.d.ts +31 -0
  466. package/dist/components/formlayout/form-tab.d.ts +9 -0
  467. package/dist/components/formlayout/form-template-context.d.ts +9 -0
  468. package/dist/components/formlayout/index.d.ts +7 -0
  469. package/dist/components/layout/ChildSettings.d.ts +41 -0
  470. package/dist/components/layout/DockPanel.d.ts +42 -0
  471. package/dist/components/layout/Grid.d.ts +57 -0
  472. package/dist/components/layout/GroupBox.d.ts +54 -0
  473. package/dist/components/layout/Panel.d.ts +28 -0
  474. package/dist/components/layout/SplitContainer.d.ts +86 -0
  475. package/dist/components/layout/Stack.d.ts +45 -0
  476. package/dist/components/layout/dock-child-props.d.ts +16 -0
  477. package/dist/components/layout/dock-panel-props.d.ts +10 -0
  478. package/dist/components/layout/dock.d.ts +6 -0
  479. package/dist/components/layout/grid-cell.d.ts +11 -0
  480. package/dist/components/layout/grid-flow.d.ts +2 -0
  481. package/dist/components/layout/grid-justify.d.ts +2 -0
  482. package/dist/components/layout/grid-props.d.ts +34 -0
  483. package/dist/components/layout/grid-tracks.d.ts +5 -0
  484. package/dist/components/layout/group-box-props.d.ts +22 -0
  485. package/dist/components/layout/group-box-toggled-event-args.d.ts +7 -0
  486. package/dist/components/layout/group-box-variant.d.ts +2 -0
  487. package/dist/components/layout/index.d.ts +33 -0
  488. package/dist/components/layout/layout-align.d.ts +2 -0
  489. package/dist/components/layout/layout-orientation.d.ts +2 -0
  490. package/dist/components/layout/layout-space.d.ts +5 -0
  491. package/dist/components/layout/panel-props.d.ts +17 -0
  492. package/dist/components/layout/panel-scroll.d.ts +2 -0
  493. package/dist/components/layout/panel-variant.d.ts +2 -0
  494. package/dist/components/layout/set-padding.d.ts +6 -0
  495. package/dist/components/layout/set-space.d.ts +3 -0
  496. package/dist/components/layout/space-value.d.ts +3 -0
  497. package/dist/components/layout/split-container-props.d.ts +34 -0
  498. package/dist/components/layout/split-panel.d.ts +2 -0
  499. package/dist/components/layout/split-position.d.ts +2 -0
  500. package/dist/components/layout/splitter-moved-event-args.d.ts +10 -0
  501. package/dist/components/layout/stack-child-props.d.ts +6 -0
  502. package/dist/components/layout/stack-justify.d.ts +2 -0
  503. package/dist/components/layout/stack-props.d.ts +25 -0
  504. package/dist/components/layout/track-list.d.ts +3 -0
  505. package/dist/components/listbox/ListBox.d.ts +112 -0
  506. package/dist/components/listbox/all-values.d.ts +7 -0
  507. package/dist/components/listbox/index.d.ts +4 -0
  508. package/dist/components/listbox/item-template.d.ts +2 -0
  509. package/dist/components/listbox/list-box-props.d.ts +38 -0
  510. package/dist/components/listbox/list-rows.d.ts +12 -0
  511. package/dist/components/listbox/list-selection-mode.d.ts +2 -0
  512. package/dist/components/listbox/select-all-row.d.ts +5 -0
  513. package/dist/components/listbox/select-all-state.d.ts +3 -0
  514. package/dist/components/listbox/value-items.d.ts +21 -0
  515. package/dist/components/lookup/Lookup.d.ts +33 -0
  516. package/dist/components/lookup/index.d.ts +3 -0
  517. package/dist/components/lookup/lookup-column.d.ts +11 -0
  518. package/dist/components/lookup/lookup-props.d.ts +12 -0
  519. package/dist/components/menubar/MenuBar.d.ts +59 -0
  520. package/dist/components/menubar/index.d.ts +2 -0
  521. package/dist/components/menubar/menu-bar-props.d.ts +17 -0
  522. package/dist/components/numberbox/NumberBox.d.ts +115 -0
  523. package/dist/components/numberbox/decimal-math.d.ts +7 -0
  524. package/dist/components/numberbox/index.d.ts +3 -0
  525. package/dist/components/numberbox/number-box-props.d.ts +44 -0
  526. package/dist/components/numberbox/number-text.d.ts +12 -0
  527. package/dist/components/numberbox/spin-layout.d.ts +2 -0
  528. package/dist/components/pagination/Pagination.d.ts +92 -0
  529. package/dist/components/pagination/index.d.ts +4 -0
  530. package/dist/components/pagination/page-changed-event-args.d.ts +10 -0
  531. package/dist/components/pagination/pagination-mode.d.ts +2 -0
  532. package/dist/components/pagination/pagination-props.d.ts +32 -0
  533. package/dist/components/progress/ProgressBar.d.ts +67 -0
  534. package/dist/components/progress/ProgressWave.d.ts +53 -0
  535. package/dist/components/progress/Spinner.d.ts +50 -0
  536. package/dist/components/progress/index.d.ts +8 -0
  537. package/dist/components/progress/progress-bar-props.d.ts +33 -0
  538. package/dist/components/progress/progress-label-position.d.ts +2 -0
  539. package/dist/components/progress/progress-shape.d.ts +2 -0
  540. package/dist/components/progress/progress-tone.d.ts +2 -0
  541. package/dist/components/progress/spinner-label-position.d.ts +2 -0
  542. package/dist/components/progress/spinner-props.d.ts +20 -0
  543. package/dist/components/progress/wave-geometry.d.ts +19 -0
  544. package/dist/components/radiogroup/RadioGroup.d.ts +73 -0
  545. package/dist/components/radiogroup/index.d.ts +4 -0
  546. package/dist/components/radiogroup/radio-group-orientation.d.ts +2 -0
  547. package/dist/components/radiogroup/radio-group-props.d.ts +20 -0
  548. package/dist/components/radiogroup/radio-item.d.ts +15 -0
  549. package/dist/components/rating/Rating.d.ts +52 -0
  550. package/dist/components/rating/index.d.ts +3 -0
  551. package/dist/components/rating/rating-props.d.ts +20 -0
  552. package/dist/components/rating/rating-tone.d.ts +2 -0
  553. package/dist/components/scheduler/AppointmentEditor.d.ts +232 -0
  554. package/dist/components/scheduler/RecurrenceEditor.d.ts +66 -0
  555. package/dist/components/scheduler/Scheduler.d.ts +515 -0
  556. package/dist/components/scheduler/agenda-row-context.d.ts +15 -0
  557. package/dist/components/scheduler/appointment-added-event-args.d.ts +7 -0
  558. package/dist/components/scheduler/appointment-adding-event-args.d.ts +10 -0
  559. package/dist/components/scheduler/appointment-click-event-args.d.ts +13 -0
  560. package/dist/components/scheduler/appointment-deleted-event-args.d.ts +9 -0
  561. package/dist/components/scheduler/appointment-deleting-event-args.d.ts +13 -0
  562. package/dist/components/scheduler/appointment-form-context.d.ts +11 -0
  563. package/dist/components/scheduler/appointment-form-data.d.ts +10 -0
  564. package/dist/components/scheduler/appointment-template-context.d.ts +15 -0
  565. package/dist/components/scheduler/appointment-updated-event-args.d.ts +12 -0
  566. package/dist/components/scheduler/appointment-updating-event-args.d.ts +15 -0
  567. package/dist/components/scheduler/cell-click-event-args.d.ts +9 -0
  568. package/dist/components/scheduler/cell-template-context.d.ts +16 -0
  569. package/dist/components/scheduler/content-ready-event-args.d.ts +9 -0
  570. package/dist/components/scheduler/data-error-event-args.d.ts +16 -0
  571. package/dist/components/scheduler/date-changed-event-args.d.ts +10 -0
  572. package/dist/components/scheduler/date-changing-event-args.d.ts +9 -0
  573. package/dist/components/scheduler/date-template-context.d.ts +13 -0
  574. package/dist/components/scheduler/drag-event-args.d.ts +21 -0
  575. package/dist/components/scheduler/form-bind.d.ts +4 -0
  576. package/dist/components/scheduler/form-items.d.ts +10 -0
  577. package/dist/components/scheduler/form-opening-event-args.d.ts +20 -0
  578. package/dist/components/scheduler/icalendar-export-options.d.ts +10 -0
  579. package/dist/components/scheduler/icalendar-exported-event-args.d.ts +6 -0
  580. package/dist/components/scheduler/icalendar-exporting-event-args.d.ts +10 -0
  581. package/dist/components/scheduler/icalendar-import-result.d.ts +6 -0
  582. package/dist/components/scheduler/icalendar-imported-event-args.d.ts +5 -0
  583. package/dist/components/scheduler/icalendar-importing-event-args.d.ts +8 -0
  584. package/dist/components/scheduler/index.d.ts +73 -0
  585. package/dist/components/scheduler/model/AppointmentStore.d.ts +27 -0
  586. package/dist/components/scheduler/model/ICalendarBridge.d.ts +44 -0
  587. package/dist/components/scheduler/model/Occurrences.d.ts +39 -0
  588. package/dist/components/scheduler/model/RecurrenceDraft.d.ts +56 -0
  589. package/dist/components/scheduler/model/ResourceKind.d.ts +35 -0
  590. package/dist/components/scheduler/model/Resources.d.ts +53 -0
  591. package/dist/components/scheduler/model/SchedulerModel.d.ts +377 -0
  592. package/dist/components/scheduler/model/SeriesEdit.d.ts +49 -0
  593. package/dist/components/scheduler/model/SeriesWriter.d.ts +18 -0
  594. package/dist/components/scheduler/model/agenda-day.d.ts +14 -0
  595. package/dist/components/scheduler/model/agenda-piece.d.ts +21 -0
  596. package/dist/components/scheduler/model/any-piece.d.ts +6 -0
  597. package/dist/components/scheduler/model/blocked-spans.d.ts +14 -0
  598. package/dist/components/scheduler/model/cell-place.d.ts +5 -0
  599. package/dist/components/scheduler/model/column-edge.d.ts +2 -0
  600. package/dist/components/scheduler/model/day-block.d.ts +6 -0
  601. package/dist/components/scheduler/model/draft.d.ts +15 -0
  602. package/dist/components/scheduler/model/group-resource.d.ts +8 -0
  603. package/dist/components/scheduler/model/header-cell.d.ts +16 -0
  604. package/dist/components/scheduler/model/header-row.d.ts +8 -0
  605. package/dist/components/scheduler/model/line-piece.d.ts +29 -0
  606. package/dist/components/scheduler/model/make-groups.d.ts +14 -0
  607. package/dist/components/scheduler/model/occurrence-info.d.ts +8 -0
  608. package/dist/components/scheduler/model/overlap-mode.d.ts +2 -0
  609. package/dist/components/scheduler/model/place-lanes.d.ts +10 -0
  610. package/dist/components/scheduler/model/place-stack.d.ts +17 -0
  611. package/dist/components/scheduler/model/place-timed.d.ts +18 -0
  612. package/dist/components/scheduler/model/range-filter-options.d.ts +8 -0
  613. package/dist/components/scheduler/model/range-filter.d.ts +13 -0
  614. package/dist/components/scheduler/model/resolved-view.d.ts +23 -0
  615. package/dist/components/scheduler/model/resource-entry.d.ts +5 -0
  616. package/dist/components/scheduler/model/same-value.d.ts +2 -0
  617. package/dist/components/scheduler/model/scale-cell.d.ts +14 -0
  618. package/dist/components/scheduler/model/scheduler-column.d.ts +21 -0
  619. package/dist/components/scheduler/model/scheduler-day.d.ts +21 -0
  620. package/dist/components/scheduler/model/scheduler-group.d.ts +14 -0
  621. package/dist/components/scheduler/model/scrolling-mode.d.ts +5 -0
  622. package/dist/components/scheduler/model/series-plan.d.ts +9 -0
  623. package/dist/components/scheduler/model/series-run.d.ts +14 -0
  624. package/dist/components/scheduler/model/series-scope.d.ts +2 -0
  625. package/dist/components/scheduler/model/series-write.d.ts +8 -0
  626. package/dist/components/scheduler/model/strip-piece.d.ts +29 -0
  627. package/dist/components/scheduler/model/strip-row.d.ts +17 -0
  628. package/dist/components/scheduler/model/time-slot.d.ts +8 -0
  629. package/dist/components/scheduler/model/time-tick.d.ts +14 -0
  630. package/dist/components/scheduler/model/timed-piece.d.ts +31 -0
  631. package/dist/components/scheduler/model/timeline-row.d.ts +27 -0
  632. package/dist/components/scheduler/model/to-date.d.ts +2 -0
  633. package/dist/components/scheduler/model/view-dates.d.ts +7 -0
  634. package/dist/components/scheduler/model/view-kind.d.ts +6 -0
  635. package/dist/components/scheduler/more-list-context.d.ts +7 -0
  636. package/dist/components/scheduler/more-opening-event-args.d.ts +8 -0
  637. package/dist/components/scheduler/presentation-changed-event-args.d.ts +8 -0
  638. package/dist/components/scheduler/presentation-changing-event-args.d.ts +11 -0
  639. package/dist/components/scheduler/printed-event-args.d.ts +5 -0
  640. package/dist/components/scheduler/printing-event-args.d.ts +6 -0
  641. package/dist/components/scheduler/recurrence-editor-props.d.ts +30 -0
  642. package/dist/components/scheduler/resource-header-context.d.ts +17 -0
  643. package/dist/components/scheduler/scheduler-blocked-time.d.ts +16 -0
  644. package/dist/components/scheduler/scheduler-cell.d.ts +9 -0
  645. package/dist/components/scheduler/scheduler-editing.d.ts +24 -0
  646. package/dist/components/scheduler/scheduler-fields.d.ts +39 -0
  647. package/dist/components/scheduler/scheduler-form-item.d.ts +27 -0
  648. package/dist/components/scheduler/scheduler-form-tab.d.ts +9 -0
  649. package/dist/components/scheduler/scheduler-form.d.ts +26 -0
  650. package/dist/components/scheduler/scheduler-keys.d.ts +22 -0
  651. package/dist/components/scheduler/scheduler-presentation-kind.d.ts +2 -0
  652. package/dist/components/scheduler/scheduler-presentation.d.ts +2 -0
  653. package/dist/components/scheduler/scheduler-props.d.ts +210 -0
  654. package/dist/components/scheduler/scheduler-range.d.ts +5 -0
  655. package/dist/components/scheduler/scheduler-resource.d.ts +33 -0
  656. package/dist/components/scheduler/scheduler-tablet-when.d.ts +2 -0
  657. package/dist/components/scheduler/scheduler-templates.d.ts +34 -0
  658. package/dist/components/scheduler/scheduler-time-check.d.ts +19 -0
  659. package/dist/components/scheduler/scheduler-view-type.d.ts +6 -0
  660. package/dist/components/scheduler/scheduler-view.d.ts +33 -0
  661. package/dist/components/scheduler/selection-changed-event-args.d.ts +7 -0
  662. package/dist/components/scheduler/series-action.d.ts +2 -0
  663. package/dist/components/scheduler/series-answered-event-args.d.ts +12 -0
  664. package/dist/components/scheduler/series-asking-event-args.d.ts +18 -0
  665. package/dist/components/scheduler/series-edit-mode.d.ts +3 -0
  666. package/dist/components/scheduler/time-template-context.d.ts +11 -0
  667. package/dist/components/scheduler/time-zoom-changed-event-args.d.ts +7 -0
  668. package/dist/components/scheduler/time-zoom-changing-event-args.d.ts +8 -0
  669. package/dist/components/scheduler/tooltip-template-context.d.ts +14 -0
  670. package/dist/components/scheduler/view/AgendaView.d.ts +50 -0
  671. package/dist/components/scheduler/view/AppointmentBox.d.ts +58 -0
  672. package/dist/components/scheduler/view/AppointmentDrag.d.ts +66 -0
  673. package/dist/components/scheduler/view/AppointmentTooltip.d.ts +40 -0
  674. package/dist/components/scheduler/view/CellAttributes.d.ts +8 -0
  675. package/dist/components/scheduler/view/CellWriter.d.ts +35 -0
  676. package/dist/components/scheduler/view/GroupHeads.d.ts +32 -0
  677. package/dist/components/scheduler/view/KeyedParts.d.ts +27 -0
  678. package/dist/components/scheduler/view/MonthView.d.ts +58 -0
  679. package/dist/components/scheduler/view/MoreList.d.ts +32 -0
  680. package/dist/components/scheduler/view/SchedulerFormat.d.ts +43 -0
  681. package/dist/components/scheduler/view/SchedulerTouch.d.ts +38 -0
  682. package/dist/components/scheduler/view/TimeView.d.ts +101 -0
  683. package/dist/components/scheduler/view/TimelineLine.d.ts +77 -0
  684. package/dist/components/scheduler/view/TimelineScale.d.ts +22 -0
  685. package/dist/components/scheduler/view/TimelineScaleCell.d.ts +37 -0
  686. package/dist/components/scheduler/view/TimelineView.d.ts +72 -0
  687. package/dist/components/scheduler/view/ask-series-scope.d.ts +21 -0
  688. package/dist/components/scheduler/view/cell-spot.d.ts +8 -0
  689. package/dist/components/scheduler/view/cell-words.d.ts +7 -0
  690. package/dist/components/scheduler/view/scheduler-host.d.ts +87 -0
  691. package/dist/components/scheduler/view/timeline-scroll.d.ts +7 -0
  692. package/dist/components/scheduler/view/touch-host.d.ts +21 -0
  693. package/dist/components/scheduler/view-changed-event-args.d.ts +7 -0
  694. package/dist/components/scheduler/view-changing-event-args.d.ts +9 -0
  695. package/dist/components/sheet/BottomSheet.d.ts +82 -0
  696. package/dist/components/sheet/bottom-sheet-detent.d.ts +6 -0
  697. package/dist/components/sheet/bottom-sheet-props.d.ts +27 -0
  698. package/dist/components/sheet/detent-changed-event-args.d.ts +8 -0
  699. package/dist/components/sheet/detent-changing-event-args.d.ts +11 -0
  700. package/dist/components/sheet/index.d.ts +5 -0
  701. package/dist/components/skeleton/Skeleton.d.ts +45 -0
  702. package/dist/components/skeleton/index.d.ts +4 -0
  703. package/dist/components/skeleton/skeleton-animation.d.ts +2 -0
  704. package/dist/components/skeleton/skeleton-props.d.ts +21 -0
  705. package/dist/components/skeleton/skeleton-shape.d.ts +2 -0
  706. package/dist/components/slider/Slider.d.ts +114 -0
  707. package/dist/components/slider/index.d.ts +5 -0
  708. package/dist/components/slider/slider-orientation.d.ts +2 -0
  709. package/dist/components/slider/slider-props.d.ts +40 -0
  710. package/dist/components/slider/slider-show-value.d.ts +2 -0
  711. package/dist/components/slider/slider-value.d.ts +2 -0
  712. package/dist/components/switch/Switch.d.ts +32 -0
  713. package/dist/components/switch/index.d.ts +3 -0
  714. package/dist/components/switch/switch-props.d.ts +12 -0
  715. package/dist/components/switch/switch-state-text.d.ts +2 -0
  716. package/dist/components/tabdocs/AutoHideStrip.d.ts +31 -0
  717. package/dist/components/tabdocs/DockDropTarget.d.ts +34 -0
  718. package/dist/components/tabdocs/DockGuides.d.ts +35 -0
  719. package/dist/components/tabdocs/DocumentList.d.ts +76 -0
  720. package/dist/components/tabdocs/DocumentTab.d.ts +66 -0
  721. package/dist/components/tabdocs/DropMarks.d.ts +16 -0
  722. package/dist/components/tabdocs/LayoutDropTarget.d.ts +39 -0
  723. package/dist/components/tabdocs/MoveByKeys.d.ts +31 -0
  724. package/dist/components/tabdocs/NewWindowDropTarget.d.ts +19 -0
  725. package/dist/components/tabdocs/PhoneBar.d.ts +33 -0
  726. package/dist/components/tabdocs/PhoneList.d.ts +54 -0
  727. package/dist/components/tabdocs/PhoneTools.d.ts +20 -0
  728. package/dist/components/tabdocs/SplitSash.d.ts +23 -0
  729. package/dist/components/tabdocs/TabBarSettings.d.ts +35 -0
  730. package/dist/components/tabdocs/TabBrowserWindow.d.ts +60 -0
  731. package/dist/components/tabdocs/TabDockArea.d.ts +91 -0
  732. package/dist/components/tabdocs/TabDocument.d.ts +129 -0
  733. package/dist/components/tabdocs/TabDocumentManager.d.ts +1073 -0
  734. package/dist/components/tabdocs/TabDrag.d.ts +76 -0
  735. package/dist/components/tabdocs/TabGroup.d.ts +156 -0
  736. package/dist/components/tabdocs/TabMenus.d.ts +34 -0
  737. package/dist/components/tabdocs/TabPresenter.d.ts +105 -0
  738. package/dist/components/tabdocs/TabSplit.d.ts +40 -0
  739. package/dist/components/tabdocs/TabWindow.d.ts +82 -0
  740. package/dist/components/tabdocs/WindowByKeys.d.ts +18 -0
  741. package/dist/components/tabdocs/content-lifetime.d.ts +6 -0
  742. package/dist/components/tabdocs/dock-guide-hit.d.ts +10 -0
  743. package/dist/components/tabdocs/document-activated-event-args.d.ts +11 -0
  744. package/dist/components/tabdocs/document-activating-event-args.d.ts +12 -0
  745. package/dist/components/tabdocs/document-changed-event-args.d.ts +10 -0
  746. package/dist/components/tabdocs/document-changing-event-args.d.ts +11 -0
  747. package/dist/components/tabdocs/document-closed-event-args.d.ts +10 -0
  748. package/dist/components/tabdocs/document-closing-event-args.d.ts +18 -0
  749. package/dist/components/tabdocs/document-moved-event-args.d.ts +12 -0
  750. package/dist/components/tabdocs/document-moving-event-args.d.ts +14 -0
  751. package/dist/components/tabdocs/document-opened-event-args.d.ts +10 -0
  752. package/dist/components/tabdocs/document-opening-event-args.d.ts +13 -0
  753. package/dist/components/tabdocs/document-showing-event-args.d.ts +19 -0
  754. package/dist/components/tabdocs/document-shown-event-args.d.ts +11 -0
  755. package/dist/components/tabdocs/group-locked-event-args.d.ts +8 -0
  756. package/dist/components/tabdocs/group-locking-event-args.d.ts +9 -0
  757. package/dist/components/tabdocs/group-split-event-args.d.ts +15 -0
  758. package/dist/components/tabdocs/group-splitting-event-args.d.ts +17 -0
  759. package/dist/components/tabdocs/index.d.ts +102 -0
  760. package/dist/components/tabdocs/keep-scroll.d.ts +6 -0
  761. package/dist/components/tabdocs/layout-changed-event-args.d.ts +17 -0
  762. package/dist/components/tabdocs/layout-changing-event-args.d.ts +19 -0
  763. package/dist/components/tabdocs/layout-item.d.ts +4 -0
  764. package/dist/components/tabdocs/pinned-tab-size.d.ts +2 -0
  765. package/dist/components/tabdocs/place-node.d.ts +6 -0
  766. package/dist/components/tabdocs/presentation-changed-event-args.d.ts +8 -0
  767. package/dist/components/tabdocs/presentation-changing-event-args.d.ts +11 -0
  768. package/dist/components/tabdocs/sash-owner.d.ts +15 -0
  769. package/dist/components/tabdocs/screen-offsets.d.ts +9 -0
  770. package/dist/components/tabdocs/split-direction.d.ts +2 -0
  771. package/dist/components/tabdocs/tab-after-close.d.ts +2 -0
  772. package/dist/components/tabdocs/tab-auto-hidden-event-args.d.ts +9 -0
  773. package/dist/components/tabdocs/tab-auto-hiding-event-args.d.ts +10 -0
  774. package/dist/components/tabdocs/tab-bar-button-size.d.ts +2 -0
  775. package/dist/components/tabdocs/tab-bar-button.d.ts +2 -0
  776. package/dist/components/tabdocs/tab-close-button.d.ts +2 -0
  777. package/dist/components/tabdocs/tab-content-clone.d.ts +4 -0
  778. package/dist/components/tabdocs/tab-content-factory.d.ts +4 -0
  779. package/dist/components/tabdocs/tab-context-menu-event-args.d.ts +16 -0
  780. package/dist/components/tabdocs/tab-copy-modifier.d.ts +2 -0
  781. package/dist/components/tabdocs/tab-dock-guide-kind.d.ts +2 -0
  782. package/dist/components/tabdocs/tab-dock-presentation.d.ts +5 -0
  783. package/dist/components/tabdocs/tab-dock-side.d.ts +2 -0
  784. package/dist/components/tabdocs/tab-docked-event-args.d.ts +16 -0
  785. package/dist/components/tabdocs/tab-docking-event-args.d.ts +21 -0
  786. package/dist/components/tabdocs/tab-document-content.d.ts +4 -0
  787. package/dist/components/tabdocs/tab-document-keys.d.ts +105 -0
  788. package/dist/components/tabdocs/tab-document-manager-props.d.ts +351 -0
  789. package/dist/components/tabdocs/tab-document-options.d.ts +57 -0
  790. package/dist/components/tabdocs/tab-drag-ended-event-args.d.ts +11 -0
  791. package/dist/components/tabdocs/tab-drag-starting-event-args.d.ts +14 -0
  792. package/dist/components/tabdocs/tab-drag-subject.d.ts +16 -0
  793. package/dist/components/tabdocs/tab-drop-event-args.d.ts +20 -0
  794. package/dist/components/tabdocs/tab-drop-marks.d.ts +5 -0
  795. package/dist/components/tabdocs/tab-drop-place.d.ts +25 -0
  796. package/dist/components/tabdocs/tab-drop-side.d.ts +2 -0
  797. package/dist/components/tabdocs/tab-drop-target-kind.d.ts +10 -0
  798. package/dist/components/tabdocs/tab-drop-target.d.ts +23 -0
  799. package/dist/components/tabdocs/tab-dropped-event-args.d.ts +13 -0
  800. package/dist/components/tabdocs/tab-error-event-args.d.ts +17 -0
  801. package/dist/components/tabdocs/tab-floated-event-args.d.ts +13 -0
  802. package/dist/components/tabdocs/tab-floating-event-args.d.ts +16 -0
  803. package/dist/components/tabdocs/tab-key-preset.d.ts +6 -0
  804. package/dist/components/tabdocs/tab-keys.d.ts +12 -0
  805. package/dist/components/tabdocs/tab-layout-area.d.ts +13 -0
  806. package/dist/components/tabdocs/tab-layout-bar.d.ts +12 -0
  807. package/dist/components/tabdocs/tab-layout-browser-window.d.ts +10 -0
  808. package/dist/components/tabdocs/tab-layout-change.d.ts +2 -0
  809. package/dist/components/tabdocs/tab-layout-document.d.ts +9 -0
  810. package/dist/components/tabdocs/tab-layout-factory.d.ts +9 -0
  811. package/dist/components/tabdocs/tab-layout-group.d.ts +16 -0
  812. package/dist/components/tabdocs/tab-layout-hidden.d.ts +16 -0
  813. package/dist/components/tabdocs/tab-layout-node.d.ts +3 -0
  814. package/dist/components/tabdocs/tab-layout-split.d.ts +10 -0
  815. package/dist/components/tabdocs/tab-layout-window.d.ts +17 -0
  816. package/dist/components/tabdocs/tab-layout.d.ts +23 -0
  817. package/dist/components/tabdocs/tab-list-scope.d.ts +2 -0
  818. package/dist/components/tabdocs/tab-menu-command.d.ts +2 -0
  819. package/dist/components/tabdocs/tab-narrow-bars.d.ts +2 -0
  820. package/dist/components/tabdocs/tab-new-document.d.ts +5 -0
  821. package/dist/components/tabdocs/tab-new-window-close-action.d.ts +2 -0
  822. package/dist/components/tabdocs/tab-new-window-fallback.d.ts +2 -0
  823. package/dist/components/tabdocs/tab-new-window-options.d.ts +8 -0
  824. package/dist/components/tabdocs/tab-new-window-title.d.ts +7 -0
  825. package/dist/components/tabdocs/tab-open-options.d.ts +16 -0
  826. package/dist/components/tabdocs/tab-open-position.d.ts +2 -0
  827. package/dist/components/tabdocs/tab-open-window.d.ts +7 -0
  828. package/dist/components/tabdocs/tab-presentation-kind.d.ts +2 -0
  829. package/dist/components/tabdocs/tab-presentation.d.ts +2 -0
  830. package/dist/components/tabdocs/tab-rect.d.ts +7 -0
  831. package/dist/components/tabdocs/tab-restore-windows.d.ts +7 -0
  832. package/dist/components/tabdocs/tab-show-description.d.ts +2 -0
  833. package/dist/components/tabdocs/tab-show-options.d.ts +15 -0
  834. package/dist/components/tabdocs/tab-size.d.ts +2 -0
  835. package/dist/components/tabdocs/tab-slide-event-args.d.ts +16 -0
  836. package/dist/components/tabdocs/tab-tablet-when.d.ts +2 -0
  837. package/dist/components/tabdocs/tab-tone.d.ts +2 -0
  838. package/dist/components/tabdocs/tab-toolbar-items.d.ts +4 -0
  839. package/dist/components/tabdocs/tab-window-closed-event-args.d.ts +14 -0
  840. package/dist/components/tabdocs/tab-window-closing-event-args.d.ts +18 -0
  841. package/dist/components/tabdocs/tab-window-opened-event-args.d.ts +14 -0
  842. package/dist/components/tabdocs/tab-window-opening-event-args.d.ts +21 -0
  843. package/dist/components/tabdocs/tab-window-request.d.ts +11 -0
  844. package/dist/components/tabs/PanelContent.d.ts +20 -0
  845. package/dist/components/tabs/Tab.d.ts +71 -0
  846. package/dist/components/tabs/Tabs.d.ts +126 -0
  847. package/dist/components/tabs/index.d.ts +11 -0
  848. package/dist/components/tabs/tab-close-event-args.d.ts +11 -0
  849. package/dist/components/tabs/tab-props.d.ts +27 -0
  850. package/dist/components/tabs/tab-selecting-event-args.d.ts +12 -0
  851. package/dist/components/tabs/tab-selection-changed-event-args.d.ts +13 -0
  852. package/dist/components/tabs/tabs-activation.d.ts +2 -0
  853. package/dist/components/tabs/tabs-placement.d.ts +2 -0
  854. package/dist/components/tabs/tabs-props.d.ts +41 -0
  855. package/dist/components/tabs/tabs-variant.d.ts +2 -0
  856. package/dist/components/tagbox/TagBox.d.ts +140 -0
  857. package/dist/components/tagbox/index.d.ts +2 -0
  858. package/dist/components/tagbox/tag-box-props.d.ts +56 -0
  859. package/dist/components/textarea/TextArea.d.ts +76 -0
  860. package/dist/components/textarea/index.d.ts +3 -0
  861. package/dist/components/textarea/text-area-props.d.ts +36 -0
  862. package/dist/components/textarea/text-area-resize.d.ts +2 -0
  863. package/dist/components/textbox/TextBox.d.ts +89 -0
  864. package/dist/components/textbox/text-box-props.d.ts +41 -0
  865. package/dist/components/textbox/text-box-type.d.ts +1 -0
  866. package/dist/components/toast/Toast.d.ts +63 -0
  867. package/dist/components/toast/Toaster.d.ts +68 -0
  868. package/dist/components/toast/index.d.ts +9 -0
  869. package/dist/components/toast/show-toast.d.ts +20 -0
  870. package/dist/components/toast/toast-action.d.ts +7 -0
  871. package/dist/components/toast/toast-close-reason.d.ts +2 -0
  872. package/dist/components/toast/toast-position.d.ts +2 -0
  873. package/dist/components/toast/toast-props.d.ts +28 -0
  874. package/dist/components/toast/toast-tone.d.ts +2 -0
  875. package/dist/components/toast/toaster-props.d.ts +17 -0
  876. package/dist/components/toolbar/Toolbar.d.ts +93 -0
  877. package/dist/components/toolbar/ToolbarSeparator.d.ts +6 -0
  878. package/dist/components/toolbar/index.d.ts +9 -0
  879. package/dist/components/toolbar/toolbar-item-click-event-args.d.ts +9 -0
  880. package/dist/components/toolbar/toolbar-item-overflow.d.ts +2 -0
  881. package/dist/components/toolbar/toolbar-item-type.d.ts +2 -0
  882. package/dist/components/toolbar/toolbar-item.d.ts +36 -0
  883. package/dist/components/toolbar/toolbar-orientation.d.ts +2 -0
  884. package/dist/components/toolbar/toolbar-overflow.d.ts +2 -0
  885. package/dist/components/toolbar/toolbar-props.d.ts +25 -0
  886. package/dist/components/tooltip/Tooltip.d.ts +57 -0
  887. package/dist/components/tooltip/add-tooltip.d.ts +11 -0
  888. package/dist/components/tooltip/index.d.ts +5 -0
  889. package/dist/components/tooltip/tooltip-hub.d.ts +12 -0
  890. package/dist/components/tooltip/tooltip-props.d.ts +25 -0
  891. package/dist/components/tooltip/tooltip-show-on.d.ts +2 -0
  892. package/dist/components/tooltip/tooltip-target.d.ts +3 -0
  893. package/dist/components/treeview/TreeModel.d.ts +43 -0
  894. package/dist/components/treeview/TreeView.d.ts +218 -0
  895. package/dist/components/treeview/index.d.ts +16 -0
  896. package/dist/components/treeview/tree-check-state.d.ts +2 -0
  897. package/dist/components/treeview/tree-fields.d.ts +7 -0
  898. package/dist/components/treeview/tree-node.d.ts +12 -0
  899. package/dist/components/treeview/tree-row.d.ts +9 -0
  900. package/dist/components/treeview/tree-view-check-changed-event-args.d.ts +13 -0
  901. package/dist/components/treeview/tree-view-expand-on.d.ts +2 -0
  902. package/dist/components/treeview/tree-view-expanded-event-args.d.ts +8 -0
  903. package/dist/components/treeview/tree-view-expanding-event-args.d.ts +11 -0
  904. package/dist/components/treeview/tree-view-item-click-event-args.d.ts +8 -0
  905. package/dist/components/treeview/tree-view-item-template.d.ts +2 -0
  906. package/dist/components/treeview/tree-view-load-children.d.ts +2 -0
  907. package/dist/components/treeview/tree-view-props.d.ts +75 -0
  908. package/dist/components/treeview/tree-view-selection-changed-event-args.d.ts +10 -0
  909. package/dist/components/treeview/tree-view-selection-mode.d.ts +2 -0
  910. package/dist/core/UiLocale.d.ts +52 -0
  911. package/dist/core/access-key.d.ts +32 -0
  912. package/dist/core/after-press.d.ts +5 -0
  913. package/dist/core/back-button.d.ts +15 -0
  914. package/dist/core/connect-i18n.d.ts +11 -0
  915. package/dist/core/container.d.ts +52 -0
  916. package/dist/core/control-map.d.ts +7 -0
  917. package/dist/core/control-size.d.ts +2 -0
  918. package/dist/core/control.d.ts +156 -0
  919. package/dist/core/document-watch.d.ts +10 -0
  920. package/dist/core/draw-parts.d.ts +36 -0
  921. package/dist/core/enable.d.ts +16 -0
  922. package/dist/core/every.d.ts +5 -0
  923. package/dist/core/fill-template.d.ts +2 -0
  924. package/dist/core/fill-text.d.ts +6 -0
  925. package/dist/core/focus-guard.d.ts +2 -0
  926. package/dist/core/focus.d.ts +32 -0
  927. package/dist/core/follow.d.ts +7 -0
  928. package/dist/core/function-value.d.ts +6 -0
  929. package/dist/core/given-field.d.ts +12 -0
  930. package/dist/core/glyphs.d.ts +67 -0
  931. package/dist/core/icon-node.d.ts +10 -0
  932. package/dist/core/icon-source.d.ts +3 -0
  933. package/dist/core/input-mode.d.ts +2 -0
  934. package/dist/core/keyboard.d.ts +55 -0
  935. package/dist/core/language-look.d.ts +18 -0
  936. package/dist/core/later.d.ts +4 -0
  937. package/dist/core/locale-source.d.ts +9 -0
  938. package/dist/core/look-watch.d.ts +2 -0
  939. package/dist/core/mirror-page.d.ts +9 -0
  940. package/dist/core/next-frame.d.ts +6 -0
  941. package/dist/core/next-id.d.ts +1 -0
  942. package/dist/core/node-kind.d.ts +10 -0
  943. package/dist/core/on-language.d.ts +9 -0
  944. package/dist/core/on-re-state.d.ts +6 -0
  945. package/dist/core/page-documents.d.ts +21 -0
  946. package/dist/core/platform.d.ts +2 -0
  947. package/dist/core/press-origin.d.ts +2 -0
  948. package/dist/core/prop-binding.d.ts +25 -0
  949. package/dist/core/resize-watch.d.ts +21 -0
  950. package/dist/core/ui-locale-changed-event-args.d.ts +5 -0
  951. package/dist/core/ui-locale.d.ts +13 -0
  952. package/dist/core/ui-pack-module.d.ts +5 -0
  953. package/dist/core/ui-pack.d.ts +3 -0
  954. package/dist/core/ui-strings.d.ts +575 -0
  955. package/dist/core/window-stack.d.ts +21 -0
  956. package/dist/defineProperty-C0rC37pP.js +39 -0
  957. package/dist/excel/cell-range.d.ts +11 -0
  958. package/dist/excel/date-format.d.ts +6 -0
  959. package/dist/excel/excel-customize-cell-args.d.ts +8 -0
  960. package/dist/excel/excel-export-options.d.ts +50 -0
  961. package/dist/excel/export-data-grid.d.ts +21 -0
  962. package/dist/excel/index.d.ts +6 -0
  963. package/dist/excel/index.js +244 -0
  964. package/dist/excel/index.js.map +1 -0
  965. package/dist/excel/number-format.d.ts +6 -0
  966. package/dist/formula-guard-NYlpoA-t.js +10 -0
  967. package/dist/formula-guard-NYlpoA-t.js.map +1 -0
  968. package/dist/generated/tokens.d.ts +17620 -0
  969. package/dist/index.d.ts +157 -0
  970. package/dist/index.js +79760 -0
  971. package/dist/index.js.map +1 -0
  972. package/dist/locales/en.json +557 -0
  973. package/dist/locales/tr.json +557 -0
  974. package/dist/parts/color/color-hsva.d.ts +7 -0
  975. package/dist/parts/color/color-rgba.d.ts +7 -0
  976. package/dist/parts/color/colors.d.ts +11 -0
  977. package/dist/parts/data/DataItems.d.ts +55 -0
  978. package/dist/parts/data/KeyedItems.d.ts +93 -0
  979. package/dist/parts/data/keyed-item.d.ts +9 -0
  980. package/dist/parts/data/text-search.d.ts +12 -0
  981. package/dist/parts/dates/add-days.d.ts +1 -0
  982. package/dist/parts/dates/add-months.d.ts +2 -0
  983. package/dist/parts/dates/date-kind.d.ts +2 -0
  984. package/dist/parts/dates/date-part.d.ts +1 -0
  985. package/dist/parts/dates/date-pattern-of.d.ts +4 -0
  986. package/dist/parts/dates/date-pattern.d.ts +7 -0
  987. package/dist/parts/dates/date-to-digits.d.ts +3 -0
  988. package/dist/parts/dates/day-start.d.ts +2 -0
  989. package/dist/parts/dates/digits-to-date.d.ts +3 -0
  990. package/dist/parts/dates/first-day-of-week.d.ts +2 -0
  991. package/dist/parts/dates/iso-week.d.ts +2 -0
  992. package/dist/parts/dates/same-day.d.ts +1 -0
  993. package/dist/parts/dates/time-zone.d.ts +53 -0
  994. package/dist/parts/drag/DragGhost.d.ts +57 -0
  995. package/dist/parts/drag/scroll-step.d.ts +6 -0
  996. package/dist/parts/field/Field.d.ts +130 -0
  997. package/dist/parts/field/box-area.d.ts +2 -0
  998. package/dist/parts/field/enter-key-event-args.d.ts +6 -0
  999. package/dist/parts/field/field-button-click-event-args.d.ts +7 -0
  1000. package/dist/parts/field/field-button.d.ts +18 -0
  1001. package/dist/parts/field/field-label-mode.d.ts +2 -0
  1002. package/dist/parts/field/field-props.d.ts +44 -0
  1003. package/dist/parts/field/field-variant.d.ts +2 -0
  1004. package/dist/parts/field/same-as-written.d.ts +5 -0
  1005. package/dist/parts/field/validate-on.d.ts +2 -0
  1006. package/dist/parts/field/validated-event-args.d.ts +7 -0
  1007. package/dist/parts/field/value-changed-event-args.d.ts +10 -0
  1008. package/dist/parts/icalendar/add-duration.d.ts +9 -0
  1009. package/dist/parts/icalendar/date-property.d.ts +4 -0
  1010. package/dist/parts/icalendar/escape-text.d.ts +2 -0
  1011. package/dist/parts/icalendar/event-lines.d.ts +3 -0
  1012. package/dist/parts/icalendar/fold-line.d.ts +2 -0
  1013. package/dist/parts/icalendar/format-content-line.d.ts +3 -0
  1014. package/dist/parts/icalendar/format-offset.d.ts +2 -0
  1015. package/dist/parts/icalendar/icalendar-component.d.ts +8 -0
  1016. package/dist/parts/icalendar/icalendar-date.d.ts +6 -0
  1017. package/dist/parts/icalendar/icalendar-event.d.ts +25 -0
  1018. package/dist/parts/icalendar/icalendar-moment.d.ts +12 -0
  1019. package/dist/parts/icalendar/icalendar-observance.d.ts +15 -0
  1020. package/dist/parts/icalendar/icalendar-property.d.ts +9 -0
  1021. package/dist/parts/icalendar/icalendar-time-zone.d.ts +7 -0
  1022. package/dist/parts/icalendar/icalendar-write-options.d.ts +15 -0
  1023. package/dist/parts/icalendar/icalendar.d.ts +13 -0
  1024. package/dist/parts/icalendar/observance-moment.d.ts +7 -0
  1025. package/dist/parts/icalendar/parse-icalendar.d.ts +11 -0
  1026. package/dist/parts/icalendar/read-components.d.ts +3 -0
  1027. package/dist/parts/icalendar/read-content-line.d.ts +3 -0
  1028. package/dist/parts/icalendar/read-duration.d.ts +5 -0
  1029. package/dist/parts/icalendar/read-event.d.ts +4 -0
  1030. package/dist/parts/icalendar/read-icalendar-dates.d.ts +4 -0
  1031. package/dist/parts/icalendar/read-offset.d.ts +2 -0
  1032. package/dist/parts/icalendar/read-time-zone.d.ts +4 -0
  1033. package/dist/parts/icalendar/same-form.d.ts +3 -0
  1034. package/dist/parts/icalendar/short-zone-name.d.ts +2 -0
  1035. package/dist/parts/icalendar/time-zone-lines.d.ts +10 -0
  1036. package/dist/parts/icalendar/unescape-text.d.ts +2 -0
  1037. package/dist/parts/icalendar/unfold-lines.d.ts +2 -0
  1038. package/dist/parts/icalendar/write-icalendar.d.ts +9 -0
  1039. package/dist/parts/list/OptionList.d.ts +88 -0
  1040. package/dist/parts/list/item-field.d.ts +2 -0
  1041. package/dist/parts/list/item-own-value.d.ts +2 -0
  1042. package/dist/parts/list/item-source.d.ts +8 -0
  1043. package/dist/parts/list/list-move.d.ts +2 -0
  1044. package/dist/parts/list/option-chosen-event-args.d.ts +5 -0
  1045. package/dist/parts/list/read-item-field.d.ts +6 -0
  1046. package/dist/parts/mask/InputMask.d.ts +41 -0
  1047. package/dist/parts/mask/MaskedText.d.ts +38 -0
  1048. package/dist/parts/mask/input-mask-options.d.ts +11 -0
  1049. package/dist/parts/mask/mask-char.d.ts +4 -0
  1050. package/dist/parts/mask/mask-chars.d.ts +3 -0
  1051. package/dist/parts/mask/mask-slot.d.ts +8 -0
  1052. package/dist/parts/mask/parse-mask.d.ts +4 -0
  1053. package/dist/parts/menu/MenuList.d.ts +74 -0
  1054. package/dist/parts/menu/line-after.d.ts +4 -0
  1055. package/dist/parts/menu/menu-item-click-event-args.d.ts +10 -0
  1056. package/dist/parts/menu/menu-item.d.ts +37 -0
  1057. package/dist/parts/overlay/OverlayPanel.d.ts +123 -0
  1058. package/dist/parts/overlay/css-length.d.ts +2 -0
  1059. package/dist/parts/overlay/inert-around.d.ts +5 -0
  1060. package/dist/parts/overlay/overlay-close-reason.d.ts +2 -0
  1061. package/dist/parts/overlay/overlay-closed-event-args.d.ts +6 -0
  1062. package/dist/parts/overlay/overlay-closing-event-args.d.ts +8 -0
  1063. package/dist/parts/overlay/overlay-container.d.ts +3 -0
  1064. package/dist/parts/overlay/overlay-event-args.d.ts +5 -0
  1065. package/dist/parts/overlay/overlay-opening-event-args.d.ts +6 -0
  1066. package/dist/parts/overlay/overlay-panel-props.d.ts +48 -0
  1067. package/dist/parts/overlay/swipe-tracker.d.ts +11 -0
  1068. package/dist/parts/popup/Popup.d.ts +41 -0
  1069. package/dist/parts/popup/place-popup.d.ts +7 -0
  1070. package/dist/parts/popup/popup-close-reason.d.ts +2 -0
  1071. package/dist/parts/popup/popup-open-options.d.ts +7 -0
  1072. package/dist/parts/popup/popup-placement.d.ts +6 -0
  1073. package/dist/parts/recurrence/add-rule-date.d.ts +6 -0
  1074. package/dist/parts/recurrence/describe-recurrence.d.ts +16 -0
  1075. package/dist/parts/recurrence/filter-rule-dates.d.ts +3 -0
  1076. package/dist/parts/recurrence/format-recurrence-rule.d.ts +3 -0
  1077. package/dist/parts/recurrence/format-rule-date.d.ts +3 -0
  1078. package/dist/parts/recurrence/parse-recurrence-rule.d.ts +11 -0
  1079. package/dist/parts/recurrence/parse-rule-date.d.ts +3 -0
  1080. package/dist/parts/recurrence/read-rule-dates.d.ts +7 -0
  1081. package/dist/parts/recurrence/recurrence-dates-options.d.ts +7 -0
  1082. package/dist/parts/recurrence/recurrence-dates.d.ts +14 -0
  1083. package/dist/parts/recurrence/recurrence-frequency.d.ts +2 -0
  1084. package/dist/parts/recurrence/recurrence-rule.d.ts +33 -0
  1085. package/dist/parts/recurrence/rule-date.d.ts +10 -0
  1086. package/dist/parts/recurrence/rule-weekday.d.ts +7 -0
  1087. package/dist/parts/recurrence/weekday-codes.d.ts +2 -0
  1088. package/dist/parts/validation/ValidationGroup.d.ts +25 -0
  1089. package/dist/parts/validation/check-rules.d.ts +4 -0
  1090. package/dist/parts/validation/validate-fields.d.ts +10 -0
  1091. package/dist/parts/validation/validate-targets.d.ts +3 -0
  1092. package/dist/parts/validation/validation-message.d.ts +2 -0
  1093. package/dist/parts/validation/validation-result.d.ts +6 -0
  1094. package/dist/parts/validation/validation-rule.d.ts +55 -0
  1095. package/dist/parts/validation/validation-target.d.ts +8 -0
  1096. package/dist/parts/window/follow-pointer.d.ts +5 -0
  1097. package/dist/parts/window/resize-box.d.ts +13 -0
  1098. package/dist/parts/window/resize-frame.d.ts +2 -0
  1099. package/dist/parts/window/window-box.d.ts +7 -0
  1100. package/dist/parts/window/window-edge.d.ts +2 -0
  1101. package/dist/pdf/export-data-grid.d.ts +23 -0
  1102. package/dist/pdf/index.d.ts +8 -0
  1103. package/dist/pdf/index.js +355 -0
  1104. package/dist/pdf/index.js.map +1 -0
  1105. package/dist/pdf/pdf-cell.d.ts +33 -0
  1106. package/dist/pdf/pdf-custom-draw-cell-args.d.ts +17 -0
  1107. package/dist/pdf/pdf-customize-cell-args.d.ts +7 -0
  1108. package/dist/pdf/pdf-export-options.d.ts +59 -0
  1109. package/dist/pdf/pdf-export-result.d.ts +7 -0
  1110. package/dist/pdf/pdf-margin.d.ts +7 -0
  1111. package/dist/pdf/pdf-row-exporting-args.d.ts +7 -0
  1112. package/dist/pdf/pdf-table.d.ts +49 -0
  1113. package/dist/styles.css +27457 -0
  1114. package/dist/tokens/index.d.ts +19330 -0
  1115. package/dist/tokens/index.js +17651 -0
  1116. package/dist/tokens/index.js.map +1 -0
  1117. package/docs/accordion.md +295 -0
  1118. package/docs/actionsheet.md +209 -0
  1119. package/docs/avatar.md +238 -0
  1120. package/docs/badge.md +193 -0
  1121. package/docs/bottomsheet.md +316 -0
  1122. package/docs/breadcrumb.md +125 -0
  1123. package/docs/button.md +416 -0
  1124. package/docs/buttongroup.md +141 -0
  1125. package/docs/calendar.md +136 -0
  1126. package/docs/card.md +254 -0
  1127. package/docs/checkbox.md +336 -0
  1128. package/docs/chip.md +278 -0
  1129. package/docs/colorbox.md +153 -0
  1130. package/docs/combobox.md +214 -0
  1131. package/docs/control.md +232 -0
  1132. package/docs/datagrid-api.md +417 -0
  1133. package/docs/datagrid-bands.md +317 -0
  1134. package/docs/datagrid-drag-select.md +326 -0
  1135. package/docs/datagrid-drag.md +341 -0
  1136. package/docs/datagrid-editing.md +537 -0
  1137. package/docs/datagrid-filtering.md +455 -0
  1138. package/docs/datagrid-forms.md +402 -0
  1139. package/docs/datagrid-grouping.md +419 -0
  1140. package/docs/datagrid-layout.md +540 -0
  1141. package/docs/datagrid-lookups.md +363 -0
  1142. package/docs/datagrid-master-detail.md +326 -0
  1143. package/docs/datagrid-scrolling.md +348 -0
  1144. package/docs/datagrid-selection.md +599 -0
  1145. package/docs/datagrid.md +362 -0
  1146. package/docs/datebox.md +201 -0
  1147. package/docs/drawer.md +229 -0
  1148. package/docs/dropdown.md +323 -0
  1149. package/docs/filterbuilder.md +601 -0
  1150. package/docs/formlayout.md +118 -0
  1151. package/docs/getting-started.md +105 -0
  1152. package/docs/home.md +54 -0
  1153. package/docs/keyboard.md +188 -0
  1154. package/docs/layout.md +584 -0
  1155. package/docs/listbox.md +374 -0
  1156. package/docs/lookup.md +212 -0
  1157. package/docs/menus.md +312 -0
  1158. package/docs/numberbox.md +309 -0
  1159. package/docs/pagination.md +115 -0
  1160. package/docs/progress.md +401 -0
  1161. package/docs/radiogroup.md +324 -0
  1162. package/docs/rating.md +124 -0
  1163. package/docs/scheduler-agenda.md +597 -0
  1164. package/docs/scheduler-big-data.md +253 -0
  1165. package/docs/scheduler-editing.md +545 -0
  1166. package/docs/scheduler-form.md +631 -0
  1167. package/docs/scheduler-icalendar.md +591 -0
  1168. package/docs/scheduler-mobile.md +664 -0
  1169. package/docs/scheduler-recurrence.md +420 -0
  1170. package/docs/scheduler-resources.md +702 -0
  1171. package/docs/scheduler-timeline.md +632 -0
  1172. package/docs/scheduler.md +592 -0
  1173. package/docs/showcase.md +5 -0
  1174. package/docs/skeleton.md +131 -0
  1175. package/docs/slider.md +361 -0
  1176. package/docs/switch.md +242 -0
  1177. package/docs/tabdocs-dock.md +877 -0
  1178. package/docs/tabdocs-drag.md +554 -0
  1179. package/docs/tabdocs-menus.md +689 -0
  1180. package/docs/tabdocs-mobile.md +277 -0
  1181. package/docs/tabdocs-tabs.md +830 -0
  1182. package/docs/tabdocs-windows.md +657 -0
  1183. package/docs/tabdocs-workspace.md +409 -0
  1184. package/docs/tabdocs.md +888 -0
  1185. package/docs/tabs.md +456 -0
  1186. package/docs/tagbox.md +361 -0
  1187. package/docs/textarea.md +305 -0
  1188. package/docs/textbox.md +449 -0
  1189. package/docs/toast.md +313 -0
  1190. package/docs/tokens.md +3911 -0
  1191. package/docs/toolbar.md +462 -0
  1192. package/docs/tooltip.md +339 -0
  1193. package/docs/treeview.md +763 -0
  1194. package/docs/window.md +556 -0
  1195. package/llms-full.txt +33763 -0
  1196. package/llms.txt +127 -0
  1197. package/package.json +116 -6
package/CHANGELOG.md ADDED
@@ -0,0 +1,1821 @@
1
+ # Changelog
2
+
3
+ All notable changes to this package are documented here.
4
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the package uses
5
+ [Semantic Versioning](https://semver.org/).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.1.0-beta.1] - 2026-11-04
10
+
11
+ ### DropDown and Lookup: a value on no loaded page is asked for by key
12
+
13
+ - A value whose item is on no loaded page of `dataSource` is asked for by key, in one request with the keys the
14
+ other fields and grids over the same source need at that moment. Meanwhile the field waits: `aria-busy`, a
15
+ spinner in the arrow's place (`.mx-drop-down__spinner`, `data-loading`), the list closed, never the key as its
16
+ text. A record that carries the name too gives it as `valueText`, and the field shows it at once. A key the
17
+ source does not have shows itself, muted and underlined (`data-missing`), its title says why (`notInList`);
18
+ when the request failed, opening the list asks again.
19
+ - Units `drop-down.spinner` and `drop-down.spinner-shape` and the `missing` state of `drop-down.value`, drawn in
20
+ every language. The docs: "A value on no loaded page" on the Lookup page.
21
+
22
+ ### Scheduler
23
+
24
+ - The agenda view tells the Scheduler it is shown as soon as it is configured: a view change made while focus is
25
+ in the Scheduler moves focus into the agenda, as into the other views.
26
+
27
+ ## [0.1.0-beta.0] - 2026-10-30
28
+
29
+ The first preview on npm (`npm i @motifx-community/ui@beta`). The package also carries its documentation for
30
+ readers that are not a browser: a Markdown page per component in `docs/`, an index in `llms.txt` and every page in
31
+ `llms-full.txt`.
32
+
33
+ ### New components
34
+
35
+ - `Badge`: a text, a count (`max` → `99+`, hidden at 0 unless `showZero`) or a dot, in six tones and three looks;
36
+ on a corner of what it is in (`position`, `Badge.attach`), the anchor's frame stepped over; the count in the kit's
37
+ language.
38
+ - `Avatar` and `AvatarGroup`: a picture, else initials (in the capitals of the kit's language), else a person icon;
39
+ a tone of the language's or one taken from the name (`tone: 'auto'`); circle or square; a presence dot. A group
40
+ stacks or spreads its avatars and counts the rest (`max`, `total`, `+N`), from JSX lists too.
41
+ - `Chip` and `ChipGroup`: an icon or an avatar before the text, removable (its button, Delete / Backspace), pressable
42
+ or selectable, six tones; a group selects one or several (`x-model`), one Tab stop, the arrow keys between chips.
43
+ - `Card`: a picture, a header (avatar, title, subtitle, action), content and actions; vertical or horizontal;
44
+ clickable, a link through its title (`href`, `rel="router"`), selectable with a check box.
45
+ - `Skeleton`: lines, a block or a circle while `loading`, then the content; a wave or a pulse that reduced motion
46
+ keeps still.
47
+ - `ButtonGroup`: the kit's buttons attached, a segmented choice (`single`, `multiple`, `x-model`) or actions.
48
+ - `Rating`: stars or icons of your own, halves, a preview under the pointer, read-only; a field (label, rules).
49
+ - `ColorPicker` and `ColorBox`: an area of saturation and brightness, hue and opacity strips, hex and channel inputs,
50
+ presets, a colour from the screen; the box applies at once or on OK.
51
+ - `Breadcrumb`: links (the router's too) or buttons, the current page last, the steps that do not fit in a menu.
52
+ - `Pagination`: the grid's pager as a component of its own: page sizes, info, steps, page buttons, compact when it
53
+ does not fit.
54
+ - The design system's opaque neutral fill (`color.fill.neutral`) for marks on any surface; kit glyphs `person`,
55
+ `star`, `star-filled`, `eyedropper`, `slash`.
56
+
57
+ ### Changed
58
+
59
+ - `Badge.attach` takes a component only: the badge becomes one of its children and goes with it.
60
+
61
+ ### DataGrid: drawn by hand, with nothing followed inside
62
+
63
+ - What changes in the grid is told where it is changed (`GridNotices`, once a turn); the rows, the header, the
64
+ filter row, the totals, the group rows and footers, the toolbar, the bottom bar, the pager, the filter panel,
65
+ the band headers, the group panel, the edit and adaptive forms and the filter builder window draw again what a
66
+ change concerns. No JSX, no bindings and no effects of its own inside; what comes in from outside is the
67
+ developer's data, props (a function among them followed by one binding per source) and `reState()`. The state
68
+ the API calls "reactive" stays so for the app's own bindings.
69
+ - Datagrid page: bindings 1,306 → 87, live effects 2,285 → 579, effects run while it opens 2,478 → 346; a sort
70
+ runs none (was 140). Every write is made only when its value changed.
71
+ - Widening a column no longer has the whole page's style worked out again at each step (the grid's column sheet
72
+ is written only when its rules change): 60–110 ms per step → no long task.
73
+ - `onRowPrepared` of the total row comes when what its cells show changed, not on every change of the grid.
74
+ - A value the user changes too (the search box, the pager's page box and size list, the filter row's editors,
75
+ the filter panel's check box) is given again only when the grid's value changed, so what is typed stays.
76
+
77
+ ### DataGrid: `masterDetail.keepAcrossPages`
78
+
79
+ - A paged grid disposes the details of the page left when the page or the page size changes, and makes them again
80
+ when their page shows; a row stays open. `keepAcrossPages: true` keeps them while the user pages, up to
81
+ `keepLimit`. Closing a row keeps its details with `keepDetails` (the default) and disposes them without it.
82
+
83
+ ### Focus: a control hidden or disabled while focused does not scroll the page
84
+
85
+ - Focus moved off a control that is hidden or disabled goes to the next one without scrolling (the page jumped
86
+ after the first "Save changes" of a batch-edited grid).
87
+
88
+ ### FormLayout: a field not shown is not checked
89
+
90
+ - A field whose item is not shown (`visible: false`) is left out of `validate()` and `isValid`, its message cleared;
91
+ shown again, it is checked again. A field on a tab not chosen is still checked. The Scheduler form of "Fields for
92
+ one appointment" saves again (its required "Guests" stopped it while hidden).
93
+
94
+ ### Properties: a function prop follows through the component's bindings; `x-model` mirrors the state
95
+
96
+ - A property given as a function is followed by a binding of the component (`follow`, `PropBinding`): a reactive
97
+ source updates it by itself, plain data shows on the developer's `reState()`. The value is handed on only when it
98
+ differs from the last one read, so a change the user made stays across a `reState()`; a property set from code
99
+ stops following its function. `refreshProps()` is gone (one way, not two).
100
+ - `x-model` shows the component's state on every path: the user, code (`value`, `pressed`, `position`, a tab or a
101
+ panel chosen from code), the component's own rules (a mask, `decimals`, `min`/`max`) and a cancelled close.
102
+ - NumberBox rounds its value to `decimals` and shows that many digits; its spin buttons come back after `none`.
103
+ Calendar shows the month of a value given from anywhere.
104
+ - Every docs page's components converted; `onReState(component, run)` for parts drawn by hand.
105
+
106
+ ### Scheduler: drawn by hand, with nothing followed inside
107
+
108
+ - The views (timeline, day and week, month, agenda), the appointment boxes, the tooltip, the "+N more" list, the
109
+ toolbar, the recurrence editor and the series question are made in code and drawn by hand: no JSX, no bindings,
110
+ no inner `reState()`. What comes in from outside is the developer's data, props and `reState()`.
111
+ - Effects on the timeline page 10,860 → those of the example templates only; resizing an appointment runs nothing
112
+ reactive (was 1,353 to 1,598 runs); scrolling a big timeline: script, style, layout and paint all below before.
113
+ Every write is made only when its value changed.
114
+ - Big views open faster: the view's settings are read once per turn, the week of many groups builds the columns in
115
+ view first and the ones on each side in the frames after (big-data example: first box 950 → ~430 ms, dev).
116
+ - Fixed: "On a date" in the recurrence editor jumped back to "Never" (it comes with a date three months after the
117
+ start); a focused box taken away threw in `itemOf`, and its focus going with it took a move by the keys back;
118
+ rows of cells gone with other hours were written again (MJX208); a virtual timeline row let go after its view
119
+ threw, and so did a scroll coming after it; a box waiting for its store shows it locked again; `selectCells` right
120
+ after `showDate` finds the cells of the new days; a resource kind's field given as a function
121
+ (`useColorAsDefault: () => …`) is followed again.
122
+ - Docs: "From code" selects the next workday (the work week has no Saturday); the two copies of a TabDocs document
123
+ read a field again when the other one changes it. Tests: the back-button session waits for its history moves
124
+ between tests (`backButtonSettled`), a new window's `onMounted` is waited for.
125
+
126
+ ### Lists, menus, forms, trees and the filter builder: the developer's data as given
127
+
128
+ - The items of ListBox, DropDown, Lookup, ComboBox, Autocomplete, TagBox, RadioGroup, Toolbar, MenuBar,
129
+ ContextMenu, ActionSheet and a Button's menu, a field's `buttons`, FormLayout's `data` and `items`, TreeView's
130
+ items, FilterBuilder's fields and value and a document's `actions` may be plain or reactive: they are read as
131
+ they are and come back as the very objects given, in events, templates, getters and `x-model`.
132
+ - Their fields are read untracked: a change made in place shows after the new `refresh()`, the same for both
133
+ kinds; a list given anew (or by a function that returns a new one) shows at once, and a function in an item's
134
+ field is still followed. New: `refresh()` on every list and menu control, Field (its buttons), FormLayout
135
+ (with `refreshField(field)`), TreeView (with `refreshItem(key)`) and FilterBuilder.
136
+ - An object value written to a reactive `x-model` stays the very item: the model's copy handed back is not taken
137
+ in its place and reports no second change.
138
+ - A submenu in an ActionSheet and a split button's menu in the toolbar's "more" menu no longer copy the first item
139
+ to draw the line before it.
140
+ - `uiLocale` keeps the set it is given as it is: to change a text, assign a new set
141
+ (`uiLocale.strings = { ...uiLocale.strings, close: 'Kapat' }`); a text changed inside the set is not seen.
142
+ - A property's drawing and its `normalize` run untracked, so a setter called inside an app's own watch adds
143
+ nothing to it, and a Slider range given by a getter is not followed by its numbers changing in place.
144
+
145
+ ### Scheduler: the developer's data as given
146
+
147
+ - The appointments and the resource items may be plain or reactive: the Scheduler reads them as they are and never
148
+ wraps, copies or marks them. Events, templates, getters (`shownAppointments`, `seriesOf`, `resourcesOf`) and the
149
+ tooltip hand back the very objects given; its reactive state holds only its own values (a piece's appointment is
150
+ `itemOf(piece)`; the tooltip, the "+N more" list and a drag keep theirs in plain fields; occurrences are plain objects).
151
+ - Their fields are read untracked: a change made in place shows after `refresh()`, `refreshAppointment(item)` or
152
+ `refreshResources()`, the same for both kinds; its own edits and a data source's changes show at once.
153
+ - Delete, a drag, the form and the series edits work on a plain array; an appointment without a key has one id.
154
+ - `addAppointment(values)` stores the object given, not a copy.
155
+
156
+ ### DataGrid: the developer's data as given
157
+
158
+ - Rows, columns, actions, toolbar and form items, summary items, filter values and the options of `settings`,
159
+ `toolbar`, `export`, `form`, `popup`, `filterBuilder`, `masterDetail`, `adaptiveDetail` and `rowDragging` may be
160
+ plain or reactive: the grid keeps them as given and hands back the very objects (`grid.toolbar.items` is your
161
+ array, `rowDragging.data` your object). Its reactive state holds only its own values, with a counter per option.
162
+ - Their fields are read untracked: a change made in place shows after `refresh()`, `repaint()`, `repaintRows(keys)`,
163
+ `refreshSummary()` or `refreshActions()`, the same for both kinds. A new array given to `rows` (or returned by
164
+ its function) still loads again; a `push` or `splice` into it now needs `refresh()`.
165
+ - New: `repaintRows(keys)`, `refreshSummary()`, `refreshActions()`. `repaint()` draws the details, the adaptive
166
+ detail, the totals, the toolbar and the actions again too; `refresh()` reads everything again.
167
+ - The editing events (`onEditingStart`, `onEditorPreparing`, `onEditorPrepared`, `onRowValidating`) get the row
168
+ itself in `row` and the values entered apart in `values`, with `getValue(field)`; no merged copy, so a class
169
+ instance keeps its prototype. The same for a custom editor's context, `setCellValue(values, value, row, context)`,
170
+ `validate(value, row, context)`, `validateRow(row, { values, getValue, isNew, changed })`, `options(row, context)`,
171
+ `lookup.filter(row, context)`, `comparisonTarget(row, context)` and `validationCallback({ …, context })`.
172
+ - `grid.changes` lists `added` and `updated` as `{ row, changed }`: the row itself and the values entered.
173
+ `RowChange.original` is gone (it was the same row). Summaries that follow unsaved edits read them beside the rows.
174
+
175
+ ### Scheduler: smooth scrolling in big views
176
+
177
+ - The cells of a timeline row and of the day views have no bindings of their own: a cell is written once when it
178
+ is made, and again only when what it shows changes (`CellWriter`, followed once per row or view; the model's
179
+ `look` counter says when the days, columns, time rows or blocked times were written again). The focus writes only
180
+ the cells it left and reached. Cell events are listened for once per row.
181
+ - The day views with many groups keep their cells in places: scrolling shows other columns in the same cells, none
182
+ are made or dropped. Their rows and cells are laid out on their own (`contain`).
183
+ - After a drop only the timeline rows whose appointments changed are laid out again.
184
+ - Measured with a wheel, frame by frame: 1,000 rows × 10,000 appointments in development went from 47 frames over
185
+ 33 ms to 2–4 (of about 520) down and from up to 25 to none sideways; the week of 200 groups down from 14 to none.
186
+
187
+ ### Design languages: the token model, units and places
188
+
189
+ Any design system is carried by a design language's files alone: a new one, or a new version of one, needs no
190
+ component touched (roadmap/28-token-model.md). This replaces `tokens/component/` and its `identity/` mappings
191
+ mentioned further down.
192
+
193
+ - **Schema and languages.** `tokens/schema/<component>.json` names a component's tokens; every language is a folder,
194
+ `tokens/languages/<language>/`, with the values its design draws. The build checks every language against the
195
+ schema and the design system's references and types. `npm run language -- <name> [--from <language>]` starts a new
196
+ language; the docs Style menu and the checks take the list of languages from the design system.
197
+ - **Units.** Every piece a design could draw on its own is a unit (`$units`): the field's box, frame, notch, active
198
+ indicator, label, buttons and help line; a button's face, caption, spinner and split parts; a list's items; a
199
+ slider's segments, knob and stops; and so on for every component. The build gives each unit the same box (display,
200
+ size, margin and padding per side, fill, frame per side, corners, shadow and glow, backdrop, opacity, scale,
201
+ rotation, translation, text, outline, icon) in each of its states and paints it in `src/generated/units.css`; a
202
+ unit standing upright (a vertical slider) is turned a quarter by the build. A language writes only what its design
203
+ has: a piece it leaves out stays invisible, and pieces it shows as one have the space and the corners between
204
+ them at 0. Component CSS keeps the layout only.
205
+ - **Slots and places.** A component reads its tokens through slots on its own root (`--_<component>-…`), so one
206
+ instance's values never flow into another inside it. Where a component holds a part (a list in a popup, a field in
207
+ a grid cell, a toolbar's buttons) a place decides that part's units there.
208
+ - **Shapes.** `tokens/shapes/kit.shapes.json` describes shapes by kind (circle, ellipse, rounded polygon, rect,
209
+ wave: soft burst, cookies, sunny, pill, pentagon …); the build turns each into a `polygon()` of the same 180
210
+ points, so one becomes the next smoothly. A `shape` token names one.
211
+ - Every look in every language and theme is unchanged by the move, measured by pixel and computed-style compares,
212
+ except where a language now draws its source: below.
213
+
214
+ ### Material 3 Expressive, from its specs and videos
215
+
216
+ - **Slider:** a 16 px track of segments with a 6 px gap at each side of a 4 × 44 px bar handle that narrows to 2 px
217
+ pressed or focused, 2 px inner corners, stop dots at the ends of the inactive track, the steps as dots on the
218
+ track; centred (`origin`) and range sliders the same way; the value as a pill on the inverse surface.
219
+ - **Loading indicator (Spinner):** a filled shape that becomes the next of seven (soft burst, 9-sided cookie,
220
+ pentagon, pill, sunny, 4-sided cookie, oval) with a spring while it turns; `contained` draws it in a disc
221
+ (`accent.subtle`, the shape in `accent.on-subtle`). A busy button turns the same shape in its place.
222
+ - **Progress indicator (ProgressBar):** while the value is known the bar is a wave travelling along, flat while short
223
+ and again at 100 %, with a gap, the rest of the track and a stop dot; `shape="circle"` the same round a ring. While
224
+ the value is not known both stay as they were.
225
+
226
+ ### New in the components
227
+
228
+ - `Slider`: `origin` (a centred slider), a track of segments that can stop short of the thumbs (`track-gap`), stop
229
+ dots, a halo, a knob and a core, a value bubble with an arrow, `tick-label-room`; a disabled slider sends nothing
230
+ with its form.
231
+ - `Spinner`: `contained`; a shape instead of the ring where the language draws one.
232
+ - `ProgressBar`: `shape: 'line' | 'circle'` (a determinate and a turning circle), `labelPosition: 'bottom'`, a wave.
233
+ - `Button`: the caption is an element (`.mx-button__text`), so a language can trim its line box (`text-box`) and
234
+ centre the letters optically; `data-icon-only`; `readLook()`. `Field`: `readLook()`. Both for a control placed in
235
+ the page outside the component tree.
236
+ - `Accordion`: the chevron stands in a plate of its own (`.mx-accordion__plate`).
237
+ - `Toolbar` measures again when a control takes another size or variant from its place.
238
+
239
+ ### Design languages
240
+
241
+ - Material and Fluent in the docs Style menu next to Tactile and Lounge, with per-language component
242
+ mappings in `tokens/component/identity/material/` (from the Material 3 component specs) and
243
+ `tokens/component/identity/fluent/` (from the WinUI 3 theme resources).
244
+ - Every kit stylesheet paints only with its own component tokens, one per role: fills and text per
245
+ state, frame and edge per side, the raised face (`<c>.shadow`), the marks (tab indicator,
246
+ selection bar, check mark) and keyboard focus (`<c>.focus-width|offset|color|halo`). A language can
247
+ change any of them for one component. `tests/tokens.test.ts` enforces it, and the focus rule
248
+ too. New: `tokens/component/{textbox,dropdown,combobox,base}.tokens.json` (`--mx-glyph-size`,
249
+ `--mx-disabled-fg`). Surfaces read the design system's `elevation.*` (Material's toast is level 3
250
+ there now). Every look in every language and theme is unchanged, measured.
251
+ - Lilac in the Style menu, with its own spacing in `tokens/component/identity/lilac/` (more room
252
+ between a label and its field, between form rows and columns, in popups, tooltips, toasts, dialogs,
253
+ tabs, accordions and calendars; 18 px check boxes and radios; a 3 px tab indicator; a framed field
254
+ shows focus as a 2 px lilac ring all around, from its field tokens). `e2e/checks/37-design-languages.mjs` measures it too.
255
+ - A split button's focus ring is drawn whole: the focused part sits above the arrow next to it.
256
+ - Material: pill tabs and the tab scroll buttons are fully round (the segmented button shape).
257
+ - Tools: `npm run fingerprint` / `fingerprint:compare` (the computed look of every element on every
258
+ docs page, in every language, theme and state, compared), `e2e/state-sheet.mjs` (every part in
259
+ every state and language on one page) and `e2e/checks/37-design-languages.mjs` (each language
260
+ measured against its source).
261
+
262
+ ### Check boxes and radios
263
+
264
+ - The check box, the radio circle and the check boxes of DataGrid, ListBox and TreeView draw one
265
+ stroke all around; the pressable depth is a 1px shadow under the mark instead of a darker bottom
266
+ border, which vanished on dark backgrounds and left the outline open at the bottom.
267
+ - `checkbox.radius` and the `check-radius` of DataGrid, ListBox and TreeView read the design
268
+ system's new `radius.xs`, so a check box stays square in a design language with round corners
269
+ (Lounge). Same 4px as before in Tactile.
270
+ - The docs site has a Style menu (Tactile / Lounge) next to Theme, kept between visits.
271
+
272
+ ### rewrite
273
+
274
+ - The components are being rewritten from scratch, one at a time. Removed: `Button`, `Label`,
275
+ `Panel`, `Stack`, `Grid`, `GroupBox`, `SplitContainer`, `MxForm`, their component tokens and docs
276
+ pages, the layout props of `Control` (`dock`, offsets, size, grid cells), `UiLocale`,
277
+ `FormResult` / `CloseReason` and the `x-model` helpers of `Control`. The entries below describe
278
+ them as they were.
279
+ - Kept: `Control`, `FocusContainer`, `addShortcut`, `parseAccessKey`, the focus guard and the
280
+ `enabled` cascade. The window stack marks a modal window with `modal`. The token build writes
281
+ empty files when there are no component tokens.
282
+
283
+ ### Button
284
+
285
+ - `Button`: a native `<button>`; `variant` (solid / outline / ghost), `tone` (standard / accent /
286
+ danger), `size` (sm / md / lg) from the density tokens, pressable solid faces; `text` with an `&`
287
+ access key or JSX children; `icon` (an address, an element or a component) at the start or end;
288
+ `stretch`, `type`, `hint`; `toggle` / `pressed` with `x-model`; `busy` (spinner, presses ignored,
289
+ size kept, `aria-busy`); `focusableWhenDisabled` (`aria-disabled`, stays in the Tab order). Every
290
+ prop is a value or a function and a settable, reactive property; set from code, a function is
291
+ bound and followed too (`Control` setters as well: `ctrl.enabled = () => !state.busy`).
292
+ - A menu: `menu` (items with icon, hint, enabled, visible, checked, beginGroup, each a value or a
293
+ function the open menu follows; click, data) or any
294
+ content (`dropDown`), opened by the whole button or, with `split`, by an arrow next to it while the
295
+ button keeps its own action; `split` changes live; `opened`, `open()`, `close()`, `onItemClick`.
296
+ - Shared parts: `Popup` (top layer, follows its anchor, flips when there is no room, closes on
297
+ Escape / a press outside / focus leaving, gives focus back) and `MenuList` (arrows, Home / End,
298
+ letters, `&` keys); `placePopup`; `IconSource`.
299
+ - `uiLocale` / `enStrings` / `trStrings` / `UiStrings`: the texts controls write, reactive, starting
300
+ with the page's `lang`.
301
+ - Component tokens `button.*`, `popup.*`, `menu.*`. `@motifx/core` 1.2.0-rc.19.
302
+
303
+ ### TextBox
304
+
305
+ - `TextBox`: a native `<input>` in a field frame; `label` (`&` access key) with `labelMode` top /
306
+ side / floating / hidden, `placeholder`, `helpText`, `hint`, `prefix` / `suffix`, `icon`,
307
+ `buttons` (your own, each with `enabled`, `visible`, `position`, `tabStop`), `clearButton`
308
+ (Escape too), `type` (text, password with a reveal button, email, search, tel, url), `maxLength`
309
+ / `minLength` / `showCounter`, `updateOn` input / change, `selectOnFocus`, `align`, `readOnly`,
310
+ `required`, `size`, `variant` (outline, filled, underline), `stretch`, `inputMode`,
311
+ `autocomplete`, `spellcheck`, `name`; `onValueChanged` (`byUser`), `onEnter`, `onValidated`.
312
+ - Mask: `mask` (`0` digit, `9` optional digit, `a` letter, `*` letter or digit, `\` fixed),
313
+ `maskChars` (own characters with case), `maskPlaceholder`, `maskValue` raw / formatted,
314
+ `showMask`; typing, deleting and pasting follow the mask; an unfilled mask fails validation.
315
+ - Validation: `rules` (required, email, url, pattern, length, range, compare, custom, async),
316
+ `error` from outside, `validateOn` blur / input / manual, `isValid`, `validationMessage`,
317
+ `validating`, `validate()`, `resetValidation()`; `ValidationGroup` and `validateFields(root)`
318
+ focus the first failed field. Messages come from `uiLocale` and follow it.
319
+ - Shared parts: `Field` (the base of every editor), `InputMask` / `MaskedText` / `parseMask`
320
+ (work on any `<input>`), `checkRules`. `Control.changeProperty` stores a user's value without
321
+ dropping a bound getter. New `uiLocale` texts. Component tokens `field.*`.
322
+
323
+ ### The rest of the set
324
+
325
+ - Editors: `TextArea` (auto-grow between `minRows` / `maxRows`, resize, counter, Ctrl+Enter),
326
+ `NumberBox` (`min` / `max` / `step` / `largeStep`, spin buttons that repeat, wheel, `Intl` formats
327
+ with locale-aware typing, decimal arithmetic, `clamp`, `allowEmpty`), `Slider` (one value or a
328
+ range, ticks and labels, value bubble, vertical, RTL).
329
+ - Choice: `CheckBox` (three states), `Switch`, `RadioGroup` (APG keys, columns), `ListBox` (single or
330
+ multiple, select all, search, data sources), `TagBox` (tags, search, `maxTags`, custom values).
331
+ - Data: `TreeView` (nested or flat items, lazy children with retry, selection, tri-state check boxes,
332
+ filter, long trees drawn in view), `DataGrid` (moved in from motifjs-data-grid onto
333
+ `@motifx-community/data`: virtual or paged, sorting, column layout, editing with the kit's
334
+ editors, new rows, three save modes, row actions, selection over any number of rows, filter row
335
+ and header filter, copy and paste, CSV export, a saved layout). Rows stay in place in the DOM
336
+ while scrolling; the reading order is given through `aria-owns`. `resizeMode` (grid and column):
337
+ `widget` resizes the column alone, `nextColumn` moves only the edge between it and the next column.
338
+ - `DataGrid` lookup columns: `lookup` (a `DataSource` of any adapter, also of another service, or an
339
+ array; `valueField`, `textField`, `searchFields`, `filter(row)`, `allowClearing`, `resolve`
340
+ `batch` / `byKey`, `batchSize`, `sortBy`, `editor` `dropdown` / `combobox` / `lookup`,
341
+ `editorOptions`). Only the keys on the screen are asked for, several in one request, and only the
342
+ cells that show them are drawn again; loading and "not found" states; the chosen text is
343
+ remembered. `textFrom` and `sortField` on any column; `setCellValue` (also async) and the
344
+ `onEditorPreparing` event for every column; the `syncLookupFilterValues` setting (grid and
345
+ column); `refreshLookups()`. Filter row "(All)" lists, header filter texts, copy, export and paste
346
+ by text, and a key the source does not have stops its row from being saved.
347
+ - `DataGrid` search panel and toolbar. `searchPanel` (with `searchPanelWidth`, `searchPlaceholder`,
348
+ `searchDelay`, `highlightSearchText`, `highlightCaseSensitive`, `searchVisibleColumnsOnly`, all
349
+ live) puts a search box in a toolbar above the rows; `searchText` (followed, told back through
350
+ `onSearchTextChanged`), `searchByText()`, `searchable` (grid and column; a column that turns its
351
+ filters off is left out). Text columns contain the text, numbers, dates and yes/no equal it when it
352
+ reads as one, lists match their option texts, lookup columns ask their own source for the keys
353
+ whose text holds it (`lookup.searchLimit`) or search a `textFrom` field; the columns are joined
354
+ with OR and with the filters with AND, a text no column reads keeps no row, and the filter goes to
355
+ the data source like any other. What was found is marked with `<mark>`; the count is announced; the
356
+ text is kept with the layout. `toolbar` (`visible`, `items`, also `grid.toolbar`, live): the grid's
357
+ own items (`addRowButton`, `saveButton`, `revertButton`, `exportButton`, `columnChooserButton`,
358
+ `searchPanel`) whose features are on, or the listed ones, changed by name, and items of the app's
359
+ own (buttons or `content`) at the start or the end, on the kit's `Toolbar` with its "more" menu.
360
+ "New row", "Save changes" / "Discard" and "Export" moved from the bar under the rows to the toolbar
361
+ (the bar keeps the counts, the error summary and the pager); `columnChooserButton` setting,
362
+ `showColumnChooser()`; the `gridPendingChanges` text went with the bar's old buttons. `clearFilters()`
363
+ also clears the search text. `KeyedItems.searchInMemory`.
364
+ - `DataGrid` grouping. Column `groupIndex` (followed when a function), `groupable` (grid and
365
+ column), `showWhenGrouped`, `autoExpandGroup`, `calculateGroupValue` (a function for rows in
366
+ memory, a field for a server) and `groupCell`; settings `groupPanel`, `groupPanelDragging`,
367
+ `groupPanelEmptyText`, `autoExpandAll`, `groupExpandMode` (`button` / `rowClick`, also per column),
368
+ `remoteGrouping` (`auto` / `true` / `false`), `groupLoadPageSize`, `groupToggleKeys`,
369
+ `groupArrowKeys`, `dragThreshold`, and the column features `groupable`, `showWhenGrouped`,
370
+ `allowCollapsing`, `groupCount`, `groupMenu` (grid and column, the column wins), all live; column
371
+ `groupCompare`; grid `groupCell`; export option `groups`. `grid.group` (read and assign),
372
+ `groupBy(field, index?, dir?)`, `ungroup(field)`, `setGroupOrder(field, dir)`, `clearGrouping()`,
373
+ `expandAll(level?)`, `collapseAll(level?)`, `expandGroup(key)`, `collapseGroup(key)`,
374
+ `isGroupExpanded(key)`; `onRowExpanding` / `onRowExpanded` / `onRowCollapsing` / `onRowCollapsed`,
375
+ `onGroupingChanging` / `onGroupingChanged` (user or code) and `onGroupDropping` (a header or chip
376
+ dropped), the "before" ones cancellable. Group rows are pooled like data rows: "Column: value (count)" (a lookup's
377
+ text, the column's format, "(empty)"), an arrow, moved in by level; a closed group is one row, in
378
+ the virtual list and in pages alike. The grid is a `treegrid` while grouped (`aria-expanded`,
379
+ `aria-level`, `aria-colspan`). Enter / Space open and close a group row, Right and Left open and
380
+ close it and go in and out. The group panel (`groupPanel` toolbar item, at the start): headers
381
+ dropped anywhere on the toolbar group (the bar is outlined while a header is dragged and filled
382
+ under the pointer; a copy of the dragged header or chip follows the pointer, marked when a drop
383
+ would group, move or ungroup; `dragGhost` turns it off), chips turn the order of their groups (click, Enter), move (drag, Shift +
384
+ arrows) and ungroup (Delete, or dragged back onto the headers, where the column lands); the column
385
+ menu has "Group by this column", "Ungroup", "Ungroup all". A grouped column leaves the columns and
386
+ the sort; its header sorts its groups. Data: rows in memory and sources that load everything are
387
+ grouped in memory; a source that loads by blocks over an adapter that groups is asked for the
388
+ groups only and loads the rows of the open groups where the list looks; anything else gets every
389
+ matching row grouped in memory. Filters, search, selection, editing (a saved row moves to its
390
+ group), copy (a group row copies its text), the CSV export (a "Column: value" line per group) and
391
+ the kept layout (`group`) work with it. Texts `gridGroup…` / `gridUngroup…` in en and tr; component
392
+ tokens `datagrid.group-*`, `chip-*`, `panel-empty-color`, `drop-target`.
393
+ - `KeyedItems` (shared, batched key → item cache per source and value field); `DataItems.find`
394
+ goes through it. `DropDown` and `ComboBox` ask for a value on no loaded page by their `valueField`
395
+ when it is a field. `DropDown.open(search)` starts the search box with a text.
396
+ - Layout and windows: `Stack`, `Grid`, `DockPanel`, `Panel`, `GroupBox`, `SplitContainer`, `Tabs`,
397
+ `Accordion`, `MxForm` (window and modal form, `show` / `showDialog`, move, resize, minimize,
398
+ maximize, nested modals), `messageBox`, `confirm`.
399
+ - Commands: `Toolbar` (roving focus, overflow menu), `MenuBar`, `ContextMenu`; `MenuList` gained
400
+ submenus, shortcuts and radio items.
401
+ - `DataGrid`: every behaviour is the developer's, today's value its default. New settings
402
+ `tooltipDelay` (500), `extraRows` (4), `columnWidth` (140), `columnMinWidth` (48), `rowStatusWidth`
403
+ (28), `selectionColumnWidth` (36), `resizeStep` (10), `resizeFineStep` (1), `pagerNeighbors` (1),
404
+ `pagerNavigation` (`true`), `pagerInfo` (`true`), `headerFilterPageSize` (100), `headerFilterRows`
405
+ (8), `exportPageSize` (1000), `trueTexts` / `falseTexts`, `editKeys` (`['Enter', 'F2']`),
406
+ `clearKeys` (`['Delete']`), `editOnKeyPress` (`true`), `startEditAction` (`'dblClick'`); column
407
+ fields `headerCell`, `editOnKeyPress`, `startEditAction`, `trueTexts`, `falseTexts` (a column's
408
+ value wins); lookup fields `pageSize` (50), `filterSearchLimit` (1000), `parallelRequests` (6),
409
+ `pasteSearchLimit` (50); prop `layoutStorage` (default `localStorage`). Events, DevExtreme's names,
410
+ `…ing` cancelable: `onCellClick`, `onCellDblClick`, `onRowClick`, `onRowDblClick`, `onCellPrepared`,
411
+ `onRowPrepared`, `onContentReady`, `onDataErrorOccurred`, `onEditingStart`, `onInitNewRow`,
412
+ `onSaving` / `onSaved`, `onRowInserting` / `Inserted`, `onRowUpdating` / `Updated`, `onRowRemoving` /
413
+ `Removed`, `onEditCanceling` / `Canceled`, `onFocusedCellChanging` / `Changed`,
414
+ `onFocusedRowChanging` / `Changed`, `onKeyHandling` (DevExtreme's `onKeyDown`, a DOM event name in
415
+ JSX), `onOptionChanged`, `onExporting` / `onExported`, `onContextMenuPreparing` (the column menu's
416
+ items, and a row menu on right click or Shift + F10 when items are added), `onToolbarPreparing`,
417
+ `onSelectionChanging`, `onSortChanging` / `Changed`, `onFilterChanging` / `Changed`,
418
+ `onPageChanging` / `Changed`, `onLayoutChanging`, `onSearchTextChanging`, `onCopying`, `onPasting`;
419
+ every event also as `grid.onX(fn)`. State and methods: `status`, `loadError`, `failedBlocks`,
420
+ `editingCell`, `saving`, `exporting`, `focusedRowIndex`, `focusedRowKey`, `getVisibleRows()`,
421
+ `getRowElement()`, `getCellElement()`, `getKeyByRowIndex()`, `getRowIndexByKey()`, `byKey()`,
422
+ `cellValue()`, `navigateToRow()`, `focusCell()`, `editCell()`, `editRow()`, `closeEditCell()`,
423
+ `beginUpdate()` / `endUpdate()`, `repaint()`, `columnOption()`, `getCombinedFilter()`, `state()`.
424
+ `OptionList` `extraRows` (6) and `typingDelay` (600); `KeyedItems` `parallelRequests` (6) and
425
+ `pasteSearchLimit` (50).
426
+ - `DataGrid` summaries, as DevExtreme's `summary`. Prop and property `summary` (`totalItems`,
427
+ `groupItems`, `calculateCustomSummary`, `recalculateWhileEditing`, `skipEmptyValues`, `texts`, each
428
+ followed when a function); item fields `column`, `summaryType` (`sum`, `min`, `max`, `avg`, `count`,
429
+ `custom`), `name`, `showInColumn`, `valueFormat` (`Intl` options or a function; default the column's
430
+ format), `displayFormat` (`{0}`, `{1}`), `customizeText`, `alignment`, `cssClass`, `skipEmptyValues`,
431
+ `visible`, and for group items `showInGroupFooter`, `alignByColumn`. Settings `totalSummary`,
432
+ `groupSummary` (an item's `visible` wins), `totalSummaryTabStop`, `remoteSummary` (`auto` / `true` /
433
+ `false`); `groupLoadPageSize` also paces every-row loads for summaries. `getTotalSummaryValue(name)`
434
+ (by name, place, type, column or `type_column`), `getGroupSummaryValue(key, name)`, `summaryStatus`,
435
+ `onSummaryChanged` (`{ total, editing }`). The row of totals sits under the rows in a sticky row group,
436
+ moves sideways with the columns (sticky ones stay), stacks several items in a column, is a row of the
437
+ ARIA model and a Tab stop of its own; its cells read as items that name their column ("Sum of Amount:
438
+ 1,234"). Group items show after the group row's count, under their columns in the group row, or in
439
+ group footer rows (pooled like the other rows, reached by the arrows, in pages too). Totals of rows in
440
+ memory are worked out in the data path; a source that loads pages or blocks asks its adapter
441
+ (`DataSource.loadSummary`) or loads every matching row once (shared with grouping); a server that
442
+ groups gets the group summaries with the groups, and group items only memory can work out group in
443
+ memory. `rowType` `groupFooter` and `totalFooter` in the click and prepared events; `GroupCellContext`
444
+ `summaryItems`. Export: group footers after their rows and the totals last in the CSV and
445
+ `exportRows()`, group items on the group lines; option `summaries`. Texts `gridSummary…`,
446
+ `gridSummarySeparator`, `gridTotalSummary` in en and tr.
447
+ - Feedback: `ProgressBar`, `Spinner` (with `Spinner.cover`), `Tooltip` / `addTooltip`, `Toast` /
448
+ `toast` / `Toaster`.
449
+ - `Control` binds DOM events given from code (`new Button({ onclick })`); its private state getter is
450
+ `controlState`, so a subclass may have a `state` field.
451
+ - Fixed: `Stack`, `Grid` and `DockPanel` overflowed the call stack when a child was added in their
452
+ `ref`. `TreeView` reported a check again and again when `checkedKeys` was bound both ways with
453
+ `onCheckChanged` writing the keys back; keys equal to the checked ones now change nothing. A tooltip
454
+ shown for keyboard focus closed at once when focusing scrolled its field into view; it now follows
455
+ the field while the page scrolls and closes only if the field is off the screen when scrolling ends.
456
+
457
+ ### DataGrid PDF export and row drag and drop
458
+
459
+ - A new entry, `@motifx-community/ui/pdf`, with `exportDataGrid({ jsPDFDocument, component, … })`
460
+ (DevExtreme's `pdfExporter.exportDataGrid`): jsPDF is an optional peer dependency, the entry draws
461
+ the grid's `exportSheet()` on the document with jsPDF's own calls (no table plugin): the header rows
462
+ with bands merged over their columns, the data rows with the grid's texts and alignment, the group
463
+ rows across the row, group footers, the totals; the grid's widths narrowed to the page; rows that do
464
+ not fit go on to the next page under the header rows again; right to left from the right edge.
465
+ Options: `topLeft`, `columnWidths`, `margin` (40 pt), `indent`, `repeatHeaders` (`true`),
466
+ `selectedRowsOnly`, `loadPanel` (with Stop), `customizeCell({ gridCell, pdfCell })`,
467
+ `customDrawCell({ doc, rect, gridCell, pdfCell, cancel })`, `onRowExporting({ rowCells, rowHeight })`;
468
+ ours: `fitColumns` (`'shrink'` / `'fill'` / `'none'`), `wordWrapEnabled`, `fontSize`, `headers`,
469
+ `groups`, `summaries`, `pageSize`, `onProgress`, `signal`. It resolves with where the table ends
470
+ (`{ page, y }`). Types `PdfExportOptions`, `PdfCell`, `PdfCustomizeCellArgs`, `PdfCustomDrawCellArgs`,
471
+ `PdfRowExportingArgs`, `PdfExportResult`, `PdfMargin`. `'pdf'` in `export.formats` puts “Export all
472
+ data to PDF” in the toolbar's menu (`onExporting` with `format: 'pdf'`).
473
+ - An export given a signal that is already stopped, or stopped while rows in memory are collected,
474
+ now rejects with the `AbortError` instead of going on.
475
+ - Row drag and drop (DevExtreme's `rowDragging`): the `rowDragging` prop and the live
476
+ `grid.rowDragging` — `allowReordering`, `allowDropInsideItem`, `dropFeedbackMode` (`'indicate'`: a
477
+ line; `'push'`: the rows make room), `showDragIcons` (a drag icon column pinned to the start; off:
478
+ the whole row), `handle`, `group` (drag between grids), `data`, `dragDirection`, `boundary`,
479
+ `container`, `cursorOffset`, `dragTemplate`, `autoScroll` / `scrollSpeed` / `scrollSensitivity`;
480
+ ours: `keyboard`, `moveUpKeys` / `moveDownKeys` (`Ctrl+Shift+ArrowUp` / `Down`), `columnWidth`. A
481
+ copy of the row follows the pointer (`settings.dragGhost`, `dragThreshold`); the rows scroll near
482
+ the edges, also over pooled rows of the virtual list. Handlers `onDragStart`, `onDragMove`,
483
+ `onDragChange`, `onDragEnd` (cancelable, `GridRowDragEventArgs`) and `onReorder`, `onAdd`,
484
+ `onRemove` (`GridRowDropEventArgs`, with `promise`), with `fromIndex`, `toIndex`, `itemData`,
485
+ `itemKey`, `toItemData`, `dropInsideItem`, `fromComponent`, `toComponent`, `fromData`, `toData`.
486
+ `moveRow(fromIndex, toIndex)`; Escape cancels a drag; moves are announced. Texts `gridDragColumn`,
487
+ `gridDragRow`, `gridRowMoved`, `gridRowMovedTo`, `gridRowDroppedOnto`, `gridRowMoveFirst`,
488
+ `gridRowMoveLast`, `gridRowDragCanceled` (en/tr); tokens `datagrid.drag-color`, `drag-radius`,
489
+ `row-drag-opacity`, `row-drag-placeholder`, `row-drop-color`, `row-drop-width`,
490
+ `row-drop-inside-width`, `row-ghost-radius`.
491
+ - Docs: “Export to PDF” on the Selection and export page; a new page “Row drag and drop”
492
+ (`/datagrid/drag`: reorder in memory, on a server with an order field, between two grids);
493
+ `e2e/checks/43-datagrid-pdf-drag.mjs`.
494
+
495
+ ### DataGrid infinite scrolling and virtual columns
496
+
497
+ - Infinite scrolling (DevExtreme's `scrolling.mode: 'infinite'`): `mode: 'infinite'` next to
498
+ `'virtual'` and `'paged'`. The rows show part by part (`pageSize` for rows in memory, the block size
499
+ of a source that loads by blocks), the next part loading as the view nears the end; the scroll bar
500
+ grows with the rows that came, and the rows stay pooled and in the source's block cache. No total is
501
+ needed: over a source with `count: false` a part that comes back short ends the rows. While a part
502
+ loads a “Loading more rows…” mark shows over the last rows, with Retry when it fails (the bottom
503
+ bar does with the mark off; Retry asks `onMoreRowsLoading` first); the pager is hidden; Ctrl+End goes
504
+ to the last row shown and loads the next part; a sort, filter, search or grouping starts again from
505
+ the first part. Grouped rows, details, the selection, the row in edit and the focused row keep
506
+ working; “select all” and the export take every row. Settings `loadMoreDistance` (`0`),
507
+ `preloadEnabled` (`false`; in virtual mode it loads a part on each side of the view),
508
+ `loadMoreIndicator` (`true`). `loadMore()`, `loadingMore`, `endReached`,
509
+ `onMoreRowsLoading` (cancelable, `{ skip, take }`) and `onMoreRowsLoaded` (`{ skip, count, ended }`);
510
+ in infinite mode `pageIndex()` is the last part shown and `pageIndex(n)` loads up to it, `pageCount`
511
+ counts the parts, `totalCount()` is −1 until the end is known, `aria-rowcount` −1 too. Texts
512
+ `gridLoadingMore`, `gridLoadMoreFailed`, `gridRecordsLoaded` (en/tr); tokens `datagrid.more-gap`,
513
+ `more-padding-block`, `more-padding-inline`, `more-offset`, `more-radius`, `more-color`,
514
+ `more-danger-color`, `more-background`, `more-shadow`.
515
+ - Virtual columns (DevExtreme's `columnRenderingMode: 'virtual'`): `settings.columnRenderingMode`
516
+ (`'standard'`) and a column's own `columnRenderingMode`, which wins. Only the scrolling columns in
517
+ view and `extraColumns` (`2`) on each side get cells, in the header, the filter row, the rows, the
518
+ group rows' items under their columns, the group footers and the totals; pinned columns, the active
519
+ column, the column in edit and the columns that stay `'standard'` always do. Cells keep their track
520
+ (the per-grid sheet places them by number), `aria-colindex` and `aria-colcount` stay the real ones; a
521
+ band header spans its columns drawn only and keeps its real `aria-colindex` / `aria-colspan`.
522
+ Resizing, moving (over columns without cells too), pinning and “Fit all columns” work as before; the
523
+ keyboard moves into a column without cells, which gets them and scrolls into view; CSV, Excel and
524
+ PDF write every column. `renderAsync` (`'auto'`), `columnRenderingThreshold` (`300` ms) and
525
+ `columnRenderingDelay` (`300` ms) decide whether new columns are drawn as the rows scroll or once the
526
+ scrolling stops. Measured in Chrome on 200 columns × 100,000 rows: 4,776 cells in the page before,
527
+ 154 after (206 at most while scrolling sideways); scrolling down 26–27 fps before, 48–51 after;
528
+ sideways about 60 fps both ways.
529
+ - The band header rows keep every band and the pieces over pinned columns on one line (a piece over a
530
+ pinned column could fall to a line of its own, with no height).
531
+ - Docs: a new page “Scrolling” (`/datagrid/scrolling`: the modes, infinite scrolling over a slow
532
+ server without a count, rows in memory grouped part by part, 200 virtual columns);
533
+ `e2e/checks/44-datagrid-infinite-columns.mjs`.
534
+
535
+ ### DataGrid band headers and adaptive columns
536
+
537
+ - Bands (DevExtreme's band columns): a `GridBand` in `columns` (`title`, `columns` — columns and
538
+ bands to any depth —, `name`, `align`, `sticky`, `hidden`, `movable`, `hideable`, `pinnable`,
539
+ `menu`, `headerCell`), or given flat with `isBand` and a column's `ownerBand` (a band's `name` or
540
+ place). The header becomes a row per level of bands over the titles, each band's header over its
541
+ columns (`columnheader` with the `aria-colindex` of its first column and `aria-colspan`; the band
542
+ rows count in `aria-rowindex` / `aria-rowcount`). A column moves only inside its band (dragging,
543
+ “Move”, `visibleIndex`), a band among its neighbours with all its columns; a band is pinned, hidden
544
+ and moved as a whole (pinning a column in a band pins its band); a band header does not sort.
545
+ Hiding all its columns hides a band. A band's menu (its button, Alt+Down): pin, move, hide, the
546
+ column chooser, reset. Up from a column's header goes to its band's, Down back, Left / Right along
547
+ the bands of a row. With bands the column chooser is a `TreeView` with check boxes. The layout
548
+ keeps `bands` (each band's hidden state and side; its place comes from its columns) and puts a band
549
+ torn apart by a layout back together. `columnOption` and `columnSettings` take a band's name;
550
+ `addColumn` takes a band, or a column with `ownerBand`. CSV writes a line per band level above the
551
+ titles; `exportSheet()` gives the band rows as header rows and `merges` (the cells a band, or a
552
+ column down the band rows, spans). Setting `bandAlign` (`'center'`). Text `gridHideBand`, token
553
+ `datagrid.band-line-color`. Over a pinned column no band covers, an empty piece stays with the
554
+ column so the band rows scroll under it. Excel: the sheet carries the merges, the writer does not
555
+ apply them yet.
556
+ - Adaptive columns: `settings.columnHidingEnabled` and a column's `hidingPriority` (Bind). While the
557
+ grid is narrower than its columns, they hide (the last one first; given a priority on any column,
558
+ only those, the lowest first; pinned and grouped columns never), worked out from the widths kept
559
+ and the viewport's width only, again on every resize. A “…” column at the end of the scrolling
560
+ columns opens a row's adaptive detail under the row (one at a time), before the row's master-detail:
561
+ the hidden columns' titles and values in the edit form's `FormLayout`, editors where the row can be
562
+ edited in its cells (they write into the row's draft; `'cell'` mode saves each). The detail rides on
563
+ the master-detail rows (measured, `aria-owns`, Tab in and out). `adaptiveDetail` (`colCount`,
564
+ `minColWidth`, `labelMode`, `editors`, `expandOnEdit`, `columnWidth`, `toggleKeys`; live through
565
+ `grid.adaptiveDetail`), `onAdaptiveDetailRowPreparing` (`formOptions`),
566
+ `onAdaptiveDetailRowExpanding/Expanded/Collapsing/Collapsed`, `expandAdaptiveDetailRow(key)`,
567
+ `collapseAdaptiveDetailRow()`, `isAdaptiveDetailRowExpanded(key)`, `adaptiveHiddenColumns`;
568
+ `getVisibleRows()` lists it as `rowType: 'detailAdaptive'`. Editing a row in `'row'` mode opens
569
+ its detail and leaving the row closes it (`expandOnEdit`). Hidden columns still count as shown:
570
+ `getVisibleColumns()`, the column chooser, copying and the export have them. Texts `gridAdaptive`,
571
+ `gridAdaptiveOf`; tokens `datagrid.adaptive-*`.
572
+ - The per-grid column stylesheet now targets the cells of the grid's rows only, so the fields of an
573
+ edit form inside the grid no longer pick up the rules of hidden columns.
574
+ - Docs: a new page “Bands and adaptive columns” (`/datagrid/bands`); `e2e/checks/42-datagrid-bands-adaptive.mjs`.
575
+ - Excel export merges a band's header over its columns and a column's header down the band rows (`mergeHeaders`, default `true`).
576
+
577
+ ### FilterBuilder, the DataGrid filter panel and the filter value
578
+
579
+ - `FilterBuilder` (`src/components/filterbuilder/`): a tree of groups (`and`, `or`, `notAnd`,
580
+ `notOr`) and conditions (field, operation, value) whose `value` is the data layer's
581
+ `data.FilterExpression`, two-way with `x-model`; a condition without its value stays out of it.
582
+ `fields` (`dataField`, `caption`, `dataType`, `format`, `lookup`, `filterOperations`,
583
+ `defaultOperation`, `editor`, `editorOptions`, `customizeText`, `trueText` / `falseText`; Bind
584
+ fields), `customOperations` (`name`, `caption`, `dataTypes`, `hasValue`, `editor`,
585
+ `customizeText`, `calculateFilterExpression`, `readFilterExpression`), `groupOperations`,
586
+ `maxGroupLevel`, `allowHierarchicalFields` (dotted fields as submenus), `texts`, `locale`, `label`,
587
+ `size`, `addKeys` (`Insert`), `removeKeys` (`Delete`). Operations are the data layer's (`in` /
588
+ `notin` read DevExtreme's `anyof` / `noneof`); per type as DevExtreme's (`defaultOperations()`).
589
+ Values are edited in place with the kit's TextBox, NumberBox, DateBox, DropDown (yes/no, lookups),
590
+ TagBox (`in` / `notin`), two boxes for `between`, none for `isblank` / `isnotblank`.
591
+ - Every change is a method and asks first: `addCondition`, `addGroup`, `removeItem`, `setField`,
592
+ `setOperation`, `setConditionValue`, `setGroupOperation`, `clear`, `openEditor` / `closeEditor`,
593
+ `focusItem`; `onItemAdding/Added`, `onItemRemoving/Removed`, `onItemChanging/Changed` (cancelable,
594
+ `e.value` changeable), `onValueChanged`, `onEditorPreparing` (`options`, an `editor` of your own, or
595
+ `cancel`) / `onEditorPrepared`. `filterText` (property) and the `filterText(value, options)`
596
+ function write a filter as `[City] Equals 'Ankara' And [Amount] Is greater than '100'`;
597
+ `FilterBuilderModel` is the logic without the view.
598
+ - Keyboard and ARIA: a `treegrid` (rows with `aria-level`, `aria-posinset`, `aria-setsize`, a kit
599
+ Button per `gridcell`, named “Field: City”, “Operation: Equals”…), one Tab stop with roving focus;
600
+ arrows, Home / End, Ctrl + Home / End, Alt + Down opens a menu on its chosen item, F2 / Enter the
601
+ value editor (Enter keeps, Escape gives up, Tab keeps and goes on, from “from” to “to” first).
602
+ Texts `filterBuilder…` / `filterOp…` (en, tr). Tokens `filterbuilder.*`
603
+ (`tokens/component/filterbuilder.tokens.json`): the rows indent per level with a line along each group.
604
+ - DataGrid: `settings.filterPanel` (a panel under the rows: the check box, the filter's text that
605
+ opens the builder, “Create Filter”, “Clear”), `settings.filterSyncEnabled` (`'auto'`: while the
606
+ panel shows; the filter row and header filters are part of the filter value both ways, conditions
607
+ they cannot show stay in it), the column feature `filterBuilder` (default `true`), the props and
608
+ properties `filterValue` and `filterEnabled` (Bind, followed), `filterPanelText`, `filterBuilder`
609
+ (the builder's props, live) and `filterBuilderPopup` (the `MxForm` window: `title`, `showTitle`,
610
+ `width`, `height`, `resizable`, `movable`, `showCloseButton`, `showMaximize`, `fullScreen`), the
611
+ methods `openFilterBuilder()`, `closeFilterBuilder(apply?)`, `clearFilterValue()`, the property
612
+ `filterText`, the events `onFilterBuilderOpening/Opened/Closing/Closed`; `onFilterChanging` /
613
+ `onFilterChanged` carry `filterValue` and `filterEnabled` (and the previous ones) and run for the
614
+ panel and the builder too. A date condition chosen as a day stays a day in the filter value and
615
+ goes to the data source by the day. The kept layout and `state()` keep `filterValue` and
616
+ `filterEnabled`. `clearFilters()` takes the filter value away too. Texts `gridFilterPanel…`,
617
+ `gridFilterBuilderTitle`; tokens `datagrid.filter-panel-*`, `datagrid.filter-text-*`,
618
+ `datagrid.filter-icon-size`, `datagrid.filter-builder-buttons-gap`.
619
+ - Docs: a FilterBuilder page (Data group) and “Filter panel and builder” on DataGrid: Filtering
620
+ (the 100,000-row server grid of “Filters” moved there, with the panel); `e2e/checks/41-filterbuilder.mjs`.
621
+
622
+ ### DataGrid pager, columns at run time, header filter ranges and entries
623
+
624
+ - The pager is a part of its own (`nav`, named by `pagerLabel` or “Pages: <grid>”): the page sizes
625
+ (`pageSizeSelector`, default `false`; `allowedPageSizes`, numbers and `'all'`, default `'auto'`:
626
+ half, once and twice the page size), the text (`pagerInfo`; `pagerInfoText` with `{0}` / `{page}`,
627
+ `{1}` / `{count}`, `{2}` / `{total}`; the default `gridPageOf` now reads “Page 3 of 12 (250
628
+ items)”), the steps (`pagerNavigation`) and the pages (`pagerNeighbors`, each named “Page 3”, the
629
+ current one `aria-current="page"`). `pagerDisplayMode`: `'full'` (page buttons, the sizes as
630
+ pressed-state buttons), `'compact'` (a page number box and a drop-down of the sizes, the text
631
+ hidden), `'adaptive'` (default: full while it fits in the bar, measured on resize). `pager: 'auto'`
632
+ shows it only while there is more than one page (default stays `true`). The pager's buttons keep
633
+ their element while they stay, so focus stays on a pressed page button.
634
+ - Page size: `pageSize(n?)` (0: every row on one page), `pageIndex(n?)`, `totalCount()`;
635
+ `onPageSizeChanging` (cancelable) / `onPageSizeChanged` (`{ pageSize, previous }`); the grid goes
636
+ back to the first page (`onPageChanged` tells it). A source that loads by page gets the new size
637
+ through the data layer's `DataSource.setPageSize`; a source of blocks pages by ranges. The size the
638
+ user chose is kept with the layout (`layoutKey`) and in `state()` (`pageSize`); a new `pageSize`
639
+ prop wins over it. `pageKeys` (default `'page'`): PageUp / PageDown turn the page in paged mode
640
+ (`'rows'`: a screen of rows, as before).
641
+ - Columns at run time: `addColumn(column, index?)` (what the kept layout says of a column added later
642
+ applies), `deleteColumn(field)` (its sort, grouping and filter go with it, without `…Changing`
643
+ events), `columnCount()`, `getVisibleColumns()`. `columnOption(field, name, value)` now writes any
644
+ field of the definition too (`title` follows where it shows; anything else makes the column's cells
645
+ again in every row, the header, the filter row, the group rows and footers and the totals, its
646
+ layout, sort and filter kept; a field the rows are read by — `type`, `value`, `lookup` … — queries
647
+ them again), plus `hidden`, `flex`, `filterValues`, `filterType`; `columnOption(field, options)`
648
+ sets several. `onOptionChanged` tells each, and `name: 'columns'` with the fields for a column added
649
+ or taken out. Rows in memory compare a column's type from its definition on every query.
650
+ - Header filter: a column's `headerFilterInterval` (`Bind`) groups its values — a number column in
651
+ ranges of that size (“0 – 100”, several sizes a tree), a date column in a tree of years → quarters
652
+ or months → days → hours → minutes → seconds down to the part it names; dates are a tree by default
653
+ (`headerFilterDateInterval`, default `'day'`; `null` lists the dates). The tree is the kit's
654
+ `TreeView` with check boxes and a “Select all” `CheckBox`; a node is kept as its path (`2026`,
655
+ `'2026/3'`, `'2026/3/15'`, as DevExtreme does) and filters with `>=` its start and `<` its end, on a
656
+ server too. Counts are worked out in the browser from the distinct values (memory, an adapter that
657
+ groups, or `loadValues`). `headerFilterItems`: entries of its own, `{ text, value }` (a value may be
658
+ a filter expression), or a function of `{ column, filter, signal, values() }`. `filterValues` and
659
+ `filterType` (`'include'` / `'exclude'`, both `Bind`) on the column, `filterType` in `grid.filters`;
660
+ in the list, choosing every value and then taking some away leaves those out.
661
+ - Texts (en, tr): `gridPage`, `gridPageCount`, `gridPageNumber`, `gridPageButton`, `gridPageSize`,
662
+ `gridPageSizeAll`, `gridValueRange`, `gridQuarter`; `gridPageOf` gained `{total}`. Tokens
663
+ `datagrid.page-number-width`, `page-size-width`, `values-row-height`.
664
+ - Docs: “Pager” (Overview), “Columns at run time” (Layout and events), “Ranges, dates and entries”
665
+ (Filtering), the settings, events, columns and methods tables. Tests: 23 new in the datagrid
666
+ (pager, runtime columns, intervals); `e2e/checks/40-datagrid-pager-columns.mjs`.
667
+
668
+ ### DataGrid selection look, menu tones, deletions in one save
669
+
670
+ - Selected rows wear the design language's selection look, as the lists and the tree do: tokens
671
+ `datagrid.selected` (`color.selection.bg`, was `color.accent.subtle`), new `selected-text`
672
+ (`color.selection.fg`), `selected-border` (`color.selection.border`), `selected-border-width`
673
+ (`selection.border-width`), `selected-effect` (`effect.selection`), `indicator-width`,
674
+ `indicator-length`, `indicator-radius` (`indicator.*`) and `indicator-color`
675
+ (`color.selection.indicator`). The fill is the row's background, the frame and the effect are
676
+ drawn over the cells (sticky ones too) and the bar at the start where the language has one (Fluent);
677
+ none of it takes room. Hover and the active row's tint lie over the fill, the focus ring on top; on
678
+ a selected row the fill stands for the stripe and the new-row tint.
679
+ - `datagrid.ghost-shadow` and `datagrid.export-shadow` are `{elevation.popup}` (were `{shadow.8}`).
680
+ - `MenuItem.tone` (`Bind<'standard' | 'accent' | 'success' | 'caution' | 'danger'>`): `MenuList`
681
+ writes `data-tone` on the item (none for `standard`) and follows a function. The grid gives each
682
+ action's `tone` to its items in the row's "more" menu, the context menu and the bars' "Actions" menu.
683
+ - `deleteRows(rows)`: several rows in one save, asked once. The ready `remove` on several rows
684
+ (bars, context menu) uses it, through the data layer's `ChangeTracker.removeRows`: in `wait` and
685
+ `background` one save, one request when the adapter saves in batches; `batch` marks them as before.
686
+ - Docs: the selection look (Selection), `tone` and the one save (Row actions), `deleteRows` (API).
687
+ `e2e/checks/36-datagrid-bar-actions.mjs` checks that the Delete item carries `data-tone="danger"`.
688
+ - `Toolbar`: a button that moves into the "more" menu keeps its `tone` on the menu item.
689
+
690
+ ### DataGrid master-detail rows
691
+
692
+ - `masterDetail` (each field a `Bind`, live through `grid.masterDetail`): `enabled` (the expand
693
+ column, after the status and check box columns, pinned like them), `template(ctx)` (what a row's
694
+ details hold: a component, an element or a text; `ctx` has `row`, `rowIndex`, `key`, `grid`,
695
+ `collapse()`), `autoExpandAll`, `canExpand` (a value or a function of the row), `keepDetails`
696
+ (default `true`: a closed row keeps its content), `keepLimit` (default `100` details kept out of
697
+ view), `height` (a value or a function of the row; default the content's), `estimatedHeight`
698
+ (default `200`), `columnWidth` (default `36`), `toggleKeys` (default `['Enter', ' ']`), `arrowKeys`
699
+ (default `true`). Changing `enabled`, `autoExpandAll` or `template` opens or closes every row again.
700
+ - A row's details are a row of their own under it, one cell across the grid that stays in place while
701
+ the columns scroll sideways. They are not pooled: made the first time they show, kept while the row
702
+ is open (parked out of view, laid out but not drawn), disposed when the row leaves the data, past
703
+ `keepLimit`, on closing without `keepDetails`, or with the grid. Their height is measured (a
704
+ `ResizeObserver`, so a tab or a nested grid that changes size moves the rows after it) and fed to the
705
+ scroll geometry (`ExtraHeights`, two Fenwick trees), so the scroll bar, `reveal` and moving to a row
706
+ stay right in the virtual list and on a page; the pooled rows keep their path.
707
+ - Methods `expandRow(key)`, `collapseRow(key)`, `isRowExpanded(key)` (reactive), `expandAllRows()`,
708
+ `collapseAllRows()`. The row events are the groups' ones, now with `kind: 'group' | 'detail'` (and
709
+ `row` for details): `onRowExpanding` / `onRowCollapsing` (cancellable) and `onRowExpanded` /
710
+ `onRowCollapsed`, from the user and from code. `onRowPrepared` with `rowType: 'detail'`,
711
+ `getVisibleRows()` lists the details after their row. `GridRowExpandingEventArgs` and
712
+ `GridRowExpandedEventArgs` are unions by `kind`: a handler that reads a group's `key` narrows first.
713
+ - Keyboard and ARIA: Enter / Space and Right / Left on the expand cell, Tab into the row's details,
714
+ Escape or Shift+Tab back to the row, Tab out of the grid from their last stop; with details on the
715
+ screen Tab never lands in another row's details. The arrow is a button with `aria-expanded` and
716
+ `aria-controls`; grouped (a treegrid) the row says `aria-expanded` too. The details come right after
717
+ their row in `aria-owns`, count in `aria-rowindex` / `aria-rowcount`, and are named “Details of row
718
+ 3”. Clicks, keys, focus, paste and tooltips inside the details are left to their content.
719
+ - Texts `gridDetails`, `gridDetailsOf` (en, tr); tokens `datagrid.expand-color`, `expand-radius`,
720
+ `detail-padding`, `detail-background`. Docs: “Master-detail” page (`/datagrid/master-detail`).
721
+ `e2e/checks/39-datagrid-master-detail.mjs`.
722
+
723
+ ### DataGrid edit forms, popups and validation rules
724
+
725
+ - `settings.editMode: 'row' | 'cell' | 'batch' | 'form' | 'popup'` (default `'row'`, live): how a
726
+ row is edited and when it is handed to saving. `saveMode` still says how a row handed over is
727
+ sent. `'row'` is what the grid did before (in the cells, on leaving the row); `'cell'` saves an
728
+ existing row as each of its cells is left (a new row on leaving it); `'batch'` sets the save mode
729
+ to `'batch'` (the same as `saveMode: 'batch'` with `'row'`), and switching to or from it starts
730
+ again with the data, like `saveMode`.
731
+ - `'form'`: the row opens as a form in its place, across the grid's width — the kit's `FormLayout`
732
+ with a field per column, each the editor its cell gets (by type, a lookup's, the column's own
733
+ `editor`), framed and labelled, read-only where the user cannot fill it, with the messages of the
734
+ checks on the fields and the row's own message above them. The rows after it move down by its
735
+ height, in the virtual list and on a page. Save (or Enter in a one-line field) saves the row as the
736
+ save mode says, Cancel (or Escape) gives it up; focus goes into the form and back to the row. A
737
+ field whose value changed through another (`setCellValue`) is made again. Typing on a cell does
738
+ not open it; Enter, F2, the start-edit click, the `edit` action, `editRow()` and `addRow()` do.
739
+ Editing another row, a new row, sorting, filtering, paging and `refresh()` give the form up, as
740
+ DevExtreme does.
741
+ - `'popup'`: the same form in the kit's `MxForm` as a modal window, for existing and new rows:
742
+ Save and Cancel in its footer (Enter and Escape press them), the close button cancels, focus stays
743
+ inside and comes back to the row.
744
+ - `form` prop / `grid.form` (live): `items` (field names or kit `FormItem`s — a column's field gets
745
+ its editor; groups, buttons and templates are the form's own), `colCount` (default 2),
746
+ `minColWidth`, `labelMode`. `popup` prop / `grid.popup` (live): `title`, `showTitle`, `width`,
747
+ `height`, `resizable`, `movable`, `showCloseButton`, `showMaximize`, `fullScreen`. Column
748
+ `formItem`: `visible`, `colSpan`, `label`, `helpText`, `editorOptions`, `order`. `onOptionChanged`
749
+ tells `form.*` and `popup.*`.
750
+ - Column `validationRules`, DevExtreme's set: `required` (`trim`), `numeric`, `range`, `stringLength`
751
+ (`trim`), `pattern`, `email`, `compare` (`comparisonTarget(row)`, `comparisonType`), `custom` and
752
+ `async` (`validationCallback({ value, row, column, rule })`), each with `message`,
753
+ `ignoreEmptyValue` (DevExtreme's defaults) and, where DevExtreme has it, `reevaluate` (on for
754
+ `async`). Checked with the kit's `checkRules` as a value is written and before the row is saved,
755
+ after `required` and `validate` (which keep working); `async` rules run last and together, the row
756
+ waits for them (its cell busy) and a value is not checked twice. Batch `saveChanges()` checks every
757
+ row first. Messages in the cells, the form and the window.
758
+ - `onRowValidating` (`{ key, row, isNew, changed, errors, isValid, errorText, cancel }`) after the
759
+ cells, once per check of the row: add or take out messages, or say no with `errorText`.
760
+ `onEditorPrepared` (`{ field, row, isNew, editor, element, place: 'cell' | 'form' }`).
761
+ `onEditingStart` comes for the form too (`field` `''`); `onEditorPreparing` for every form field
762
+ (`cancel` leaves it out).
763
+ - `settings.confirmDelete` (default `true`, as DevExtreme): `deleteRow()` and the ready `remove`
764
+ ask with the kit's `confirm()` first, once for all the rows an action deletes; not in batch mode.
765
+ `settings.selectTextOnEditStart` (default `true`, what the grid did): off, the caret goes to the end.
766
+ - Methods: `editRow(i)` opens the form in the form modes, `editRowByKey(key)`, `saveEditData()`,
767
+ `cancelEditData()`; `closeEditCell()` keeps the form's values. Texts in en and tr:
768
+ `gridConfirmDelete`, `gridConfirmDeleteRows`, `gridConfirmDeleteTitle`, `gridEditRowTitle`,
769
+ `gridNewRowTitle`, `gridRowInvalid`. Tokens: `datagrid.form-padding`, `form-gap`,
770
+ `form-background`, `form-message-color`, `form-label-color`, `form-label-font-size`.
771
+ - Docs: a new page "Edit forms and popups" (`/datagrid/forms`: the form with groups and an edit-mode
772
+ switch, the window, the rules with an async one) with the tables of modes, settings, form and popup
773
+ options, rules, events and methods; rows in the API and layout pages; a browser check
774
+ `e2e/checks/38-datagrid-forms.mjs`.
775
+
776
+ ### DataGrid actions in the bars
777
+
778
+ - Row actions can show in the toolbar (`actionsLocation: 'toolbar'`, the new `rowActions` toolbar
779
+ item, at the start, placed through `toolbar.items` like the others) or at the start of the bottom
780
+ bar (`'bottom'`, on a kit `Toolbar` of its own) for the rows they act on: the selected rows, or the
781
+ active row without selection (`actionsTarget: 'selection' | 'focused' | 'auto'`). Default
782
+ `'row'`, as before; an action's `location` wins, and the actions column shows only while an action
783
+ sits in the row. No target: nothing shows. One row: its own actions, as the row would show them.
784
+ Several rows: the actions every row has (same `id`, visible for each), disabled while disabled for
785
+ one of them (`actionsMultipleEnabled: 'any'`: enabled for any, and run on those), with the count
786
+ after the text ("Print (3)", `actionsShowCount`), named "Print, 3 rows" and described by what the
787
+ bar acts on ("Actions for 3 selected rows"), which is announced when it changes.
788
+ - Running on several rows: `onclickMany(rows, e)` once, else `onclick` for each row in turn, a
789
+ promise waited for; a throw, a rejection or a promise of `false` counts the row as failed and does
790
+ not stop the others unless `actionsStopOnError` (or the action's `stopOnError`). While it waits the
791
+ export load panel shows the progress and a Stop button (`actionsProgress`, `actionsStopButton`,
792
+ `grid.stopAction()`); the outcome is announced ("Print: 2 of 3 done, 1 failed"). `multiple: false`
793
+ keeps an action to one row (the ready `edit`). The ready `remove` marks every row in batch mode and
794
+ sends each in the other modes.
795
+ - After "select all" over a server (rows not loaded) only actions with `onclickSelection(selection,
796
+ e)` show; they get the selection state of `grid.selection`.
797
+ - A row's actions are in its context menu (right click, Shift+F10 / the context menu key), wherever
798
+ they show: inside a selection of several rows the common ones, with the count, for all of them;
799
+ right click makes the row the active one. `actionsContextMenu` and an action's `contextMenu` turn
800
+ it off; `onContextMenuPreparing` gets them in `e.items`; an empty menu does not open.
801
+ - `actionsDisplay: 'menu'`: a row shows only its "more" button, every action in its menu, and the
802
+ column is as wide as that button (unless an action is a button always); the bars show one
803
+ "Actions" menu button. An action's `menu: 'auto' | 'always' | 'never'` wins. The row's "more"
804
+ button is named "More actions for row N".
805
+ - New: `onActionRunning` (cancelable: `{ action, rows, selection, location }`), `onActionRan`
806
+ (`{ action, rows, location, done, failed, canceled, errors }`), `grid.runAction(id, rows?)`,
807
+ `grid.actionTargets`, `grid.barActions`, `grid.stopAction()`. A press in a row runs through the same
808
+ events. `GridAction.onclick` is optional now and may return a promise; new fields `location`,
809
+ `menu`, `multiple`, `multipleEnabled`, `stopOnError`, `showCount`, `contextMenu`, `beginGroup`,
810
+ `onclickMany`, `onclickSelection`. Texts in en and tr (`gridActionCount`, `gridActionCountLabel`,
811
+ `gridActionsForRow`, `gridActionsForSelectedRow`, `gridActionsForSelectedRows`, `gridActionRunning`,
812
+ `gridActionProgress`, `gridActionStop`, `gridActionDone`, `gridActionPartly`, `gridActionFailed`,
813
+ `gridActionStopped`, `gridMoreActionsForRow`).
814
+ - Docs: "Row actions" has a new example (location switch, menu only, Approve with `onclickMany`,
815
+ Print row by row, Delete) and tables of the settings, action fields, events and members; a browser
816
+ check `e2e/checks/36-datagrid-bar-actions.mjs`.
817
+
818
+ ### DataGrid Excel export
819
+
820
+ - New entry `@motifx-community/ui/excel`: `exportDataGrid({ component, worksheet, … })` writes a
821
+ `DataGrid` to an ExcelJS worksheet, as DevExtreme's `excelExporter.exportDataGrid`; ExcelJS is an
822
+ optional peer dependency the app brings, and apps that do not import the entry never load it. It
823
+ resolves with the cells written (`{ from, to }`). Options `topLeftCell` (`{ row, column }` or
824
+ `'B2'`), `customizeCell({ gridCell, excelCell })`, `autoFilterEnabled`, `keepColumnWidths`,
825
+ `selectedRowsOnly`, `loadPanel`, `encodeExecutableContent`, and `headers`, `frozenHeader`, `groups`,
826
+ `outline`, `summaries`, `numberFormats`, `booleanText`, `pageSize`, `onProgress`, `signal`. Also
827
+ `excelNumberFormat` and `excelDateFormat` (an `Intl` format as an Excel number format).
828
+ - The sheet: a frozen header row, the rows in the grid's order with its filter, search and grouping
829
+ (every matching row, a server's in parts), group rows ("Column: value" with their summary items,
830
+ aligned ones under their columns) with outline levels, group footers and the totals (several items
831
+ of a column a row each). Numbers stay numbers with a number format made from the column's `Intl`
832
+ format, dates stay dates, yes/no cells are `TRUE` / `FALSE`, lookup and list cells and columns with a
833
+ `format` function hold their texts; widths follow the grid.
834
+ - Column `format` also takes `Intl` options for number and date columns (shown by the grid, and the
835
+ number format in Excel).
836
+ - `export` prop and live `grid.export` (`formats`, default `['csv']`; `allowExportSelectedData`;
837
+ `texts`: `exportTo`, `exportAll`, `exportSelectedRows`, `formats`): the toolbar's export button
838
+ offers a command per format, and "Export selected rows" for each, as a menu when there is more than
839
+ one. `csv` is written by the grid as before; other formats raise `onExporting` with `format`,
840
+ `component` and `selectedRowsOnly`, where the app writes the file. `exportTo(format, options)`,
841
+ `exportSheet(options, write)` (the rows as a sheet of typed cells for any writer; `onExported`
842
+ follows with its `format`), `cancelExport()`; types `GridSheet`, `GridSheetRow`, `GridSheetCell`,
843
+ `GridSheetColumn`, `GridExportCell`, `GridSheetOptions`, `GridExportSettings`, `GridExportTexts`,
844
+ `GridLoadPanel`.
845
+ - A load panel over the rows while an export runs, with its progress and a button that stops it
846
+ (`loadPanel`; on for `exportDataGrid`, off for `exportCsv` / `exportRows`). A stopped export rejects
847
+ with the `AbortError`. Texts `gridExportAll`, `gridExportSelectedRows`, `gridExportProgress`,
848
+ `gridExportCancel`, `gridExportCanceled`, `gridFormatXlsx`, `gridFormatCsv`, `gridFormatPdf` in en
849
+ and tr. ExcelJS 4.4 as a dev dependency for the tests and the docs.
850
+
851
+ ### DropDown, ComboBox, Autocomplete, Lookup
852
+
853
+ - `DropDown`: pick one item (APG select-only combobox); `items` (plain values, `DropDownItem`s or any
854
+ shape through `textField` / `valueField` / `iconField` / `groupField` / `enabledField`) or a
855
+ `dataSource` of `@motifx-community/data` (searched on the server, a value on no loaded page found
856
+ by key); `searchEnabled` (a TextBox in the list), `searchMode`, `searchDelay`, `clearButton`,
857
+ `itemTemplate`, `fieldTemplate`, `matchWidth`, groups, type-ahead, long lists drawn in view only.
858
+ - `ComboBox`: a text field whose list follows the text (APG combobox, list autocomplete); items in
859
+ memory or a data source; `minSearchLength`, `searchDelay`, `acceptCustomValue`, `autoHighlight`,
860
+ `showDropDownButton`. `Autocomplete`: the value is the text.
861
+ - `Lookup`: a drop-down with a table-like list (`columns` with captions, widths, alignment), a search
862
+ box on by default, for data sources.
863
+ - Shared parts: `OptionList` (`role="listbox"`, items or an `ItemSource` that loads while scrolled,
864
+ windowing with spacer rows, `handleKey`, `typeAhead`), `DataItems` (an array or a `DataSource`
865
+ behind one interface), `readItemField`, `functionValue` (a function prop with parameters is the
866
+ value, one without is a getter). `@motifx-community/data` is a peer dependency.
867
+
868
+ ### Calendar, DateBox
869
+
870
+ - `Calendar`: the APG date grid with year and decade views; `min`, `max`, `disabledDates`, `locale`
871
+ (names and first day of the week from `Intl`), `firstDayOfWeek`, `showWeekNumbers` (ISO),
872
+ `showOtherMonths`, `showTodayButton`, `currentView`, `minView` (pick a month or a year).
873
+ - `DateBox`: `type` date / time / datetime typed through a mask in the locale's order
874
+ (`datePatternOf`), a calendar and a list of times (`timeStep`, `showSeconds`) on a popup,
875
+ `displayFormat` while not edited, `min` / `max` / `disabledDates` checked, an unfinished text
876
+ reported (`unfinished`, `invalidDate`).
877
+
878
+ ### FormLayout
879
+
880
+ - `FormLayout`: the fields of a data object on a grid (`columns`, `minColumnWidth`), each with an
881
+ editor by name or by the type of its value (`FormLayout.editors` can be extended), bound both ways;
882
+ groups with captions, `colSpan`, `visible`, buttons (`submit`), templates; one validation group;
883
+ `onValidSubmit` / `onInvalidSubmit`.
884
+
885
+ ### Field
886
+
887
+ - A stored `null` stays `null` (a nullable value round-trips). A field checked when it is left waits
888
+ for a press in progress to end, so an error line appearing cannot move a button away from the
889
+ pointer. The clear button is shared (`showClearButton`). `Popup` placements on every side
890
+ (`top`, `start`, `end-start` …) and a closed popup stays hidden whatever its content's display.
891
+
892
+ ### docs app
893
+
894
+ - The docs site is one MotifJS app: `Application` + router (history mode), `DocsLayout` with a
895
+ `RouterView`, pages loaded when first opened, `SiteSettings` and `PageOutline` services (each
896
+ `Section` adds itself to the outline), the side-menu search is a `TextBox`.
897
+ - Every example is its own file (`pages/<id>/examples/`), complete with imports and state; the page
898
+ runs it and "Show code" shows its exact source, a tab per file, with a Copy button. The content
899
+ column grows with wide windows. The browser checks fail on any MotifJS console warning.
900
+
901
+ ### design system
902
+
903
+ - The look comes from `@motifx-community/design-system` (a peer dependency): its primitive,
904
+ semantic and density tokens, the three themes (`[data-theme]`, `prefers-color-scheme` by
905
+ default), `[data-density="compact"]`, the fonts, the reset, the typography ramp, the focus ring
906
+ and the reduced-motion / reduced-transparency / forced-colors overrides. `styles.css` imports
907
+ the design system's stylesheet first. This package defines no color, size, font or motion value
908
+ of its own and never redefines a design-system token.
909
+ - Component tokens (`button.*`, `form.*`, `groupbox.*`, `split.*`): DTCG 2025.10 JSON in
910
+ `tokens/component/`, one fine-tuning knob per component, each referencing a design-system token
911
+ (or a literal size only that component has). Built with Style Dictionary against the design
912
+ system's source — a reference to a token that does not exist, or a `$type` mismatch, fails the
913
+ build — and written as `--mx-<component>-*` inside `@layer mx.components`, after the design
914
+ system's layers. Title bars read `color.bg.bar` and `bar.height` (density-aware), the form
915
+ footer `color.bg.layer`, the close button's hover the danger colors.
916
+ - `./tokens`: `cssVar` / `cssProperty` over the design system's token names plus the component
917
+ token names (`TokenName`), and the `componentTokens` map.
918
+ - Tests check that the generated files match the source, that every kit CSS file sits in
919
+ `@layer mx.components` and that every `var(--mx-…)` it uses is a design-system or component
920
+ token; `npm run lint:css` runs the design system's shared stylelint config.
921
+
922
+ ### components
923
+
924
+ - `Control`: the base of every control. `text`, `enabled` (alias `disabled`), `visible`,
925
+ `tabStop` and `tabIndex` work the same as props (value or getter) and as properties set from
926
+ code; a value set in code replaces a bound getter; every property is reactive to read.
927
+ `enabled` is the control's own value (like the HTML attribute), `isEnabled` whether it can be
928
+ used now (like CSS `:enabled`). `enabled = false` disables the whole subtree (native
929
+ `disabled`, otherwise `tabindex="-1"` + `aria-disabled`, pointer input swallowed), restores it
930
+ exactly, nests, follows content added later, and leaves windows opened inside usable. Hiding or
931
+ disabling the focused part moves focus on instead of dropping it to `<body>`. `focus()`,
932
+ `canFocus`, `focused`, `focusWithin`, `parentControl`, `onAccessKey()`, `addShortcut()`.
933
+ Layout props on every control: `dock`, `left` / `top` / `right` / `bottom`, `width` /
934
+ `height`, `row` / `column` / `rowSpan` / `columnSpan` (1-based, as CSS grid lines). Subclass
935
+ API: `applyProperty` / `peekProperty`, `observeProperty`, `getProperty` / `setProperty` /
936
+ `bindProperty`, `focusElement`, `hasModel` / `writeModel` (two-way `x-model`), `strings`.
937
+ Untouched properties cost nothing; only getter props create effects; state is kept off class
938
+ fields so `ref` callbacks (called by core before fields exist) stick.
939
+ - `FocusContainer`: remembers the active control inside (`activeControl`, reactive and
940
+ assignable; `restoreFocus()`) and is a scope for Tab: the outermost one runs `tabIndex` order
941
+ per level of the control tree (ties in document order, one radio per group) and leaves Tab to
942
+ the browser until a control sets a `tabIndex`; `cyclesTab` keeps Tab inside a modal window.
943
+ - Keyboard: `&Text` access keys (`parseAccessKey`): Alt + key, Control + Option + key on Apple
944
+ platforms (where Option types characters), written to `aria-keyshortcuts`. The key is
945
+ underlined while the modifiers are held, after an Alt tap (kept from the browser menu while the
946
+ page has access keys), or always with `data-mx-access-keys="always"`; AltGr is ignored; scope
947
+ is the modal form, else the focused window, else the page; shared keys cycle focus; disabled
948
+ controls do not take the key; plain elements take part via `aria-keyshortcuts`.
949
+ `addShortcut(chord, handler, { scope, inEditable })` and `control.addShortcut` (most specific
950
+ scope first, silent across a modal form, plain keys left to text fields and windows). One
951
+ capture listener for the document.
952
+ - Focus guard: focus inside a Control never falls to `<body>` when it is removed, disposed or
953
+ hidden; it moves to the next usable element from that spot.
954
+ - Layout: `Panel` (padding as token step or free CSS; `scrollable`, a Tab stop so it can be
955
+ scrolled by keyboard; docking: `dock` top / bottom / start / end / fill / float on any child,
956
+ `start` / `end` following the reading direction, document order, CSS grid, no script on
957
+ resize), `Stack` (vertical / horizontal flex line, `gap`, `align`, `justify`, `wrap`), `Grid`
958
+ (`rows` / `columns` as CSS tracks or pixels, with `*` / `2*` as a shrinkable-share shorthand;
959
+ children by `row` / `column` / spans), `GroupBox` (`<fieldset>` + `<legend>`, access key focuses
960
+ its first field, docks like a Panel, `controls.add` goes inside the frame), `SplitContainer`
961
+ (`orientation` as in Stack, `position`, `fixedPanel`, `firstMinSize` / `secondMinSize`,
962
+ `collapsed`, `resizable`, `step`, `splitterSize`; pointer and keyboard with a localized
963
+ `separator`; RTL aware; `first` / `second` are `SplitPanel`s).
964
+ - `Label`: a `<label>` with the type ramp (`textStyle`) and theme `tone`s, inheriting font and
965
+ color when unset. `target` (control, element or id) makes it the target's accessible name
966
+ (`for`, or `aria-labelledby` for non-labelable elements); a click focuses the target and the
967
+ access key moves focus there without clicking. Without a target it names the field inside it.
968
+ `accessKeys`, `textAlign`, `verticalAlign`, `ellipsis` and `maxLines` (full text as a tooltip
969
+ on hover). Labels inside a disabled control dim.
970
+ - `Button`: standard / accent / danger, outline and ghost buttons with reactive `variant` /
971
+ `size` / `tone` props exposed as `data-*` attributes; built on `Control`. Static look props
972
+ create no effects. Solid buttons are pressable the way the design system describes: opaque fill,
973
+ bottom edge (`control.edge.width`, `color.stroke.control.edge`), inner top highlight
974
+ (`color.highlight.control`), press offset on `:active`; the focus ring keeps its inner ring.
975
+ - `MxForm`: a form (title bar, close/maximize/minimize caption buttons, content area) shown when
976
+ needed. `show(host, disposeRef?)` opens it as a modeless window, `showDialog(host,
977
+ disposeRef?)` as a modal one that resolves with a `FormResult` (`'ok'`, `'cancel'`, any string,
978
+ like `dialog.returnValue`); `host` is any component or the `Application`. It dies when it
979
+ closes, or when `host` or `disposeRef` is disposed while it is open. Content from a subclass
980
+ `view()`, the `content` prop or JSX children; cancelable async `onClosing` (reason `'code'`,
981
+ `'user'` or `'owner'`), `onClosed`, `defaultButton` / `cancelButton` (props or assignable from a
982
+ subclass), `data-result` buttons, nested dialogs, window order, dragging and edge resizing
983
+ (`resizable`). A modal form closes on Escape by default (`closeOnEscape`), keeps Tab inside and
984
+ cannot be minimized; Tab moves on from a modeless window to the page. In JSX,
985
+ `x-model={() => state.open}` binds it two-way (the form writes `false` back when the user closes
986
+ it and keeps its state between openings; `modal` picks dialog or window). Minimize collapses a
987
+ window to its title bar, or moves it into `minimizeTarget`. Events inside a window stop at the
988
+ window's root. `form.*` tokens.
989
+ - `src/core/`: `FormResult`, `CloseReason`, the reactive `UiLocale` for component texts (en, tr),
990
+ focus helpers, the page-wide window stack and the scroll lock.
991
+ - Base styles of the kit: only the aria-disabled dimming inside a disabled control and the
992
+ access-key underline, inside `@layer mx.components`; everything else comes from the design system.
993
+
994
+ ### entries
995
+
996
+ - `.` (components and core exports), `./tokens`, `./styles.css`. The per-theme files are the
997
+ design system's (`@motifx-community/design-system/themes/*.css`).
998
+
999
+ ### docs
1000
+
1001
+ - A full reference page per component (usage both ways, behaviour, keyboard, accessibility,
1002
+ localization, API tables, styling hooks, tokens) and a token reference: the component tokens,
1003
+ and the design system's layers for reference (from its `json/*` export). The theme and density
1004
+ switches use the design system's `setTheme` / `setDensity`.
1005
+ - The DataGrid reference is a side-menu group of eight pages (overview, editing, filtering and
1006
+ search, lookup columns, grouping and summaries, selection and export, layout and events, API
1007
+ reference), at most five live grids each, so no page is slow to open; a pointer to a section on
1008
+ another page is a link (`[text](/page#anchor)` in a table cell's text).
1009
+
1010
+ ### TabDocumentManager
1011
+
1012
+ - `TabDocumentManager` (`src/components/tabdocs/`), milestone 1 of `roadmap/25-tab-document-manager.md`:
1013
+ documents in tabs, tabs in groups, groups in a layout tree of n-ary horizontal and vertical splits
1014
+ with a share per child. A document's content is any component; moving a tab or splitting a group
1015
+ moves the same component, never makes it again. `TabDocument` (`id`, `type`, `title`, `description`,
1016
+ `icon`, `tooltip`, `badge`, `dirty`, `pinned`, `preview`, `closable`, `contentLifetime`, `content`,
1017
+ `state`; Bind fields, reactive) and `TabGroup` (`documents`, `activeDocument`, `recentDocuments`,
1018
+ `locked`, `index`, `isActive`, `isMaximized`).
1019
+ - The strip: icon, title, description, badge, the dirty dot in the close button's place (the button
1020
+ under the pointer), the close button (`closeButton`: `always`, `active`, `never`; a document's
1021
+ `closable`), the kit Tooltip, sideways scrolling with the wheel, the active tab kept in sight, a
1022
+ middle click closes, a double click maximizes (`maximizeOnDoubleClick`); the kit Toolbar at the end
1023
+ with Split right and Maximize / Restore (`groupActions`). An empty group says so.
1024
+ - Splitters (`role="separator"`, value, orientation): the pointer, the keys (`resizeStep`), the
1025
+ smallest group size (`minGroupWidth`, `minGroupHeight`), a double click evens the sizes. A group left
1026
+ empty closes (`closeEmptyGroups`), a split left with one child gives its place to it.
1027
+ - Methods: `open(doc, { group, index, active, focus })`, `close` (`onClosing` may set `e.promise`),
1028
+ `closeAll`, `activate`, `activateNext`, `activatePrevious`, `move`, `split(group, direction, doc)`,
1029
+ `closeGroup`, `focusGroup`, `maximizeGroup`, `restoreGroups`, `evenSizes`, `resizeGroup`,
1030
+ `findDocument`, `contentOf`, `saveLayout()` (plain JSON: the tree with the shares, each document's
1031
+ `id`, `type`, `title`, `state`, `pinned`, `preview`, the active and recently used tabs, the active and
1032
+ maximized group) and `loadLayout(json, factory)`. Properties `documents`, `groups`, `activeGroup`,
1033
+ `activeDocument`, `maximizedGroup`. Events: `onOpening`, `onClosing`, `onDocumentActivating`,
1034
+ `onMoving`, `onSplitting`, `onLayoutChanging` (cancelable) and `onOpened`, `onClosed`,
1035
+ `onDocumentActivated`, `onMoved`, `onSplit`, `onLayoutChanged`.
1036
+ - Options: `contentLifetime` (`keep`, `lazy`, `dispose`; a document's own wins), `openPosition`,
1037
+ `afterClose` (`recent`, `left`, `right`), `activation`, `factory`, `keys` (every key, over
1038
+ `TabDocumentManager.defaultKeys`: Ctrl + Page Down / Up, Ctrl + W, Ctrl + 1…9, Ctrl + \, arrows,
1039
+ Home, End and Delete on a tab, arrows, Home, End on a splitter), `texts`, `announce` (a polite live
1040
+ region), `label` (a `region` landmark). Texts `tabDocs…` (en, tr); tokens `tabdocs.*`, with Material
1041
+ and Lilac's 3 px indicator.
1042
+ - `core/glyphs.ts`: `splitMark`, the split button's glyph.
1043
+ - Docs: a TabDocumentManager group with an overview page (documents and splits with a form, a grid
1044
+ and text; live options; a panel driving the API with an event log; unsaved changes asked with
1045
+ `confirm`; saving and restoring the layout); `e2e/checks/45-tabdocs.mjs`.
1046
+ - Milestone 2, the tabs at an editor's level. Preview tabs: `open(doc, { preview: true })` opens a tab
1047
+ in italics that the next preview in the group replaces; it stays after a double click, unsaved
1048
+ changes, `keep(doc)`, the menu or a move (`onKeeping` / `onKept`, `previewTabs` turns it off).
1049
+ - Pinned tabs: `pin(doc)` / `unpin(doc)` (`onPinning`, `onPinned`, `onUnpinning`, `onUnpinned`), first
1050
+ in pin order and never moved past the others, a pin mark that unpins, no close button unless
1051
+ `closeButtonOnPinned`, `pinnedTabSize` (`normal`, `compact`: the icon or first letter, `shrink`),
1052
+ `pinnedTabsOnSeparateRow`; close all, others, to the right or left and close saved leave them
1053
+ (`keepPinned`); saved and restored.
1054
+ - Sizes and overflow: `tabSize` (`fit`, `shrink`, `fixed`) with `tabMinWidth`, `tabMaxWidth`,
1055
+ `tabFixedWidth`; `wrapTabs`; scroll buttons (`scrollButtons`) and the wheel. A tab wider than the
1056
+ strip shows its start; the active tab stays in sight when a late font changes its width.
1057
+ - The look: `badge` may be `true` (a dot), `tone` (`warning`, `danger`, `success`, `accent`) colours the
1058
+ title and the badge, the description shows as `showDescription` says (`duplicates` by default: only
1059
+ when two open documents share a title).
1060
+ - Menus and lists: a context menu on every tab and on the empty strip (the kit `ContextMenu`;
1061
+ close, close others, to the right, to the left, saved, all, copy the title, keep open, pin or
1062
+ unpin, split up, down, left or right, move to the next or previous group; new document, reopen
1063
+ closed, lock; `contextMenu`, `menuItems`, `onContextMenuOpening`). The group toolbar's "…" button
1064
+ opens a searchable list of the group's (or every group's, `openListScope`) documents with close
1065
+ all, close saved and lock under it (`Popup`, `ListBox`, `MenuList`; `showOpenList`). The app's own
1066
+ buttons: `toolbarItems` per group, a document's `actions` while it is active, with icons and tones.
1067
+ `newDocument` makes a document for a double click on the empty strip (`openNew`).
1068
+ - Recently used, history, reopening: `showRecentList` (Ctrl+E in a browser tab, Ctrl+Tab installed;
1069
+ again to walk, Shift back, letting go of Ctrl opens; arrows, Enter and Escape alone work too;
1070
+ `recentListScope`), `goBack` / `goForward` over the documents activated in every group
1071
+ (`canGoBack`, `canGoForward`, `historySize`), `reopenClosed` (`closedDocuments`,
1072
+ `closedHistorySize`), `recentDocuments`, `moveToGroup`, `copyTitle`, `closeOthers`, `closeToRight`,
1073
+ `closeToLeft`, `closeSaved`.
1074
+ - Locked groups: `lock(group)` / `unlock(group)` (`onLocking`, `onLocked`, `onUnlocking`, `onUnlocked`,
1075
+ `group.lock()`), `open` without a group goes elsewhere (a new group when all are locked, the only
1076
+ group still takes it), an "Unlock group" mark in the toolbar, “Group 1, locked” for screen readers.
1077
+ - One document in two groups: `allowDuplicate` (a document's own wins) opens a copy with content of
1078
+ its own (`clone`, a `content` function or the `factory`) that shares the title, the unsaved changes
1079
+ and the state (`original`, `onClosing`'s `lastCopy`); splitting copies it (`splitCopies`, the split
1080
+ events' `copy`), or moves it as before. A layout saved with a copy brings it back as one.
1081
+ - Keys: a browser tab never gets Ctrl+W, Ctrl+Tab, Ctrl+Shift+T, Ctrl+Page Up / Down and often
1082
+ Ctrl+1…9, so the default keys are ones it does get, chosen as the editor's web version does (Ctrl+Alt
1083
+ for a Ctrl the browser keeps), the desktop key kept beside them: `TabDocumentManager.browserKeys` and
1084
+ `TabDocumentManager.desktopKeys` (replacing `defaultKeys`), `keyPreset` (`auto` takes the desktop
1085
+ keys in an installed app). New keys: `closeAllTabs`, `closeSavedTabs`, `recentNext`,
1086
+ `recentPrevious`, `goBack`, `goForward`, `reopenClosed`, `keepOpen`, `togglePin`, `showOpenList`.
1087
+ Polite announcements for pinned, unpinned, kept, locked and unlocked; new `tabDocs…` texts (en, tr).
1088
+ - Focus stays where it was when a group's element moves in a browser without `moveBefore`.
1089
+ - Kit: `addShortcut` takes two chords in a row (`'Ctrl+K W'`); a Ctrl+Alt chord leaves a key that AltGr
1090
+ typed a character with (`{` on a German keyboard). `Toolbar` places the controls of its items
1091
+ through `controls.moveToIndex`: an item hidden (`visible: false`) before the toolbar was built
1092
+ showed, at the front. `ToolbarItem.tone`. Glyphs `pinMark`, `lockMark`.
1093
+ - Docs: two more pages, Tabs (preview, pinned tabs, sizes, badges and tones, copies) and Menus and
1094
+ keys (context menus, the list, toolbar buttons, recently used, locked groups, the key table);
1095
+ `e2e/checks/46-tabdocs-tabs.mjs`; 45 presses the browser keys.
1096
+ - Milestone 3, drag and drop. A tab is dragged along its strip (across the border between pinned and
1097
+ other tabs it is pinned or unpinned, `pinOnDrag`), onto another strip at the place under the pointer
1098
+ or at its end, into a group (the middle of its content), beside a group (an edge of its content: a
1099
+ split that way, `dropEdgeSize`), or along an edge of the whole layout (`layoutEdgeDrop`,
1100
+ `layoutEdgeSize`, `split(null, side, doc)`). The last tab out closes its group (`closeEmptyGroups`).
1101
+ Ctrl (Option on Apple platforms, `copyModifier`) opens a copy when the document may be open twice.
1102
+ A whole group is dragged by the empty part of its bar or by a handle at the start of its toolbar
1103
+ (`groupDragHandle`; a click on it starts "Move group to…"): beside another group, along an edge of
1104
+ the layout, or into another group, whose documents it joins (`moveGroup(group, target, side)`,
1105
+ `onLayoutChanging` / `onLayoutChanged` with `'move'`).
1106
+ - What a drag shows: a copy of the tab under the pointer (`dragGhost`), a mark between tabs, a
1107
+ translucent area over the half or the whole of the group a drop would take that glides between
1108
+ places (the motion tokens, so reduced motion makes it jump), the cursor (`data-dragging`: `move`,
1109
+ `copy`, `none`), the dragged tab or group dimmed. A strip scrolls near its ends (`dragAutoScroll`);
1110
+ resting on a tab of another group activates it (`dragHoverActivate`, `dragHoverDelay`). Escape
1111
+ cancels and puts back what hovering activated and what the strips scrolled.
1112
+ - Touch and pen: a long press starts the drag (`longPressDelay`), so a swipe still scrolls the strip;
1113
+ held still and let go, it opens the tab's menu. `dragThreshold` for the mouse.
1114
+ - Settings: `allowDrag` on the manager and per document, `allowDragGroups`, `dropSides` on the
1115
+ manager and per group, `allowDrop` per group (both saved with the layout).
1116
+ - Events: `onDragStarting` (cancelable), `onDragOver` (change the place, or cancel to refuse it; outside
1117
+ every manager it comes with `target: 'outside'`, refused), `onDropping` (cancelable, the place may
1118
+ change), `onDropped`, `onDragEnded`; each with the document (or `null` for a group), the group it
1119
+ comes from, the target, manager, group, index and side, `copy` and `byKeyboard`. `onMoving` /
1120
+ `onMoved`, `onSplitting` / `onSplit`, `onOpening` / `onOpened`, `onPinning` / `onPinned` still fire
1121
+ for what a drop does. `onSplitting`'s `group` is `null` for a split of the whole layout. `dragging`
1122
+ (reactive) says what is being dragged; `cancelDrag()`.
1123
+ - Between managers: managers with the same `dragGroup` take each other's tabs and groups; the tab, its
1124
+ panel and its content move over (the other manager asks through its `onOpening`, after `onMoving`
1125
+ here) and follow that manager's settings from then on.
1126
+ - Drop targets are a list the manager asks (`dropTargets`, `addDropTarget(target)`: `placeAt`, `marks`,
1127
+ `drop`); the built-in one covers the strips, the groups and the layout's edges, so the dock guides
1128
+ and floating windows of milestone 4 can be added as targets.
1129
+ - Keys: the active tab a place along its strip (`moveTabLeft`, `moveTabRight`: Alt + Shift + Page Up /
1130
+ Down in a browser tab, Ctrl + Shift + Page Up / Down installed; `moveInGroup(doc, by)`), to the next
1131
+ or previous group (`moveToNextGroup`, `moveToPreviousGroup`: Ctrl + Alt + Right / Left), to the group
1132
+ on a side or a new one there (`moveToGroupLeft`, `…Right`, `…Up`, `…Down`: Ctrl + K, Shift + an
1133
+ arrow; `moveToGroup(doc, 'left' | 'right' | 'up' | 'down')`). "Move to…" (`moveTo`, Ctrl + K M; the
1134
+ tab's and the strip's menus, `moveTo` and `moveGroupTo` commands; `showMoveTo(doc | group)`): the
1135
+ arrows pick a side of a group, again that way the next group or the layout's edge, Tab the next
1136
+ group, Enter moves, Escape cancels (`targetLeft` … `targetCancel`), with the same areas shown and
1137
+ each place announced. Moved, copied, split and canceled are announced; new `tabDocs…` texts (en, tr).
1138
+ - Narrow groups: the strip keeps at least one tab's room (`tabMinWidth`) and the group's toolbar folds
1139
+ its buttons into its "…" menu first (the kit Toolbar's `overflow: 'menu'`). The sizes the props give
1140
+ (`--_min-width`, `--_tab-min`, …) are written on each group, not on the root, whose inline style the
1141
+ app may replace (`style.cssText` dropped them, and the groups' smallest sizes with them).
1142
+ - Kit: `ContextMenu` no longer closes on any scroll. It goes along with the element it opened on and
1143
+ closes once that element is out of sight (off the screen, or out of the box that scrolls it); the
1144
+ late scroll a press makes when it moves focus kept closing the menu of a tab. `closeOnScroll: false`
1145
+ keeps it open even then. `DragGhost` and `scrollStep` moved from the DataGrid to `src/parts/drag/`
1146
+ (exported) and the DataGrid uses them from there; a copy is now `inert`. `isChord(chords, e)` in
1147
+ `core/keyboard.ts`, for keys a component reads itself. Glyph `gripMark`.
1148
+ - Docs: a Drag and drop page (dragging, settings, two managers side by side, the keys, changing a
1149
+ drop, the API); `e2e/checks/47-tabdocs-drag.mjs`; 46 chooses menu items with real clicks again.
1150
+ - Milestone 4, docking. Floating windows in the page (`TabWindow`): `float(doc | group, rect?)`, a drag
1151
+ let go outside every manager (or, with the dock guides, away from them), Ctrl + K O, the menus. A
1152
+ window holds groups as the documents' area does (split, resized, dragged between), opens as large as
1153
+ the group it came from (`floatingWindowSize`), moves by the empty part of its strips (the strip is
1154
+ its title), resizes from its edges and corners, comes to the front when pressed (the page's
1155
+ `windowStack`), maximizes within the page and is restored, stays in the viewport
1156
+ (`keepFloatingInView`), closes with its last document (`closeEmptyWindows`) and docks back where it
1157
+ was on a double click on its strip (`dockOnDoubleClick`), "Dock back" or Ctrl + K D. Its maximize and
1158
+ close buttons sit in the group at its top end corner. `moveWindow`, `resizeWindow`, `maximizeWindow`,
1159
+ `restoreWindow`, `closeWindow` (each document still asks), `focusWindow`; the window's own `move`,
1160
+ `resize`, `maximize`, `restore`, `close`, `dock(side?)`, `focus`; `floatingWindows` (reactive, back to
1161
+ front). Ctrl + K Space moves it by the arrows and resizes it with Shift.
1162
+ - Dock areas (`TabDockArea`) on the manager's four sides, nesting in the order they were made: each
1163
+ holds its own layout, has a size in pixels or a share (`dockAreaSize` per side, `dockAreaMinSize`,
1164
+ the documents keep their smallest) and a splitter moved by the mouse and the splitter keys.
1165
+ `dock(doc | group | window, side?, size?)` (a document not open yet opens there), `resizeDockArea`,
1166
+ `dockAreas`, `dockArea(side)`; empty areas go. Folded (`autoHide(area | doc, on)`, the pin in the
1167
+ area's toolbar, the menu, Ctrl + K H), only the titles stay along the edge (a toolbar); a click,
1168
+ Enter or resting on a title (`autoHideHover`, `autoHideDelay`) slides the area out over the
1169
+ documents (`showAutoHidden`), a press outside, Escape or focus leaving slides it back
1170
+ (`hideAutoHidden`). Auto hide is the area's, not one document's.
1171
+ - Dock guides (`dockGuides`, off by default; `dockGuideKinds`): while dragging, a cross over the group
1172
+ under the pointer and a guide in the middle of each edge of the manager, shown only over a manager
1173
+ or one of its windows; the guide pointed at shows the area a drop would take, a drop away from the
1174
+ guides and strips floats. They are a drop target on the list of milestone 3 (`dockDropTarget`, asked
1175
+ before the built-in one; `TabDropTarget.follow` tells a target where the pointer is). New place
1176
+ kinds `'dock-guide'`, `'dock-area'` (`dockSide`) and `'float'` (`rect`). A drop over a manager outside
1177
+ the `dragGroup` is refused rather than floated.
1178
+ - Settings, the document's own first: `allowFloat`, `allowDock`, `dockSides`, `allowAutoHide`
1179
+ (`TabDocument` and the manager); `TabDocument.window` / `dockArea` and `TabGroup.window` /
1180
+ `dockArea` (reactive). Opening a document without a group never puts it in a dock area.
1181
+ - Events, each cancelable and then reported: `onFloating` (the rect may change) / `onFloated`,
1182
+ `onDocking` (side and size may change) / `onDocked`, `onAutoHiding` / `onAutoHidden` (`on`),
1183
+ `onSlideChanging` / `onSlideChanged` (a folded area sliding out or back), `onWindowClosing` /
1184
+ `onWindowClosed` (`reason`: closed, docked, empty). `onLayoutChanging` / `onLayoutChanged` also for
1185
+ `float`, `dock`, `autoHide`, `resizeArea`, `moveWindow`, `resizeWindow`, `maximizeWindow`,
1186
+ `restoreWindow`, `closeWindow`, with `window` or `area`.
1187
+ - Keys and menus: float, dock back, dock left / right / top / bottom (Ctrl + K, Alt + an arrow), auto
1188
+ hide on the tab and strip menus and as keys; F6 / Shift + F6 go round the documents, the dock areas
1189
+ and the windows (`focusPart`); "Move to…" goes on past the edge of the layout to the dock area of
1190
+ that side and to a window of its own. Announced: floated, docked, folded and shown, slid out,
1191
+ window closed, maximized, restored (en, tr).
1192
+ - The layout saves the dock areas (side, size, folded, layout) and the windows (place, maximized, back
1193
+ to front, where they dock back, layout): `TabLayout.version` 2; a version 1 layout still loads.
1194
+ - Look: `tabdocs.window-*`, `area-*`, `panel-*`, `autohide-*`, `guide-*` tokens; Material's guides are
1195
+ its middle control height, Material and Lilac's folded titles have their 3 px indicator. The root is
1196
+ a grid now (the documents in the middle, the areas around them); the drop area and the mark are
1197
+ fixed in the viewport, above the windows.
1198
+ - Kit: content moved between groups (core's `Transporter`, and `placeNode` without `moveBefore`) lost
1199
+ the scroll of everything scrolled inside it: `keepScroll` reads it before and writes it back after
1200
+ (CORE-REPORTS R29). `parts/window/` (`followPointer`, `resizeBox`, `resizeFrame`, `WindowBox`,
1201
+ `WindowEdge`): the move and resize of `MxForm`, which the floating windows use too. `dockGuideMark`
1202
+ glyph. A menu or a popup opened from a slid out area keeps it open.
1203
+ - Docs: a "Dock and floating windows" page (an editor with tool areas, floating by code, the settings,
1204
+ saving the whole layout, the keys, the API); `e2e/checks/48-tabdocs-dock.mjs`; 45 reads layout
1205
+ version 2; the drag and drop page says what a drop outside the manager does now.
1206
+ - Milestone 5, new browser windows. `moveToNewWindow(doc | group | floatingWindow, { rect, url })` opens
1207
+ a window of the page's origin (`window.open`, or the app's `openWindow` for Electron, a host page or a
1208
+ test) at the size of what moves, beside it (`newWindowSize`), and moves the document, the group or the
1209
+ floating window's whole layout into it; the content is not made again. The window (`TabBrowserWindow`:
1210
+ `window`, `element`, `rect`, `groups`, `documents`, `activeGroup`, `activeDocument`, `moveToMainWindow()`,
1211
+ `close()`, `focus()`; `browserWindows`, reactive) holds groups as the documents' area does: tabs, pins,
1212
+ previews, the lists, splitting, the splitters, the menus, the keys and dragging work there. Its title
1213
+ follows its active document (`newWindowTitle`: `'{title} – {page}'` or a function).
1214
+ - Back: `moveToMainWindow(doc | group | window)` (into the group it came from, else the main window's
1215
+ active one), "Move back to main window" on the tab and strip menus, Ctrl + K Shift + D
1216
+ (`moveToMainWindow` key); "Move into new window" on the tab menu, the strip menu and a floating
1217
+ window's strip ("Move window into new window"), Ctrl + K Shift + O (`moveToNewWindow` key). `move`,
1218
+ `split`, `dock` and `float` take groups of any window; "Move to…" goes through the groups of every
1219
+ window and, past floating, to a new window.
1220
+ - Dragging: inside a new window as in the page (strips, a group's zones or guides, the edges of its
1221
+ layout: an `'edge'` place carries `browserWindow`). The pointer stays with a drag that leaves its
1222
+ window; the window under it there, found by its place on the screen, takes the drop. Let go past
1223
+ every window: from the page into a new window there (`'new-window'` place, with `rect`), from a new
1224
+ window back to the main window (`'main-window'`); `dragOutToNewWindow` turns it off.
1225
+ - Closing: when the user closes a new window its documents come back, or close
1226
+ (`newWindowCloseAction: 'back' | 'close'`, `onWindowClosing`'s `then`); each one closing asks through
1227
+ `onClosing` as usual, back in the main window. `closeWindow(window)` and `window.close()` by code (a
1228
+ closing cancel keeps it). When the page goes away its new windows close. `onWindowClosing` /
1229
+ `onWindowClosed` carry `kind` (`'floating' | 'browser'`) and `then`; `reason` `'moved'` for a floating
1230
+ window that went into a new window; `then: 'back'` docks a floating window back instead of closing.
1231
+ - Blocked: no window from the browser fires `onError` (`windowBlocked`; `windowNotUsable` for a page of
1232
+ another origin) and opens a floating window instead (`newWindowFallback: 'float' | 'none'`, changeable
1233
+ in the event). `allowNewWindow` on the manager and per document (the document's own wins).
1234
+ `onWindowOpening` (cancelable; `rect`, `url` may change) / `onWindowOpened`. `onLayoutChanging` /
1235
+ `onLayoutChanged` also for `'newWindow'` and `'mainWindow'`.
1236
+ - The layout saves the new windows (place on the screen, layout, the group they came from):
1237
+ `TabLayout.version` 3, `browserWindows`; versions 1 and 2 still load. `loadLayout` puts them back as
1238
+ floating windows (`restoreWindows: 'float'`), among the main window's documents (`'main'`) or as
1239
+ windows again (`'reopen'`): a browser opens windows only on a click or a key, so `loadLayout` called
1240
+ from one opens them and `reopenWindows()` opens later what was blocked.
1241
+ - The look: the page's style sheets (links, `<style>`, constructed sheets) and the attributes of `<html>`
1242
+ and `<body>` are copied into the new window and followed (a sheet added or changed later, the theme,
1243
+ the design language, `dir`, `lang`). Announced: moved into a new window, back to the main window,
1244
+ window closed, the browser did not open the window (en, tr).
1245
+ - Kit, for other documents: `connectDocument(doc)` / `disconnectDocument(doc)` / `pageDocuments()`: the
1246
+ kit's document-wide listeners (shortcuts and access keys, tooltips, the focus guard, the press
1247
+ tracking of `afterPress`) work in another same-origin document too and leave it when its window
1248
+ closes. `deepActiveElement(node?)` reads the document of `node`, else the one focus went to last.
1249
+ `Popup`, `ContextMenu` and `Tooltip` open in the document of the element they open at (its own top
1250
+ layer, viewport and window events); `MenuList`, `ListBox`, `Button`, `Field`, `MxForm`, `FocusContainer`,
1251
+ the `enabled` cascade, `Control.focused` / `focusWithin` use their element's document and window; the
1252
+ window stack keeps one stack per document (`windowStack.top(doc)`); a scoped shortcut holds for parts
1253
+ of its component moved into another window. Checks that work for nodes and events of any window
1254
+ (`instanceof Element` and `instanceof KeyboardEvent` fail across windows; Chrome also remakes a
1255
+ collected node's wrapper with its new window's classes, so a DropDown in a new window stopped
1256
+ choosing after a while): `OptionList`, `Tabs`, `TreeView`, `MenuBar`, `FilterBuilder`, `Toaster` and the
1257
+ DataGrid's cell contents use them. `ResizeWatch` (exported):
1258
+ a `ResizeObserver` that follows its elements into another window, used by the DataGrid, its pager and
1259
+ rows, `Tabs`, `TextArea`, `Toolbar` and the manager's groups. `mirrorPage(source, target)` (exported).
1260
+ The DataGrid's focus, copy and paste, row drag and column sheet follow it into another window.
1261
+ `iconNode(source, doc?)`.
1262
+ - Core: an element that first reaches another window's document gets no `onMounted`, and a router
1263
+ link clicked there would load its page into that window (CORE-REPORTS R30): content made in a new
1264
+ window stands for a moment in the page (`core/let-mount.ts`), and a router link clicked there is
1265
+ clicked again in the page.
1266
+ - Docs: a "New windows" page (moving a tab, a group and back with a form, a DropDown and a DataGrid
1267
+ keeping their state; closing, blocked windows and the events; saving and restoring with windows and
1268
+ why reopening needs a click; what works there and the limits; the API); `e2e/checks/49-tabdocs-window.mjs`.
1269
+ - Popup: scrolling inside a popup (a menu taller than the window) no longer places it again, which took
1270
+ the scroll back to the top; the page scrolling still moves it along with its anchor.
1271
+ - TabDocumentManager: each tab panel stacks on its own (`isolation`), so a document's own z-index (a
1272
+ DataGrid's sticky summary row) no longer rises over a slid-out dock area, a floating window or the drop
1273
+ marks. Docs: a "A whole workspace" page; `e2e/checks/51-tabdocs-workspace.mjs`.
1274
+ - TabDocumentManager, compact bars: the strips of dock areas and floating windows keep their room for
1275
+ the tabs. No scroll buttons there (`compactScrollButtons`, default `false`): the wheel, touch and the
1276
+ keys scroll the strip, a thin scrollbar shows over the foot of the tabs while the pointer is over it
1277
+ (it takes no room and can be dragged), and the "…" button shows how many tabs are not fully in sight
1278
+ in place of its mark ("+2", also in its name; `TabGroup.hiddenTabCount`). Tabs shrink before the strip
1279
+ scrolls (`compactTabSize: 'shrink'`, `compactTabMinWidth: 64`); shrinking, a tab keeps its icon, its
1280
+ close button and a few letters (`tabdocs.tab-title-min-width`). A strip with one document shows it as
1281
+ a title, still the tab with its close button, menu, keys, drag and tooltip (`compactSingleTabTitle`,
1282
+ default `true`). Only the pin of an area and the close button of a window stay in the toolbar
1283
+ (`compactBarButtons`, default `['autoHide', 'closeWindow']`, a list of `TabBarButton`); the other
1284
+ buttons, the app's toolbar items but those with `overflow: 'never'`, "Dock back" in a window and the
1285
+ group's commands go into one "…" menu above its searchable list of documents (the commands are a Tab
1286
+ stop there). Each dock area and floating window has its own `scrollButtons`, `tabSize`,
1287
+ `tabMinWidth`, `singleTabTitle` and `barButtons` (`TabBarSettings`, a value or a function, `null`
1288
+ follows the manager), saved with the layout as `bar` when they are plain values. The documents' bar
1289
+ and new browser windows keep the whole bar by default and have `singleTabTitle` and `barButtons`
1290
+ (`'all'`) of their own; how tabs are sized and the scroll buttons are now written on each group
1291
+ (`data-tab-size`, `data-scroll-buttons`, `data-compact`, `data-title`). Texts `tabDocsOpenListHidden`,
1292
+ `tabDocsBarMenu`, `tabDocsBarMenuHidden` (en, tr). Tokens `tabdocs.scrollbar-*`, `title-*`, `count-*`,
1293
+ `tab-title-min-width`. Docs: a "Compact bars" section on the Dock page; `e2e/checks/50-tabdocs-compact.mjs`.
1294
+ - TabDocumentManager, a close button in every dock area, hidden documents and small bar buttons:
1295
+ every dock area's bar has a close button next to the pin for its group's active document
1296
+ (`TabBarButton` `'close'`, `.mx-tabdocs__bar-close`, named "Close Notes" or "Hide Explorer"). A
1297
+ document that may close closes through `onClosing` / `onClosed` (a dirty one can still ask); one that
1298
+ may not (`closable: false`, the tools) is hidden. A single document shown as a title in that bar shows
1299
+ no close button of its own (`data-bar-close`). `compactBarButtons` is now `'auto'` by default: an area
1300
+ keeps `['autoHide', 'close']`, a floating window `['closeWindow']`; a list is followed as it is in both,
1301
+ and an area's or a window's `barButtons` takes `'auto'` too. A floating window's close button now hides
1302
+ the documents that cannot close instead of leaving the window open (`closeWindow` from code still
1303
+ closes them all). Hidden documents: `hide(doc)` and `show(doc, { group, side, index, active, focus })`
1304
+ (also `TabDocument.hide()` / `show()`, and `open(doc)` shows a hidden one) put it back into the group
1305
+ it was hidden from, else its dock area (made again at its size, folded if it was), else a floating
1306
+ window where its window was, else among the documents; `hiddenDocuments` (reactive),
1307
+ `TabDocument.isHidden` (`isOpen` stays `true`), `findDocument` finds them; `allowHide` on the manager
1308
+ and per document (default `true`); cancelable `onHiding` / `onShowing`, then `onHidden` / `onShown`,
1309
+ and `onLayoutChanged` with `'hide'` / `'show'`. The content is kept as `contentLifetime` says. Menus:
1310
+ "Hide" on the tab menu of a document that cannot close, "Show hidden" (a submenu of the hidden
1311
+ documents) in the strip's menu and the "…" menu (`TabMenuCommand` `'hide'`, `'showHidden'`); key
1312
+ `hide` (Ctrl+K X). `saveLayout` writes `hidden` (`TabLayoutHidden`: the document and where it goes
1313
+ back), still version 3; older layouts load. The buttons of compact bars are small squares of 24 pixels
1314
+ with a smaller mark and tight gaps (`barButtonSize` for the documents' bar, default `'normal'`;
1315
+ `compactBarButtonSize`, default `'small'`; an area's or a window's own `barButtonSize` wins); the "+2"
1316
+ count fits them, and the ends of the toolbar leave room for the focus ring. Tokens
1317
+ `tabdocs.bar-button-size`, `bar-button-padding`, `bar-button-gap`, `bar-icon-size`, `focus-offset`.
1318
+ Texts `tabDocsHide`, `tabDocsShowHidden`, `tabDocsCloseActive`, `tabDocsHideActive`, `tabDocsHidden`,
1319
+ `tabDocsShown` (en, tr). Docs: rows and a sentence on the Dock page, a "Small buttons" switch in the
1320
+ compact bars example; the Workspace example's "Show the activity" shows the hidden Activity again;
1321
+ `e2e/checks/50-tabdocs-compact.mjs` covers the close button, hidden tools and the small buttons.
1322
+ - TabDocumentManager, the document menus are one menu: the group's "…" menu (and a compact bar's single
1323
+ "…" menu) draws its documents with the kit's `MenuList`, in the same popup as its commands and with a
1324
+ line between them, instead of a `ListBox` with its own field frame and type; so commands and documents
1325
+ share the language's menu height, padding, type, radius, hover and focus in every design language and
1326
+ theme (measured: a command and a document both 14px / h32 / 11px / 4px in Fluent, 14px / h44 / 16px /
1327
+ 4px in Material, where the document rows were 12px / h40 and 14px / h56 / radius 9999px). The shown
1328
+ document is a checked `menuitemradio` item; its description, and its group when the menu lists every
1329
+ group, is the item's secondary text; the unsaved mark sits at the end of the item and its name still
1330
+ says "unsaved changes"; the tooltip is the tab's. A search field (the kit's `TextBox` in search mode, the
1331
+ size of the menu's items) heads the documents and filters them as you type; nothing found shows a dimmed
1332
+ "No items". Up and Down go on from the search through the documents and the commands and around, Tab
1333
+ goes from part to part (out of the menu from the last), typing on a document goes back to the search
1334
+ with the letter, Enter in the search opens the first document. Only the documents scroll
1335
+ (`tabdocs.list-max-height`, default 20rem). The recently used list (Ctrl+E) is the same menu of
1336
+ documents, walked by focus while the modifier is held. Hooks `.mx-tabdocs__search`,
1337
+ `.mx-tabdocs__documents`, `.mx-tabdocs__commands`; tokens `tabdocs.list-note-fg` and
1338
+ `list-note-font-size` are gone (the menu's description tokens draw that text), `list-gap` is now the
1339
+ gap under the search. Checks 46 and 50 read the menu.
1340
+ - `MenuItem.description` (`Bind<string>`): a second, dimmer text after the label (`.mx-menu__description`,
1341
+ tokens `menu.description-font-size`, `menu.description-color`), part of the item's name, never a key
1342
+ or `aria-keyshortcuts`; typing to an item goes by the label alone. `MenuList.markColumn` keeps the
1343
+ column for a mark or an icon when no item has one, so the texts line up with a menu beside it.
1344
+ - TabDocumentManager document menu: the shown document keeps its icon and gets a check in a column of
1345
+ its own (a dot already means unsaved there); the search is as tall as the menu's items in every
1346
+ language (tokens `tabdocs.list-search-height`, `list-search-font-size`; Material 44 px instead of its
1347
+ 56 px field). `MenuList.markBesideIcon` gives the mark its own column before the icons, and
1348
+ `MenuList.radioMark: 'dot' | 'check'` chooses how a chosen radio item is marked.
1349
+
1350
+ ### DataGrid selection by dragging
1351
+
1352
+ - Rows: with `selection: 'multiple'`, pressing on a row and dragging over others selects the rows
1353
+ passed, live, with a frame around them while the drag runs (`settings.rowDragSelection`, on by
1354
+ default). A plain drag replaces the selection, Ctrl/⌘ adds the rows, Shift goes from the anchor;
1355
+ over the check box column the rows passed take the state the first one takes. Group rows, group
1356
+ footers, details and new rows are passed over (the rows of a closed group are not selected);
1357
+ rows that load while the list scrolls under the drag are taken in. `onSelectionChanging` and
1358
+ `onSelectionChanged` come once per row reached, with the new `byDrag`; Escape gives the drag up
1359
+ and puts the selection back.
1360
+ - Cell ranges, as in a spreadsheet: `settings.cellSelection` (`'none'`, `'single'`, `'multiple'`).
1361
+ Press on a cell and drag to draw a range (a frame, a fill over the row's own look, the anchor cell
1362
+ left unfilled); Ctrl/⌘ starts another range, Shift+click extends the last one from its anchor, a
1363
+ plain click starts over. Shift with the arrows, Home / End and PageUp / PageDown extend it from its
1364
+ far corner (focus goes with the corner), `selectAllCellsKeys` (`['Mod+A']`) selects every cell,
1365
+ `clearCellSelectionKeys` (`['Escape']`) clears, a plain move clears. The extending keys are options
1366
+ too: `extendCellsKeys` (`GridCellExtendKeys`: a chord list per move — `up`, `down`, `left`, `right`,
1367
+ `pageUp`, `pageDown`, `home`, `end` with Shift; `top`, `bottom`, `leftmost`, `rightmost` with
1368
+ `Mod+Shift` and the arrows; `first`, `last` with `Mod+Shift+Home` / `End`), and for rows
1369
+ `toggleRowSelectionKeys` (`['Shift+Space']`) and `extendRowSelectionKeys` (`GridRowExtendKeys`,
1370
+ Shift with Up / Down and PageUp / PageDown). Ctrl+C copies the ranges as
1371
+ tab-separated text and an HTML table (the rows and columns they cover, cells outside them empty;
1372
+ `copyValues`, `copyHeaders`, `onCopying` with the new `ranges`); Ctrl+V pastes one value into every
1373
+ cell of the ranges or a block from the last range's first cell; Delete (`clearKeys`) empties the
1374
+ cells the user can edit, through the rows' drafts, the checks and the save mode
1375
+ (`onRowUpdating`…). While cells can be selected, clicks on the cells draw ranges and rows are
1376
+ selected from the check box column.
1377
+ - Ranges are kept by row key (a new row by its id) and field: they follow their rows when rows are
1378
+ added above or loaded again and keep their columns when these move or hide; a sort, filter,
1379
+ search, grouping, opening or closing a group, or another page takes them away. A column opts out
1380
+ with `cellSelectable: false` (its own value wins over `settings.cellSelectable`).
1381
+ - API: `cellRanges` (read/write, reactive; also a prop, a function followed),
1382
+ `selectCells(from, to?, add?)`, `clearCellSelection()`, `getSelectedCellValues()`,
1383
+ `cellSelectionSummary` (`{ cells, count, numbers, sum, average, min, max }`),
1384
+ `onCellSelectionChanging` (cancelable) and `onCellSelectionChanged` (`{ ranges, byDrag }`); types
1385
+ `GridCellPoint`, `GridCellRange`, `GridCellValue`, `GridCellSummary`, `GridCellSummaryItem`,
1386
+ `GridCellSelectionChangingEventArgs`, `GridCellSelectionChangedEventArgs`. The bottom bar shows the
1387
+ summary while more than one cell is selected (`cellSummary`, `cellSummaryItems`:
1388
+ `['average', 'count', 'sum']`).
1389
+ - Both: `cellDragSelection`, `dragSelectionThreshold` (`5`; a shorter move stays a click, so clicks
1390
+ that select or start editing work as before), `dragSelectionAutoScroll`,
1391
+ `dragSelectionScrollSpeed` (`30`) and `dragSelectionScrollSensitivity` (`60`) — the rows scroll
1392
+ near or past an edge, down and sideways, frame by frame — `dragSelectionTouch` (`'scroll'`, or
1393
+ `'longPress'` after `dragSelectionLongPress` ms) and `dragSelectionOnEditableCells`, all live. Row
1394
+ drag and drop keeps its icon (and the whole row without icons); headers, the filter row, the group
1395
+ panel, action buttons, master-detail and adaptive toggles, links, buttons and fields in cells keep
1396
+ their presses; no text is selected while a drag runs, Alt+drag is left to the browser.
1397
+ - Accessibility: `aria-multiselectable` while cells can be selected, `aria-selected` on every
1398
+ selectable cell; polite announcements `gridRowsSelected`, `gridCellsSelected`,
1399
+ `gridCellRangesSelected`, `gridCellSelectionCleared`, `gridDragSelectCanceled`, `gridCopiedCells`,
1400
+ `gridCopyNotLoaded`, `gridCellsCleared` (en/tr). Tokens `datagrid.range-fill`,
1401
+ `range-fill-opacity`, `range-selected-fill`, `range-text`, `range-border-color`,
1402
+ `range-border-width`, `range-anchor-fill` (Material: its card surface), `row-run-border-color`,
1403
+ `row-run-border-width`; forced colors frame each cell of a range in `Highlight`.
1404
+ - The ranges are marks on the cells drawn now (pooled rows, columns in view), worked out once per
1405
+ change for every row; a cell's text is never written again for them. Measured in Chrome drawing
1406
+ a range over 100,000 rows × 60 virtual columns: 60 fps inside the rows, 59 fps while scrolling
1407
+ past the bottom edge, no cell text written while only the range changed.
1408
+ - Docs: a new page “Selecting by dragging” (`/datagrid/drag-select`: rows in memory with grouping,
1409
+ an editable sheet of orders, 100,000 rows × 60 virtual columns set from code), the API page's
1410
+ rows and tokens; `e2e/checks/52-datagrid-drag-select.mjs`.
1411
+ - Touch on real phones (found on an Android phone, Chrome 155): a long press drag of a tab and the DataGrid's
1412
+ long press selection did nothing, because the browser decides when the finger lands whether the page may
1413
+ scroll at once, and the listener that can stop it was added only on the press. The group bars, and the
1414
+ grid's rows while `dragSelectionTouch: 'longPress'`, now hold a touchmove listener from the start that
1415
+ stops the scroll only while a drag runs; a plain swipe still scrolls. Docs: long page titles break on a
1416
+ phone, the parts of an example stay within it, the token tables scroll in their own box.
1417
+
1418
+ ### BottomSheet, Drawer and ActionSheet
1419
+
1420
+ - `BottomSheet`: a panel that comes up from the bottom of the page (the top layer) or of a `container`
1421
+ and stops at `detents` (`'peek'`, `'half'`, `'full'`, `'fit'`, pixels, or a share such as `'40%'`;
1422
+ default `['half', 'full']`), `detent` the one it is at (written back when the user moves it). The
1423
+ handle and the title follow the finger and the mouse; let go, it snaps to the nearest height, a flick
1424
+ faster than `flickSpeed` goes on to the next, past the tallest it gives a little, and dragged or
1425
+ flicked down below the lowest it closes (`swipeToClose`). The content takes the sheet along when it
1426
+ cannot scroll that way (`dragContent`): down from its top, up while the sheet is not at its tallest; a
1427
+ sideways swipe and a scroll stay the content's. A tap on the handle goes to the next height. The
1428
+ handle is a vertical `slider` for the keys (Up/Right/Page Up, Down/Left/Page Down, Home, End; its value
1429
+ the share of the full height, read as "Half height"…). `showHandle`, `draggable`, `topGap` (`0`: a
1430
+ full-screen sheet, its corners square off at the top), `snapTo()`, `expand()`, `collapse()`, `height`;
1431
+ `onDetentChanging` (cancelable, `to` can be changed) / `onDetentChanged`. It stands on the on-screen
1432
+ keyboard over the page (the visual viewport), and keeps clear of the safe areas.
1433
+ - `Drawer`: a panel from an edge of the page or of a `container` (`side`: `start`, `end` — they follow the
1434
+ reading direction —, `left`, `right`, `top`, `bottom`), over the content or pushing `pushTarget` aside
1435
+ (`mode: 'push'`, not modal unless asked), `size` (else `drawer.size`, never more than 85%). A finger
1436
+ swiping in from the edge opens it, following the finger (`edgeSwipe`, `edgeSize`); swiped back towards
1437
+ the edge it closes (`swipeToClose`); a flick decides however far it went (`flickSpeed`).
1438
+ - `ActionSheet`: the kit's `MenuItem`s in a bottom sheet (as tall as its items), large enough for a
1439
+ finger, with a title, a `message` and a cancel button apart (`showCancel`, `cancelText`). A submenu
1440
+ opens in place with "Back" first; `choose(items?, host?)` resolves with the item chosen or `null`;
1441
+ `open(byKeyboard)` puts focus on the first item or on the list; `onItemClick`, `chosenItem`, `menu`.
1442
+ - What they share is `OverlayPanel` (`parts/overlay`, public): `value` (`x-model`), `modal` (what is
1443
+ around it is made `inert` inside its container or on the page, Tab stays inside, the window stack knows
1444
+ it), `scrim`, `container` (a value or a function read when it opens), `title` / `label`, `content`,
1445
+ `footer`, `showClose`, `closeOnEscape`, `closeOnScrim`, `focusOnOpen` (a finger opening it does not
1446
+ bring the on-screen keyboard up: no field first on a coarse pointer), `returnFocus`, `disposeOnClose`,
1447
+ `open()`, `close(reason)`, `toggle()`, `show(host)`, `onOpening` / `onOpened` / `onClosing` /
1448
+ `onClosed` (`reason`: `code`, `escape`, `scrim`, `swipe`, `back`, `button`, `owner`). Content that
1449
+ scrolls with nothing to focus in it takes focus itself. `closeOnBack` (default `true`): the browser's
1450
+ back, Android's back button and back gesture close it through the session history, holding one entry
1451
+ while open and taking it back when it closes otherwise (`holdBackButton(view, onBack, layer)` in core:
1452
+ the holder of the highest layer, the last held or raised among equals, closes first; the state the
1453
+ page's router keeps in the entry stays). `SwipeTracker` measures a finger's speed.
1454
+ - `ContextMenu.presentation`: `'menu'` (default), `'sheet'` (its items in an `ActionSheet`) or `'auto'` (a
1455
+ sheet when a finger opened it — a long press — or on a screen with only a coarse pointer when not
1456
+ opened by a key); `actionSheet`. `MenuList.openSubmenus` (`false` reports a submenu item as chosen, for
1457
+ an owner that shows the submenu itself).
1458
+ - Texts (en, tr): `sheetLabel`, `sheetHandle`, `sheetPeek`, `sheetHalf`, `sheetFull`, `sheetFit`,
1459
+ `sheetHeight`, `drawerLabel`, `actionSheetLabel`, `back`. Tokens `sheet.*`, `drawer.*`,
1460
+ `actionsheet.*`; Material maps the sheet's outline away and a 32 high handle area, its drawer to 16
1461
+ corners, 360 wide, no outline; Lilac more room and rounder drawers; Fluent 8 corners on the drawer.
1462
+ - Docs: BottomSheet, Drawer and ActionSheet pages; `e2e/checks/54-bottomsheet.mjs`,
1463
+ `55-drawer.mjs`, `56-actionsheet.mjs`.
1464
+
1465
+ ### TabDocumentManager on a tablet and a phone
1466
+
1467
+ - The layout stays the same and saves the same at every size; only where things show changes, and the
1468
+ content is moved, never made again. `presentation: 'auto' | 'desktop' | 'tablet' | 'phone'` (default
1469
+ `'auto'`: under `phoneWidth` (560) of the manager's own width as on a phone, whatever the pointer;
1470
+ under `tabletWidth` (1024) as on a tablet when the screen's pointer is a finger, `(pointer: coarse)`,
1471
+ followed live; with a mouse a narrow manager stays a desktop; `tabletWhen: 'width'` lets the width
1472
+ alone decide). 560: phones are 360–430 pixels wide, a manager of about 590 beside a desktop page's
1473
+ side column stays a desktop; apps change both limits. `currentPresentation` (reactive);
1474
+ `onPresentationChanging` (cancelable: `from`, `to`, `width`) / `onPresentationChanged`. A manager
1475
+ on a desktop with a mouse is as before.
1476
+ - On a tablet or a phone the documents' groups take the compact bars as the dock areas do (no scroll
1477
+ buttons, shrinking tabs, small buttons, a single document as a title; `compactBarButtons: 'auto'` keeps
1478
+ only the "…" menu there), through the same `compact…` props; `narrowBars: 'documents'` keeps the
1479
+ desktop bar. A narrow tab gives up its description before the letters of its title.
1480
+ - Tablet: at most two groups side by side (the first branch of the layout and the rest, each showing the
1481
+ group used last); the groups that do not fit fold their tabs into the strip of the group beside them
1482
+ (a tap activates the tab's own group there; the arrow keys go along the strip as it shows). Dock
1483
+ areas go into drawers from their edge, the bottom one into a sheet, opened from their titles along the
1484
+ edges or by a finger from the edge (`edgeSwipe`); a floating window is a large sheet.
1485
+ - Phone: one document, full screen, under a bar with its title (a swipe left or right, or the arrow keys,
1486
+ go to the document beside; a tap opens its commands in an action sheet), its close button and the
1487
+ number of open documents, which opens a full-screen list: groups (and floating windows) as sections,
1488
+ pinned first, a search, a tap to show, a swipe sideways to close, a long press to lift a row and drag
1489
+ it within its group or into another, a long press let go to open its commands; Up, Down, Enter,
1490
+ Delete, Alt+Up/Down, the Menu key. The tools of the dock areas are buttons in a bar at the bottom: a
1491
+ tap opens a sheet above it (peek, half, full by its handle; swipe down closes) or a drawer for an area
1492
+ that asks for one. A floating window is a full-screen sheet; new browser windows are off; the tab menu
1493
+ is an action sheet ("Move to…" and "Move into new window" are left out there). The browser's back
1494
+ closes what is open on top, then goes back through the documents (`backButton`), past the tools used
1495
+ in between; of several managers the one used last.
1496
+ - Settings: `phoneDockMode` (`'sheet'`), `tabletDockMode` (`'auto'`: drawers for the sides, a sheet for
1497
+ the bottom) and the area's own `TabDockArea.phoneDockMode` / `tabletDockMode` (`'sheet'`, `'drawer'`,
1498
+ `'hidden'`; its own wins), `edgeSwipe`, `backButton`, `menuPresentation`. Methods
1499
+ `tabletWhen`, `narrowBars`, `showDocumentList()`, `hideDocumentList()`, `documentListOpen`, `showTool(doc)`, `hideTool(area)`;
1500
+ `activate()` of a tool or of a document in a window opens its drawer or sheet. `split`, `move`,
1501
+ `float`, `dock` keep working and are shown the way the presentation allows; `moveToNewWindow` returns
1502
+ `null` on a phone.
1503
+ - On a coarse pointer the tabs, their close buttons and the folded areas' titles are taller in every
1504
+ presentation (`tabdocs.touch-tab-height`, `touch-close-size`). Tokens for the phone's bar, tools and
1505
+ list (`tabdocs.phone-*`, `tool-*`, `phone-list-*`, `divider-*`); the shown document and the open tool
1506
+ are marked as the design language marks a selection. Texts (en, tr) `tabDocsPresentation`,
1507
+ `tabDocsDesktop`, `tabDocsTablet`, `tabDocsPhone`, `tabDocsPhoneTitle`, `tabDocsPhoneCount`,
1508
+ `tabDocsPhoneList`, `tabDocsPhoneSearch`, `tabDocsPhoneTools`.
1509
+ - Docs: a "Tablet and phone" page (one layout shown four ways and saved the same, a manager that follows
1510
+ its width in a resizable frame, the settings and events, the list, the back button, API); the Preview
1511
+ and "Between managers" examples, narrow beside their logs, are shown as on a desktop.
1512
+ `e2e/checks/53-tabdocs-mobile.mjs` (a phone of 390 × 844 and a tablet of 820 × 1180, both with touch).
1513
+
1514
+ ### MotifJS 1.2.0-rc.22
1515
+
1516
+ - Needs `@motifx/core` 1.2.0-rc.22 (peer `^1.2.0-rc.22`): other documents (R30) and the window manager with
1517
+ `onClosing` / `returnOnClose` (R31) are in core now.
1518
+ - TabDocumentManager's new browser windows are given to the app's window manager
1519
+ (`app.windows.attach(view, { styles: 'live', onClosing })`): core mirrors the page's styles and root attributes,
1520
+ connects the document (router links, mounting) and says when the window closes. Without an app the kit's own
1521
+ mirroring and `pagehide` handling still do it. The kit's workarounds are gone: `core/let-mount.ts` and the
1522
+ router-link relay.
1523
+ - onMounted now fires only under the app's `run()` host or a built `new Component(existingElement)` root, never for
1524
+ a raw `appendChild`: the no-app message box and a Toaster in no component tree place themselves under a root of
1525
+ their own in the page; the tests' `mount()` helper does the same.
1526
+
1527
+ ### TabDocumentManager: folded areas slide from under their strip
1528
+
1529
+ - A folded area slides out from under its strip and back into it, never over it (the strip lies above the area).
1530
+ - Nothing else moves while it slides: the manager clips instead of being a scroll box, and the focus given to the
1531
+ slid out content does not scroll the page (`focusContent(still)`). Before, a bottom area scrolled the manager
1532
+ (or the page) by its own height and back, so the documents above it jumped. `e2e/checks/48-tabdocs-dock.mjs`
1533
+ checks it frame by frame for the left and the bottom area.
1534
+
1535
+ ### Scheduler, milestone 1: the views, the layout, moving, the keys
1536
+
1537
+ - `Scheduler` (`src/components/scheduler/`), written with MotifJS alone: every part is a component of its tree (JSX,
1538
+ `.map` lists, `x-display`, a `switch` between the day views and the month); nothing is built or placed by hand.
1539
+ `SchedulerModel` is the scheduler without its DOM: the days and times shown, where each appointment goes and the
1540
+ selection, filled in place (a day, a time row and an appointment's piece stay the same objects while they stay on
1541
+ screen, so a change moves the same box).
1542
+ - Views `day`, `week`, `workWeek` and `month`, and views of their own (`views`: a name, a caption, `intervalCount`,
1543
+ the hours, `cellDuration`, `allDayPanel`, `maxAppointmentsPerCell`, winning over the scheduler's settings).
1544
+ - Appointments from `appointments` (a reactive array is followed) or a `DataSource` (`remoteFiltering`: the days shown
1545
+ only, asked again when the view moves; loading and a retry), the fields named by `fields`.
1546
+ - Appointments at the same time side by side (`overlapMode: 'columns' | 'cascade'`), over midnight on each day,
1547
+ all-day and multi-day ones as bars in the all-day panel (`allDayLines`), timed ones in the month as chips, "+N more"
1548
+ where a day is full (`maxAppointmentsPerCell`, or as many as fit) with the day's list in a popup.
1549
+ - Work days and hours shaded, today, holidays (`isHoliday`), the current time line, ended appointments quieter
1550
+ (`dimPast`), its own colour per appointment as a tint and a stripe, `appointmentTemplate`.
1551
+ - The bar: today, previous, next, the date (it opens the kit's `Calendar`) and the views (`toolbar`). Keys: arrows over
1552
+ the cells (Shift selects; past the first or last day the view moves on), Home / End, Page Up / Page Down, Enter and
1553
+ Space, Escape; `T`, `N` / `J`, `P` / `K`, `D`, `W`, `X`, `M` (`keys`). Focus keeps its date when the view or the
1554
+ date changes.
1555
+ - API: `goToday`, `next`, `previous`, `showDate`, `showView`, `scrollToTime`, `selectCells`, `appointmentsIn`,
1556
+ `findAppointment`, `visibleRange`, `resolvedView`, `selectedCells`, `shownAppointments`; events `viewChanging` /
1557
+ `viewChanged`, `dateChanging` / `dateChanged`, `cellClick` / `cellDblClick`, `appointmentClick` /
1558
+ `appointmentDblClick`, `selectionChanged`, `contentReady`, `moreOpening`.
1559
+ - Texts in `uiLocale` (en, tr) and `texts`; dates and times by `Intl` in `locale`. Component tokens
1560
+ `tokens/component/scheduler.tokens.json`; `chevronStart` in the glyphs.
1561
+ - Docs page `/scheduler`; `e2e/checks/57-scheduler.mjs` (32 checks, axe in every view in light and dark).
1562
+
1563
+ ### Scheduler, milestone 2: adding, the form, moving and resizing
1564
+
1565
+ - Appointments are moved by dragging (on the step of `snapMinutes`; over the hours, onto the all-day panel, by days in
1566
+ the month), resized by their edges (`minDuration`), copied with Ctrl, taken back with Escape; the view scrolls near
1567
+ its edges; a finger starts with a long press. While it goes the appointment's own box stands where it would go (a
1568
+ draft the layout shows): nothing is built for the drag.
1569
+ - The keys: the arrows move a focused appointment (Shift + arrows its end), Enter saves, Escape takes it back; Delete
1570
+ deletes (asking first, `editing.confirmDelete`); Enter on cells opens the form for a new one over the selection.
1571
+ - A click shows the tooltip (text, time, description, Edit, Delete; `tooltip`); a double click opens the form
1572
+ (`MxForm` + `FormLayout`: title, start, end, all day, description, the end checked against the start).
1573
+ `onFormOpening` gets its `items` and `data` to add fields of its own (written to the appointment's fields of those
1574
+ names), or cancels it for a form of one's own.
1575
+ - Writes go where the appointments come from: into the array (pushed, assigned, spliced) or through the data source's
1576
+ adapter. `onAppointmentAdding` / `Updating` / `Deleting` may cancel or set a `promise` to wait; while one saves
1577
+ the appointment is locked; `onDataError` tells when saving failed, and it shows as it was.
1578
+ - `editing` (`false`: read only; or `allowAdding`, `allowUpdating`, `allowDeleting`, `allowDragging`,
1579
+ `allowResizing`, `allowCopying`, `confirmDelete`), an appointment's own `allowDrag`, `allowResize`, `allowEdit`,
1580
+ `allowDelete` winning. `onMoveStart` / `onMoving` / `onMoveEnd` and `onResizeStart` / `onResizing` / `onResizeEnd`
1581
+ (cancel on `…ing` marks a place it may not go). Methods `addAppointment`, `updateAppointment`, `deleteAppointment`,
1582
+ `showAppointmentForm`, `showTooltip`, `hideTooltip`.
1583
+ - A scheduler's data source must load `'all'` (it warns otherwise): a page of rows would leave appointments of the
1584
+ days shown out. The milestone 1 example used `'page'`; fixed.
1585
+ - A box carries its text, colour and disabled state from the layout, so a plain object changed by a data source
1586
+ reaches it too. Narrow boxes cut their text short on one line instead of breaking words.
1587
+ - Docs page `/scheduler/editing`; `e2e/checks/58-scheduler-editing.mjs`.
1588
+
1589
+ ### Scheduler, milestone 3: recurrence and time zones
1590
+
1591
+ - **Recurrence rules (RFC 5545), the kit's own engine** (`src/parts/recurrence/`, DOM-free, exported):
1592
+ `parseRecurrenceRule` / `formatRecurrenceRule` (`FREQ` daily to yearly, `INTERVAL`, `COUNT`, `UNTIL`, `BYDAY`
1593
+ with `2MO` and `-1FR`, `BYMONTHDAY`, `BYMONTH`, `BYYEARDAY`, `BYWEEKNO`, `BYSETPOS`, `WKST`, `BYHOUR`,
1594
+ `BYMINUTE`, `BYSECOND`; parts it does not read are kept), `recurrenceDates` (the times in a range only, on the
1595
+ wall clock, skipping the steps before the range when there is no count), `describeRecurrence` (the rule in plain
1596
+ words, en and tr), exception dates (`readRuleDates`, `addRuleDate`, `filterRuleDates`, `parseRuleDate`,
1597
+ `formatRuleDate`). Tested with the RFC's examples, leap years and the 31st.
1598
+ - **Time zones** (`src/parts/dates/time-zone.ts`, `TimeZone`, `Intl` only): moments and wall clock times both ways,
1599
+ a time the clock skips moved on by the gap, one it shows twice taken as the first (or the later). Scheduler
1600
+ `timeZone` puts the days and hours on a zone's clock; a series repeats on its start's zone
1601
+ (`fields.startTimeZone`); a box on the night summer time changes reaches its end's row and is never shorter than
1602
+ it lasts.
1603
+ - **Series in the scheduler:** `fields.recurrenceRule`, `recurrenceException` (`EXDATE`), `recurrenceId` (an
1604
+ occurrence changed apart names its series' key), `startTimeZone`, `endTimeZone`. Only the days shown are
1605
+ expanded; each occurrence is an object of its own, kept while it stays on screen.
1606
+ - **Changing a series:** a drag, the keys, the form and Delete ask "this one / this and the following / the whole
1607
+ series" (`MxForm` + `FormLayout` with radio buttons; `seriesEdit` answers without asking; `onSeriesAsking` may
1608
+ answer, narrow or cancel; `onSeriesAnswered`). This one: a new appointment in its place and its time left out of
1609
+ the series. This and the following: the series ends before it (`UNTIL`, or the count split) and a new series
1610
+ goes on. The whole series: every occurrence moves as this one did (a weekly series moved a day moves its
1611
+ weekdays). The update and delete events carry `scope` and `series`; `onAppointmentUpdated` gives `added`.
1612
+ - **Through the data layer:** a change to a series is written one write after another through the adapter (new rows,
1613
+ then changes, then deletes). When a later write fails the earlier ones are taken back through the adapter;
1614
+ `onDataError` now has `saved`, `unsaved` and `undone`, and the live region says when part of a change stayed
1615
+ saved. A deleted series takes its changed occurrences, asked of the adapter (loaded or not). `rangeFilter(range,
1616
+ fields)` builds the data layer's filter for a range with the series that began before it; `remoteFiltering`
1617
+ uses it (the old filter left such series out).
1618
+ - **`RecurrenceEditor`** (exported, also in the appointment form, `editing.allowRecurrence`): the repeat list, every
1619
+ how many, the weekday buttons, a day of the month or a weekday by its place, the month, the end; it reads and
1620
+ writes the rule (`value`, `x-model`) and says it in words. With `editing.allowTimeZones` the form has one
1621
+ searchable time zone picker (`Intl`'s zones) and a box "Separate end time zone" (`separateEndZone`, an item like
1622
+ the others): checked, a second picker sets the end's zone, and an appointment whose end zone differs opens
1623
+ with it checked; unchecked, the end follows the start's zone. Each picker has the whole row (a zone's name is
1624
+ long), the box its own row under it; the field's tooltip gives the whole name.
1625
+ - **Marks:** an occurrence carries a series mark, one changed apart an exception mark (units `series-mark`,
1626
+ `exception-mark`; glyphs `repeat`, `repeat-off`; Material, like Google Calendar, draws none; `recurrenceMarks`).
1627
+ The tooltip says how it repeats (unit `tooltip-repeat`) and the time on the appointment's own clock.
1628
+ - Methods `seriesOf`, `isOccurrence`, `isException`, `occurrencesOf`, `recurrenceText`, `askSeries`;
1629
+ `updateAppointment` and `deleteAppointment` take a `scope`.
1630
+ - Token schema `recurrence-editor.json` (units `editor`, `days-label`, `days`, `summary`; the weekday buttons'
1631
+ place `day-button`), values in every language. The seven weekday buttons are of one width, the widest name's
1632
+ (measured in en, tr, de, fr, el, ta and ar); Fluent draws them as small rounded toggle buttons.
1633
+ - An appointment's text stands out on its fill in every language and theme, at rest, under the pointer and open:
1634
+ `appointment-text-auto` takes black or white by the fill (Material, whose boxes take the appointment's own
1635
+ colour), and the time takes the title's colour under the pointer and open (`appointment-time` `hover`, `open`).
1636
+ - Docs page `/scheduler/recurrence` (one example from a data source); `e2e/checks/60-scheduler-recurrence.mjs`.
1637
+
1638
+ ### Scheduler, milestone 4: resources, groups and the form
1639
+
1640
+ - **Resources** (`resources: SchedulerResource[]`): a kind's `field` (one value, or a list with `allowMultiple`),
1641
+ `label`, `items` (an array, or a data source loaded once and followed), `valueExpr`, `displayExpr`, `colorExpr`,
1642
+ `useColorAsDefault`, `parentExpr`, and an item's own `workStartHour`, `workEndHour`, `workDays` (through
1643
+ `…Expr`). Resources colour the appointments (the kind marked, else the first kind whose item has a colour; an
1644
+ appointment's own `color` wins; in a group, the group's item). An item's own `allowDrag`, `allowResize`,
1645
+ `allowEdit`, `allowDelete` win over `editing` for its appointments. The tooltip has a line per kind.
1646
+ - **Groups** (`groups`, a view's own `groups`): the columns of the day, week, work week and month views split by
1647
+ resource, nested (a room over its people; `parentExpr` keeps a person under their own room), with a row of heads
1648
+ per level; `groupByDate` puts the groups under each date (a single day shows its date over the groups).
1649
+ `resourceHeaderTemplate` draws a head. Cells name their group (`aria-label`), `selectedCells` and the cell events
1650
+ carry `resources`, a new appointment from a cell gets its group's values. A bar under groups by date is cut into a
1651
+ piece per day. The model (`SchedulerModel`) is DOM-free: `groups`, `columns`, `dates`, `heads`, kept in place.
1652
+ - **Moving between groups:** a drag, and `Alt+Shift+ArrowLeft` / `ArrowRight` on an appointment (`keys.previousGroup`
1653
+ / `nextGroup`, mirrored right to left), change the resource fields; in a list only the value of the group it
1654
+ leaves changes. `DragEventArgs.resources`, `AppointmentClickEventArgs.group`, `AppointmentTemplateContext.group`.
1655
+ - **Availability:** `blockedTimes` (`{ start, end, text?, allDay?, recurrenceRule?, resources? }`) mark their cells
1656
+ (`data-blocked`, read out); `allowOffHours: false` keeps what the user moves, resizes or saves in the work hours
1657
+ (of its resources, else the scheduler's); `allowOverlap: false` keeps it off another appointment of its group,
1658
+ and a function there decides the whole check (`SchedulerTimeCheck`: `overlapping`, `blocked`, `offHours`). A drag
1659
+ or a move by the keys shows where it may not go (`onMoving` / `onResizing` start with `cancel` set there);
1660
+ the form says why it cannot save. `checkTime()`, `resourcesOf()`.
1661
+ - **The form:** each kind gets a picker (`DropDown`, or `TagBox` for several), each item with its colour.
1662
+ `editing.form` (`SchedulerForm`): `items` by name (`text`, `start`, `end`, `allDay`, `timeZone` or its three items,
1663
+ `recurrenceRule`, `description`, a resource's field) or items of your own, groups and tabs, `columns`,
1664
+ `minColumnWidth`, `labelMode`, `title`, `width`. An item of a built-in's field changes it (its rules add); its
1665
+ `visible`, `readOnly`, `enabled`, `required`, `label`, `helpText`, `rules` may be functions of the form
1666
+ (`AppointmentFormContext`: `appointment`, `data`, `isNew`). `editor` may be a function (any component taking an
1667
+ editor's props) and `template` any MotifJS component. `onFormOpening` gets the items made and may cancel.
1668
+ - **`FormLayout`:** `tabs` items (every tab checked; a check shows the tab of the first field that failed), `editor`
1669
+ as a function, `template(context)` with `{ data, field, validationGroup }`, `editor: 'tagbox'`.
1670
+ - **Data:** `rangeFilter(range, fields, { resources })` (`RangeFilterOptions`) asks for the resources shown too; a
1671
+ scheduler grouped by a field of one value uses it with `remoteFiltering`.
1672
+ - Units `group-header` (`inner`, `month`), `group-swatch`, `group-divider` (`inner`, `head`), `unavailable` (`all-day`,
1673
+ `month`), `drop-mark` (`bar`, `chip`), `resource-swatch` (`tooltip`), `tooltip-resource-label`,
1674
+ `tooltip-resource-item`; the cell's `blocked` state; the glyph `blocked`. Material draws no divider and no drop
1675
+ mark (Google Calendar), Lounge no hatch.
1676
+ - **Text that reads on any colour:** an appointment's title and time read on its fill whatever the colour, in
1677
+ every language and theme. Black or white (`appointment-text-auto`) is chosen by contrast (the fill's luminance
1678
+ from 0.179 up takes black; it was a lightness of 0.65, which gave white on mid colours such as `#00838f`).
1679
+ A language's ink that would not stand out 4.6 times is made darker on a light fill or lighter on a dark one just
1680
+ as far as needed, its hue kept; one that does is left as it is. The time's colours are plain tokens now
1681
+ (`appointment-time-tone`, `-hover`, `-open`), read on the fill the same way. Measured in check 61 on 24 hues at 5
1682
+ lightnesses, 6 greys and the docs' colours, on a box, a bar and a chip, in six states: at least 4.56:1.
1683
+ - The layout's column variables are `--_columns` and `--_column` (they were `--_days` and `--_day`).
1684
+ - Docs pages `/scheduler/resources` and `/scheduler/form`; `e2e/checks/61-scheduler-resources.mjs` and
1685
+ `62-scheduler-form.mjs`.
1686
+
1687
+ ### Scheduler, milestone 5: timelines, the agenda and big data
1688
+
1689
+ - **Timeline views** `timelineDay`, `timelineWeek`, `timelineWorkWeek`, `timelineMonth`: a row per group (one without
1690
+ groups), nested groups in levels of a resource column, the time along the row (mirrored right to left). The scale
1691
+ has two tiers (the days over their hours; the months over their days) and stays at the top while the rows scroll;
1692
+ the resource column stays at the start while the time scrolls; a long day's date stays in view. Appointments at
1693
+ the same time stack in lanes of their row and the row grows; each row is laid out on its own. The current time,
1694
+ blocked times and the hours outside work carry over; cells stretch to fill the room when they are few.
1695
+ `maxAppointmentsPerCell` (a number) keeps that many lanes and says "+N more" per day.
1696
+ - **Everything of milestones 2–4 in the timeline:** a drag along the row and to another row (its resources change),
1697
+ both ends resize, a copy with Ctrl, the drop mark; the keys over the cells (Left / Right along the time, Up / Down
1698
+ between rows, Home / End, Ctrl + Home / End, PageUp / PageDown, past the end the view moves on) and on an
1699
+ appointment (Left / Right a snap step, Up / Down to the row above or below, Shift for its end, Enter saves); the
1700
+ form, the tooltip, recurrence, time zones, availability. Cells read their group, date and time.
1701
+ - **Agenda** (`agenda`, `agendaDuration`, default 7, component-wide and per view): the coming days with their
1702
+ appointments in time order (the ones taking the day first; one that lasts days on each of them), days with none
1703
+ left out, grouped by resource with `groups`, "No appointments" (`uiLocale`) when empty. A list box: Up / Down,
1704
+ Home / End, PageUp / PageDown move over the rows (the focused one is selected), Space shows the tooltip, Enter the
1705
+ form, Delete deletes; `keys.agendaView` (`A`).
1706
+ - **Big data:** a timeline's rows go through `Virtualization` when they are many (each as tall as its lanes, worked
1707
+ out by the model from the lane's measured height); the cells and appointments along the time, and the columns of
1708
+ a day or a week with many groups, are built from a window the model keeps (`setWindow`, `shownTicks`,
1709
+ `shownColumns`, `shownTimed`, `shownHeads`), moved on by a few cells as the view scrolls. `scrolling: 'auto' |
1710
+ 'standard' | 'virtual'` (component-wide and per view; `'auto'` turns virtual past about 2,000 cells). A drag lays
1711
+ out only the rows it touches; the appointments are read once for every layout until they change; groups are found
1712
+ by key. Measured in development (DevTools on), 1,440 × 900: 1,000 rows × 10,000 appointments in a timeline week
1713
+ show in about 0.6 s with about 850 elements and scroll at 55–60 fps both ways (dragging 50–60 fps); a week of 200
1714
+ groups (1,400 columns, 4,000 appointments) shows in about 0.75 s with about 2,700 elements, 60 fps down, 40–58 fps
1715
+ sideways (between runs), 45 fps dragging.
1716
+ - **Settings per view:** `startDate` (intervals counted from it), `agendaDuration`, `scrolling`, and every
1717
+ template: a view's own wins, `null` there turns it off.
1718
+ - **Narrow boxes:** in a row the text in front stays whole and the one after gives way; a short box and a box on a
1719
+ timeline read their title first, before the time. The time no longer runs under the series mark in a narrow box
1720
+ (it did in the week view too).
1721
+ - **Templates** (`SchedulerTemplates`, component-wide and per view): `appointmentTemplate`,
1722
+ `appointmentTooltipTemplate` (`TooltipTemplateContext`), `dataCellTemplate` (`CellTemplateContext`),
1723
+ `dateCellTemplate` (`DateTemplateContext`), `timeCellTemplate` (`TimeTemplateContext`), `resourceHeaderTemplate`,
1724
+ `agendaRowTemplate` (`AgendaRowContext`), `moreListTemplate` (`MoreListContext`).
1725
+ - **Methods:** `scrollTo(date, resources?)`; `scrollToTime` scrolls a timeline along.
1726
+ - Units `timeline-row` (`first`), `timeline-divider` (`inner`), `resource-cell` (`inner`, `first`, `continued`),
1727
+ `timeline-corner`, `timeline-corner-label`, `scale`, `scale-upper` (`today`), `scale-lower` (`day-start`, `day`,
1728
+ `weekend`, `today`), `agenda`, `agenda-group` (`first`), `agenda-resource`, `agenda-day` (`today`),
1729
+ `agenda-weekday` (`today`), `agenda-month`, `agenda-row` (`hover`, `selected`, `open`, `focus`, `past`,
1730
+ `disabled`), `agenda-content`, `agenda-time`, `agenda-dot`, `agenda-text`, `agenda-empty`; the cell's `line`,
1731
+ `line-hour`, `line-day`, the appointment's `line`, `line-before`, `line-after`, the day number's `scale` and
1732
+ `agenda`, the group swatch's `resource`; `now` and `now-dot` stand up in a timeline (turned). Plain tokens
1733
+ `timeline-cell-width`, `timeline-resource-width`, `timeline-lane-size`, `timeline-row-min-height`,
1734
+ `agenda-time-width`. Material draws no row divider (Google Calendar) and a Google-like agenda (a day's number in a
1735
+ circle, rows lit whole, a dot); Fluent a colour bar on an agenda row (Outlook).
1736
+ - Docs pages `/scheduler/timeline`, `/scheduler/agenda`, `/scheduler/big-data`; `e2e/checks/63-scheduler-timeline.mjs`,
1737
+ `64-scheduler-agenda.mjs`, `65-scheduler-big-data.mjs` (the numbers against limits).
1738
+
1739
+ ### Scheduler, milestone 6: tablet, phone, touch, iCalendar and print
1740
+
1741
+ - **Presentation by screen, the same model** (as the TabDocumentManager): `presentation: 'auto' | 'desktop' |
1742
+ 'tablet' | 'phone'`, `phoneWidth` (560), `tabletWidth` (1024), `tabletWhen` (`'touch'`: under `tabletWidth` only on
1743
+ a screen whose pointer is a finger, `(pointer: coarse)` followed live; `'width'`), `currentPresentation`,
1744
+ `onPresentationChanging` (cancellable) and `onPresentationChanged`. The appointments, views and date stay; only
1745
+ how they show changes.
1746
+ - **As on a phone:** `phoneView` (default `'agenda'`, a day when the views have none; `null` keeps the view; going
1747
+ back it shows the view it had, unless the user chose another), `tabletView` (default `null`). The bar is compact:
1748
+ the month as the title (with its year when it is not this year; the calendar opens from it), Today as an icon, one
1749
+ menu of the views; no steps (a swipe and the month's calendar move, as phone calendars do; N and P still work).
1750
+ The tooltip is an `ActionSheet` (the text, the time and how it repeats; Edit, Delete; with a tooltip template a
1751
+ `BottomSheet` holding it), the form a full-height `BottomSheet` in one column (`FormOpeningEventArgs.form` is the
1752
+ sheet there). A narrower ruler and resource column so a week fits; the agenda writes a row's time under its text.
1753
+ Every view works at every size.
1754
+ - **Touch** (`SchedulerTouch`, every listener on the scheduler before a finger lands):
1755
+ - a long press lifts an appointment (the `lifted` state) and drags it; let go, it stays selected with a handle in
1756
+ the middle of its start and its end edge (`resize-grip`); a finger on a handle resizes at once; a tap elsewhere
1757
+ puts it down. On another appointment an edge is a long press to move it, not a resize;
1758
+ - `swipeNavigation` (default `true`): a swipe sideways goes to the next or the previous days (mirrored right to
1759
+ left) past a quarter of the view or as a flick; a view that can still scroll that way scrolls first. The view
1760
+ follows the finger and an edge mark (`swipe-edge`) shows where the next days come from, `ready` when letting go
1761
+ moves on;
1762
+ - `pinchZoom` (default `true`, as Google Calendar and Apple Calendar) zooms the time scale: the hours of the day
1763
+ views (the time between the fingers stays there) and the cells of a timeline. `timeZoom` (0.5 to 4) is the
1764
+ setting it writes; `onTimeZoomChanging` (cancellable, the page zooms instead) and `onTimeZoomChanged`;
1765
+ - scrolling stays native; no click after a drag or a swipe; a long press opens no page menu; `data-touch` marks the
1766
+ scheduler while a finger is in use, so no hover look stays after a touch (the hover states and rules are written
1767
+ `:where(.mx-scheduler:not([data-touch]))`, the same specificity);
1768
+ - a finger selects one cell; a second tap on it opens the form for a new appointment (a double tap opens one form).
1769
+ - On a touch screen the bar takes the language's large buttons (`phone-bar-size` as on a phone: Material's top app
1770
+ bar takes its 40 px buttons), the agenda rows `touch-target`, the lines of the month and the all-day panel
1771
+ `touch-lane-size`.
1772
+ - **iCalendar (RFC 5545):** `exportICalendar({ range: 'visible' | 'all' | { start, end }, appointments, name })` returns
1773
+ the text; `importICalendar(text)` resolves to `{ added, updated, failed }`. Events `onICalendarExporting`
1774
+ (cancellable, `appointments` changeable), `onICalendarExported`, `onICalendarImporting` (cancellable, the values read
1775
+ changeable), `onICalendarImported`. Written: `UID` (the key), `DTSTAMP`, `DTSTART` / `DTEND` with `TZID` (all-day as
1776
+ `VALUE=DATE`), `SUMMARY`, `DESCRIPTION`, `RRULE` (a wall clock `UNTIL` in UTC), `EXDATE`, `RECURRENCE-ID` (an
1777
+ occurrence changed apart, under its series' UID: the left-out time of the series nearest to it), a `VTIMEZONE` for
1778
+ each zone used. Read: the same, folded lines, escaped text, `TZID` (an IANA name, else the file's `VTIMEZONE`, as
1779
+ Outlook's Windows names), UTC and floating times, `DURATION`, a cancelled occurrence left out of its series. Import
1780
+ goes through the editor and the store: `onAppointmentAdding` first, a data source gets the adds through its
1781
+ adapter; an event whose UID is an appointment's key changes it.
1782
+ - **The iCalendar part** (`src/parts/icalendar/`, DOM-free, exported): `parseICalendar`, `writeICalendar`,
1783
+ `timeZoneLines` (a zone's `VTIMEZONE` from `Intl`: a yearly `RRULE` when every change follows one, else `RDATE`s),
1784
+ `icalendarMoment`, and the types `ICalendar`, `ICalendarEvent`, `ICalendarDate`, `ICalendarProperty`,
1785
+ `ICalendarTimeZone`, `ICalendarObservance`, `ICalendarWriteOptions`.
1786
+ - **Print:** a print stylesheet and `print()` (`onPrinting` cancellable, `onPrinted`). On paper (the browser's print
1787
+ too: `beforeprint`) the scheduler is built whole (a virtual view turns standard), nothing scrolls, every hour, row
1788
+ and column shows, a week of the month, a timeline row, an agenda day and an appointment are not split between
1789
+ pages, the colours are kept (`print-color-adjust: exact`), the bar and the now line are left out. `print()` prints
1790
+ this scheduler alone (`data-mx-print-one` on the page while the dialog is open).
1791
+ - Units `resize-grip` (`active`; turned down the side of a bar), `swipe-edge` (`ready`), `swipe-icon` (`previous`,
1792
+ `ready`); new states: the appointment's `lifted`, `selected`, `print`, the bar's `phone`, the scheduler's `print`.
1793
+ Plain tokens `touch-target`, `touch-lane-size`, `phone-ruler-width`, `phone-column-min-width`,
1794
+ `phone-timeline-resource-width`, `phone-bar-size`, `swipe-inset`, `grip-ring`, `grip-ring-mix`. Places
1795
+ `today-icon-button`, `view-menu-button`, `tooltip-sheet`, `form-sheet`.
1796
+ - Docs pages `/scheduler/mobile` (presentations, a phone-sized frame, a finger) and `/scheduler/icalendar` (export,
1797
+ import, print); `e2e/checks/66-scheduler-mobile.mjs`, `67-scheduler-icalendar.mjs`.
1798
+ - **Memory:** a `Button` disposes its `dropDown` content with itself. Until its popup first opened the content was in
1799
+ no tree, so nothing disposed it: the scheduler's date calendar kept the whole scheduler (its model, every
1800
+ appointment) after the page was left, 13–18 MB a visit on the big-data page. A sweep of every docs page now finds
1801
+ no growth over 0.5 MB a visit.
1802
+
1803
+ ### Design languages, step 1: what lets a language change everything
1804
+
1805
+ The owner's rule: any design system, or a new version of one, is added as files only and looks like its source
1806
+ (roadmap/27-design-languages.md; WinUI 3 and Material 3 references and an audit of every component next to it).
1807
+
1808
+ - Glyphs are names: `core/glyphs.ts` returns `span.mx-glyph[data-icon]` (the same helpers), drawn by CSS as a mask
1809
+ of `--mx-icon-<name>` in the text colour. The kit's set is `tokens/icons/kit.icons.json`; a language brings its own
1810
+ in `tokens/icons/<language>.icons.json`, built by `scripts/build-icons.mjs` (part of `npm run tokens`) into
1811
+ `src/generated/icons.css`. The datagrid's drag handle uses the set too (`dragDots`).
1812
+ - `core/press-origin.ts`: a part with `data-mx-press` gets `data-pressed` and `--_press-x` / `--_press-y` while it
1813
+ is pressed (keys press from its middle), for a language's state layer or ripple.
1814
+ - `core/look-watch.ts` `onLookChanged`: a design language, theme or density changed anywhere. Toolbar (its overflow),
1815
+ the option lists, TreeView, TextArea and DataGrid's action widths measure again; a toolbar switched to Material at
1816
+ run time now moves what does not fit into its menu.
1817
+ - DataGrid's per-column rules (hidden columns, alignment, sticky offsets and edges) are in `@layer mx.components`,
1818
+ so a language's stylesheet can change their look.
1819
+ - stylelint: the files of a component made ready for any language take no literal length (`LOSSLESS` in
1820
+ `stylelint.config.mjs`). AGENTS.md: the rules (state tokens, anatomy, icons, measurements, a language's files).
1821
+ - `e2e/language-diff.mjs`: from a fingerprint, how much of each component is the same in every language.