@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,25 +1,69 @@
1
- type __VLS_Props = {
2
- actions?: readonly ('align-left' | 'align-center' | 'align-right' | 'background-none' | 'background-gray' | 'background-yellow' | 'background-blue' | 'background-green' | 'background-red' | 'add-row-before' | 'add-row-after' | 'add-column-before' | 'add-column-after' | 'toggle-header-row' | 'toggle-header-column' | 'move-row-up' | 'move-row-down' | 'move-column-left' | 'move-column-right' | 'clear-cells' | 'merge-cells' | 'split-cell' | 'delete-row' | 'delete-column' | 'delete-table')[];
3
- cellBackground?: string;
4
- headerColumn?: boolean;
5
- headerRow?: boolean;
6
- open?: boolean;
7
- scope?: 'cell' | 'row' | 'column';
8
- };
9
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
- action: (detail: {
1
+ import type { PropType } from 'vue';
2
+ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
+ actions: {
4
+ type: PropType<readonly ("align-left" | "align-center" | "align-right" | "background-none" | "background-gray" | "background-yellow" | "background-blue" | "background-green" | "background-red" | "add-row-before" | "add-row-after" | "add-column-before" | "add-column-after" | "toggle-header-row" | "toggle-header-column" | "move-row-up" | "move-row-down" | "move-column-left" | "move-column-right" | "clear-cells" | "merge-cells" | "split-cell" | "delete-row" | "delete-column" | "delete-table")[] | null>;
5
+ default: null;
6
+ };
7
+ cellBackground: {
8
+ type: PropType<string | null>;
9
+ default: string;
10
+ };
11
+ headerColumn: {
12
+ type: PropType<boolean | null>;
13
+ default: boolean;
14
+ };
15
+ headerRow: {
16
+ type: PropType<boolean | null>;
17
+ default: boolean;
18
+ };
19
+ open: {
20
+ type: PropType<boolean | null>;
21
+ default: boolean;
22
+ };
23
+ scope: {
24
+ type: PropType<"cell" | "row" | "column" | null>;
25
+ default: string;
26
+ };
27
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
28
+ action: (event: CustomEvent<{
11
29
  readonly action: "align-left" | "align-center" | "align-right" | "background-none" | "background-gray" | "background-yellow" | "background-blue" | "background-green" | "background-red" | "add-row-before" | "add-row-after" | "add-column-before" | "add-column-after" | "toggle-header-row" | "toggle-header-column" | "move-row-up" | "move-row-down" | "move-column-left" | "move-column-right" | "clear-cells" | "merge-cells" | "split-cell" | "delete-row" | "delete-column" | "delete-table";
12
- }) => any;
13
- }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
14
- onAction?: ((detail: {
30
+ }>) => any;
31
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
32
+ actions: {
33
+ type: PropType<readonly ("align-left" | "align-center" | "align-right" | "background-none" | "background-gray" | "background-yellow" | "background-blue" | "background-green" | "background-red" | "add-row-before" | "add-row-after" | "add-column-before" | "add-column-after" | "toggle-header-row" | "toggle-header-column" | "move-row-up" | "move-row-down" | "move-column-left" | "move-column-right" | "clear-cells" | "merge-cells" | "split-cell" | "delete-row" | "delete-column" | "delete-table")[] | null>;
34
+ default: null;
35
+ };
36
+ cellBackground: {
37
+ type: PropType<string | null>;
38
+ default: string;
39
+ };
40
+ headerColumn: {
41
+ type: PropType<boolean | null>;
42
+ default: boolean;
43
+ };
44
+ headerRow: {
45
+ type: PropType<boolean | null>;
46
+ default: boolean;
47
+ };
48
+ open: {
49
+ type: PropType<boolean | null>;
50
+ default: boolean;
51
+ };
52
+ scope: {
53
+ type: PropType<"cell" | "row" | "column" | null>;
54
+ default: string;
55
+ };
56
+ }>> & Readonly<{
57
+ onAction?: ((event: CustomEvent<{
15
58
  readonly action: "align-left" | "align-center" | "align-right" | "background-none" | "background-gray" | "background-yellow" | "background-blue" | "background-green" | "background-red" | "add-row-before" | "add-row-after" | "add-column-before" | "add-column-after" | "toggle-header-row" | "toggle-header-column" | "move-row-up" | "move-row-down" | "move-column-left" | "move-column-right" | "clear-cells" | "merge-cells" | "split-cell" | "delete-row" | "delete-column" | "delete-table";
16
- }) => any) | undefined;
59
+ }>) => any) | undefined;
17
60
  }>, {
18
- open: boolean;
19
- headerRow: boolean;
20
- cellBackground: string;
21
- headerColumn: boolean;
22
- scope: "cell" | "row" | "column";
23
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
61
+ open: boolean | null;
62
+ actions: readonly ("align-center" | "align-left" | "align-right" | "background-none" | "background-gray" | "background-yellow" | "background-blue" | "background-green" | "background-red" | "add-row-before" | "add-row-after" | "add-column-before" | "add-column-after" | "toggle-header-row" | "toggle-header-column" | "move-row-up" | "move-row-down" | "move-column-left" | "move-column-right" | "clear-cells" | "merge-cells" | "split-cell" | "delete-row" | "delete-column" | "delete-table")[] | null;
63
+ headerRow: boolean | null;
64
+ cellBackground: string | null;
65
+ headerColumn: boolean | null;
66
+ scope: "row" | "cell" | "column" | null;
67
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
24
68
  declare const _default: typeof __VLS_export;
25
69
  export default _default;
@@ -1,15 +1,16 @@
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-context-menu/ui-editor-table-context-menu.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
- actions?:
11
+ const props = defineProps({
12
+ actions: {
13
+ type: null as unknown as PropType<
13
14
  readonly (
14
15
  | 'align-left'
15
16
  | 'align-center'
@@ -36,51 +37,222 @@ const props = withDefaults(
36
37
  | 'delete-row'
37
38
  | 'delete-column'
38
39
  | 'delete-table'
39
- )[]
40
- cellBackground?: string
41
- headerColumn?: boolean
42
- headerRow?: boolean
43
- open?: boolean
44
- scope?: 'cell' | 'row' | 'column'
45
- }>(),
46
- {
47
- cellBackground: '',
48
- headerColumn: false,
49
- headerRow: false,
50
- open: false,
51
- scope: 'cell',
40
+ )[] | null
41
+ >,
42
+ default: null,
52
43
  },
53
- )
44
+ cellBackground: { type: null as unknown as PropType<string | null>, default: '' },
45
+ headerColumn: { type: null as unknown as PropType<boolean | null>, default: false },
46
+ headerRow: { type: null as unknown as PropType<boolean | null>, default: false },
47
+ open: { type: null as unknown as PropType<boolean | null>, default: false },
48
+ scope: { type: null as unknown as PropType<'cell' | 'row' | 'column' | null>, default: 'cell' },
49
+ })
50
+ const checkedProps = computed(() => ({
51
+ actions: checkedProp<
52
+ readonly (
53
+ | 'align-left'
54
+ | 'align-center'
55
+ | 'align-right'
56
+ | 'background-none'
57
+ | 'background-gray'
58
+ | 'background-yellow'
59
+ | 'background-blue'
60
+ | 'background-green'
61
+ | 'background-red'
62
+ | 'add-row-before'
63
+ | 'add-row-after'
64
+ | 'add-column-before'
65
+ | 'add-column-after'
66
+ | 'toggle-header-row'
67
+ | 'toggle-header-column'
68
+ | 'move-row-up'
69
+ | 'move-row-down'
70
+ | 'move-column-left'
71
+ | 'move-column-right'
72
+ | 'clear-cells'
73
+ | 'merge-cells'
74
+ | 'split-cell'
75
+ | 'delete-row'
76
+ | 'delete-column'
77
+ | 'delete-table'
78
+ )[]
79
+ >(
80
+ props['actions'],
81
+ {
82
+ kind: 'list',
83
+ item: {
84
+ kind: 'constrained',
85
+ base: { kind: 'terminal', name: 'keyword' },
86
+ values: [
87
+ 'align-left',
88
+ 'align-center',
89
+ 'align-right',
90
+ 'background-none',
91
+ 'background-gray',
92
+ 'background-yellow',
93
+ 'background-blue',
94
+ 'background-green',
95
+ 'background-red',
96
+ 'add-row-before',
97
+ 'add-row-after',
98
+ 'add-column-before',
99
+ 'add-column-after',
100
+ 'toggle-header-row',
101
+ 'toggle-header-column',
102
+ 'move-row-up',
103
+ 'move-row-down',
104
+ 'move-column-left',
105
+ 'move-column-right',
106
+ 'clear-cells',
107
+ 'merge-cells',
108
+ 'split-cell',
109
+ 'delete-row',
110
+ 'delete-column',
111
+ 'delete-table',
112
+ ],
113
+ },
114
+ },
115
+ false,
116
+ 'actions',
117
+ undefined,
118
+ undefined,
119
+ ),
120
+ cellBackground: checkedProp<string>(
121
+ props['cellBackground'],
122
+ { kind: 'terminal', name: 'string' },
123
+ false,
124
+ 'cellBackground',
125
+ undefined,
126
+ undefined,
127
+ ) as string,
128
+ headerColumn: checkedProp<boolean>(
129
+ props['headerColumn'],
130
+ { kind: 'terminal', name: 'boolean' },
131
+ false,
132
+ 'headerColumn',
133
+ undefined,
134
+ undefined,
135
+ ) as boolean,
136
+ headerRow: checkedProp<boolean>(
137
+ props['headerRow'],
138
+ { kind: 'terminal', name: 'boolean' },
139
+ false,
140
+ 'headerRow',
141
+ undefined,
142
+ undefined,
143
+ ) as boolean,
144
+ open: checkedProp<boolean>(
145
+ props['open'],
146
+ { kind: 'terminal', name: 'boolean' },
147
+ false,
148
+ 'open',
149
+ undefined,
150
+ undefined,
151
+ ) as boolean,
152
+ scope: checkedProp<'cell' | 'row' | 'column'>(
153
+ props['scope'],
154
+ { kind: 'terminal', name: 'keyword' },
155
+ false,
156
+ 'scope',
157
+ undefined,
158
+ ['cell', 'row', 'column'],
159
+ ) as 'cell' | 'row' | 'column',
160
+ }))
161
+ void checkedProps.value
162
+ watchSyncEffect(() => {
163
+ void checkedProps.value
164
+ })
165
+ function nativeAttrs(attrs: Record<string, unknown>): Record<string, unknown> {
166
+ const names = Object.keys(attrs)
167
+ if (!names.some((name) => Object.hasOwn(Object.prototype, name))) return attrs
168
+ return Object.fromEntries(names.map((name) => [
169
+ Object.hasOwn(Object.prototype, name)
170
+ ? name === '__proto__' ? '__Proto__' : name[0]!.toUpperCase() + name.slice(1)
171
+ : name,
172
+ attrs[name],
173
+ ]))
174
+ }
175
+ const KeyedFailure = defineComponent({
176
+ props: { error: { type: null, required: true } },
177
+ setup(props) {
178
+ return () => {
179
+ throw props.error
180
+ }
181
+ },
182
+ })
183
+ const KeyedBoundary = defineComponent({
184
+ setup(_props, { slots }) {
185
+ let last: VNode[] = []
186
+ return () => {
187
+ try {
188
+ last = slots.default?.() ?? []
189
+ return last
190
+ } catch (error) {
191
+ if (
192
+ !(error instanceof Error)
193
+ || (error as Error & { diagnostic?: { code?: string } }).diagnostic?.code !== 'HR004'
194
+ ) throw error
195
+ if (typeof window === 'undefined') throw error
196
+ return [...last, h(KeyedFailure, { error })]
197
+ }
198
+ }
199
+ },
200
+ })
201
+ const componentInstance = getCurrentInstance()
202
+ function reflectedProp(
203
+ name: string,
204
+ kebab: string,
205
+ value: unknown,
206
+ fallback: string | undefined,
207
+ bound: boolean,
208
+ separator?: string,
209
+ ): string | undefined {
210
+ const incoming = componentInstance?.vnode.props
211
+ if (
212
+ !bound
213
+ && (incoming === null || incoming === undefined
214
+ || (!Object.hasOwn(incoming, name) && !Object.hasOwn(incoming, kebab)))
215
+ ) return fallback
216
+ if (value === null || value === undefined) return undefined
217
+ return Array.isArray(value) && separator !== undefined
218
+ ? value.join(separator)
219
+ : typeof value === 'object'
220
+ ? JSON.stringify(value)
221
+ : String(value)
222
+ }
223
+ const hydrationInstance = getCurrentInstance()
54
224
  const emit = defineEmits<{
55
225
  action: [
56
- detail: {
57
- readonly action:
58
- | 'align-left'
59
- | 'align-center'
60
- | 'align-right'
61
- | 'background-none'
62
- | 'background-gray'
63
- | 'background-yellow'
64
- | 'background-blue'
65
- | 'background-green'
66
- | 'background-red'
67
- | 'add-row-before'
68
- | 'add-row-after'
69
- | 'add-column-before'
70
- | 'add-column-after'
71
- | 'toggle-header-row'
72
- | 'toggle-header-column'
73
- | 'move-row-up'
74
- | 'move-row-down'
75
- | 'move-column-left'
76
- | 'move-column-right'
77
- | 'clear-cells'
78
- | 'merge-cells'
79
- | 'split-cell'
80
- | 'delete-row'
81
- | 'delete-column'
82
- | 'delete-table'
83
- },
226
+ event: CustomEvent<
227
+ {
228
+ readonly action:
229
+ | 'align-left'
230
+ | 'align-center'
231
+ | 'align-right'
232
+ | 'background-none'
233
+ | 'background-gray'
234
+ | 'background-yellow'
235
+ | 'background-blue'
236
+ | 'background-green'
237
+ | 'background-red'
238
+ | 'add-row-before'
239
+ | 'add-row-after'
240
+ | 'add-column-before'
241
+ | 'add-column-after'
242
+ | 'toggle-header-row'
243
+ | 'toggle-header-column'
244
+ | 'move-row-up'
245
+ | 'move-row-down'
246
+ | 'move-column-left'
247
+ | 'move-column-right'
248
+ | 'clear-cells'
249
+ | 'merge-cells'
250
+ | 'split-cell'
251
+ | 'delete-row'
252
+ | 'delete-column'
253
+ | 'delete-table'
254
+ }
255
+ >,
84
256
  ]
85
257
  }>()
