@threadlabs/looma 0.24.0 → 0.25.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 (499) hide show
  1. package/README.md +1 -1
  2. package/components/shared/overlay.js +10 -2
  3. package/components/ui-affordance-scope/ui-affordance-scope.html +1 -1
  4. package/components/ui-affordance-scope/ui-affordance-scope.js +6 -1
  5. package/components/ui-avatar/ui-avatar.html +4 -4
  6. package/components/ui-avatar/ui-avatar.js +6 -1
  7. package/components/ui-avatar-group/ui-avatar-group.html +2 -2
  8. package/components/ui-avatar-group/ui-avatar-group.js +6 -1
  9. package/components/ui-badge/ui-badge.html +30 -30
  10. package/components/ui-breadcrumb-item/ui-breadcrumb-item.html +1 -1
  11. package/components/ui-button/ui-button.html +33 -33
  12. package/components/ui-button/ui-button.js +6 -1
  13. package/components/ui-callout/ui-callout.html +4 -4
  14. package/components/ui-card/ui-card.html +9 -9
  15. package/components/ui-checkbox/ui-checkbox.html +11 -11
  16. package/components/ui-checkbox/ui-checkbox.js +6 -1
  17. package/components/ui-cluster/ui-cluster.html +12 -12
  18. package/components/ui-combobox/ui-combobox.html +15 -17
  19. package/components/ui-combobox/ui-combobox.js +13 -15
  20. package/components/ui-container/ui-container.html +5 -5
  21. package/components/ui-context-menu/ui-context-menu.js +6 -1
  22. package/components/ui-cover/ui-cover.html +1 -1
  23. package/components/ui-description-list/ui-description-list.html +10 -10
  24. package/components/ui-dialog/ui-dialog.html +4 -4
  25. package/components/ui-dialog/ui-dialog.js +6 -1
  26. package/components/ui-disclosure/ui-disclosure.html +13 -13
  27. package/components/ui-disclosure/ui-disclosure.js +6 -1
  28. package/components/ui-editable/ui-editable.html +1 -1
  29. package/components/ui-editable/ui-editable.js +6 -1
  30. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js +6 -1
  31. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +6 -1
  32. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +6 -1
  33. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js +6 -1
  34. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +6 -1
  35. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +6 -1
  36. package/components/ui-editor-toolbar/ui-editor-toolbar.html +4 -4
  37. package/components/ui-editor-toolbar/ui-editor-toolbar.js +6 -1
  38. package/components/ui-floating-action-button/ui-floating-action-button.html +1 -1
  39. package/components/ui-form-field/ui-form-field.html +1 -1
  40. package/components/ui-form-field/ui-form-field.js +6 -1
  41. package/components/ui-grid/ui-grid.html +7 -7
  42. package/components/ui-icon-button/ui-icon-button.html +26 -26
  43. package/components/ui-icon-button/ui-icon-button.js +6 -1
  44. package/components/ui-image/ui-image.html +11 -11
  45. package/components/ui-image/ui-image.js +6 -1
  46. package/components/ui-input/ui-input.html +9 -7
  47. package/components/ui-input/ui-input.js +6 -1
  48. package/components/ui-input-group/ui-input-group.html +3 -3
  49. package/components/ui-input-group/ui-input-group.js +6 -1
  50. package/components/ui-list/ui-list.html +6 -6
  51. package/components/ui-list-item/ui-list-item.html +8 -8
  52. package/components/ui-listbox/ui-listbox.js +6 -1
  53. package/components/ui-menu/ui-menu.html +3 -3
  54. package/components/ui-menu/ui-menu.js +6 -1
  55. package/components/ui-menu-item/ui-menu-item.html +3 -3
  56. package/components/ui-menu-item/ui-menu-item.js +6 -1
  57. package/components/ui-meter/ui-meter.html +7 -7
  58. package/components/ui-nav-item/ui-nav-item.html +6 -6
  59. package/components/ui-page-header/ui-page-header.html +2 -2
  60. package/components/ui-popover/ui-popover.html +3 -3
  61. package/components/ui-popover/ui-popover.js +6 -1
  62. package/components/ui-radio/ui-radio.html +10 -10
  63. package/components/ui-radio/ui-radio.js +6 -1
  64. package/components/ui-radio-group/ui-radio-group.html +2 -2
  65. package/components/ui-radio-group/ui-radio-group.js +6 -1
  66. package/components/ui-reel/ui-reel.html +11 -11
  67. package/components/ui-scroll-area/ui-scroll-area.html +4 -4
  68. package/components/ui-scroll-area/ui-scroll-area.js +6 -1
  69. package/components/ui-search-result-row/ui-search-result-row.html +5 -5
  70. package/components/ui-search-shell/ui-search-shell.js +6 -1
  71. package/components/ui-section/ui-section.html +4 -4
  72. package/components/ui-select/ui-select.html +3 -3
  73. package/components/ui-select/ui-select.js +6 -1
  74. package/components/ui-separator/ui-separator.html +4 -4
  75. package/components/ui-sidebar/ui-sidebar.html +6 -6
  76. package/components/ui-sidebar/ui-sidebar.js +6 -1
  77. package/components/ui-spinner/ui-spinner.html +1 -1
  78. package/components/ui-stack/ui-stack.html +12 -12
  79. package/components/ui-status-message/ui-status-message.html +4 -4
  80. package/components/ui-switch/ui-switch.html +11 -11
  81. package/components/ui-switch/ui-switch.js +6 -1
  82. package/components/ui-switcher/ui-switcher.html +11 -11
  83. package/components/ui-switcher/ui-switcher.js +6 -1
  84. package/components/ui-table/ui-table.html +2 -2
  85. package/components/ui-table/ui-table.js +6 -1
  86. package/components/ui-tabs/ui-tabs.html +8 -8
  87. package/components/ui-tabs/ui-tabs.js +6 -1
  88. package/components/ui-text/ui-text.html +20 -20
  89. package/components/ui-textarea/ui-textarea.html +4 -4
  90. package/components/ui-textarea/ui-textarea.js +6 -1
  91. package/components/ui-toast/ui-toast.html +4 -4
  92. package/components/ui-toast/ui-toast.js +6 -1
  93. package/components/ui-toast-region/ui-toast-region.html +16 -11
  94. package/components/ui-toast-region/ui-toast-region.js +12 -9
  95. package/components/ui-tooltip/ui-tooltip.html +1 -1
  96. package/components/ui-tooltip/ui-tooltip.js +6 -1
  97. package/components/ui-tree/ui-tree.html +2 -2
  98. package/components/ui-tree/ui-tree.js +6 -1
  99. package/components/ui-tree-item/ui-tree-item.html +4 -4
  100. package/components/ui-tree-item/ui-tree-item.js +6 -1
  101. package/dist/index.js +10 -4
  102. package/package.json +3 -3
  103. package/styles/ui-action-bar.css +1 -1
  104. package/styles/ui-affordance-scope.css +1 -1
  105. package/styles/ui-avatar-group.css +1 -1
  106. package/styles/ui-avatar.css +1 -1
  107. package/styles/ui-badge.css +1 -1
  108. package/styles/ui-breadcrumb-item.css +1 -1
  109. package/styles/ui-breadcrumbs.css +1 -1
  110. package/styles/ui-button.css +1 -1
  111. package/styles/ui-callout.css +1 -1
  112. package/styles/ui-card.css +1 -1
  113. package/styles/ui-checkbox.css +1 -1
  114. package/styles/ui-cluster.css +1 -1
  115. package/styles/ui-combobox.css +1 -1
  116. package/styles/ui-container.css +1 -1
  117. package/styles/ui-context-menu.css +1 -1
  118. package/styles/ui-cover.css +1 -1
  119. package/styles/ui-description-item.css +1 -1
  120. package/styles/ui-description-list.css +1 -1
  121. package/styles/ui-dialog.css +1 -1
  122. package/styles/ui-disclosure.css +2 -2
  123. package/styles/ui-editable.css +1 -1
  124. package/styles/ui-editor-insert-table-grid.css +1 -1
  125. package/styles/ui-editor-mention-menu-item.css +1 -1
  126. package/styles/ui-editor-mention-menu.css +1 -1
  127. package/styles/ui-editor-slash-menu-group.css +1 -1
  128. package/styles/ui-editor-slash-menu-item.css +1 -1
  129. package/styles/ui-editor-slash-menu.css +1 -1
  130. package/styles/ui-editor-table-context-menu.css +1 -1
  131. package/styles/ui-editor-table-overlay.css +1 -1
  132. package/styles/ui-editor-table-toolbar.css +1 -1
  133. package/styles/ui-editor-toolbar.css +1 -1
  134. package/styles/ui-floating-action-button.css +1 -1
  135. package/styles/ui-form-field.css +1 -1
  136. package/styles/ui-grid.css +1 -1
  137. package/styles/ui-icon-button.css +1 -1
  138. package/styles/ui-icon.css +1 -1
  139. package/styles/ui-image.css +1 -1
  140. package/styles/ui-input-group.css +1 -1
  141. package/styles/ui-input.css +1 -1
  142. package/styles/ui-list-item.css +1 -1
  143. package/styles/ui-list.css +1 -1
  144. package/styles/ui-listbox.css +1 -1
  145. package/styles/ui-menu-group.css +1 -1
  146. package/styles/ui-menu-item.css +1 -1
  147. package/styles/ui-menu.css +1 -1
  148. package/styles/ui-meter.css +1 -1
  149. package/styles/ui-nav-item.css +1 -1
  150. package/styles/ui-page-header.css +1 -1
  151. package/styles/ui-popover.css +1 -1
  152. package/styles/ui-radio-group.css +1 -1
  153. package/styles/ui-radio.css +1 -1
  154. package/styles/ui-reel.css +1 -1
  155. package/styles/ui-scroll-area.css +1 -1
  156. package/styles/ui-search-result-row.css +1 -1
  157. package/styles/ui-search-shell.css +1 -1
  158. package/styles/ui-section.css +1 -1
  159. package/styles/ui-select.css +1 -1
  160. package/styles/ui-separator.css +1 -1
  161. package/styles/ui-sidebar.css +2 -2
  162. package/styles/ui-spinner.css +1 -1
  163. package/styles/ui-stack.css +1 -1
  164. package/styles/ui-status-message.css +1 -1
  165. package/styles/ui-switch.css +1 -1
  166. package/styles/ui-switcher.css +1 -1
  167. package/styles/ui-table.css +1 -1
  168. package/styles/ui-tabs.css +1 -1
  169. package/styles/ui-text.css +1 -1
  170. package/styles/ui-textarea.css +1 -1
  171. package/styles/ui-toast-region.css +1 -1
  172. package/styles/ui-toast.css +1 -1
  173. package/styles/ui-tooltip.css +1 -1
  174. package/styles/ui-top-bar.css +1 -1
  175. package/styles/ui-tree-item.css +1 -1
  176. package/styles/ui-tree.css +1 -1
  177. package/vanilla/UiActionBar.d.ts +1 -1
  178. package/vanilla/UiActionBar.js +1 -1
  179. package/vanilla/UiAffordanceScope.d.ts +1 -1
  180. package/vanilla/UiAffordanceScope.js +1 -1
  181. package/vanilla/UiAvatar.d.ts +1 -1
  182. package/vanilla/UiAvatar.js +1 -1
  183. package/vanilla/UiAvatarGroup.d.ts +1 -1
  184. package/vanilla/UiAvatarGroup.js +1 -1
  185. package/vanilla/UiBadge.d.ts +1 -1
  186. package/vanilla/UiBadge.js +1 -1
  187. package/vanilla/UiBreadcrumbItem.d.ts +1 -1
  188. package/vanilla/UiBreadcrumbItem.js +1 -1
  189. package/vanilla/UiBreadcrumbs.d.ts +1 -1
  190. package/vanilla/UiBreadcrumbs.js +1 -1
  191. package/vanilla/UiButton.d.ts +1 -1
  192. package/vanilla/UiButton.js +1 -1
  193. package/vanilla/UiCallout.d.ts +1 -1
  194. package/vanilla/UiCallout.js +1 -1
  195. package/vanilla/UiCard.d.ts +1 -1
  196. package/vanilla/UiCard.js +1 -1
  197. package/vanilla/UiCheckbox.d.ts +1 -1
  198. package/vanilla/UiCheckbox.js +1 -1
  199. package/vanilla/UiCluster.d.ts +1 -1
  200. package/vanilla/UiCluster.js +1 -1
  201. package/vanilla/UiCombobox.d.ts +1 -3
  202. package/vanilla/UiCombobox.js +2 -2
  203. package/vanilla/UiContainer.d.ts +1 -1
  204. package/vanilla/UiContainer.js +1 -1
  205. package/vanilla/UiContextMenu.d.ts +1 -1
  206. package/vanilla/UiContextMenu.js +1 -1
  207. package/vanilla/UiCover.d.ts +1 -1
  208. package/vanilla/UiCover.js +1 -1
  209. package/vanilla/UiDescriptionItem.d.ts +1 -1
  210. package/vanilla/UiDescriptionItem.js +1 -1
  211. package/vanilla/UiDescriptionList.d.ts +1 -1
  212. package/vanilla/UiDescriptionList.js +1 -1
  213. package/vanilla/UiDialog.d.ts +1 -1
  214. package/vanilla/UiDialog.js +1 -1
  215. package/vanilla/UiDisclosure.d.ts +1 -1
  216. package/vanilla/UiDisclosure.js +1 -1
  217. package/vanilla/UiEditable.d.ts +1 -1
  218. package/vanilla/UiEditable.js +1 -1
  219. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  220. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  221. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  222. package/vanilla/UiEditorMentionMenu.js +1 -1
  223. package/vanilla/UiEditorMentionMenuItem.d.ts +1 -1
  224. package/vanilla/UiEditorMentionMenuItem.js +1 -1
  225. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  226. package/vanilla/UiEditorSlashMenu.js +1 -1
  227. package/vanilla/UiEditorSlashMenuGroup.d.ts +1 -1
  228. package/vanilla/UiEditorSlashMenuGroup.js +1 -1
  229. package/vanilla/UiEditorSlashMenuItem.d.ts +1 -1
  230. package/vanilla/UiEditorSlashMenuItem.js +1 -1
  231. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  232. package/vanilla/UiEditorTableContextMenu.js +1 -1
  233. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  234. package/vanilla/UiEditorTableOverlay.js +1 -1
  235. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  236. package/vanilla/UiEditorTableToolbar.js +1 -1
  237. package/vanilla/UiEditorToolbar.d.ts +1 -1
  238. package/vanilla/UiEditorToolbar.js +1 -1
  239. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  240. package/vanilla/UiFloatingActionButton.js +1 -1
  241. package/vanilla/UiFormField.d.ts +1 -1
  242. package/vanilla/UiFormField.js +1 -1
  243. package/vanilla/UiGrid.d.ts +1 -1
  244. package/vanilla/UiGrid.js +1 -1
  245. package/vanilla/UiIcon.d.ts +1 -1
  246. package/vanilla/UiIcon.js +1 -1
  247. package/vanilla/UiIconButton.d.ts +1 -1
  248. package/vanilla/UiIconButton.js +1 -1
  249. package/vanilla/UiImage.d.ts +1 -1
  250. package/vanilla/UiImage.js +1 -1
  251. package/vanilla/UiInput.d.ts +4 -4
  252. package/vanilla/UiInput.js +2 -2
  253. package/vanilla/UiInputGroup.d.ts +1 -1
  254. package/vanilla/UiInputGroup.js +1 -1
  255. package/vanilla/UiList.d.ts +1 -1
  256. package/vanilla/UiList.js +1 -1
  257. package/vanilla/UiListItem.d.ts +1 -1
  258. package/vanilla/UiListItem.js +1 -1
  259. package/vanilla/UiListbox.d.ts +1 -1
  260. package/vanilla/UiListbox.js +1 -1
  261. package/vanilla/UiMenu.d.ts +1 -1
  262. package/vanilla/UiMenu.js +1 -1
  263. package/vanilla/UiMenuGroup.d.ts +1 -1
  264. package/vanilla/UiMenuGroup.js +1 -1
  265. package/vanilla/UiMenuItem.d.ts +1 -1
  266. package/vanilla/UiMenuItem.js +1 -1
  267. package/vanilla/UiMeter.d.ts +1 -1
  268. package/vanilla/UiMeter.js +1 -1
  269. package/vanilla/UiNavItem.d.ts +1 -1
  270. package/vanilla/UiNavItem.js +1 -1
  271. package/vanilla/UiPageHeader.d.ts +1 -1
  272. package/vanilla/UiPageHeader.js +1 -1
  273. package/vanilla/UiPopover.d.ts +1 -1
  274. package/vanilla/UiPopover.js +1 -1
  275. package/vanilla/UiRadio.d.ts +1 -1
  276. package/vanilla/UiRadio.js +1 -1
  277. package/vanilla/UiRadioGroup.d.ts +1 -1
  278. package/vanilla/UiRadioGroup.js +1 -1
  279. package/vanilla/UiReel.d.ts +1 -1
  280. package/vanilla/UiReel.js +1 -1
  281. package/vanilla/UiScrollArea.d.ts +1 -1
  282. package/vanilla/UiScrollArea.js +1 -1
  283. package/vanilla/UiSearchResultRow.d.ts +1 -1
  284. package/vanilla/UiSearchResultRow.js +1 -1
  285. package/vanilla/UiSearchShell.d.ts +1 -1
  286. package/vanilla/UiSearchShell.js +1 -1
  287. package/vanilla/UiSection.d.ts +1 -1
  288. package/vanilla/UiSection.js +1 -1
  289. package/vanilla/UiSelect.d.ts +1 -1
  290. package/vanilla/UiSelect.js +1 -1
  291. package/vanilla/UiSeparator.d.ts +1 -1
  292. package/vanilla/UiSeparator.js +1 -1
  293. package/vanilla/UiSidebar.d.ts +1 -1
  294. package/vanilla/UiSidebar.js +1 -1
  295. package/vanilla/UiSpinner.d.ts +1 -1
  296. package/vanilla/UiSpinner.js +1 -1
  297. package/vanilla/UiStack.d.ts +1 -1
  298. package/vanilla/UiStack.js +1 -1
  299. package/vanilla/UiStatusMessage.d.ts +1 -1
  300. package/vanilla/UiStatusMessage.js +1 -1
  301. package/vanilla/UiSwitch.d.ts +1 -1
  302. package/vanilla/UiSwitch.js +1 -1
  303. package/vanilla/UiSwitcher.d.ts +1 -1
  304. package/vanilla/UiSwitcher.js +1 -1
  305. package/vanilla/UiTable.d.ts +1 -1
  306. package/vanilla/UiTable.js +1 -1
  307. package/vanilla/UiTabs.d.ts +1 -1
  308. package/vanilla/UiTabs.js +1 -1
  309. package/vanilla/UiText.d.ts +1 -1
  310. package/vanilla/UiText.js +1 -1
  311. package/vanilla/UiTextarea.d.ts +1 -1
  312. package/vanilla/UiTextarea.js +1 -1
  313. package/vanilla/UiToast.d.ts +1 -1
  314. package/vanilla/UiToast.js +1 -1
  315. package/vanilla/UiToastRegion.d.ts +2 -2
  316. package/vanilla/UiToastRegion.js +2 -2
  317. package/vanilla/UiTooltip.d.ts +1 -1
  318. package/vanilla/UiTooltip.js +1 -1
  319. package/vanilla/UiTopBar.d.ts +1 -1
  320. package/vanilla/UiTopBar.js +1 -1
  321. package/vanilla/UiTree.d.ts +1 -1
  322. package/vanilla/UiTree.js +1 -1
  323. package/vanilla/UiTreeItem.d.ts +1 -1
  324. package/vanilla/UiTreeItem.js +1 -1
  325. package/vue/UiActionBar.vue +1 -1
  326. package/vue/UiAffordanceScope.vue +8 -1
  327. package/vue/UiAvatar.d.ts +6 -9
  328. package/vue/UiAvatar.vue +71 -20
  329. package/vue/UiAvatarGroup.d.ts +7 -10
  330. package/vue/UiAvatarGroup.vue +45 -12
  331. package/vue/UiBadge.vue +1 -1
  332. package/vue/UiBreadcrumbItem.vue +1 -1
  333. package/vue/UiBreadcrumbs.vue +1 -1
  334. package/vue/UiButton.vue +1 -1
  335. package/vue/UiCallout.vue +1 -1
  336. package/vue/UiCard.vue +1 -1
  337. package/vue/UiCheckbox.d.ts +8 -11
  338. package/vue/UiCheckbox.vue +34 -11
  339. package/vue/UiCluster.vue +1 -1
  340. package/vue/UiCombobox.d.ts +60 -66
  341. package/vue/UiCombobox.vue +476 -124
  342. package/vue/UiContainer.vue +1 -1
  343. package/vue/UiContextMenu.vue +18 -9
  344. package/vue/UiCover.vue +1 -1
  345. package/vue/UiDescriptionItem.vue +1 -1
  346. package/vue/UiDescriptionList.vue +1 -1
  347. package/vue/UiDialog.d.ts +8 -11
  348. package/vue/UiDialog.vue +39 -12
  349. package/vue/UiDisclosure.d.ts +12 -15
  350. package/vue/UiDisclosure.vue +70 -24
  351. package/vue/UiEditable.d.ts +3 -3
  352. package/vue/UiEditable.vue +60 -21
  353. package/vue/UiEditorInsertTableGrid.d.ts +2 -2
  354. package/vue/UiEditorInsertTableGrid.vue +75 -14
  355. package/vue/UiEditorMentionMenu.d.ts +10 -13
  356. package/vue/UiEditorMentionMenu.vue +50 -7
  357. package/vue/UiEditorMentionMenuItem.vue +1 -1
  358. package/vue/UiEditorSlashMenu.d.ts +12 -15
  359. package/vue/UiEditorSlashMenu.vue +48 -7
  360. package/vue/UiEditorSlashMenuGroup.vue +1 -1
  361. package/vue/UiEditorSlashMenuItem.vue +1 -1
  362. package/vue/UiEditorTableContextMenu.vue +73 -4
  363. package/vue/UiEditorTableOverlay.d.ts +2 -2
  364. package/vue/UiEditorTableOverlay.vue +202 -38
  365. package/vue/UiEditorTableToolbar.d.ts +2 -2
  366. package/vue/UiEditorTableToolbar.vue +128 -7
  367. package/vue/UiEditorToolbar.vue +3 -3
  368. package/vue/UiFloatingActionButton.vue +1 -1
  369. package/vue/UiFormField.vue +1 -1
  370. package/vue/UiGrid.vue +1 -1
  371. package/vue/UiIcon.vue +1 -1
  372. package/vue/UiIconButton.vue +1 -1
  373. package/vue/UiImage.vue +7 -6
  374. package/vue/UiInput.d.ts +5 -5
  375. package/vue/UiInput.vue +15 -3
  376. package/vue/UiInputGroup.vue +1 -1
  377. package/vue/UiList.vue +1 -1
  378. package/vue/UiListItem.vue +1 -1
  379. package/vue/UiListbox.d.ts +6 -9
  380. package/vue/UiListbox.vue +70 -19
  381. package/vue/UiMenu.vue +20 -10
  382. package/vue/UiMenuGroup.vue +1 -1
  383. package/vue/UiMenuItem.d.ts +13 -16
  384. package/vue/UiMenuItem.vue +30 -7
  385. package/vue/UiMeter.vue +1 -1
  386. package/vue/UiNavItem.vue +1 -1
  387. package/vue/UiPageHeader.vue +1 -1
  388. package/vue/UiPopover.vue +12 -4
  389. package/vue/UiRadio.d.ts +8 -11
  390. package/vue/UiRadio.vue +34 -11
  391. package/vue/UiRadioGroup.vue +16 -7
  392. package/vue/UiReel.vue +1 -1
  393. package/vue/UiScrollArea.vue +3 -3
  394. package/vue/UiSearchResultRow.vue +1 -1
  395. package/vue/UiSearchShell.vue +14 -6
  396. package/vue/UiSection.vue +1 -1
  397. package/vue/UiSelect.vue +3 -2
  398. package/vue/UiSeparator.vue +1 -1
  399. package/vue/UiSidebar.d.ts +7 -10
  400. package/vue/UiSidebar.vue +44 -12
  401. package/vue/UiSpinner.vue +1 -1
  402. package/vue/UiStack.vue +1 -1
  403. package/vue/UiStatusMessage.vue +1 -1
  404. package/vue/UiSwitch.d.ts +8 -11
  405. package/vue/UiSwitch.vue +34 -11
  406. package/vue/UiSwitcher.vue +8 -1
  407. package/vue/UiTable.vue +1 -1
  408. package/vue/UiTabs.vue +30 -8
  409. package/vue/UiText.vue +1 -1
  410. package/vue/UiTextarea.vue +2 -2
  411. package/vue/UiToast.vue +7 -6
  412. package/vue/UiToastRegion.d.ts +15 -3
  413. package/vue/UiToastRegion.vue +90 -45
  414. package/vue/UiTooltip.d.ts +9 -12
  415. package/vue/UiTooltip.vue +30 -7
  416. package/vue/UiTopBar.vue +1 -1
  417. package/vue/UiTree.vue +17 -13
  418. package/vue/UiTreeItem.d.ts +15 -18
  419. package/vue/UiTreeItem.vue +79 -30
  420. package/vue/chunks/UiActionBar.js +1 -1
  421. package/vue/chunks/UiAffordanceScope.js +6 -2
  422. package/vue/chunks/UiAvatar.js +37 -10
  423. package/vue/chunks/UiAvatarGroup.js +26 -7
  424. package/vue/chunks/UiBadge.js +2 -2
  425. package/vue/chunks/UiBreadcrumbItem.js +2 -2
  426. package/vue/chunks/UiBreadcrumbs.js +2 -2
  427. package/vue/chunks/UiButton.js +2 -2
  428. package/vue/chunks/UiCallout.js +2 -2
  429. package/vue/chunks/UiCard.js +2 -2
  430. package/vue/chunks/UiCheckbox.js +25 -12
  431. package/vue/chunks/UiCluster.js +2 -2
  432. package/vue/chunks/UiCombobox.js +628 -117
  433. package/vue/chunks/UiContainer.js +2 -2
  434. package/vue/chunks/UiContextMenu.js +14 -10
  435. package/vue/chunks/UiCover.js +2 -2
  436. package/vue/chunks/UiDescriptionItem.js +2 -2
  437. package/vue/chunks/UiDescriptionList.js +2 -2
  438. package/vue/chunks/UiDialog.js +29 -11
  439. package/vue/chunks/UiDisclosure.js +44 -14
  440. package/vue/chunks/UiEditable.js +33 -9
  441. package/vue/chunks/UiEditorInsertTableGrid.js +98 -14
  442. package/vue/chunks/UiEditorMentionMenu.js +76 -9
  443. package/vue/chunks/UiEditorMentionMenuItem.js +2 -2
  444. package/vue/chunks/UiEditorSlashMenu.js +70 -11
  445. package/vue/chunks/UiEditorSlashMenuGroup.js +2 -2
  446. package/vue/chunks/UiEditorSlashMenuItem.js +2 -2
  447. package/vue/chunks/UiEditorTableContextMenu.js +120 -2
  448. package/vue/chunks/UiEditorTableOverlay.js +306 -12
  449. package/vue/chunks/UiEditorTableToolbar.js +215 -3
  450. package/vue/chunks/UiEditorToolbar.js +8 -8
  451. package/vue/chunks/UiFloatingActionButton.js +2 -2
  452. package/vue/chunks/UiFormField.js +2 -2
  453. package/vue/chunks/UiGrid.js +2 -2
  454. package/vue/chunks/UiIcon.js +2 -2
  455. package/vue/chunks/UiIconButton.js +2 -2
  456. package/vue/chunks/UiImage.js +12 -12
  457. package/vue/chunks/UiInput.js +34 -4
  458. package/vue/chunks/UiInputGroup.js +2 -2
  459. package/vue/chunks/UiList.js +2 -2
  460. package/vue/chunks/UiListItem.js +2 -2
  461. package/vue/chunks/UiListbox.js +96 -12
  462. package/vue/chunks/UiMenu.js +6 -2
  463. package/vue/chunks/UiMenuGroup.js +2 -2
  464. package/vue/chunks/UiMenuItem.js +15 -3
  465. package/vue/chunks/UiMeter.js +2 -2
  466. package/vue/chunks/UiNavItem.js +2 -2
  467. package/vue/chunks/UiPageHeader.js +2 -2
  468. package/vue/chunks/UiPopover.js +6 -2
  469. package/vue/chunks/UiRadio.js +25 -12
  470. package/vue/chunks/UiRadioGroup.js +6 -2
  471. package/vue/chunks/UiReel.js +2 -2
  472. package/vue/chunks/UiScrollArea.js +8 -8
  473. package/vue/chunks/UiSearchResultRow.js +2 -2
  474. package/vue/chunks/UiSearchShell.js +9 -4
  475. package/vue/chunks/UiSection.js +2 -2
  476. package/vue/chunks/UiSelect.js +5 -3
  477. package/vue/chunks/UiSeparator.js +2 -2
  478. package/vue/chunks/UiSidebar.js +28 -5
  479. package/vue/chunks/UiSpinner.js +2 -2
  480. package/vue/chunks/UiStack.js +2 -2
  481. package/vue/chunks/UiStatusMessage.js +2 -2
  482. package/vue/chunks/UiSwitch.js +25 -12
  483. package/vue/chunks/UiSwitcher.js +6 -2
  484. package/vue/chunks/UiTable.js +2 -2
  485. package/vue/chunks/UiTabs.js +39 -10
  486. package/vue/chunks/UiText.js +2 -2
  487. package/vue/chunks/UiTextarea.js +3 -2
  488. package/vue/chunks/UiToast.js +8 -8
  489. package/vue/chunks/UiToastRegion.js +86 -20
  490. package/vue/chunks/UiTooltip.js +15 -3
  491. package/vue/chunks/UiTopBar.js +1 -1
  492. package/vue/chunks/UiTree.js +2 -2
  493. package/vue/chunks/UiTreeItem.js +84 -51
  494. package/vue/chunks/control.js +9 -2
  495. package/vue/chunks/host.js +203 -29
  496. package/vue/chunks/props.js +43 -7
  497. package/vue/components.css +1345 -1345
  498. package/vue/editor/index.js +12 -5
  499. package/vue/host.ts +286 -42
