@threadlabs/looma 0.19.1 → 0.21.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 (517) hide show
  1. package/components/shared/trigger.js +9 -4
  2. package/components/ui-affordance-scope/ui-affordance-scope.html +1 -1
  3. package/components/ui-avatar/ui-avatar.html +6 -6
  4. package/components/ui-avatar-group/ui-avatar-group.html +3 -3
  5. package/components/ui-avatar-group/ui-avatar-group.js +1 -1
  6. package/components/ui-badge/ui-badge.html +3 -3
  7. package/components/ui-breadcrumb-item/ui-breadcrumb-item.html +1 -1
  8. package/components/ui-breadcrumbs/ui-breadcrumbs.html +1 -1
  9. package/components/ui-button/ui-button.html +17 -16
  10. package/components/ui-callout/ui-callout.html +1 -1
  11. package/components/ui-card/ui-card.html +5 -4
  12. package/components/ui-checkbox/ui-checkbox.html +11 -7
  13. package/components/ui-cluster/ui-cluster.html +4 -4
  14. package/components/ui-combobox/ui-combobox.html +299 -74
  15. package/components/ui-combobox/ui-combobox.js +21 -20
  16. package/components/ui-container/ui-container.html +2 -2
  17. package/components/ui-context-menu/ui-context-menu.html +17 -5
  18. package/components/ui-cover/ui-cover.html +1 -1
  19. package/components/ui-description-list/ui-description-list.html +3 -3
  20. package/components/ui-dialog/ui-dialog.html +15 -7
  21. package/components/ui-disclosure/ui-disclosure.html +17 -8
  22. package/components/ui-editable/ui-editable.html +20 -9
  23. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +6 -6
  24. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +6 -6
  25. package/components/ui-editor-mention-menu-item/ui-editor-mention-menu-item.html +1 -1
  26. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +6 -6
  27. package/components/ui-editor-slash-menu-group/ui-editor-slash-menu-group.html +1 -1
  28. package/components/ui-editor-slash-menu-item/ui-editor-slash-menu-item.html +2 -2
  29. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +33 -13
  30. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +107 -29
  31. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +5 -5
  32. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +48 -22
  33. package/components/ui-floating-action-button/ui-floating-action-button.html +1 -1
  34. package/components/ui-grid/ui-grid.html +2 -2
  35. package/components/ui-icon/ui-icon.html +13 -4
  36. package/components/ui-icon-button/ui-icon-button.html +6 -6
  37. package/components/ui-input/ui-input.html +28 -6
  38. package/components/ui-list/ui-list.html +5 -4
  39. package/components/ui-list-item/ui-list-item.html +2 -2
  40. package/components/ui-listbox/ui-listbox.html +31 -16
  41. package/components/ui-menu/ui-menu.html +18 -5
  42. package/components/ui-menu-group/ui-menu-group.html +1 -1
  43. package/components/ui-menu-item/ui-menu-item.html +14 -9
  44. package/components/ui-meter/ui-meter.html +7 -7
  45. package/components/ui-nav-item/ui-nav-item.html +10 -9
  46. package/components/ui-page-header/ui-page-header.html +1 -1
  47. package/components/ui-popover/ui-popover.html +14 -5
  48. package/components/ui-radio/ui-radio.html +7 -3
  49. package/components/ui-radio-group/ui-radio-group.html +12 -4
  50. package/components/ui-reel/ui-reel.html +3 -3
  51. package/components/ui-scroll-area/ui-scroll-area.html +1 -1
  52. package/components/ui-search-result-row/ui-search-result-row.html +1 -1
  53. package/components/ui-search-shell/ui-search-shell.html +7 -3
  54. package/components/ui-section/ui-section.html +3 -3
  55. package/components/ui-select/ui-select.html +2 -2
  56. package/components/ui-separator/ui-separator.html +2 -2
  57. package/components/ui-sidebar/ui-sidebar.html +13 -6
  58. package/components/ui-spinner/ui-spinner.html +5 -5
  59. package/components/ui-stack/ui-stack.html +3 -3
  60. package/components/ui-status-message/ui-status-message.html +5 -5
  61. package/components/ui-switch/ui-switch.html +16 -3
  62. package/components/ui-switcher/ui-switcher.html +3 -3
  63. package/components/ui-table/ui-table.html +1 -1
  64. package/components/ui-tabs/ui-tabs.html +14 -9
  65. package/components/ui-text/ui-text.html +6 -6
  66. package/components/ui-textarea/ui-textarea.html +10 -2
  67. package/components/ui-toast/ui-toast.html +8 -4
  68. package/components/ui-toast-region/ui-toast-region.html +27 -7
  69. package/components/ui-tooltip/ui-tooltip.html +16 -7
  70. package/components/ui-tree/ui-tree.html +30 -7
  71. package/components/ui-tree-item/ui-tree-item.html +21 -17
  72. package/dist/index.js +1 -1
  73. package/editor/table-overlay.d.ts +1 -1
  74. package/package.json +3 -3
  75. package/styles/ui-action-bar.css +1 -1
  76. package/styles/ui-affordance-scope.css +1 -1
  77. package/styles/ui-avatar-group.css +1 -1
  78. package/styles/ui-avatar.css +1 -1
  79. package/styles/ui-badge.css +1 -1
  80. package/styles/ui-breadcrumb-item.css +1 -1
  81. package/styles/ui-breadcrumbs.css +1 -1
  82. package/styles/ui-button.css +1 -1
  83. package/styles/ui-callout.css +1 -1
  84. package/styles/ui-card.css +1 -1
  85. package/styles/ui-checkbox.css +1 -1
  86. package/styles/ui-cluster.css +1 -1
  87. package/styles/ui-combobox.css +1 -1
  88. package/styles/ui-container.css +1 -1
  89. package/styles/ui-context-menu.css +1 -1
  90. package/styles/ui-cover.css +1 -1
  91. package/styles/ui-description-item.css +1 -1
  92. package/styles/ui-description-list.css +1 -1
  93. package/styles/ui-dialog.css +1 -1
  94. package/styles/ui-disclosure.css +1 -1
  95. package/styles/ui-editable.css +1 -1
  96. package/styles/ui-editor-insert-table-grid.css +1 -1
  97. package/styles/ui-editor-mention-menu-item.css +1 -1
  98. package/styles/ui-editor-mention-menu.css +1 -1
  99. package/styles/ui-editor-slash-menu-group.css +1 -1
  100. package/styles/ui-editor-slash-menu-item.css +1 -1
  101. package/styles/ui-editor-slash-menu.css +1 -1
  102. package/styles/ui-editor-table-context-menu.css +1 -1
  103. package/styles/ui-editor-table-overlay.css +1 -1
  104. package/styles/ui-editor-table-toolbar.css +1 -1
  105. package/styles/ui-editor-toolbar.css +1 -1
  106. package/styles/ui-floating-action-button.css +1 -1
  107. package/styles/ui-form-field.css +1 -1
  108. package/styles/ui-grid.css +1 -1
  109. package/styles/ui-icon-button.css +1 -1
  110. package/styles/ui-icon.css +1 -1
  111. package/styles/ui-input-group.css +1 -1
  112. package/styles/ui-input.css +1 -1
  113. package/styles/ui-list-item.css +1 -1
  114. package/styles/ui-list.css +1 -1
  115. package/styles/ui-listbox.css +1 -1
  116. package/styles/ui-menu-group.css +1 -1
  117. package/styles/ui-menu-item.css +1 -1
  118. package/styles/ui-menu.css +1 -1
  119. package/styles/ui-meter.css +1 -1
  120. package/styles/ui-nav-item.css +1 -1
  121. package/styles/ui-page-header.css +1 -1
  122. package/styles/ui-popover.css +1 -1
  123. package/styles/ui-radio-group.css +1 -1
  124. package/styles/ui-radio.css +1 -1
  125. package/styles/ui-reel.css +1 -1
  126. package/styles/ui-scroll-area.css +1 -1
  127. package/styles/ui-search-result-row.css +1 -1
  128. package/styles/ui-search-shell.css +1 -1
  129. package/styles/ui-section.css +1 -1
  130. package/styles/ui-select.css +1 -1
  131. package/styles/ui-separator.css +1 -1
  132. package/styles/ui-sidebar.css +1 -1
  133. package/styles/ui-spinner.css +1 -1
  134. package/styles/ui-stack.css +1 -1
  135. package/styles/ui-status-message.css +1 -1
  136. package/styles/ui-switch.css +1 -1
  137. package/styles/ui-switcher.css +1 -1
  138. package/styles/ui-table.css +1 -1
  139. package/styles/ui-tabs.css +1 -1
  140. package/styles/ui-text.css +1 -1
  141. package/styles/ui-textarea.css +1 -1
  142. package/styles/ui-toast-region.css +1 -1
  143. package/styles/ui-toast.css +1 -1
  144. package/styles/ui-tooltip.css +1 -1
  145. package/styles/ui-top-bar.css +1 -1
  146. package/styles/ui-tree-item.css +1 -1
  147. package/styles/ui-tree.css +1 -1
  148. package/vanilla/UiActionBar.d.ts +1 -1
  149. package/vanilla/UiActionBar.js +5 -1
  150. package/vanilla/UiAffordanceScope.d.ts +1 -1
  151. package/vanilla/UiAffordanceScope.js +3 -2
  152. package/vanilla/UiAvatar.d.ts +1 -1
  153. package/vanilla/UiAvatar.js +4 -3
  154. package/vanilla/UiAvatarGroup.d.ts +1 -1
  155. package/vanilla/UiAvatarGroup.js +3 -2
  156. package/vanilla/UiBadge.d.ts +1 -1
  157. package/vanilla/UiBadge.js +2 -1
  158. package/vanilla/UiBreadcrumbItem.d.ts +1 -1
  159. package/vanilla/UiBreadcrumbItem.js +2 -1
  160. package/vanilla/UiBreadcrumbs.d.ts +1 -1
  161. package/vanilla/UiBreadcrumbs.js +4 -7
  162. package/vanilla/UiButton.d.ts +1 -1
  163. package/vanilla/UiButton.js +6 -4
  164. package/vanilla/UiCallout.d.ts +1 -1
  165. package/vanilla/UiCallout.js +3 -2
  166. package/vanilla/UiCard.d.ts +1 -1
  167. package/vanilla/UiCard.js +6 -2
  168. package/vanilla/UiCheckbox.d.ts +1 -1
  169. package/vanilla/UiCheckbox.js +4 -2
  170. package/vanilla/UiCluster.d.ts +1 -1
  171. package/vanilla/UiCluster.js +2 -1
  172. package/vanilla/UiCombobox.d.ts +3 -2
  173. package/vanilla/UiCombobox.js +8 -2
  174. package/vanilla/UiContainer.d.ts +1 -1
  175. package/vanilla/UiContainer.js +2 -1
  176. package/vanilla/UiContextMenu.d.ts +1 -1
  177. package/vanilla/UiContextMenu.js +3 -2
  178. package/vanilla/UiCover.d.ts +1 -1
  179. package/vanilla/UiCover.js +4 -5
  180. package/vanilla/UiDescriptionItem.d.ts +1 -1
  181. package/vanilla/UiDescriptionItem.js +4 -7
  182. package/vanilla/UiDescriptionList.d.ts +1 -1
  183. package/vanilla/UiDescriptionList.js +2 -1
  184. package/vanilla/UiDialog.d.ts +1 -1
  185. package/vanilla/UiDialog.js +4 -2
  186. package/vanilla/UiDisclosure.d.ts +1 -1
  187. package/vanilla/UiDisclosure.js +4 -2
  188. package/vanilla/UiEditable.d.ts +1 -1
  189. package/vanilla/UiEditable.js +2 -2
  190. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  191. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  192. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  193. package/vanilla/UiEditorMentionMenu.js +5 -2
  194. package/vanilla/UiEditorMentionMenuItem.d.ts +1 -1
  195. package/vanilla/UiEditorMentionMenuItem.js +3 -1
  196. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  197. package/vanilla/UiEditorSlashMenu.js +6 -2
  198. package/vanilla/UiEditorSlashMenuGroup.d.ts +1 -1
  199. package/vanilla/UiEditorSlashMenuGroup.js +4 -7
  200. package/vanilla/UiEditorSlashMenuItem.d.ts +1 -1
  201. package/vanilla/UiEditorSlashMenuItem.js +2 -1
  202. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  203. package/vanilla/UiEditorTableContextMenu.js +2 -2
  204. package/vanilla/UiEditorTableOverlay.d.ts +12 -2
  205. package/vanilla/UiEditorTableOverlay.js +2 -2
  206. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  207. package/vanilla/UiEditorTableToolbar.js +2 -2
  208. package/vanilla/UiEditorToolbar.d.ts +1 -1
  209. package/vanilla/UiEditorToolbar.js +2 -1
  210. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  211. package/vanilla/UiFloatingActionButton.js +2 -1
  212. package/vanilla/UiFormField.d.ts +1 -1
  213. package/vanilla/UiFormField.js +6 -1
  214. package/vanilla/UiGrid.d.ts +1 -1
  215. package/vanilla/UiGrid.js +4 -3
  216. package/vanilla/UiIcon.d.ts +1 -1
  217. package/vanilla/UiIcon.js +1 -1
  218. package/vanilla/UiIconButton.d.ts +1 -1
  219. package/vanilla/UiIconButton.js +4 -3
  220. package/vanilla/UiInput.d.ts +5 -4
  221. package/vanilla/UiInput.js +16 -13
  222. package/vanilla/UiInputGroup.d.ts +1 -1
  223. package/vanilla/UiInputGroup.js +5 -1
  224. package/vanilla/UiList.d.ts +1 -1
  225. package/vanilla/UiList.js +4 -2
  226. package/vanilla/UiListItem.d.ts +1 -1
  227. package/vanilla/UiListItem.js +5 -1
  228. package/vanilla/UiListbox.d.ts +1 -1
  229. package/vanilla/UiListbox.js +3 -2
  230. package/vanilla/UiMenu.d.ts +1 -1
  231. package/vanilla/UiMenu.js +3 -2
  232. package/vanilla/UiMenuGroup.d.ts +1 -1
  233. package/vanilla/UiMenuGroup.js +2 -1
  234. package/vanilla/UiMenuItem.d.ts +1 -1
  235. package/vanilla/UiMenuItem.js +6 -2
  236. package/vanilla/UiMeter.d.ts +1 -1
  237. package/vanilla/UiMeter.js +2 -2
  238. package/vanilla/UiNavItem.d.ts +2 -2
  239. package/vanilla/UiNavItem.js +11 -5
  240. package/vanilla/UiPageHeader.d.ts +1 -1
  241. package/vanilla/UiPageHeader.js +8 -5
  242. package/vanilla/UiPopover.d.ts +1 -1
  243. package/vanilla/UiPopover.js +3 -2
  244. package/vanilla/UiRadio.d.ts +1 -1
  245. package/vanilla/UiRadio.js +4 -2
  246. package/vanilla/UiRadioGroup.d.ts +1 -1
  247. package/vanilla/UiRadioGroup.js +3 -2
  248. package/vanilla/UiReel.d.ts +1 -1
  249. package/vanilla/UiReel.js +2 -1
  250. package/vanilla/UiScrollArea.d.ts +1 -1
  251. package/vanilla/UiScrollArea.js +3 -2
  252. package/vanilla/UiSearchResultRow.d.ts +1 -1
  253. package/vanilla/UiSearchResultRow.js +6 -1
  254. package/vanilla/UiSearchShell.d.ts +1 -1
  255. package/vanilla/UiSearchShell.js +6 -2
  256. package/vanilla/UiSection.d.ts +1 -1
  257. package/vanilla/UiSection.js +5 -2
  258. package/vanilla/UiSelect.d.ts +1 -1
  259. package/vanilla/UiSelect.js +3 -2
  260. package/vanilla/UiSeparator.d.ts +1 -1
  261. package/vanilla/UiSeparator.js +3 -7
  262. package/vanilla/UiSidebar.d.ts +1 -1
  263. package/vanilla/UiSidebar.js +3 -2
  264. package/vanilla/UiSpinner.d.ts +1 -1
  265. package/vanilla/UiSpinner.js +2 -2
  266. package/vanilla/UiStack.d.ts +1 -1
  267. package/vanilla/UiStack.js +2 -1
  268. package/vanilla/UiStatusMessage.d.ts +1 -1
  269. package/vanilla/UiStatusMessage.js +4 -2
  270. package/vanilla/UiSwitch.d.ts +1 -1
  271. package/vanilla/UiSwitch.js +4 -2
  272. package/vanilla/UiSwitcher.d.ts +1 -1
  273. package/vanilla/UiSwitcher.js +3 -2
  274. package/vanilla/UiTable.d.ts +1 -1
  275. package/vanilla/UiTable.js +3 -2
  276. package/vanilla/UiTabs.d.ts +1 -1
  277. package/vanilla/UiTabs.js +4 -2
  278. package/vanilla/UiText.d.ts +1 -1
  279. package/vanilla/UiText.js +13 -2
  280. package/vanilla/UiTextarea.d.ts +1 -1
  281. package/vanilla/UiTextarea.js +3 -3
  282. package/vanilla/UiToast.d.ts +1 -1
  283. package/vanilla/UiToast.js +4 -2
  284. package/vanilla/UiToastRegion.d.ts +1 -1
  285. package/vanilla/UiToastRegion.js +3 -2
  286. package/vanilla/UiTooltip.d.ts +1 -1
  287. package/vanilla/UiTooltip.js +3 -2
  288. package/vanilla/UiTopBar.d.ts +1 -1
  289. package/vanilla/UiTopBar.js +5 -1
  290. package/vanilla/UiTree.d.ts +1 -1
  291. package/vanilla/UiTree.js +3 -2
  292. package/vanilla/UiTreeItem.d.ts +1 -1
  293. package/vanilla/UiTreeItem.js +8 -4
  294. package/vue/UiActionBar.vue +33 -2
  295. package/vue/UiAffordanceScope.d.ts +23 -8
  296. package/vue/UiAffordanceScope.vue +90 -17
  297. package/vue/UiAvatar.d.ts +77 -19
  298. package/vue/UiAvatar.vue +151 -31
  299. package/vue/UiAvatarGroup.d.ts +50 -13
  300. package/vue/UiAvatarGroup.vue +121 -23
  301. package/vue/UiBadge.d.ts +32 -10
  302. package/vue/UiBadge.vue +104 -17
  303. package/vue/UiBreadcrumbItem.d.ts +14 -6
  304. package/vue/UiBreadcrumbItem.vue +82 -15
  305. package/vue/UiBreadcrumbs.d.ts +14 -6
  306. package/vue/UiBreadcrumbs.vue +78 -10
  307. package/vue/UiButton.d.ts +122 -27
  308. package/vue/UiButton.vue +288 -64
  309. package/vue/UiCallout.d.ts +14 -6
  310. package/vue/UiCallout.vue +84 -16
  311. package/vue/UiCard.d.ts +41 -12
  312. package/vue/UiCard.vue +149 -25
  313. package/vue/UiCheckbox.d.ts +85 -28
  314. package/vue/UiCheckbox.vue +173 -43
  315. package/vue/UiCluster.d.ts +41 -7
  316. package/vue/UiCluster.vue +122 -13
  317. package/vue/UiCombobox.d.ts +303 -110
  318. package/vue/UiCombobox.vue +723 -412
  319. package/vue/UiContainer.d.ts +23 -5
  320. package/vue/UiContainer.vue +89 -9
  321. package/vue/UiContextMenu.d.ts +38 -23
  322. package/vue/UiContextMenu.vue +113 -38
  323. package/vue/UiCover.d.ts +14 -6
  324. package/vue/UiCover.vue +76 -12
  325. package/vue/UiDescriptionItem.d.ts +14 -6
  326. package/vue/UiDescriptionItem.vue +78 -11
  327. package/vue/UiDescriptionList.d.ts +32 -9
  328. package/vue/UiDescriptionList.vue +106 -16
  329. package/vue/UiDialog.d.ts +89 -30
  330. package/vue/UiDialog.vue +168 -38
  331. package/vue/UiDisclosure.d.ts +70 -27
  332. package/vue/UiDisclosure.vue +149 -36
  333. package/vue/UiEditable.d.ts +119 -41
  334. package/vue/UiEditable.vue +220 -62
  335. package/vue/UiEditorInsertTableGrid.d.ts +46 -17
  336. package/vue/UiEditorInsertTableGrid.vue +215 -40
  337. package/vue/UiEditorMentionMenu.d.ts +128 -41
  338. package/vue/UiEditorMentionMenu.vue +211 -37
  339. package/vue/UiEditorMentionMenuItem.d.ts +32 -10
  340. package/vue/UiEditorMentionMenuItem.vue +98 -17
  341. package/vue/UiEditorSlashMenu.d.ts +110 -37
  342. package/vue/UiEditorSlashMenu.vue +189 -31
  343. package/vue/UiEditorSlashMenuGroup.d.ts +14 -6
  344. package/vue/UiEditorSlashMenuGroup.vue +80 -12
  345. package/vue/UiEditorSlashMenuItem.d.ts +50 -14
  346. package/vue/UiEditorSlashMenuItem.vue +120 -23
  347. package/vue/UiEditorTableContextMenu.d.ts +64 -20
  348. package/vue/UiEditorTableContextMenu.vue +326 -91
  349. package/vue/UiEditorTableOverlay.d.ts +170 -44
  350. package/vue/UiEditorTableOverlay.vue +420 -149
  351. package/vue/UiEditorTableToolbar.d.ts +64 -20
  352. package/vue/UiEditorTableToolbar.vue +344 -107
  353. package/vue/UiEditorToolbar.d.ts +14 -6
  354. package/vue/UiEditorToolbar.vue +79 -15
  355. package/vue/UiFloatingActionButton.d.ts +32 -10
  356. package/vue/UiFloatingActionButton.vue +96 -18
  357. package/vue/UiFormField.d.ts +32 -10
  358. package/vue/UiFormField.vue +99 -19
  359. package/vue/UiGrid.d.ts +32 -6
  360. package/vue/UiGrid.vue +95 -11
  361. package/vue/UiIcon.d.ts +14 -6
  362. package/vue/UiIcon.vue +99 -14
  363. package/vue/UiIconButton.d.ts +77 -19
  364. package/vue/UiIconButton.vue +176 -39
  365. package/vue/UiInput.d.ts +50 -19
  366. package/vue/UiInput.vue +326 -33
  367. package/vue/UiInputGroup.d.ts +14 -6
  368. package/vue/UiInputGroup.vue +79 -15
  369. package/vue/UiList.d.ts +41 -12
  370. package/vue/UiList.vue +125 -22
  371. package/vue/UiListItem.d.ts +23 -8
  372. package/vue/UiListItem.vue +88 -16
  373. package/vue/UiListbox.d.ts +86 -27
  374. package/vue/UiListbox.vue +272 -64
  375. package/vue/UiMenu.d.ts +69 -33
  376. package/vue/UiMenu.vue +142 -38
  377. package/vue/UiMenuGroup.d.ts +14 -6
  378. package/vue/UiMenuGroup.vue +80 -11
  379. package/vue/UiMenuItem.d.ts +61 -25
  380. package/vue/UiMenuItem.vue +174 -45
  381. package/vue/UiMeter.d.ts +68 -18
  382. package/vue/UiMeter.vue +215 -41
  383. package/vue/UiNavItem.d.ts +50 -11
  384. package/vue/UiNavItem.vue +163 -29
  385. package/vue/UiPageHeader.d.ts +14 -6
  386. package/vue/UiPageHeader.vue +75 -12
  387. package/vue/UiPopover.d.ts +43 -21
  388. package/vue/UiPopover.vue +147 -27
  389. package/vue/UiRadio.d.ts +67 -24
  390. package/vue/UiRadio.vue +147 -36
  391. package/vue/UiRadioGroup.d.ts +79 -29
  392. package/vue/UiRadioGroup.vue +162 -41
  393. package/vue/UiReel.d.ts +32 -6
  394. package/vue/UiReel.vue +97 -11
  395. package/vue/UiScrollArea.d.ts +14 -6
  396. package/vue/UiScrollArea.vue +83 -14
  397. package/vue/UiSearchResultRow.d.ts +23 -8
  398. package/vue/UiSearchResultRow.vue +86 -16
  399. package/vue/UiSearchShell.d.ts +48 -19
  400. package/vue/UiSearchShell.vue +120 -26
  401. package/vue/UiSection.d.ts +32 -10
  402. package/vue/UiSection.vue +103 -17
  403. package/vue/UiSelect.d.ts +59 -17
  404. package/vue/UiSelect.vue +140 -29
  405. package/vue/UiSeparator.d.ts +14 -6
  406. package/vue/UiSeparator.vue +80 -9
  407. package/vue/UiSidebar.d.ts +95 -31
  408. package/vue/UiSidebar.vue +172 -39
  409. package/vue/UiSpinner.d.ts +23 -8
  410. package/vue/UiSpinner.vue +115 -24
  411. package/vue/UiStack.d.ts +32 -6
  412. package/vue/UiStack.vue +107 -11
  413. package/vue/UiStatusMessage.d.ts +32 -10
  414. package/vue/UiStatusMessage.vue +109 -19
  415. package/vue/UiSwitch.d.ts +67 -24
  416. package/vue/UiSwitch.vue +147 -36
  417. package/vue/UiSwitcher.d.ts +41 -7
  418. package/vue/UiSwitcher.vue +118 -15
  419. package/vue/UiTable.d.ts +23 -8
  420. package/vue/UiTable.vue +91 -17
  421. package/vue/UiTabs.d.ts +66 -23
  422. package/vue/UiTabs.vue +230 -44
  423. package/vue/UiText.d.ts +68 -18
  424. package/vue/UiText.vue +308 -48
  425. package/vue/UiTextarea.d.ts +84 -21
  426. package/vue/UiTextarea.vue +172 -38
  427. package/vue/UiToast.d.ts +28 -13
  428. package/vue/UiToast.vue +103 -24
  429. package/vue/UiToastRegion.d.ts +29 -14
  430. package/vue/UiToastRegion.vue +202 -47
  431. package/vue/UiTooltip.d.ts +81 -31
  432. package/vue/UiTooltip.vue +192 -37
  433. package/vue/UiTopBar.vue +33 -2
  434. package/vue/UiTree.d.ts +72 -29
  435. package/vue/UiTree.vue +170 -49
  436. package/vue/UiTreeItem.d.ts +136 -35
  437. package/vue/UiTreeItem.vue +227 -61
  438. package/vue/chunks/UiActionBar.js +16 -3
  439. package/vue/chunks/UiAffordanceScope.js +66 -11
  440. package/vue/chunks/UiAvatar.js +121 -20
  441. package/vue/chunks/UiAvatarGroup.js +94 -15
  442. package/vue/chunks/UiBadge.js +82 -10
  443. package/vue/chunks/UiBreadcrumbItem.js +43 -9
  444. package/vue/chunks/UiBreadcrumbs.js +41 -5
  445. package/vue/chunks/UiButton.js +237 -51
  446. package/vue/chunks/UiCallout.js +53 -11
  447. package/vue/chunks/UiCard.js +145 -18
  448. package/vue/chunks/UiCheckbox.js +130 -30
  449. package/vue/chunks/UiCluster.js +99 -12
  450. package/vue/chunks/UiCombobox.js +545 -162
  451. package/vue/chunks/UiContainer.js +65 -7
  452. package/vue/chunks/UiContextMenu.js +56 -11
  453. package/vue/chunks/UiCover.js +41 -6
  454. package/vue/chunks/UiDescriptionItem.js +39 -4
  455. package/vue/chunks/UiDescriptionList.js +80 -10
  456. package/vue/chunks/UiDialog.js +125 -18
  457. package/vue/chunks/UiDisclosure.js +102 -17
  458. package/vue/chunks/UiEditable.js +154 -29
  459. package/vue/chunks/UiEditorInsertTableGrid.js +154 -31
  460. package/vue/chunks/UiEditorMentionMenu.js +221 -18
  461. package/vue/chunks/UiEditorMentionMenuItem.js +64 -7
  462. package/vue/chunks/UiEditorSlashMenu.js +201 -14
  463. package/vue/chunks/UiEditorSlashMenuGroup.js +43 -9
  464. package/vue/chunks/UiEditorSlashMenuItem.js +80 -14
  465. package/vue/chunks/UiEditorTableContextMenu.js +220 -49
  466. package/vue/chunks/UiEditorTableOverlay.js +390 -85
  467. package/vue/chunks/UiEditorTableToolbar.js +248 -71
  468. package/vue/chunks/UiEditorToolbar.js +44 -10
  469. package/vue/chunks/UiFloatingActionButton.js +57 -9
  470. package/vue/chunks/UiFormField.js +63 -12
  471. package/vue/chunks/UiGrid.js +80 -9
  472. package/vue/chunks/UiIcon.js +73 -16
  473. package/vue/chunks/UiIconButton.js +126 -28
  474. package/vue/chunks/UiInput.js +328 -22
  475. package/vue/chunks/UiInputGroup.js +44 -10
  476. package/vue/chunks/UiList.js +104 -15
  477. package/vue/chunks/UiListItem.js +57 -8
  478. package/vue/chunks/UiListbox.js +208 -49
  479. package/vue/chunks/UiMenu.js +88 -15
  480. package/vue/chunks/UiMenuGroup.js +41 -5
  481. package/vue/chunks/UiMenuItem.js +111 -32
  482. package/vue/chunks/UiMeter.js +166 -36
  483. package/vue/chunks/UiNavItem.js +133 -37
  484. package/vue/chunks/UiPageHeader.js +41 -6
  485. package/vue/chunks/UiPopover.js +81 -11
  486. package/vue/chunks/UiRadio.js +115 -24
  487. package/vue/chunks/UiRadioGroup.js +108 -19
  488. package/vue/chunks/UiReel.js +81 -10
  489. package/vue/chunks/UiScrollArea.js +47 -10
  490. package/vue/chunks/UiSearchResultRow.js +47 -8
  491. package/vue/chunks/UiSearchShell.js +84 -24
  492. package/vue/chunks/UiSection.js +77 -10
  493. package/vue/chunks/UiSelect.js +108 -20
  494. package/vue/chunks/UiSeparator.js +41 -5
  495. package/vue/chunks/UiSidebar.js +136 -20
  496. package/vue/chunks/UiSpinner.js +64 -19
  497. package/vue/chunks/UiStack.js +87 -10
  498. package/vue/chunks/UiStatusMessage.js +82 -12
  499. package/vue/chunks/UiSwitch.js +115 -24
  500. package/vue/chunks/UiSwitcher.js +103 -15
  501. package/vue/chunks/UiTable.js +63 -11
  502. package/vue/chunks/UiTabs.js +170 -30
  503. package/vue/chunks/UiText.js +365 -38
  504. package/vue/chunks/UiTextarea.js +132 -26
  505. package/vue/chunks/UiToast.js +70 -12
  506. package/vue/chunks/UiToastRegion.js +154 -33
  507. package/vue/chunks/UiTooltip.js +124 -16
  508. package/vue/chunks/UiTopBar.js +16 -3
  509. package/vue/chunks/UiTree.js +107 -15
  510. package/vue/chunks/UiTreeItem.js +167 -43
  511. package/vue/chunks/control.js +171 -0
  512. package/vue/chunks/host.js +170 -27
  513. package/vue/chunks/props.js +477 -0
  514. package/vue/components.css +1192 -1192
  515. package/vue/editor/index.js +58 -15
  516. package/vue/editor/primitives.d.ts +52 -2
  517. package/vue/host.ts +370 -39