86
258
 
@@ -101,6 +273,22 @@ const sections = ref<
101
273
  }[]
102
274
  }[]
103
275
  >([])
276
+ const hydrationNode = hydrationInstance?.vnode.el
277
+ if (
278
+ typeof window !== 'undefined' && hydrationNode != null
279
+ && (!(hydrationNode instanceof Element) || hydrationNode.localName !== ('div'))
280
+ ) {
281
+ throw Object.assign(
282
+ new Error('HR005: Server markup for <ui-editor-table-context-menu> has an incompatible root.'),
283
+ {
284
+ name: 'HtmlDiagnosticError',
285
+ diagnostic: Object.freeze({
286
+ code: 'HR005',
287
+ message: 'Server markup for <ui-editor-table-context-menu> has an incompatible root.',
288
+ }),
289
+ },
290
+ )
291
+ }
104
292
 
105
293
  const isActionDetail = (detail: unknown): boolean =>
106
294
  detail !== null && typeof detail === 'object' && !Array.isArray(detail)
@@ -136,12 +324,19 @@ const dispatch = createDispatch(root, emit as (name: string, detail: unknown) =>
136
324
  },
137
325
  })
138
326
 
139
- useComponentHost(controllerModule.default, {
140
- root,
141
- dispatch,
142
- props,
143
- state: { swatches, sections },
144
- })
327
+ useComponentHost(
328
+ () => import('../components/ui-editor-table-context-menu/ui-editor-table-context-menu.js'),
329
+ {
330
+ root,
331
+ dispatch,
332
+ controllerSource: {
333
+ specifier: '../components/ui-editor-table-context-menu/ui-editor-table-context-menu.js',
334
+ definition: './components/ui-editor-table-context-menu/ui-editor-table-context-menu.html',
335
+ },
336
+ props: checkedProps,
337
+ state: { swatches, sections },
338
+ },
339
+ )
145
340
 
