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

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