@@ -1,15 +1,44 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.7 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.12 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { ref } from 'vue'
4
- import * as controllerModule from '../components/ui-editor-table-overlay/ui-editor-table-overlay.js'
3
+ import { computed, defineComponent, getCurrentInstance, h, ref, watchSyncEffect } from 'vue'
4
+ import type { PropType, VNode } from 'vue'
5
5
  import { createDispatch, useComponentHost } from './host'
6
+ import { checkedProp } from './props'
6
7
  import UiIcon from './UiIcon.vue'
7
8
 
8
9
  defineOptions({ inheritAttrs: false })
9
10
 
10
- const props = withDefaults(
11
- defineProps<{
12
- geometry?: {
11
+ const props = defineProps({
12
+ geometry: {
13
+ type: null as unknown as PropType<
14
+ {
15
+ readonly rowBoundaries: readonly (number)[]
16
+ readonly columnBoundaries: readonly (number)[]
17
+ readonly activeCell: {
18
+ readonly left: number
19
+ readonly top: number
20
+ readonly width: number
21
+ readonly height: number
22
+ readonly rowIndex: number
23
+ readonly columnIndex: number
24
+ } | null
25
+ readonly hoveredCell?: {
26
+ readonly left: number
27
+ readonly top: number
28
+ readonly width: number
29
+ readonly height: number
30
+ readonly rowIndex: number
31
+ readonly columnIndex: number
32
+ } | null
33
+ } | null
34
+ >,
35
+ default: null,
36
+ },
37
+ open: { type: null as unknown as PropType<boolean | null>, default: false },
38
+ })
39
+ const checkedProps = computed(() => ({
40
+ geometry: checkedProp<
41
+ {
13
42
  readonly rowBoundaries: readonly (number)[]
14
43
  readonly columnBoundaries: readonly (number)[]
15
44
  readonly activeCell: {
@@ -28,37 +57,185 @@ const props = withDefaults(
28
57
  readonly rowIndex: number
29
58
  readonly columnIndex: number
30
59
  } | null
31
- } | null
32
- open?: boolean
33
- }>(),
34
- {
35
- open: false,
60
+ }
61
+ >(
62
+ props['geometry'],
63
+ {
64
+ kind: 'object',
65
+ fields: [{
66
+ name: 'rowBoundaries',
67
+ type: { kind: 'list', item: { kind: 'terminal', name: 'number' } },
68
+ optional: false,
69
+ }, {
70
+ name: 'columnBoundaries',
71
+ type: { kind: 'list', item: { kind: 'terminal', name: 'number' } },
72
+ optional: false,
73
+ }, {
74
+ name: 'activeCell',
75
+ type: {
76
+ kind: 'union',
77
+ members: [{
78
+ kind: 'object',
79
+ fields: [
80
+ { name: 'left', type: { kind: 'terminal', name: 'number' }, optional: false },
81
+ { name: 'top', type: { kind: 'terminal', name: 'number' }, optional: false },
82
+ { name: 'width', type: { kind: 'terminal', name: 'number' }, optional: false },
83
+ { name: 'height', type: { kind: 'terminal', name: 'number' }, optional: false },
84
+ { name: 'rowIndex', type: { kind: 'terminal', name: 'integer' }, optional: false },
85
+ { name: 'columnIndex', type: { kind: 'terminal', name: 'integer' }, optional: false },
86
+ ],
87
+ open: false,
88
+ }, { kind: 'terminal', name: 'null' }],
89
+ },
90
+ optional: false,
91
+ }, {
92
+ name: 'hoveredCell',
93
+ type: {
94
+ kind: 'union',
95
+ members: [{
96
+ kind: 'object',
97
+ fields: [
98
+ { name: 'left', type: { kind: 'terminal', name: 'number' }, optional: false },
99
+ { name: 'top', type: { kind: 'terminal', name: 'number' }, optional: false },
100
+ { name: 'width', type: { kind: 'terminal', name: 'number' }, optional: false },
101
+ { name: 'height', type: { kind: 'terminal', name: 'number' }, optional: false },
102
+ { name: 'rowIndex', type: { kind: 'terminal', name: 'integer' }, optional: false },
103
+ { name: 'columnIndex', type: { kind: 'terminal', name: 'integer' }, optional: false },
104
+ ],
105
+ open: false,
106
+ }, { kind: 'terminal', name: 'null' }],
107
+ },
108
+ optional: true,
109
+ }],
110
+ open: false,
111
+ },
112
+ false,
113
+ 'geometry',
114
+ undefined,
115
+ undefined,
116
+ ),
117
+ open: checkedProp<boolean>(
118
+ props['open'],
119
+ { kind: 'terminal', name: 'boolean' },
120
+ false,
121
+ 'open',
122
+ undefined,
123
+ undefined,
124
+ ) as boolean,
125
+ }))
126
+ void checkedProps.value
127
+ watchSyncEffect(() => {
128
+ void checkedProps.value
129
+ })
130
+ function nativeAttrs(attrs: Record<string, unknown>): Record<string, unknown> {
131
+ const names = Object.keys(attrs)
132
+ if (!names.some((name) => Object.hasOwn(Object.prototype, name))) return attrs
133
+ return Object.fromEntries(names.map((name) => [
134
+ Object.hasOwn(Object.prototype, name)
135
+ ? name === '__proto__' ? '__Proto__' : name[0]!.toUpperCase() + name.slice(1)
136
+ : name,
137
+ attrs[name],
138
+ ]))
139
+ }
140
+ const KeyedFailure = defineComponent({
141
+ props: { error: { type: null, required: true } },
142
+ setup(props) {
143
+ return () => {
144
+ throw props.error
145
+ }
36
146
  },
37
- )
147
+ })
148
+ const KeyedBoundary = defineComponent({
149
+ setup(_props, { slots }) {
150
+ let last: VNode[] = []
151
+ return () => {
152
+ try {
153
+ last = slots.default?.() ?? []
154
+ return last
155
+ } catch (error) {
156
+ if (
157
+ !(error instanceof Error)
158
+ || (error as Error & { diagnostic?: { code?: string } }).diagnostic?.code !== 'HR004'
159
+ ) throw error
160
+ if (typeof window === 'undefined') throw error
161
+ return [...last, h(KeyedFailure, { error })]
162
+ }
163
+ }
164
+ },
165
+ })
166
+ const componentInstance = getCurrentInstance()
167
+ function reflectedProp(
168
+ name: string,
169
+ kebab: string,
170
+ value: unknown,
171
+ fallback: string | undefined,
172
+ bound: boolean,
173
+ separator?: string,
174
+ ): string | undefined {
175
+ const incoming = componentInstance?.vnode.props
176
+ if (
177
+ !bound
178
+ && (incoming === null || incoming === undefined
179
+ || (!Object.hasOwn(incoming, name) && !Object.hasOwn(incoming, kebab)))
180
+ ) return fallback
181
+ if (value === null || value === undefined) return undefined
182
+ return Array.isArray(value) && separator !== undefined
183
+ ? value.join(separator)
184
+ : typeof value === 'object'
185
+ ? JSON.stringify(value)
186
+ : String(value)
187
+ }
188
+ const hydrationInstance = getCurrentInstance()
38
189
  const emit = defineEmits<{
39
- action: [
40
- detail: {
41
- readonly action: 'add-row-before' | 'add-row-after' | 'add-column-before' | 'add-column-after'
42
- readonly boundaryIndex: number
43
- } | {
44
- readonly action: 'select-row' | 'select-column'
45
- readonly rowIndex: number
46
- readonly columnIndex: number
47
- } | {
48
- readonly action: 'reorder-row' | 'reorder-column'
49
- readonly fromIndex: number
50
- readonly toIndex: number
51
- } | {
52
- readonly action: 'open-cell-menu' | 'open-row-menu' | 'open-column-menu'
53
- readonly rowIndex: number
54
- readonly columnIndex: number
55
- readonly anchor: {
56
- readonly left: number
57
- readonly top: number
58
- readonly right: number
59
- readonly bottom: number
190
+ 'add-row-before': [event: CustomEvent<{ readonly boundaryIndex: number }>]
191
+ 'add-row-after': [event: CustomEvent<{ readonly boundaryIndex: number }>]
192
+ 'add-column-before': [event: CustomEvent<{ readonly boundaryIndex: number }>]
193
+ 'add-column-after': [event: CustomEvent<{ readonly boundaryIndex: number }>]
194
+ 'select-row': [event: CustomEvent<{ readonly rowIndex: number; readonly columnIndex: number }>]
195
+ 'select-column': [event: CustomEvent<{ readonly rowIndex: number; readonly columnIndex: number }>]
196
+ 'reorder-row': [event: CustomEvent<{ readonly fromIndex: number; readonly toIndex: number }>]
197
+ 'reorder-column': [event: CustomEvent<{ readonly fromIndex: number; readonly toIndex: number }>]
198
+ 'open-cell-menu': [
199
+ event: CustomEvent<
200
+ {
201
+ readonly rowIndex: number
202
+ readonly columnIndex: number
203
+ readonly anchor: {
204
+ readonly left: number
205
+ readonly top: number
206
+ readonly right: number
207
+ readonly bottom: number
208
+ }
60
209
  }
61
- },
210
+ >,
211
+ ]
212
+ 'open-row-menu': [
213
+ event: CustomEvent<
214
+ {
215
+ readonly rowIndex: number
216
+ readonly columnIndex: number
217
+ readonly anchor: {
218
+ readonly left: number
219
+ readonly top: number
220
+ readonly right: number
221
+ readonly bottom: number
222
+ }
223
+ }
224
+ >,
225
+ ]
226
+ 'open-column-menu': [
227
+ event: CustomEvent<
228
+ {
229
+ readonly rowIndex: number
230
+ readonly columnIndex: number
231
+ readonly anchor: {
232
+ readonly left: number
233
+ readonly top: number
234
+ readonly right: number
235
+ readonly bottom: number
236
+ }
237
+ }
238
+ >,
62
239
  ]
63
240
  }>()
64
241
 
@@ -108,136 +285,230 @@ const active = ref<
108
285
  } | null
109
286
  >(null)
110
287
  const activeKey = ref('')
111
-
112
- const isActionDetail = (detail: unknown): boolean =>
113
- (detail !== null && typeof detail === 'object' && !Array.isArray(detail)
114
- && ((detail as Record<string, unknown>)['action'] === 'add-row-before'
115
- || (detail as Record<string, unknown>)['action'] === 'add-row-after'
116
- || (detail as Record<string, unknown>)['action'] === 'add-column-before'
117
- || (detail as Record<string, unknown>)['action'] === 'add-column-after')
118
- && Number.isInteger((detail as Record<string, unknown>)['boundaryIndex'])
119
- && Object.keys(detail as object).every((key) => ['action', 'boundaryIndex'].includes(key)))
120
- || (detail !== null && typeof detail === 'object' && !Array.isArray(detail)
121
- && ((detail as Record<string, unknown>)['action'] === 'select-row'
122
- || (detail as Record<string, unknown>)['action'] === 'select-column')
123
- && Number.isInteger((detail as Record<string, unknown>)['rowIndex'])
124
- && Number.isInteger((detail as Record<string, unknown>)['columnIndex'])
125
- && Object.keys(detail as object).every((key) =>
126
- ['action', 'rowIndex', 'columnIndex'].includes(key)
127
- ))
128
- || (detail !== null && typeof detail === 'object' && !Array.isArray(detail)
129
- && ((detail as Record<string, unknown>)['action'] === 'reorder-row'
130
- || (detail as Record<string, unknown>)['action'] === 'reorder-column')
131
- && Number.isInteger((detail as Record<string, unknown>)['fromIndex'])
132
- && Number.isInteger((detail as Record<string, unknown>)['toIndex'])
133
- && Object.keys(detail as object).every((key) =>
134
- ['action', 'fromIndex', 'toIndex'].includes(key)
135
- ))
136
- || (detail !== null && typeof detail === 'object' && !Array.isArray(detail)
137
- && ((detail as Record<string, unknown>)['action'] === 'open-cell-menu'
138
- || (detail as Record<string, unknown>)['action'] === 'open-row-menu'
139
- || (detail as Record<string, unknown>)['action'] === 'open-column-menu')
140
- && Number.isInteger((detail as Record<string, unknown>)['rowIndex'])
141
- && Number.isInteger((detail as Record<string, unknown>)['columnIndex'])
142
- && ((detail as Record<string, unknown>)['anchor'] !== null
143
- && typeof (detail as Record<string, unknown>)['anchor'] === 'object'
144
- && !Array.isArray((detail as Record<string, unknown>)['anchor'])
145
- && (typeof ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['left']
146
- === 'number'
147
- && Number.isFinite(
148
- ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['left'],
149
- ))
150
- && (typeof ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['top']
151
- === 'number'
152
- && Number.isFinite(
153
- ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['top'],
154
- ))
155
- && (typeof ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['right']
156
- === 'number'
157
- && Number.isFinite(
158
- ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['right'],
159
- ))
160
- && (typeof ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)[
161
- 'bottom'
162
- ] === 'number'
163
- && Number.isFinite(
164
- ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['bottom'],
165
- ))
166
- && Object.keys((detail as Record<string, unknown>)['anchor'] as object).every((key) =>
167
- ['left', 'top', 'right', 'bottom'].includes(key)
288
+ let guardedPrevious: any
289
+ const guarded = computed(() => {
290
+ if (!(hovered.value?.['rowIndex'] == null || Number.isInteger(hovered.value?.['rowIndex']))) {
291
+ return guardedPrevious
292
+ }
293
+ return guardedPrevious = hovered.value?.rowIndex
294
+ })
295
+ let guardedBindingPrevious: any
296
+ const guardedBinding = computed(() => {
297
+ if (
298
+ !(hovered.value?.['columnIndex'] == null || Number.isInteger(hovered.value?.['columnIndex']))
299
+ ) return guardedBindingPrevious
300
+ return guardedBindingPrevious = hovered.value?.columnIndex
301
+ })
302
+ let guardedBinding2Previous: any
303
+ const guardedBinding2 = computed(() => {
304
+ if (!(hovered.value?.['rowIndex'] == null || Number.isInteger(hovered.value?.['rowIndex']))) {
305
+ return guardedBinding2Previous
306
+ }
307
+ return guardedBinding2Previous = hovered.value?.rowIndex
308
+ })
309
+ let guardedBinding3Previous: any
310
+ const guardedBinding3 = computed(() => {
311
+ if (
312
+ !(hovered.value?.['columnIndex'] == null || Number.isInteger(hovered.value?.['columnIndex']))
313
+ ) return guardedBinding3Previous
314
+ return guardedBinding3Previous = hovered.value?.columnIndex
315
+ })
316
+ let guardedBinding4Previous: any
317
+ const guardedBinding4 = computed(() => {
318
+ if (!(active.value?.['rowIndex'] == null || Number.isInteger(active.value?.['rowIndex']))) {
319
+ return guardedBinding4Previous
320
+ }
321
+ return guardedBinding4Previous = active.value?.rowIndex
322
+ })
323
+ let guardedBinding5Previous: any
324
+ const guardedBinding5 = computed(() => {
325
+ if (!(active.value?.['columnIndex'] == null || Number.isInteger(active.value?.['columnIndex']))) {
326
+ return guardedBinding5Previous
327
+ }
328
+ return guardedBinding5Previous = active.value?.columnIndex
329
+ })
330
+ const hydrationNode = hydrationInstance?.vnode.el
331
+ if (
332
+ typeof window !== 'undefined' && hydrationNode != null
333
+ && (!(hydrationNode instanceof Element) || hydrationNode.localName !== ('div'))
334
+ ) {
335
+ throw Object.assign(
336
+ new Error('HR005: Server markup for <ui-editor-table-overlay> has an incompatible root.'),
337
+ {
338
+ name: 'HtmlDiagnosticError',
339
+ diagnostic: Object.freeze({
340
+ code: 'HR005',
341
+ message: 'Server markup for <ui-editor-table-overlay> has an incompatible root.',
342
+ }),
343
+ },
344
+ )
345
+ }
346
+
347
+ const isAddRowBeforeDetail = (detail: unknown): boolean =>
348
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
349
+ && Number.isInteger((detail as Record<string, unknown>)['boundaryIndex'])
350
+ && Object.keys(detail as object).every((key) => ['boundaryIndex'].includes(key))
351
+ const isSelectRowDetail = (detail: unknown): boolean =>
352
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
353
+ && Number.isInteger((detail as Record<string, unknown>)['rowIndex'])
354
+ && Number.isInteger((detail as Record<string, unknown>)['columnIndex'])
355
+ && Object.keys(detail as object).every((key) => ['rowIndex', 'columnIndex'].includes(key))
356
+ const isReorderRowDetail = (detail: unknown): boolean =>
357
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
358
+ && Number.isInteger((detail as Record<string, unknown>)['fromIndex'])
359
+ && Number.isInteger((detail as Record<string, unknown>)['toIndex'])
360
+ && Object.keys(detail as object).every((key) => ['fromIndex', 'toIndex'].includes(key))
361
+ const isOpenCellMenuDetail = (detail: unknown): boolean =>
362
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
363
+ && Number.isInteger((detail as Record<string, unknown>)['rowIndex'])
364
+ && Number.isInteger((detail as Record<string, unknown>)['columnIndex'])
365
+ && ((detail as Record<string, unknown>)['anchor'] !== null
366
+ && typeof (detail as Record<string, unknown>)['anchor'] === 'object'
367
+ && !Array.isArray((detail as Record<string, unknown>)['anchor'])
368
+ && (typeof ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['left']
369
+ === 'number'
370
+ && Number.isFinite(
371
+ ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['left'],
372
+ ))
373
+ && (typeof ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['top']
374
+ === 'number'
375
+ && Number.isFinite(
376
+ ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['top'],
168
377
  ))
169
- && Object.keys(detail as object).every((key) =>
170
- ['action', 'rowIndex', 'columnIndex', 'anchor'].includes(key)
378
+ && (typeof ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['right']
379
+ === 'number'
380
+ && Number.isFinite(
381
+ ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['right'],
382
+ ))
383
+ && (typeof ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['bottom']
384
+ === 'number'
385
+ && Number.isFinite(
386
+ ((detail as Record<string, unknown>)['anchor'] as Record<string, unknown>)['bottom'],
387
+ ))
388
+ && Object.keys((detail as Record<string, unknown>)['anchor'] as object).every((key) =>
389
+ ['left', 'top', 'right', 'bottom'].includes(key)
171
390
  ))
391
+ && Object.keys(detail as object).every((key) =>
392
+ ['rowIndex', 'columnIndex', 'anchor'].includes(key)
393
+ )
172
394
  const dispatch = createDispatch(root, emit as (name: string, detail: unknown) => void, {
173
395
  checks: {
174
- action: isActionDetail,
396
+ 'add-row-before': isAddRowBeforeDetail,
397
+ 'add-row-after': isAddRowBeforeDetail,
398
+ 'add-column-before': isAddRowBeforeDetail,
399
+ 'add-column-after': isAddRowBeforeDetail,
400
+ 'select-row': isSelectRowDetail,
401
+ 'select-column': isSelectRowDetail,
402
+ 'reorder-row': isReorderRowDetail,
403
+ 'reorder-column': isReorderRowDetail,
404
+ 'open-cell-menu': isOpenCellMenuDetail,
405
+ 'open-row-menu': isOpenCellMenuDetail,
406
+ 'open-column-menu': isOpenCellMenuDetail,
175
407
  },
176
408
  })
177
409
 
178
- useComponentHost(controllerModule.default, {
410
+ useComponentHost(() => import('../components/ui-editor-table-overlay/ui-editor-table-overlay.js'), {
179
411
  root,
180
412
  dispatch,
181
- props,
413
+ controllerSource: {
414
+ specifier: '../components/ui-editor-table-overlay/ui-editor-table-overlay.js',
415
+ definition: './components/ui-editor-table-overlay/ui-editor-table-overlay.html',
416
+ },
417
+ props: checkedProps,
182
418
  state: { rows, cols, hovered, active, activeKey },
183
419
  })
420
+
421
+ function text(value: unknown): string {
422
+ if (Array.isArray(value)) return value.map(text).join(' ')
423
+ return value === null || value === undefined || typeof value === 'object' ? '' : String(value)
424
+ }
425
+
426
+ function uniqueKeys<T>(
427
+ items: readonly T[],
428
+ keyOf: (
429
+ item: T,
430
+ index: number,
431
+ loop: { index: number; first: boolean; last: boolean; count: number },
432
+ ) => unknown,
433
+ ): readonly T[] {
434
+ const seen = new Set<unknown>()
435
+ for (let index = 0; index < items.length; index += 1) {
436
+ const key = keyOf(items[index]!, index, {
437
+ index,
438
+ first: index === 0,
439
+ last: index === items.length - 1,
440
+ count: items.length,
441
+ })
442
+ if (seen.has(key)) {
443
+ const message = `A keyed list produced duplicate key \`${text(key)}\`.`
444
+ throw Object.assign(new Error(`HR004: ${message}`), {
445
+ name: 'HtmlDiagnosticError',
446
+ diagnostic: Object.freeze({ code: 'HR004', message }),
447
+ })
448
+ }
449
+ seen.add(key)
450
+ }
451
+ return items
452
+ }
184
453
  </script>
185
454
 
186
455
  <template>
187
456
  <div
188
457
  data-component="ui-editor-table-overlay"
189
458
  aria-label="Table controls"
190
- v-bind="$attrs"
191
- :hidden="!open"
459
+ v-bind="nativeAttrs($attrs)"
460
+ :hidden="!checkedProps.open"
461
+ :data-geometry="reflectedProp('geometry', 'geometry', checkedProps.geometry, undefined, false)"
462
+ :data-open="reflectedProp('open', 'open', checkedProps.open, undefined, false)"
192
463
  ref="root"
193
464
  >
194
465
  <div class="rows">
195
- <div
196
- v-for="control in rows"
197
- :key="control.key"
198
- class="control row"
199
- :data-control-key="control.key"
200
- :class="{ active: control.key === activeKey }"
201
- :style="{ top: control.offset }"
202
- >
203
- <span class="line" aria-hidden="true"></span>
204
- <span class="guide" data-ui-guide="" aria-hidden="true"></span>
205
- <button
206
- type="button"
207
- class="handle"
208
- :data-ui-affordance="control.affordance"
209
- :data-action="control.action"
210
- :data-boundary-index="control.index"
211
- :aria-label="control.label"
466
+ <KeyedBoundary><div
467
+ v-for="control in uniqueKeys(rows, (control, index, loop) => control.key)"
468
+ :key="control.key"
469
+ class="control row"
470
+ :data-control-key="control.key"
471
+ :class="{ active: control.key === activeKey }"
472
+ :style="{ top: control.offset }"
212
473
  >
213
- <UiIcon name="plus" />
214
- <span class="tooltip" role="tooltip">{{ control.label }}</span>
215
- </button>
216
- </div>
474
+ <span class="line" aria-hidden="true"></span>
475
+ <span class="guide" data-ui-guide="" aria-hidden="true"></span>
476
+ <button
477
+ type="button"
478
+ class="handle"
479
+ :data-ui-affordance="control.affordance"
480
+ :data-action="control.action"
481
+ :data-boundary-index="control.index"
482
+ :aria-label="control.label"
483
+ >
484
+ <UiIcon name="plus" />
485
+ <span class="tooltip" role="tooltip">{{ control.label }}</span>
486
+ </button>
487
+ </div></KeyedBoundary>
217
488
  </div>
218
489
  <div class="cols">
219
- <div
220
- v-for="control in cols"
221
- :key="control.key"
222
- class="control col"
223
- :data-control-key="control.key"
224
- :class="{ active: control.key === activeKey }"
225
- :style="{ left: control.offset }"
226
- >
227
- <span class="line" aria-hidden="true"></span>
228
- <span class="guide" data-ui-guide="" aria-hidden="true"></span>
229
- <button
230
- type="button"
231
- class="handle"
232
- :data-ui-affordance="control.affordance"
233
- :data-action="control.action"
234
- :data-boundary-index="control.index"
235
- :aria-label="control.label"
490
+ <KeyedBoundary><div
491
+ v-for="control in uniqueKeys(cols, (control, indexLoop, loop) => control.key)"
492
+ :key="control.key"
493
+ class="control col"
494
+ :data-control-key="control.key"
495
+ :class="{ active: control.key === activeKey }"
496
+ :style="{ left: control.offset }"
236
497
  >
237
- <UiIcon name="plus" />
238
- <span class="tooltip" role="tooltip">{{ control.label }}</span>
239
- </button>
240
- </div>
498
+ <span class="line" aria-hidden="true"></span>
499
+ <span class="guide" data-ui-guide="" aria-hidden="true"></span>
500
+ <button
501
+ type="button"
502
+ class="handle"
503
+ :data-ui-affordance="control.affordance"
504
+ :data-action="control.action"
505
+ :data-boundary-index="control.index"
506
+ :aria-label="control.label"
507
+ >
508
+ <UiIcon name="plus" />
509
+ <span class="tooltip" role="tooltip">{{ control.label }}</span>
510
+ </button>
511
+ </div></KeyedBoundary>
241
512
  </div>
242
513
  <template v-if="hovered"><button
243
514
  type="button"
@@ -245,9 +516,9 @@ useComponentHost(controllerModule.default, {
245
516
  data-action="select-row"
246
517
  title="Drag row to reorder; click for actions"
247
518
  aria-label="Row actions"
248
- :data-row-index="hovered?.rowIndex"
249
- :data-column-index="hovered?.columnIndex"
250
- :style="{ top: hovered?.rowOffset }"
519
+ :data-row-index="guarded"
520
+ :data-column-index="guardedBinding"
521
+ :style="{ top: hovered?.rowOffset ?? undefined }"
251
522
  >
252
523
  <span class="glyph"><UiIcon name="grip-vertical" /></span>
253
524
  </button>
@@ -257,9 +528,9 @@ useComponentHost(controllerModule.default, {
257
528
  data-action="select-column"
258
529
  title="Drag column to reorder; click for actions"
259
530
  aria-label="Column actions"
260
- :data-row-index="hovered?.rowIndex"
261
- :data-column-index="hovered?.columnIndex"
262
- :style="{ left: hovered?.columnOffset }"
531
+ :data-row-index="guardedBinding2"
532
+ :data-column-index="guardedBinding3"
533
+ :style="{ left: hovered?.columnOffset ?? undefined }"
263
534
  >
264
535
  <span class="glyph"><UiIcon name="grip-horizontal" /></span>
265
536
  </button></template>
@@ -270,9 +541,9 @@ useComponentHost(controllerModule.default, {
270
541
  data-action="open-cell-menu"
271
542
  title="Cell actions"
272
543
  aria-label="Cell actions"
273
- :data-row-index="active?.rowIndex"
274
- :data-column-index="active?.columnIndex"
275
- :style="{ left: active?.menuLeft, top: active?.menuTop }"
544
+ :data-row-index="guardedBinding4"
545
+ :data-column-index="guardedBinding5"
546
+ :style="{ left: active?.menuLeft ?? undefined, top: active?.menuTop ?? undefined }"
276
547
  >
277
548
  <UiIcon name="chevron-down" />
278
549
  </button>