146
341
  function text(value: unknown): string {
147
342
  if (Array.isArray(value)) return value.map(text).join(' ')
@@ -155,56 +350,96 @@ function attribute(value: unknown): any {
155
350
  ) return undefined
156
351
  return value === true ? '' : text(value)
157
352
  }
353
+
354
+ function uniqueKeys<T>(
355
+ items: readonly T[],
356
+ keyOf: (
357
+ item: T,
358
+ index: number,
359
+ loop: { index: number; first: boolean; last: boolean; count: number },
360
+ ) => unknown,
361
+ ): readonly T[] {
362
+ const seen = new Set<unknown>()
363
+ for (let index = 0; index < items.length; index += 1) {
364
+ const key = keyOf(items[index]!, index, {
365
+ index,
366
+ first: index === 0,
367
+ last: index === items.length - 1,
368
+ count: items.length,
369
+ })
370
+ if (seen.has(key)) {
371
+ const message = `A keyed list produced duplicate key \`${text(key)}\`.`
372
+ throw Object.assign(new Error(`HR004: ${message}`), {
373
+ name: 'HtmlDiagnosticError',
374
+ diagnostic: Object.freeze({ code: 'HR004', message }),
375
+ })
376
+ }
377
+ seen.add(key)
378
+ }
379
+ return items
380
+ }
158
381
  </script>