@@ -34,44 +34,44 @@
34
34
  color: var(--ui-text-primary);
35
35
  }
36
36
 
37
- :host-state([padding="xs"]) {
37
+ :host([padding="xs"]) {
38
38
  gap: var(--ui-space-1);
39
39
  padding: var(--ui-space-2);
40
40
  }
41
- :host-state([padding="sm"]) {
41
+ :host([padding="sm"]) {
42
42
  gap: var(--ui-space-2);
43
43
  padding: var(--ui-space-3);
44
44
  }
45
45
 
46
- :host-state([padding="lg"]) {
46
+ :host([padding="lg"]) {
47
47
  padding: var(--ui-space-6);
48
48
  }
49
49
 
50
- :host-state([variant="subtle"]) {
50
+ :host([variant="subtle"]) {
51
51
  border-color: transparent;
52
52
  background: var(--ui-surface-muted);
53
53
  }
54
54
 
55
- :host-state([variant="elevated"]) {
55
+ :host([variant="elevated"]) {
56
56
  border-color: var(--ui-border-subtle);
57
57
  box-shadow: var(--ui-shadow-lg);
58
58
  }
59
59
 
60
- :host-state([tone="danger"]) {
60
+ :host([tone="danger"]) {
61
61
  border-color: color-mix(in srgb, var(--ui-danger) 45%, var(--ui-border-default));
62
62
  border-inline-start: var(--ui-accent-line-width) solid var(--ui-danger);
63
63
  background: var(--ui-danger-soft);
64
64
  }
65
65
 
66
- :host-state([size="sm"]) {
66
+ :host([size="sm"]) {
67
67
  inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
68
68
  max-inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
69
69
  }
70
- :host-state([size="md"]) {
70
+ :host([size="md"]) {
71
71
  inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
72
72
  max-inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
73
73
  }
74
- :host-state([size="lg"]) {
74
+ :host([size="lg"]) {
75
75
  inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
76
76
  max-inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
77
77
  }
@@ -183,18 +183,18 @@
183
183
  outline-offset: var(--ui-focus-width);
184
184
  }
185
185
 
186
- :host-state([invalid]) input {
186
+ :host([invalid]) input {
187
187
  border-color: var(--_ui-checkbox-invalid-border);
188
188
  }
189
189
 
190
- :host-state([disabled]) {
190
+ :host([disabled]) {
191
191
  color: var(--ui-disabled-text);
192
192
  cursor: not-allowed;
193
193
  }
194
- :host-state([disabled]) .description {
194
+ :host([disabled]) .description {
195
195
  color: var(--ui-disabled-text);
196
196
  }
197
- :host-state([disabled]) input {
197
+ :host([disabled]) input {
198
198
  border-color: var(--ui-disabled-border);
199
199
  background: var(--ui-disabled-surface);
200
200
  box-shadow: none;
@@ -204,30 +204,30 @@
204
204
  /* A sized choice keeps its box and aligns instead: the label takes that size's field type size,
205
205
  and the first line centres in that control height, so the label shares a row's baseline.
206
206
  Multi-line labels and descriptions still grow downward from that first line. */
207
- :host-state([size="sm"]) {
207
+ :host([size="sm"]) {
208
208
  --_font: var(--ui-font-size-sm);
209
209
  --_row: var(--ui-control-size-sm);
210
210
  }
211
211
 
212
- :host-state([size="lg"]) {
212
+ :host([size="lg"]) {
213
213
  --_font: var(--ui-font-size-md);
214
214
  --_row: var(--ui-control-size-lg);
215
215
  }
216
216
 
217
- :host-state([size="sm"]),
218
- :host-state([size="lg"]) {
217
+ :host([size="sm"]),
218
+ :host([size="lg"]) {
219
219
  --_line: calc(var(--_font) * var(--ui-line-height-md));
220
220
  font-size: var(--_font);
221
221
  padding-block: calc((var(--_row) - var(--_line)) / 2);
222
222
  }
223
223
 
224
- :host-state([size="sm"]) input,
225
- :host-state([size="lg"]) input {
224
+ :host([size="sm"]) input,
225
+ :host([size="lg"]) input {
226
226
  margin-top: calc((var(--_line) - var(--_ui-checkbox-size, 1.125rem)) / 2);
227
227
  }
228
228
 
229
229
  @media (pointer: coarse) {
230
- :host-state([size="sm"]) {
230
+ :host([size="sm"]) {
231
231
  --_row: var(--ui-control-min-block-size);
232
232
  }
233
233
  }
@@ -5,7 +5,7 @@ import { trackTrigger } from "../shared/trigger.js";
5
5
  // `checked` sets the control initially and whenever it changes; the user's changes update the state.
6
6
  // A form reset returns the control to `checked`. Vue writes the checked attribute on every render, so
7
7
  // the native default alone cannot hold it there.
8
- export default function controller(host) {
8
+ function connect(host) {
9
9
  const input = host.refs.input;
10
10
  describeInput(input, host.refs.description);
11
11
  const [trigger, stopTracking] = trackTrigger(host);
@@ -33,3 +33,8 @@ export default function controller(host) {
33
33
  input.removeEventListener("change", onChange);
34
34
  };
35
35
  }
36
+
37
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
38
+ export default function controller(host) {
39
+ host.on("connect", () => connect(host));
40
+ }
@@ -33,40 +33,40 @@
33
33
  margin: 0;
34
34
  }
35
35
 
36
- :host-state([gap="xs"]) {
36
+ :host([gap="xs"]) {
37
37
  --_layout-gap: var(--ui-space-2);
38
38
  }
39
- :host-state([gap="s"]) {
39
+ :host([gap="s"]) {
40
40
  --_layout-gap: var(--ui-space-3);
41
41
  }
42
- :host-state([gap="m"]) {
42
+ :host([gap="m"]) {
43
43
  --_layout-gap: var(--ui-space-4);
44
44
  }
45
- :host-state([gap="l"]) {
45
+ :host([gap="l"]) {
46
46
  --_layout-gap: var(--ui-space-5);
47
47
  }
48
- :host-state([gap="xl"]) {
48
+ :host([gap="xl"]) {
49
49
  --_layout-gap: var(--ui-space-6);
50
50
  }
51
- :host-state([align="start"]) {
51
+ :host([align="start"]) {
52
52
  align-items: flex-start;
53
53
  }
54
- :host-state([align="end"]) {
54
+ :host([align="end"]) {
55
55
  align-items: flex-end;
56
56
  }
57
- :host-state([align="stretch"]) {
57
+ :host([align="stretch"]) {
58
58
  align-items: stretch;
59
59
  }
60
- :host-state([justify="center"]) {
60
+ :host([justify="center"]) {
61
61
  justify-content: center;
62
62
  }
63
- :host-state([justify="end"]) {
63
+ :host([justify="end"]) {
64
64
  justify-content: flex-end;
65
65
  }
66
- :host-state([justify="between"]) {
66
+ :host([justify="between"]) {
67
67
  justify-content: space-between;
68
68
  }
69
- :host-state([wrap="nowrap"]) {
69
+ :host([wrap="nowrap"]) {
70
70
  flex-wrap: nowrap;
71
71
  }
72
72
 
@@ -115,7 +115,7 @@
115
115
  </state>
116
116
  <state type="string" name="raw" value=""></state>
117
117
  <state type="string" name="display" value=""></state>
118
- <state name="selected" type="string"></state>
118
+ <state name="selected" type="string" nullable></state>
119
119
  <state type="boolean" name="expanded" value="false"></state>
120
120
  <state
121
121
  name="rows"
@@ -367,8 +367,6 @@
367
367
  </prop>
368
368
  <prop name="trigger" required type="keyword" values="keyboard, pointer, programmatic"></prop>
369
369
  </event>
370
- <method name="validate" export="validate" returns="promise(unknown)"></method>
371
- <method name="focusInput" export="focusInput" returns="promise(undefined)"></method>
372
370
  </defs>
373
371
  <div>
374
372
  <label from:for="concat(uid, '-input')" class:sr-only="labelVisibility = 'sr-only'">{$label}<template $if="required">
@@ -706,15 +704,15 @@
706
704
  margin: 0;
707
705
  outline: none;
708
706
  }
709
- :host-state([size="sm"]) {
707
+ :host([size="sm"]) {
710
708
  --_row: var(--ui-control-size-sm);
711
709
  }
712
- :host-state([size="sm"]) input {
710
+ :host([size="sm"]) input {
713
711
  min-block-size: calc(var(--_row) - 2px);
714
712
  padding: var(--ui-space-1) var(--ui-space-2);
715
713
  font-size: var(--ui-font-size-sm);
716
714
  }
717
- :host-state([size="lg"]) input {
715
+ :host([size="lg"]) input {
718
716
  min-block-size: calc(var(--ui-control-size-lg) - 2px);
719
717
  padding: var(--ui-space-3) var(--ui-space-4);
720
718
  font-size: var(--ui-font-size-md);
@@ -756,7 +754,7 @@
756
754
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
757
755
  }
758
756
  :host-state([validationStatus="error"]) .field,
759
- :host-state([invalid]) .field {
757
+ :host([invalid]) .field {
760
758
  border-color: var(--_ui-combobox-invalid-border, var(--ui-field-danger, var(--ui-danger-solid, var(--ui-accent-active))));
761
759
  }
762
760
  .popup {
@@ -827,10 +825,10 @@
827
825
  }
828
826
  /* Under touch a small field is still a touch-sized target, as a small button is, and keeps
829
827
  body-size text: below 16px, iOS zooms the page into the focused field. */
830
- :host-state([size="sm"]) {
828
+ :host([size="sm"]) {
831
829
  --_row: var(--ui-control-min-block-size);
832
830
  }
833
- :host-state([size="sm"]) input {
831
+ :host([size="sm"]) input {
834
832
  font-size: inherit;
835
833
  }
836
834
  }
@@ -845,40 +843,40 @@
845
843
 
846
844
  /* Multiple mode keeps one control height. Chips and the input scroll within the entry,
847
845
  while the clear and disclosure controls remain fixed at the end of the field. */
848
- :host-state([multiple]) .field {
846
+ :host([multiple]) .field {
849
847
  align-items: center;
850
848
  min-block-size: var(--_ui-combobox-item-min-block-size, 2.5rem);
851
849
  padding: var(--ui-space-1);
852
850
  }
853
- :host-state([multiple]) .entry {
851
+ :host([multiple]) .entry {
854
852
  align-items: center;
855
853
  gap: var(--ui-space-1);
856
854
  overflow-x: auto;
857
855
  scrollbar-width: none;
858
856
  }
859
- :host-state([multiple]) .entry::-webkit-scrollbar {
857
+ :host([multiple]) .entry::-webkit-scrollbar {
860
858
  display: none;
861
859
  }
862
- :host-state([multiple]) input {
860
+ :host([multiple]) input {
863
861
  flex: 1 0 var(--_ui-combobox-item-input-min-inline-size, 5rem);
864
862
  width: auto;
865
863
  min-block-size: 1.75rem;
866
864
  padding: var(--ui-space-0-5) var(--ui-space-1);
867
865
  }
868
866
  /* Size variants keep their control height as selections are added. */
869
- :host-state([multiple]):host-state([size="sm"]) .field {
867
+ :host([multiple]):host([size="sm"]) .field {
870
868
  min-block-size: 0;
871
869
  padding: var(--ui-space-0-5);
872
870
  }
873
- :host-state([multiple]):host-state([size="sm"]) input {
871
+ :host([multiple]):host([size="sm"]) input {
874
872
  min-block-size: calc(var(--_row) - 2 * var(--ui-border-width) - 2 * var(--ui-space-0-5));
875
873
  padding: 0 var(--ui-space-1);
876
874
  }
877
875
  /* A large multiple field starts at the large control height, as sm starts at the small one. */
878
- :host-state([multiple]):host-state([size="lg"]) .field {
876
+ :host([multiple]):host([size="lg"]) .field {
879
877
  min-block-size: 0;
880
878
  }
881
- :host-state([multiple]):host-state([size="lg"]) input {
879
+ :host([multiple]):host([size="lg"]) input {
882
880
  min-block-size: calc(var(--ui-control-size-lg) - 2 * var(--ui-border-width) - 2 * var(--ui-space-1));
883
881
  }
884
882
  .item {
@@ -1,8 +1,6 @@
1
1
  import { afterFormReset } from "../shared/form-reset.js";
2
2
  import { closeOverlay, createAnchoredSurface, openOverlay } from "../shared/overlay.js";
3
3
 
4
- const instances = new WeakMap();
5
-
6
4
  let comboboxes = 0;
7
5
 
8
6
  // An option's secondary line and tag ride on data-* attributes: <option> holds only text, so markup inside
@@ -23,15 +21,7 @@ function authoredOptions(container) {
23
21
  });
24
22
  }
25
23
 
26
- export async function validate(host) {
27
- return instances.get(host.element)?.validate();
28
- }
29
-
30
- export async function focusInput(host) {
31
- instances.get(host.element)?.input?.focus();
32
- }
33
-
34
- export default function controller(host) {
24
+ function connect(host) {
35
25
  const element = host.element;
36
26
  const document = element.ownerDocument;
37
27
  const uid = `ui-combobox-${++comboboxes}`;
@@ -514,9 +504,13 @@ export default function controller(host) {
514
504
  host.state.validation = { status: "pristine", touched: false, dirty: false, issues: [] };
515
505
  surface = createAnchoredSurface(popup, { anchor: field, placement: "bottom-start" });
516
506
 
517
- const api = { get input() { return input; }, validate: validateCurrent };
518
- instances.set(element, api);
519
- const listeners = { input: onInput, keydown: onKeydown, click: onClick, pointerdown: onPointerdown, focusin: onFocusin, focusout: onFocusout, compositionstart: onCompositionstart, compositionend: onCompositionend, open: onTooltipOpen, close: onTooltipClose };
507
+ const onCommand = (event) => {
508
+ if (event.target === element && event.command === "--validate") void validateCurrent();
509
+ };
510
+ const onValidate = (event) => {
511
+ if (event.target === element) void validateCurrent();
512
+ };
513
+ const listeners = { input: onInput, keydown: onKeydown, click: onClick, pointerdown: onPointerdown, focusin: onFocusin, focusout: onFocusout, compositionstart: onCompositionstart, compositionend: onCompositionend, open: onTooltipOpen, close: onTooltipClose, command: onCommand, validate: onValidate };
520
514
  for (const [name, listener] of Object.entries(listeners)) element.addEventListener(name, listener);
521
515
  // Authored options can change after mount (renamed, replaced, or arriving late). A selected value
522
516
  // then shows its current label, unless the user is editing the text.
@@ -582,6 +576,10 @@ export default function controller(host) {
582
576
  close();
583
577
  validationRun?.abort();
584
578
  surface.destroy();
585
- instances.delete(element);
586
579
  };
587
580
  }
581
+
582
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
583
+ export default function controller(host) {
584
+ host.on("connect", () => connect(host));
585
+ }
@@ -29,19 +29,19 @@
29
29
  padding-inline: var(--ui-container-gutters, var(--_container-gutters));
30
30
  }
31
31
 
32
- :host-state([measure="narrow"]) {
32
+ :host([measure="narrow"]) {
33
33
  --_container-measure: 45ch;
34
34
  }
35
- :host-state([measure="wide"]) {
35
+ :host([measure="wide"]) {
36
36
  --_container-measure: 80ch;
37
37
  }
38
- :host-state([gutters="s"]) {
38
+ :host([gutters="s"]) {
39
39
  --_container-gutters: var(--ui-space-3);
40
40
  }
41
- :host-state([gutters="m"]) {
41
+ :host([gutters="m"]) {
42
42
  --_container-gutters: var(--ui-space-4);
43
43
  }
44
- :host-state([gutters="l"]) {
44
+ :host([gutters="l"]) {
45
45
  --_container-gutters: var(--ui-space-5);
46
46
  }
47
47
 
@@ -5,7 +5,7 @@ function disabled(item) {
5
5
  return item.getAttribute("aria-disabled") === "true" || item.hasAttribute("disabled") || item.getAttribute("disabled") === "true";
6
6
  }
7
7
 
8
- export default function controller(host) {
8
+ function connect(host) {
9
9
  const element = host.element;
10
10
  const document = element.ownerDocument;
11
11
  const menuSurface = host.refs.menu;
@@ -157,3 +157,8 @@ export default function controller(host) {
157
157
  closeOverlay(document, overlayId);
158
158
  };
159
159
  }
160
+
161
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
162
+ export default function controller(host) {
163
+ host.on("connect", () => connect(host));
164
+ }
@@ -19,7 +19,7 @@
19
19
  padding: var(--ui-space-6) var(--ui-space-4);
20
20
  }
21
21
 
22
- :host-state([size="fill"]) {
22
+ :host([size="fill"]) {
23
23
  flex: 1;
24
24
  min-block-size: 100%;
25
25
  }
@@ -30,9 +30,9 @@
30
30
 
31
31
  /* Stacked, grid, and tiles set each term above its value, passing the shape to the items through
32
32
  private properties, which cross into each item. */
33
- :host-state([layout="stacked"]),
34
- :host-state([layout="grid"]),
35
- :host-state([layout="tiles"]) {
33
+ :host([layout="stacked"]),
34
+ :host([layout="grid"]),
35
+ :host([layout="tiles"]) {
36
36
  --_ui-description-display: flex;
37
37
  --_ui-description-column: auto;
38
38
  --_ui-description-align: stretch;
@@ -43,13 +43,13 @@
43
43
 
44
44
  /* A column is at least --_min wide; with columns set, at least its share of the width, so no more
45
45
  than that many fit. */
46
- :host-state([layout="grid"]),
47
- :host-state([layout="tiles"]) {
46
+ :host([layout="grid"]),
47
+ :host([layout="tiles"]) {
48
48
  inline-size: 100%;
49
49
  grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--_track)), 1fr));
50
50
  }
51
51
 
52
- :host-state([layout="tiles"]) {
52
+ :host([layout="tiles"]) {
53
53
  --_ui-description-align: flex-start;
54
54
  --_ui-description-value-size: var(--ui-font-size-lg);
55
55
  --_ui-description-padding: var(--_tile-padding);
@@ -60,18 +60,18 @@
60
60
  --_column-gap: var(--_gap);
61
61
  }
62
62
 
63
- :host-state([columns="2"]) {
63
+ :host([columns="2"]) {
64
64
  --_track: max(var(--_min), (100% - var(--_column-gap)) / 2);
65
65
  }
66
- :host-state([columns="3"]) {
66
+ :host([columns="3"]) {
67
67
  --_track: max(var(--_min), (100% - 2 * var(--_column-gap)) / 3);
68
68
  }
69
- :host-state([columns="4"]) {
69
+ :host([columns="4"]) {
70
70
  --_track: max(var(--_min), (100% - 3 * var(--_column-gap)) / 4);
71
71
  }
72
72
 
73
73
  /* Compact takes each layout's closer spacing. */
74
- :host-state([density="compact"]) {
74
+ :host([density="compact"]) {
75
75
  --_gap: var(--_gap-compact);
76
76
  --_tile-padding: var(--ui-space-2);
77
77
  }
@@ -116,15 +116,15 @@
116
116
  animation: ui-dialog-enter var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease);
117
117
  }
118
118
 
119
- :host-state([size="sm"]) {
119
+ :host([size="sm"]) {
120
120
  --_ui-dialog-size: 360px;
121
121
  }
122
122
 
123
- :host-state([size="lg"]) {
123
+ :host([size="lg"]) {
124
124
  --_ui-dialog-size: 640px;
125
125
  }
126
126
 
127
- :host-state([size="fullscreen"]) {
127
+ :host([size="fullscreen"]) {
128
128
  inset: 0;
129
129
  inline-size: 100%;
130
130
  block-size: 100dvh;
@@ -133,7 +133,7 @@
133
133
  border-radius: var(--ui-dialog-radius, 0);
134
134
  }
135
135
 
136
- :host-state([alert]) .close {
136
+ :host([alert]) .close {
137
137
  display: none;
138
138
  }
139
139
 
@@ -5,7 +5,7 @@ function inferredLabel(element, explicit) {
5
5
  return element.querySelector("h1, h2, h3, h4, h5, h6")?.textContent?.trim() || "Dialog";
6
6
  }
7
7
 
8
- export default function controller(host) {
8
+ function connect(host) {
9
9
  const element = host.element;
10
10
  const document = element.ownerDocument;
11
11
  const dialog = element.localName === "dialog" ? element : element.querySelector("dialog");
@@ -126,3 +126,8 @@ export default function controller(host) {
126
126
  closeOverlay(document, overlayId);
127
127
  };
128
128
  }
129
+
130
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
131
+ export default function controller(host) {
132
+ host.on("connect", () => connect(host));
133
+ }
@@ -80,7 +80,7 @@
80
80
  --_trigger-padding-inline: var(--ui-space-3);
81
81
  }
82
82
 
83
- :host-state([density="compact"]) {
83
+ :host([density="compact"]) {
84
84
  --_trigger-min-block-size: var(--ui-control-size-sm);
85
85
  --_trigger-padding-block: var(--ui-space-1);
86
86
  --_trigger-padding-inline: var(--ui-space-2);
@@ -178,7 +178,7 @@
178
178
 
179
179
  /* A bounded accordion owns one flexible body, so its trigger never scrolls away. The
180
180
  * normal content-sized layout and its animation remain unchanged when fill is omitted. */
181
- :host-state([fill]) {
181
+ :host([fill]) {
182
182
  display: flex;
183
183
  flex-direction: column;
184
184
  flex: 0 0 var(--_ui-disclosure-heading-size, var(--_trigger-min-block-size));
@@ -187,20 +187,20 @@
187
187
  border-block-end: 0;
188
188
  border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
189
189
  }
190
- :host-state([fill][internalOpen]) {
190
+ :host([fill]):host-state([internalOpen]) {
191
191
  flex-grow: 1;
192
192
  }
193
- :host-state([fill]) .heading {
193
+ :host([fill]) .heading {
194
194
  flex: none;
195
195
  }
196
- :host-state([fill]) .trigger {
196
+ :host([fill]) .trigger {
197
197
  border-radius: 0;
198
198
  }
199
- :host-state([fill]) .panel {
199
+ :host([fill]) .panel {
200
200
  flex: 1;
201
201
  min-block-size: 0;
202
202
  }
203
- :host-state([fill]) .panel-inner {
203
+ :host([fill]) .panel-inner {
204
204
  display: flex;
205
205
  flex-direction: column;
206
206
  flex: 1;
@@ -208,7 +208,7 @@
208
208
  padding: 0;
209
209
  }
210
210
 
211
- :host-state([variant="navigation"]) .trigger {
211
+ :host([variant="navigation"]) .trigger {
212
212
  gap: var(--ui-nav-gap);
213
213
  padding-inline: var(--ui-nav-padding-inline);
214
214
  min-block-size: var(--ui-nav-min-block-size);
@@ -218,28 +218,28 @@
218
218
  font-weight: var(--ui-font-normal);
219
219
  color: var(--ui-text-secondary);
220
220
  }
221
- :host-state([variant="navigation"][density="compact"]) .trigger {
221
+ :host([variant="navigation"][density="compact"]) .trigger {
222
222
  padding-inline: var(--ui-nav-compact-padding-inline);
223
223
  padding-block: var(--ui-nav-compact-padding-block);
224
224
  min-block-size: var(--ui-nav-compact-min-block-size);
225
225
  font-size: var(--ui-font-size-sm);
226
226
  }
227
- :host-state([variant="navigation"]) .trigger:hover:not(:disabled) {
227
+ :host([variant="navigation"]) .trigger:hover:not(:disabled) {
228
228
  background: var(--ui-nav-hover-surface);
229
229
  color: var(--ui-text-primary);
230
230
  }
231
- :host-state([variant="navigation"]) :is(.leading, .indicator) {
231
+ :host([variant="navigation"]) :is(.leading, .indicator) {
232
232
  inline-size: var(--ui-nav-icon-size);
233
233
  font-size: var(--ui-nav-icon-size);
234
234
  }
235
235
  @media (pointer: coarse) {
236
- :host-state([variant="navigation"][density="compact"]) .trigger {
236
+ :host([variant="navigation"][density="compact"]) .trigger {
237
237
  min-block-size: var(--ui-control-min-block-size);
238
238
  }
239
239
  }
240
240
 
241
241
  @media (prefers-reduced-motion: reduce) {
242
- :host-state([fill]),
242
+ :host([fill]),
243
243
  .panel,
244
244
  .indicator {
245
245
  transition: none;
@@ -34,7 +34,7 @@ function leaveGroup(document, name, member) {
34
34
  }
35
35
 
36
36
  // `open` sets the disclosure initially and whenever it changes; the trigger toggles the state.
37
- export default function controller(host) {
37
+ function connect(host) {
38
38
  const document = host.element.ownerDocument;
39
39
  const [trigger, stopTracking] = trackTrigger(host);
40
40
  host.state.contentId = `ui-disclosure-${++disclosures}`;
@@ -119,3 +119,8 @@ export default function controller(host) {
119
119
  host.refs.panel.removeEventListener("beforematch", onBeforematch);
120
120
  };
121
121
  }
122
+
123
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
124
+ export default function controller(host) {
125
+ host.on("connect", () => connect(host));
126
+ }
@@ -177,7 +177,7 @@
177
177
  box-shadow: var(--ui-focus-halo);
178
178
  }
179
179
 
180
- :host-state([disabled]) .preview {
180
+ :host([disabled]) .preview {
181
181
  color: var(--ui-disabled-text);
182
182
  cursor: not-allowed;
183
183
  }
@@ -3,7 +3,7 @@ function triggerFor(event) {
3
3
  }
4
4
 
5
5
  /** Owns the display/edit transition so authors only provide value and label. */
6
- export default function controller(host) {
6
+ function connect(host) {
7
7
  const element = host.element;
8
8
  const document = element.ownerDocument;
9
9
  const { preview, input } = host.refs;
@@ -119,3 +119,8 @@ export default function controller(host) {
119
119
  document.removeEventListener("pointerdown", onDocumentPointerdown, true);
120
120
  };
121
121
  }
122
+
123
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
124
+ export default function controller(host) {
125
+ host.on("connect", () => connect(host));
126
+ }
@@ -4,7 +4,7 @@ function bounded(value, fallback) {
4
4
  }
5
5
 
6
6
  // Lays out the grid cells and inserts the chosen size by pointer or keyboard.
7
- export default function controller(host) {
7
+ function connect(host) {
8
8
  const element = host.element;
9
9
  let selected = { rows: 3, cols: 3 };
10
10
  let preview = null;
@@ -103,3 +103,8 @@ export default function controller(host) {
103
103
  host.refs.header.removeEventListener("change", onChange);
104
104
  };
105
105
  }
106
+
107
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
108
+ export default function controller(host) {
109
+ host.on("connect", () => connect(host));
110
+ }