159
382
 
160
383
  <template>
161
384
  <div
162
385
  data-component="ui-editor-table-context-menu"
163
386
  role="menu"
164
- v-bind="$attrs"
165
- :hidden="!open"
387
+ v-bind="nativeAttrs($attrs)"
388
+ :hidden="!checkedProps.open"
389
+ :data-actions="reflectedProp('actions', 'actions', checkedProps.actions, undefined, false)"
390
+ :data-cell-background="reflectedProp('cellBackground', 'cell-background', checkedProps.cellBackground, undefined, false)"
391
+ :data-header-column="reflectedProp('headerColumn', 'header-column', checkedProps.headerColumn, undefined, false)"
392
+ :data-header-row="reflectedProp('headerRow', 'header-row', checkedProps.headerRow, undefined, false)"
393
+ :data-open="reflectedProp('open', 'open', checkedProps.open, undefined, false)"
394
+ :data-scope="reflectedProp('scope', 'scope', checkedProps.scope, undefined, false)"
166
395
  ref="root"
167
396
  >
168
397
  <div v-if="swatches?.length" class="section" role="none">
169
398
  <div class="heading" role="presentation">Cell background</div>
170
399
  <div class="swatches" role="group" aria-label="Cell background">
171
- <button
172
- v-for="swatch in swatches"
173
- :key="swatch.action"
174
- type="button"
175
- class="swatch-button"
176
- role="menuitemradio"
177
- :aria-checked="swatch.selected"
178
- :data-action="swatch.action"
179
- :class="{ selected: swatch.selected }"
180
- >
181
- <span
182
- class="swatch"
183
- :class="{ default: !swatch.color }"
184
- :style="{ '--_swatch': swatch.color }"
185
- ></span>
186
- <span class="swatch-label">{{ swatch.label }}</span>
187
- </button>
400
+ <KeyedBoundary><button
401
+ v-for="swatch in uniqueKeys(swatches, (swatch, index, loop) => swatch.action)"
402
+ :key="swatch.action"
403
+ type="button"
404
+ class="swatch-button"
405
+ role="menuitemradio"
406
+ :aria-checked="swatch.selected"
407
+ :data-action="swatch.action"
408
+ :class="{ selected: swatch.selected }"
409
+ >
410
+ <span
411
+ class="swatch"
412
+ :class="{ default: !swatch.color }"
413
+ :style="{ '--_swatch': swatch.color }"
414
+ ></span>
415
+ <span class="swatch-label">{{ swatch.label }}</span>
416
+ </button></KeyedBoundary>
188
417
  </div>
189
418
  </div>
190
- <template v-for="section in sections" :key="section.heading"><div class="sep"></div>
191
- <div class="section" role="none">
192
- <div class="heading" role="presentation">{{ section.heading }}</div>
193
- <button
194
- v-for="item in section.items"
195
- :key="item.action"
196
- type="button"
197
- :role="attribute(({ true: 'menuitemcheckbox', false: 'menuitem' })[`${item.checkable}`])"
198
- :aria-checked="typeof (({ true: item.checked, false: null })[`${item.checkable}`]) === 'boolean'
199
- ? String(({ true: item.checked, false: null })[`${item.checkable}`])
200
- : attribute(({ true: item.checked, false: null })[`${item.checkable}`])"
201
- :data-action="item.action"
202
- :class="{ danger: item.danger }"
203
- >
204
- <UiIcon :name="item.icon" />
205
- <span>{{ item.label }}</span>
206
- </button>
207
- </div></template>
419
+ <KeyedBoundary><template
420
+ v-for="section in uniqueKeys(sections, (section, indexLoop, loop) => section.heading)"
421
+ :key="section.heading"
422
+ ><div class="sep"></div>
423
+ <div class="section" role="none">
424
+ <div class="heading" role="presentation">{{ section.heading }}</div>
425
+ <KeyedBoundary><button
426
+ v-for="item in uniqueKeys(section.items, (item, indexLoop2, loop) => item.action)"
427
+ :key="item.action"
428
+ type="button"
429
+ :role="attribute(
430
+ (({ true: 'menuitemcheckbox', false: 'menuitem' }) as Record<string, any>)[`${item.checkable}`],
431
+ )"
432
+ :aria-checked="typeof ((({ true: item.checked, false: null }) as Record<string, any>)[`${item.checkable}`])
433
+ === 'boolean'
434
+ ? String((({ true: item.checked, false: null }) as Record<string, any>)[`${item.checkable}`])
435
+ : attribute((({ true: item.checked, false: null }) as Record<string, any>)[`${item.checkable}`])"
436
+ :data-action="item.action"
437
+ :class="{ danger: item.danger }"
438
+ >
439
+ <UiIcon :name="item.icon" />
440
+ <span>{{ item.label }}</span>
441
+ </button></KeyedBoundary>
442
+ </div></template></KeyedBoundary>
208
443
  </div>
209
444
  </template>
210
445