@threadlabs/looma 0.24.1 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/README.md +1 -1
  2. package/components/ui-affordance-scope/ui-affordance-scope.html +1 -1
  3. package/components/ui-affordance-scope/ui-affordance-scope.js +6 -1
  4. package/components/ui-avatar/ui-avatar.html +4 -4
  5. package/components/ui-avatar/ui-avatar.js +6 -1
  6. package/components/ui-avatar-group/ui-avatar-group.html +2 -2
  7. package/components/ui-avatar-group/ui-avatar-group.js +6 -1
  8. package/components/ui-badge/ui-badge.html +30 -30
  9. package/components/ui-breadcrumb-item/ui-breadcrumb-item.html +1 -1
  10. package/components/ui-button/ui-button.html +33 -33
  11. package/components/ui-button/ui-button.js +6 -1
  12. package/components/ui-callout/ui-callout.html +4 -4
  13. package/components/ui-card/ui-card.html +9 -9
  14. package/components/ui-checkbox/ui-checkbox.html +11 -11
  15. package/components/ui-checkbox/ui-checkbox.js +6 -1
  16. package/components/ui-cluster/ui-cluster.html +12 -12
  17. package/components/ui-combobox/ui-combobox.html +15 -17
  18. package/components/ui-combobox/ui-combobox.js +13 -15
  19. package/components/ui-container/ui-container.html +5 -5
  20. package/components/ui-context-menu/ui-context-menu.js +6 -1
  21. package/components/ui-cover/ui-cover.html +1 -1
  22. package/components/ui-description-list/ui-description-list.html +10 -10
  23. package/components/ui-dialog/ui-dialog.html +4 -4
  24. package/components/ui-dialog/ui-dialog.js +6 -1
  25. package/components/ui-disclosure/ui-disclosure.html +13 -13
  26. package/components/ui-disclosure/ui-disclosure.js +6 -1
  27. package/components/ui-editable/ui-editable.html +1 -1
  28. package/components/ui-editable/ui-editable.js +6 -1
  29. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.js +6 -1
  30. package/components/ui-editor-mention-menu/ui-editor-mention-menu.js +6 -1
  31. package/components/ui-editor-slash-menu/ui-editor-slash-menu.js +6 -1
  32. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.js +6 -1
  33. package/components/ui-editor-table-overlay/ui-editor-table-overlay.js +6 -1
  34. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js +6 -1
  35. package/components/ui-editor-toolbar/ui-editor-toolbar.html +4 -4
  36. package/components/ui-editor-toolbar/ui-editor-toolbar.js +6 -1
  37. package/components/ui-floating-action-button/ui-floating-action-button.html +1 -1
  38. package/components/ui-form-field/ui-form-field.html +1 -1
  39. package/components/ui-form-field/ui-form-field.js +6 -1
  40. package/components/ui-grid/ui-grid.html +7 -7
  41. package/components/ui-icon-button/ui-icon-button.html +26 -26
  42. package/components/ui-icon-button/ui-icon-button.js +6 -1
  43. package/components/ui-image/ui-image.html +11 -11
  44. package/components/ui-image/ui-image.js +6 -1
  45. package/components/ui-input/ui-input.html +9 -7
  46. package/components/ui-input/ui-input.js +6 -1
  47. package/components/ui-input-group/ui-input-group.html +37 -8
  48. package/components/ui-input-group/ui-input-group.js +8 -3
  49. package/components/ui-list/ui-list.html +6 -6
  50. package/components/ui-list-item/ui-list-item.html +8 -8
  51. package/components/ui-listbox/ui-listbox.js +6 -1
  52. package/components/ui-menu/ui-menu.html +3 -3
  53. package/components/ui-menu/ui-menu.js +6 -1
  54. package/components/ui-menu-item/ui-menu-item.html +3 -3
  55. package/components/ui-menu-item/ui-menu-item.js +6 -1
  56. package/components/ui-meter/ui-meter.html +7 -7
  57. package/components/ui-nav-item/ui-nav-item.html +6 -6
  58. package/components/ui-page-header/ui-page-header.html +2 -2
  59. package/components/ui-popover/ui-popover.html +3 -3
  60. package/components/ui-popover/ui-popover.js +6 -1
  61. package/components/ui-radio/ui-radio.html +10 -10
  62. package/components/ui-radio/ui-radio.js +6 -1
  63. package/components/ui-radio-group/ui-radio-group.html +2 -2
  64. package/components/ui-radio-group/ui-radio-group.js +6 -1
  65. package/components/ui-reel/ui-reel.html +11 -11
  66. package/components/ui-scroll-area/ui-scroll-area.html +4 -4
  67. package/components/ui-scroll-area/ui-scroll-area.js +6 -1
  68. package/components/ui-search-result-row/ui-search-result-row.html +5 -5
  69. package/components/ui-search-shell/ui-search-shell.js +6 -1
  70. package/components/ui-section/ui-section.html +4 -4
  71. package/components/ui-select/ui-select.html +3 -3
  72. package/components/ui-select/ui-select.js +6 -1
  73. package/components/ui-separator/ui-separator.html +4 -4
  74. package/components/ui-sidebar/ui-sidebar.html +6 -6
  75. package/components/ui-sidebar/ui-sidebar.js +6 -1
  76. package/components/ui-spinner/ui-spinner.html +1 -1
  77. package/components/ui-stack/ui-stack.html +12 -12
  78. package/components/ui-status-message/ui-status-message.html +4 -4
  79. package/components/ui-switch/ui-switch.html +11 -11
  80. package/components/ui-switch/ui-switch.js +6 -1
  81. package/components/ui-switcher/ui-switcher.html +11 -11
  82. package/components/ui-switcher/ui-switcher.js +6 -1
  83. package/components/ui-table/ui-table.html +2 -2
  84. package/components/ui-table/ui-table.js +6 -1
  85. package/components/ui-tabs/ui-tabs.html +8 -8
  86. package/components/ui-tabs/ui-tabs.js +6 -1
  87. package/components/ui-text/ui-text.html +20 -20
  88. package/components/ui-textarea/ui-textarea.html +46 -18
  89. package/components/ui-textarea/ui-textarea.js +6 -1
  90. package/components/ui-toast/ui-toast.html +4 -4
  91. package/components/ui-toast/ui-toast.js +6 -1
  92. package/components/ui-toast-region/ui-toast-region.html +16 -11
  93. package/components/ui-toast-region/ui-toast-region.js +12 -9
  94. package/components/ui-tooltip/ui-tooltip.html +1 -1
  95. package/components/ui-tooltip/ui-tooltip.js +6 -1
  96. package/components/ui-tree/ui-tree.html +2 -2
  97. package/components/ui-tree/ui-tree.js +6 -1
  98. package/components/ui-tree-item/ui-tree-item.html +4 -4
  99. package/components/ui-tree-item/ui-tree-item.js +6 -1
  100. package/dist/index.js +10 -4
  101. package/package.json +3 -3
  102. package/styles/ui-action-bar.css +1 -1
  103. package/styles/ui-affordance-scope.css +1 -1
  104. package/styles/ui-avatar-group.css +1 -1
  105. package/styles/ui-avatar.css +1 -1
  106. package/styles/ui-badge.css +1 -1
  107. package/styles/ui-breadcrumb-item.css +1 -1
  108. package/styles/ui-breadcrumbs.css +1 -1
  109. package/styles/ui-button.css +1 -1
  110. package/styles/ui-callout.css +1 -1
  111. package/styles/ui-card.css +1 -1
  112. package/styles/ui-checkbox.css +1 -1
  113. package/styles/ui-cluster.css +1 -1
  114. package/styles/ui-combobox.css +1 -1
  115. package/styles/ui-container.css +1 -1
  116. package/styles/ui-context-menu.css +1 -1
  117. package/styles/ui-cover.css +1 -1
  118. package/styles/ui-description-item.css +1 -1
  119. package/styles/ui-description-list.css +1 -1
  120. package/styles/ui-dialog.css +1 -1
  121. package/styles/ui-disclosure.css +2 -2
  122. package/styles/ui-editable.css +1 -1
  123. package/styles/ui-editor-insert-table-grid.css +1 -1
  124. package/styles/ui-editor-mention-menu-item.css +1 -1
  125. package/styles/ui-editor-mention-menu.css +1 -1
  126. package/styles/ui-editor-slash-menu-group.css +1 -1
  127. package/styles/ui-editor-slash-menu-item.css +1 -1
  128. package/styles/ui-editor-slash-menu.css +1 -1
  129. package/styles/ui-editor-table-context-menu.css +1 -1
  130. package/styles/ui-editor-table-overlay.css +1 -1
  131. package/styles/ui-editor-table-toolbar.css +1 -1
  132. package/styles/ui-editor-toolbar.css +1 -1
  133. package/styles/ui-floating-action-button.css +1 -1
  134. package/styles/ui-form-field.css +1 -1
  135. package/styles/ui-grid.css +1 -1
  136. package/styles/ui-icon-button.css +1 -1
  137. package/styles/ui-icon.css +1 -1
  138. package/styles/ui-image.css +1 -1
  139. package/styles/ui-input-group.css +36 -6
  140. package/styles/ui-input.css +1 -1
  141. package/styles/ui-list-item.css +1 -1
  142. package/styles/ui-list.css +1 -1
  143. package/styles/ui-listbox.css +1 -1
  144. package/styles/ui-menu-group.css +1 -1
  145. package/styles/ui-menu-item.css +1 -1
  146. package/styles/ui-menu.css +1 -1
  147. package/styles/ui-meter.css +1 -1
  148. package/styles/ui-nav-item.css +1 -1
  149. package/styles/ui-page-header.css +1 -1
  150. package/styles/ui-popover.css +1 -1
  151. package/styles/ui-radio-group.css +1 -1
  152. package/styles/ui-radio.css +1 -1
  153. package/styles/ui-reel.css +1 -1
  154. package/styles/ui-scroll-area.css +1 -1
  155. package/styles/ui-search-result-row.css +1 -1
  156. package/styles/ui-search-shell.css +1 -1
  157. package/styles/ui-section.css +1 -1
  158. package/styles/ui-select.css +1 -1
  159. package/styles/ui-separator.css +1 -1
  160. package/styles/ui-sidebar.css +2 -2
  161. package/styles/ui-spinner.css +1 -1
  162. package/styles/ui-stack.css +1 -1
  163. package/styles/ui-status-message.css +1 -1
  164. package/styles/ui-switch.css +1 -1
  165. package/styles/ui-switcher.css +1 -1
  166. package/styles/ui-table.css +1 -1
  167. package/styles/ui-tabs.css +1 -1
  168. package/styles/ui-text.css +1 -1
  169. package/styles/ui-textarea.css +43 -15
  170. package/styles/ui-toast-region.css +1 -1
  171. package/styles/ui-toast.css +1 -1
  172. package/styles/ui-tooltip.css +1 -1
  173. package/styles/ui-top-bar.css +1 -1
  174. package/styles/ui-tree-item.css +1 -1
  175. package/styles/ui-tree.css +1 -1
  176. package/vanilla/UiActionBar.d.ts +1 -1
  177. package/vanilla/UiActionBar.js +1 -1
  178. package/vanilla/UiAffordanceScope.d.ts +1 -1
  179. package/vanilla/UiAffordanceScope.js +1 -1
  180. package/vanilla/UiAvatar.d.ts +1 -1
  181. package/vanilla/UiAvatar.js +1 -1
  182. package/vanilla/UiAvatarGroup.d.ts +1 -1
  183. package/vanilla/UiAvatarGroup.js +1 -1
  184. package/vanilla/UiBadge.d.ts +1 -1
  185. package/vanilla/UiBadge.js +1 -1
  186. package/vanilla/UiBreadcrumbItem.d.ts +1 -1
  187. package/vanilla/UiBreadcrumbItem.js +1 -1
  188. package/vanilla/UiBreadcrumbs.d.ts +1 -1
  189. package/vanilla/UiBreadcrumbs.js +1 -1
  190. package/vanilla/UiButton.d.ts +1 -1
  191. package/vanilla/UiButton.js +1 -1
  192. package/vanilla/UiCallout.d.ts +1 -1
  193. package/vanilla/UiCallout.js +1 -1
  194. package/vanilla/UiCard.d.ts +1 -1
  195. package/vanilla/UiCard.js +1 -1
  196. package/vanilla/UiCheckbox.d.ts +1 -1
  197. package/vanilla/UiCheckbox.js +1 -1
  198. package/vanilla/UiCluster.d.ts +1 -1
  199. package/vanilla/UiCluster.js +1 -1
  200. package/vanilla/UiCombobox.d.ts +1 -3
  201. package/vanilla/UiCombobox.js +2 -2
  202. package/vanilla/UiContainer.d.ts +1 -1
  203. package/vanilla/UiContainer.js +1 -1
  204. package/vanilla/UiContextMenu.d.ts +1 -1
  205. package/vanilla/UiContextMenu.js +1 -1
  206. package/vanilla/UiCover.d.ts +1 -1
  207. package/vanilla/UiCover.js +1 -1
  208. package/vanilla/UiDescriptionItem.d.ts +1 -1
  209. package/vanilla/UiDescriptionItem.js +1 -1
  210. package/vanilla/UiDescriptionList.d.ts +1 -1
  211. package/vanilla/UiDescriptionList.js +1 -1
  212. package/vanilla/UiDialog.d.ts +1 -1
  213. package/vanilla/UiDialog.js +1 -1
  214. package/vanilla/UiDisclosure.d.ts +1 -1
  215. package/vanilla/UiDisclosure.js +1 -1
  216. package/vanilla/UiEditable.d.ts +1 -1
  217. package/vanilla/UiEditable.js +1 -1
  218. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  219. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  220. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  221. package/vanilla/UiEditorMentionMenu.js +1 -1
  222. package/vanilla/UiEditorMentionMenuItem.d.ts +1 -1
  223. package/vanilla/UiEditorMentionMenuItem.js +1 -1
  224. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  225. package/vanilla/UiEditorSlashMenu.js +1 -1
  226. package/vanilla/UiEditorSlashMenuGroup.d.ts +1 -1
  227. package/vanilla/UiEditorSlashMenuGroup.js +1 -1
  228. package/vanilla/UiEditorSlashMenuItem.d.ts +1 -1
  229. package/vanilla/UiEditorSlashMenuItem.js +1 -1
  230. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  231. package/vanilla/UiEditorTableContextMenu.js +1 -1
  232. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  233. package/vanilla/UiEditorTableOverlay.js +1 -1
  234. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  235. package/vanilla/UiEditorTableToolbar.js +1 -1
  236. package/vanilla/UiEditorToolbar.d.ts +1 -1
  237. package/vanilla/UiEditorToolbar.js +1 -1
  238. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  239. package/vanilla/UiFloatingActionButton.js +1 -1
  240. package/vanilla/UiFormField.d.ts +1 -1
  241. package/vanilla/UiFormField.js +1 -1
  242. package/vanilla/UiGrid.d.ts +1 -1
  243. package/vanilla/UiGrid.js +1 -1
  244. package/vanilla/UiIcon.d.ts +1 -1
  245. package/vanilla/UiIcon.js +1 -1
  246. package/vanilla/UiIconButton.d.ts +1 -1
  247. package/vanilla/UiIconButton.js +1 -1
  248. package/vanilla/UiImage.d.ts +1 -1
  249. package/vanilla/UiImage.js +1 -1
  250. package/vanilla/UiInput.d.ts +4 -4
  251. package/vanilla/UiInput.js +2 -2
  252. package/vanilla/UiInputGroup.d.ts +2 -1
  253. package/vanilla/UiInputGroup.js +2 -2
  254. package/vanilla/UiList.d.ts +1 -1
  255. package/vanilla/UiList.js +1 -1
  256. package/vanilla/UiListItem.d.ts +1 -1
  257. package/vanilla/UiListItem.js +1 -1
  258. package/vanilla/UiListbox.d.ts +1 -1
  259. package/vanilla/UiListbox.js +1 -1
  260. package/vanilla/UiMenu.d.ts +1 -1
  261. package/vanilla/UiMenu.js +1 -1
  262. package/vanilla/UiMenuGroup.d.ts +1 -1
  263. package/vanilla/UiMenuGroup.js +1 -1
  264. package/vanilla/UiMenuItem.d.ts +1 -1
  265. package/vanilla/UiMenuItem.js +1 -1
  266. package/vanilla/UiMeter.d.ts +1 -1
  267. package/vanilla/UiMeter.js +1 -1
  268. package/vanilla/UiNavItem.d.ts +1 -1
  269. package/vanilla/UiNavItem.js +1 -1
  270. package/vanilla/UiPageHeader.d.ts +1 -1
  271. package/vanilla/UiPageHeader.js +1 -1
  272. package/vanilla/UiPopover.d.ts +1 -1
  273. package/vanilla/UiPopover.js +1 -1
  274. package/vanilla/UiRadio.d.ts +1 -1
  275. package/vanilla/UiRadio.js +1 -1
  276. package/vanilla/UiRadioGroup.d.ts +1 -1
  277. package/vanilla/UiRadioGroup.js +1 -1
  278. package/vanilla/UiReel.d.ts +1 -1
  279. package/vanilla/UiReel.js +1 -1
  280. package/vanilla/UiScrollArea.d.ts +1 -1
  281. package/vanilla/UiScrollArea.js +1 -1
  282. package/vanilla/UiSearchResultRow.d.ts +1 -1
  283. package/vanilla/UiSearchResultRow.js +1 -1
  284. package/vanilla/UiSearchShell.d.ts +1 -1
  285. package/vanilla/UiSearchShell.js +1 -1
  286. package/vanilla/UiSection.d.ts +1 -1
  287. package/vanilla/UiSection.js +1 -1
  288. package/vanilla/UiSelect.d.ts +1 -1
  289. package/vanilla/UiSelect.js +1 -1
  290. package/vanilla/UiSeparator.d.ts +1 -1
  291. package/vanilla/UiSeparator.js +1 -1
  292. package/vanilla/UiSidebar.d.ts +1 -1
  293. package/vanilla/UiSidebar.js +1 -1
  294. package/vanilla/UiSpinner.d.ts +1 -1
  295. package/vanilla/UiSpinner.js +1 -1
  296. package/vanilla/UiStack.d.ts +1 -1
  297. package/vanilla/UiStack.js +1 -1
  298. package/vanilla/UiStatusMessage.d.ts +1 -1
  299. package/vanilla/UiStatusMessage.js +1 -1
  300. package/vanilla/UiSwitch.d.ts +1 -1
  301. package/vanilla/UiSwitch.js +1 -1
  302. package/vanilla/UiSwitcher.d.ts +1 -1
  303. package/vanilla/UiSwitcher.js +1 -1
  304. package/vanilla/UiTable.d.ts +1 -1
  305. package/vanilla/UiTable.js +1 -1
  306. package/vanilla/UiTabs.d.ts +1 -1
  307. package/vanilla/UiTabs.js +1 -1
  308. package/vanilla/UiText.d.ts +1 -1
  309. package/vanilla/UiText.js +1 -1
  310. package/vanilla/UiTextarea.d.ts +1 -1
  311. package/vanilla/UiTextarea.js +1 -1
  312. package/vanilla/UiToast.d.ts +1 -1
  313. package/vanilla/UiToast.js +1 -1
  314. package/vanilla/UiToastRegion.d.ts +2 -2
  315. package/vanilla/UiToastRegion.js +2 -2
  316. package/vanilla/UiTooltip.d.ts +1 -1
  317. package/vanilla/UiTooltip.js +1 -1
  318. package/vanilla/UiTopBar.d.ts +1 -1
  319. package/vanilla/UiTopBar.js +1 -1
  320. package/vanilla/UiTree.d.ts +1 -1
  321. package/vanilla/UiTree.js +1 -1
  322. package/vanilla/UiTreeItem.d.ts +1 -1
  323. package/vanilla/UiTreeItem.js +1 -1
  324. package/vue/UiActionBar.vue +1 -1
  325. package/vue/UiAffordanceScope.vue +8 -1
  326. package/vue/UiAvatar.d.ts +6 -9
  327. package/vue/UiAvatar.vue +71 -20
  328. package/vue/UiAvatarGroup.d.ts +7 -10
  329. package/vue/UiAvatarGroup.vue +45 -12
  330. package/vue/UiBadge.vue +1 -1
  331. package/vue/UiBreadcrumbItem.vue +1 -1
  332. package/vue/UiBreadcrumbs.vue +1 -1
  333. package/vue/UiButton.vue +1 -1
  334. package/vue/UiCallout.vue +1 -1
  335. package/vue/UiCard.vue +1 -1
  336. package/vue/UiCheckbox.d.ts +8 -11
  337. package/vue/UiCheckbox.vue +34 -11
  338. package/vue/UiCluster.vue +1 -1
  339. package/vue/UiCombobox.d.ts +60 -66
  340. package/vue/UiCombobox.vue +476 -124
  341. package/vue/UiContainer.vue +1 -1
  342. package/vue/UiContextMenu.vue +18 -9
  343. package/vue/UiCover.vue +1 -1
  344. package/vue/UiDescriptionItem.vue +1 -1
  345. package/vue/UiDescriptionList.vue +1 -1
  346. package/vue/UiDialog.d.ts +8 -11
  347. package/vue/UiDialog.vue +39 -12
  348. package/vue/UiDisclosure.d.ts +12 -15
  349. package/vue/UiDisclosure.vue +70 -24
  350. package/vue/UiEditable.d.ts +3 -3
  351. package/vue/UiEditable.vue +60 -21
  352. package/vue/UiEditorInsertTableGrid.d.ts +2 -2
  353. package/vue/UiEditorInsertTableGrid.vue +75 -14
  354. package/vue/UiEditorMentionMenu.d.ts +10 -13
  355. package/vue/UiEditorMentionMenu.vue +50 -7
  356. package/vue/UiEditorMentionMenuItem.vue +1 -1
  357. package/vue/UiEditorSlashMenu.d.ts +12 -15
  358. package/vue/UiEditorSlashMenu.vue +48 -7
  359. package/vue/UiEditorSlashMenuGroup.vue +1 -1
  360. package/vue/UiEditorSlashMenuItem.vue +1 -1
  361. package/vue/UiEditorTableContextMenu.vue +73 -4
  362. package/vue/UiEditorTableOverlay.d.ts +2 -2
  363. package/vue/UiEditorTableOverlay.vue +202 -38
  364. package/vue/UiEditorTableToolbar.d.ts +2 -2
  365. package/vue/UiEditorTableToolbar.vue +128 -7
  366. package/vue/UiEditorToolbar.vue +3 -3
  367. package/vue/UiFloatingActionButton.vue +1 -1
  368. package/vue/UiFormField.vue +1 -1
  369. package/vue/UiGrid.vue +1 -1
  370. package/vue/UiIcon.vue +1 -1
  371. package/vue/UiIconButton.vue +1 -1
  372. package/vue/UiImage.vue +7 -6
  373. package/vue/UiInput.d.ts +5 -5
  374. package/vue/UiInput.vue +15 -3
  375. package/vue/UiInputGroup.d.ts +9 -0
  376. package/vue/UiInputGroup.vue +57 -8
  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 +78 -17
  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 +30 -4
  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 +1447 -1360
  498. package/vue/host.ts +286 -42
@@ -1,5 +1,6 @@
1
1
  <template component="ui-input-group" controller="./ui-input-group.js">
2
2
  <defs>
3
+ <prop name="multiline" type="boolean" default="false">Groups a Textarea with an action below its text inside the shared frame.</prop>
3
4
  <prop name="prefixKind" type="keyword" values="text, icon" default="text"
4
5
  >Text affixes have their own framing. An icon prefix shares the field surface and uses one compact icon-to-value gap.</prop>
5
6
  <prop name="disabled" type="boolean" default="false">Fades the group's framing to match a disabled input inside it. Disable the input itself too.</prop>
@@ -46,6 +47,17 @@
46
47
  --_ui-default-input-focus-outline: none;
47
48
  --_ui-default-input-radius: 0;
48
49
  --_ui-default-input-surface: transparent;
50
+ --_ui-default-textarea-border-width: 0;
51
+ --_ui-default-textarea-border: transparent;
52
+ --_ui-default-textarea-border-hover: transparent;
53
+ --_ui-default-textarea-focus-border: transparent;
54
+ --_ui-default-textarea-invalid-border: transparent;
55
+ --_ui-default-textarea-invalid-focus-shadow: none;
56
+ --_ui-default-textarea-shadow: none;
57
+ --_ui-default-textarea-focus-shadow: none;
58
+ --_ui-default-textarea-focus-outline: none;
59
+ --_ui-default-textarea-radius: 0;
60
+ --_ui-default-textarea-surface: transparent;
49
61
 
50
62
  display: flex;
51
63
  align-items: stretch;
@@ -79,13 +91,13 @@
79
91
  }
80
92
  }
81
93
 
82
- :host:hover:not(:has(input:focus, input:disabled, input:read-only, [aria-invalid="true"], :user-invalid)) {
94
+ :host:hover:not(:has(:is(input, textarea):focus, :is(input, textarea):disabled, :is(input, textarea):read-only, [aria-invalid="true"], :user-invalid)) {
83
95
  border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
84
96
  }
85
97
 
86
98
  /* The ring shows when the field's input would show its own: when it is focus-visible, which a
87
99
  text input is for a pointer as well as a keyboard. A focused action button draws its own. */
88
- :host:has(.field input:focus-visible) {
100
+ :host:has(.field :is(input, textarea):focus-visible) {
89
101
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
90
102
  box-shadow:
91
103
  var(--ui-control-inset),
@@ -96,7 +108,7 @@
96
108
  border-color: var(--ui-input-group-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)));
97
109
  }
98
110
 
99
- :host:has(input:is([aria-invalid="true"], :user-invalid):focus-visible) {
111
+ :host:has(:is(input, textarea):is([aria-invalid="true"], :user-invalid):focus-visible) {
100
112
  box-shadow: var(
101
113
  --ui-input-group-invalid-focus-shadow,
102
114
  var(--ui-control-inset),
@@ -110,14 +122,14 @@
110
122
 
111
123
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
112
124
  @media (forced-colors: active) {
113
- :host:has(input:focus-visible) {
125
+ :host:has(:is(input, textarea):focus-visible) {
114
126
  outline: var(--ui-focus-width) solid Highlight;
115
127
  outline-offset: var(--ui-border-width);
116
128
  }
117
129
  }
118
130
 
119
- :host-state([disabled]),
120
- :host:has(input:disabled) {
131
+ :host([disabled]),
132
+ :host:has(:is(input, textarea):disabled) {
121
133
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
122
134
  box-shadow: none;
123
135
  cursor: not-allowed;
@@ -154,10 +166,10 @@
154
166
  border-inline-start: var(--ui-border-width) solid var(--ui-border-divider);
155
167
  }
156
168
 
157
- :host-state([prefixKind="icon"]) {
169
+ :host([prefixKind="icon"]) {
158
170
  --_ui-default-input-padding-inline-start: var(--ui-space-2);
159
171
  }
160
- :host-state([prefixKind="icon"]) .affix:first-child {
172
+ :host([prefixKind="icon"]) .affix:first-child {
161
173
  padding-inline-end: 0;
162
174
  border-inline-end: 0;
163
175
  background: transparent;
@@ -172,6 +184,23 @@
172
184
  padding-inline: var(--ui-space-1);
173
185
  }
174
186
 
187
+ /* Multiline text owns the first row; its action remains inside the same frame below it. */
188
+ :host([multiline]) {
189
+ display: grid;
190
+ grid-template-columns: auto minmax(0, 1fr) auto;
191
+ }
192
+
193
+ :host([multiline]) .field {
194
+ grid-column: 2;
195
+ }
196
+
197
+ :host([multiline]) .action {
198
+ grid-column: 1 / -1;
199
+ justify-content: end;
200
+ padding: var(--ui-space-2);
201
+ padding-block-start: 0;
202
+ }
203
+
175
204
  .affix:empty,
176
205
  .action:empty {
177
206
  display: none;
@@ -15,13 +15,13 @@ const affixProblem = (affix) =>
15
15
  // instead, so the input's name stays its label and the affix is read once, with the input. The
16
16
  // consumer's own aria-describedby (or a Form Field's) is kept. A press on an affix, or anywhere in
17
17
  // the box outside the input, focuses the input without moving its caret or selecting the affix.
18
- export default function controller(host) {
18
+ function connect(host) {
19
19
  const element = host.element;
20
20
  let owned = [];
21
21
  let described = null;
22
22
  const warned = new Set();
23
23
  const wire = () => {
24
- const input = element.querySelector(".field input");
24
+ const input = element.querySelector(".field :is(input, textarea)");
25
25
  const affixes = Array.from(element.querySelectorAll(":scope > .affix")).filter((affix) => {
26
26
  const text = affix.textContent.trim() !== "" && !affix.querySelector(INTERACTIVE);
27
27
  if (text) affix.setAttribute("aria-hidden", "true");
@@ -50,7 +50,7 @@ export default function controller(host) {
50
50
  };
51
51
  // Click, not pointerdown: a tap's click is a user activation, so a touch keyboard opens.
52
52
  const onClick = (event) => {
53
- if (pressedAround(event) && !host.props.disabled.value) element.querySelector(".field input")?.focus();
53
+ if (pressedAround(event) && !host.props.disabled.value) element.querySelector(".field :is(input, textarea)")?.focus();
54
54
  };
55
55
  element.addEventListener("mousedown", onMousedown);
56
56
  element.addEventListener("click", onClick);
@@ -65,3 +65,8 @@ export default function controller(host) {
65
65
  element.removeEventListener("click", onClick);
66
66
  };
67
67
  }
68
+
69
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
70
+ export default function controller(host) {
71
+ host.on("connect", () => connect(host));
72
+ }
@@ -41,16 +41,16 @@
41
41
  list-style: none;
42
42
  }
43
43
 
44
- :host-state([as="ol"]),
45
- :host-state([markers="disc"]) {
44
+ :host([as="ol"]),
45
+ :host([markers="disc"]) {
46
46
  padding-inline-start: var(--ui-space-5);
47
47
  }
48
48
 
49
- :host-state([as="ol"]) {
49
+ :host([as="ol"]) {
50
50
  list-style: decimal;
51
51
  }
52
52
 
53
- :host-state([markers="disc"]) {
53
+ :host([markers="disc"]) {
54
54
  list-style: disc;
55
55
  }
56
56
 
@@ -72,7 +72,7 @@
72
72
  }
73
73
 
74
74
  /* Compact passes its size to the items through private properties, which cross into each item. */
75
- :host-state([density="compact"]) {
75
+ :host([density="compact"]) {
76
76
  --_list-gap: var(--ui-list-gap, var(--ui-space-2));
77
77
  --_ui-list-item-min-size: 0;
78
78
  --_ui-list-item-padding-block: 0;
@@ -82,7 +82,7 @@
82
82
  --_ui-list-native-padding-inline: 0;
83
83
  }
84
84
 
85
- :host-state([layout="grid"]) {
85
+ :host([layout="grid"]) {
86
86
  --_list-gap: var(--ui-list-gap, var(--ui-space-3));
87
87
  display: grid;
88
88
  grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--_list-min-item-width)), 1fr));
@@ -66,7 +66,7 @@
66
66
  transition: background-color var(--ui-motion-fast) var(--ui-motion-ease), border-color var(--ui-motion-fast) var(--ui-motion-ease);
67
67
  }
68
68
 
69
- :host-state([variant="card"]) {
69
+ :host([variant="card"]) {
70
70
  padding-block: var(--ui-list-item-padding-block, var(--ui-space-3));
71
71
  padding-inline: var(--ui-list-item-padding-inline, var(--ui-space-4));
72
72
  border: var(--ui-border-width) solid var(--ui-border-strong);
@@ -78,15 +78,15 @@
78
78
  background: var(--ui-surface-hover);
79
79
  }
80
80
 
81
- :host-state([variant="card"]):has(.title a[href]:hover) {
81
+ :host([variant="card"]):has(.title a[href]:hover) {
82
82
  border-color: var(--ui-border-strong);
83
83
  }
84
84
 
85
- :host-state([highlighted]) {
85
+ :host([highlighted]) {
86
86
  background: var(--ui-selection-surface);
87
87
  }
88
88
 
89
- :host-state([current]) {
89
+ :host([current]) {
90
90
  background: var(--ui-selection-surface);
91
91
  color: var(--ui-selection-text);
92
92
  }
@@ -108,7 +108,7 @@
108
108
  font-size: var(--_ui-list-item-icon-size, var(--ui-font-size-lg));
109
109
  }
110
110
 
111
- :host-state([current]) .leading {
111
+ :host([current]) .leading {
112
112
  color: var(--ui-selection-text);
113
113
  }
114
114
 
@@ -137,8 +137,8 @@
137
137
  white-space: nowrap;
138
138
  }
139
139
 
140
- :host-state([wrap]) .title,
141
- :host-state([wrap]) .description {
140
+ :host([wrap]) .title,
141
+ :host([wrap]) .description {
142
142
  white-space: normal;
143
143
  overflow-wrap: anywhere;
144
144
  }
@@ -184,7 +184,7 @@
184
184
  outline: var(--ui-focus-width) solid Highlight;
185
185
  outline-offset: calc(-1 * var(--ui-focus-width));
186
186
  }
187
- :is(:host-state([current]), :host-state([highlighted])):not(:has(a:focus-visible)) {
187
+ :is(:host([current]), :host([highlighted])):not(:has(a:focus-visible)) {
188
188
  outline: var(--ui-border-width) solid Highlight;
189
189
  outline-offset: calc(-1 * var(--ui-border-width));
190
190
  }
@@ -13,7 +13,7 @@ function readOptions(container) {
13
13
  }));
14
14
  }
15
15
 
16
- export default function controller(host) {
16
+ function connect(host) {
17
17
  const element = host.element;
18
18
  const { options: authored, validity } = host.refs;
19
19
  const form = element.closest("form");
@@ -169,3 +169,8 @@ export default function controller(host) {
169
169
  validity.removeEventListener("invalid", onInvalid);
170
170
  };
171
171
  }
172
+
173
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
174
+ export default function controller(host) {
175
+ host.on("connect", () => connect(host));
176
+ }
@@ -55,7 +55,7 @@
55
55
 
56
56
  /* Compact sets its items' defaults, so nothing has to rescale a global; an item's own hooks
57
57
  still win. */
58
- :host-state([density="compact"]) {
58
+ :host([density="compact"]) {
59
59
  --_ui-default-menu-item-padding-block: var(--ui-space-1);
60
60
  --_ui-default-menu-item-padding-inline: var(--ui-space-2);
61
61
  --_ui-default-menu-item-font-size: var(--ui-font-size-sm);
@@ -65,7 +65,7 @@
65
65
  }
66
66
 
67
67
  /* Small follows its trigger down: an item's own hooks still win. */
68
- :host-state([size="sm"]) {
68
+ :host([size="sm"]) {
69
69
  --_ui-default-menu-item-padding-block: var(--ui-space-0-5);
70
70
  --_ui-default-menu-item-padding-inline: var(--ui-space-2);
71
71
  --_ui-default-menu-item-font-size: var(--ui-font-size-xs);
@@ -126,7 +126,7 @@
126
126
  border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
127
127
  }
128
128
 
129
- :host:not(:host-state([internalOpen])):not(:host-state([inline])) {
129
+ :host:not(:host-state([internalOpen])):not(:host([inline])) {
130
130
  display: none;
131
131
  }
132
132
 
@@ -11,7 +11,7 @@ function disabled(item) {
11
11
  return item.getAttribute("aria-disabled") === "true" || item.hasAttribute("disabled") || item.getAttribute("disabled") === "true";
12
12
  }
13
13
 
14
- export default function controller(host) {
14
+ function connect(host) {
15
15
  const element = host.element;
16
16
  const document = element.ownerDocument;
17
17
  const overlayId = `ui-menu-${Math.random().toString(36).slice(2, 11)}`;
@@ -136,3 +136,8 @@ export default function controller(host) {
136
136
  releaseAnchor();
137
137
  };
138
138
  }
139
+
140
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
141
+ export default function controller(host) {
142
+ host.on("connect", () => connect(host));
143
+ }
@@ -113,18 +113,18 @@
113
113
  --_ui-default-icon-size: 0.75rem;
114
114
  }
115
115
 
116
- :host-state([type="action"]) .indicator {
116
+ :host([type="action"]) .indicator {
117
117
  display: none;
118
118
  }
119
119
 
120
- :host-state([type="checkbox"])[aria-checked="true"] .indicator {
120
+ :host([type="checkbox"])[aria-checked="true"] .indicator {
121
121
  border-color: var(--ui-accent);
122
122
  background: var(--ui-accent);
123
123
  }
124
124
 
125
125
  /* A menu marks its chosen item with a check, as menus conventionally do; a radio circle reads
126
126
  as a form control. The empty slot keeps unchosen labels aligned with the chosen one. */
127
- :host-state([type="radio"]) .indicator {
127
+ :host([type="radio"]) .indicator {
128
128
  border-color: transparent;
129
129
  color: var(--ui-text-secondary);
130
130
  }
@@ -2,7 +2,7 @@ function radioScope(item) {
2
2
  return item.closest('[role="group"]') ?? item.closest('[role="menu"]');
3
3
  }
4
4
 
5
- export default function controller(host) {
5
+ function connect(host) {
6
6
  const item = host.element;
7
7
  let external = Boolean(host.props.checked.value);
8
8
  host.state.internalChecked = external;
@@ -45,3 +45,8 @@ export default function controller(host) {
45
45
  item.removeEventListener("ui-menu-item-clear", onClear);
46
46
  };
47
47
  }
48
+
49
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
50
+ export default function controller(host) {
51
+ host.on("connect", () => connect(host));
52
+ }
@@ -61,7 +61,7 @@
61
61
  outline: var(--ui-border-width) solid transparent;
62
62
  }
63
63
 
64
- :host-state([size="sm"]) {
64
+ :host([size="sm"]) {
65
65
  inline-size: var(--ui-meter-inline-size, 5rem);
66
66
  block-size: var(--ui-space-1);
67
67
  }
@@ -74,23 +74,23 @@
74
74
  box-shadow: inset 0 1px rgb(255 255 255 / 0.26), inset 0 -1px rgb(0 0 0 / 0.1);
75
75
  }
76
76
 
77
- :host-state([tone="accent"]) {
77
+ :host([tone="accent"]) {
78
78
  --_meter-fill: var(--ui-accent-solid);
79
79
  }
80
80
 
81
- :host-state([tone="info"]) {
81
+ :host([tone="info"]) {
82
82
  --_meter-fill: var(--ui-info-solid);
83
83
  }
84
84
 
85
- :host-state([tone="success"]) {
85
+ :host([tone="success"]) {
86
86
  --_meter-fill: var(--ui-success-solid);
87
87
  }
88
88
 
89
- :host-state([tone="warning"]) {
89
+ :host([tone="warning"]) {
90
90
  --_meter-fill: var(--ui-warning-solid);
91
91
  }
92
92
 
93
- :host-state([tone="danger"]) {
93
+ :host([tone="danger"]) {
94
94
  --_meter-fill: var(--ui-danger-solid);
95
95
  }
96
96
 
@@ -154,7 +154,7 @@
154
154
  mask-image: repeating-linear-gradient(to right, #000 0 var(--_meter-segment), transparent 0 var(--_meter-period));
155
155
  }
156
156
 
157
- :host-state([size="sm"])[data-ui-meter-segments] {
157
+ :host([size="sm"])[data-ui-meter-segments] {
158
158
  --_meter-gap: var(--ui-space-0-5);
159
159
  }
160
160
 
@@ -113,7 +113,7 @@
113
113
  color: var(--ui-selection-text);
114
114
  }
115
115
 
116
- :host-state([variant="line"]) {
116
+ :host([variant="line"]) {
117
117
  border-radius: 0;
118
118
  }
119
119
 
@@ -130,14 +130,14 @@
130
130
  border-inline-start: var(--_indicator-width) solid var(--_indicator-color);
131
131
  }
132
132
 
133
- :host-state([variant="line"])[aria-current] .indicator {
133
+ :host([variant="line"])[aria-current] .indicator {
134
134
  display: block;
135
135
  }
136
136
 
137
137
  @media (forced-colors: active) {
138
138
  /* System colors may erase the selected fill. Trace the complete surface, without
139
139
  creating an edge stripe; the stronger keyboard focus outline keeps precedence. */
140
- :host-state([variant="surface"])[aria-current]:not(:focus-visible) {
140
+ :host([variant="surface"])[aria-current]:not(:focus-visible) {
141
141
  outline: var(--ui-border-width) solid Highlight;
142
142
  outline-offset: calc(-1 * var(--ui-border-width));
143
143
  }
@@ -186,17 +186,17 @@
186
186
  line-height: var(--ui-line-height-tight);
187
187
  }
188
188
 
189
- :host-state([density="compact"]) {
189
+ :host([density="compact"]) {
190
190
  min-block-size: var(--ui-nav-compact-min-block-size);
191
191
  padding-block: var(--ui-nav-compact-padding-block);
192
192
  padding-inline: var(--ui-nav-compact-padding-inline);
193
193
  }
194
- :host-state([density="compact"]) .label {
194
+ :host([density="compact"]) .label {
195
195
  font-size: var(--ui-font-size-sm);
196
196
  }
197
197
 
198
198
  @media (pointer: coarse) {
199
- :host-state([density="compact"]) {
199
+ :host([density="compact"]) {
200
200
  min-block-size: var(--ui-control-min-block-size);
201
201
  }
202
202
  }
@@ -73,12 +73,12 @@
73
73
  gap: var(--ui-space-2);
74
74
  }
75
75
 
76
- :host-state([align="center"]) {
76
+ :host([align="center"]) {
77
77
  flex-direction: column;
78
78
  text-align: center;
79
79
  }
80
80
 
81
- :host-state([align="center"]) .copy {
81
+ :host([align="center"]) .copy {
82
82
  align-items: center;
83
83
  flex-basis: auto;
84
84
  }
@@ -122,15 +122,15 @@
122
122
  }
123
123
  }
124
124
 
125
- :host-state([size="sm"]) {
125
+ :host([size="sm"]) {
126
126
  inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
127
127
  max-inline-size: min(22rem, calc(100vw - var(--ui-space-2) * 2));
128
128
  }
129
- :host-state([size="md"]) {
129
+ :host([size="md"]) {
130
130
  inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
131
131
  max-inline-size: min(28rem, calc(100vw - var(--ui-space-2) * 2));
132
132
  }
133
- :host-state([size="lg"]) {
133
+ :host([size="lg"]) {
134
134
  inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
135
135
  max-inline-size: min(36rem, calc(100vw - var(--ui-space-2) * 2));
136
136
  }
@@ -1,6 +1,6 @@
1
1
  import { closeOverlay, createAnchoredSurface, createIdResolver, openOverlay, requestTopOverlayClose } from "../shared/overlay.js";
2
2
 
3
- export default function controller(host) {
3
+ function connect(host) {
4
4
  const element = host.element;
5
5
  const document = element.ownerDocument;
6
6
  const offset = () => {
@@ -98,3 +98,8 @@ export default function controller(host) {
98
98
  releaseAnchor();
99
99
  };
100
100
  }
101
+
102
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
103
+ export default function controller(host) {
104
+ host.on("connect", () => connect(host));
105
+ }
@@ -90,44 +90,44 @@
90
90
  outline-offset: var(--ui-focus-width);
91
91
  }
92
92
 
93
- :host-state([disabled]) {
93
+ :host([disabled]) {
94
94
  color: var(--ui-disabled-text);
95
95
  cursor: not-allowed;
96
96
  }
97
- :host-state([disabled]) .description {
97
+ :host([disabled]) .description {
98
98
  color: var(--ui-disabled-text);
99
99
  }
100
- :host-state([disabled]) input {
100
+ :host([disabled]) input {
101
101
  cursor: not-allowed;
102
102
  }
103
103
 
104
104
  /* A sized choice keeps its box and aligns instead: the label takes that size's field type size,
105
105
  and the first line centres in that control height, so the label shares a row's baseline.
106
106
  Multi-line labels and descriptions still grow downward from that first line. */
107
- :host-state([size="sm"]) {
107
+ :host([size="sm"]) {
108
108
  --_font: var(--ui-font-size-sm);
109
109
  --_row: var(--ui-control-size-sm);
110
110
  }
111
111
 
112
- :host-state([size="lg"]) {
112
+ :host([size="lg"]) {
113
113
  --_font: var(--ui-font-size-md);
114
114
  --_row: var(--ui-control-size-lg);
115
115
  }
116
116
 
117
- :host-state([size="sm"]),
118
- :host-state([size="lg"]) {
117
+ :host([size="sm"]),
118
+ :host([size="lg"]) {
119
119
  --_line: calc(var(--_font) * var(--ui-line-height-md));
120
120
  font-size: var(--_font);
121
121
  padding-block: calc((var(--_row) - var(--_line)) / 2);
122
122
  }
123
123
 
124
- :host-state([size="sm"]) input,
125
- :host-state([size="lg"]) input {
124
+ :host([size="sm"]) input,
125
+ :host([size="lg"]) input {
126
126
  margin-top: calc((var(--_line) - var(--_ui-radio-size, 1.125rem)) / 2 + 1px);
127
127
  }
128
128
 
129
129
  @media (pointer: coarse) {
130
- :host-state([size="sm"]) {
130
+ :host([size="sm"]) {
131
131
  --_row: var(--ui-control-min-block-size);
132
132
  }
133
133
  }
@@ -6,7 +6,7 @@ import { trackTrigger } from "../shared/trigger.js";
6
6
  // `checked` sets the control initially and whenever it changes; the user's changes update the state.
7
7
  // A form reset returns the control to `checked`. Vue writes the checked attribute on every render, so
8
8
  // the native default alone cannot hold it there.
9
- export default function controller(host) {
9
+ function connect(host) {
10
10
  const input = host.refs.input;
11
11
  describeInput(input, host.refs.description);
12
12
  const [trigger, stopTracking] = trackTrigger(host);
@@ -40,3 +40,8 @@ export default function controller(host) {
40
40
  input.removeEventListener("change", onChange);
41
41
  };
42
42
  }
43
+
44
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
45
+ export default function controller(host) {
46
+ host.on("connect", () => connect(host));
47
+ }
@@ -64,11 +64,11 @@
64
64
  clear: both;
65
65
  }
66
66
 
67
- :host-state([invalid]) legend {
67
+ :host([invalid]) legend {
68
68
  color: var(--_ui-radio-group-invalid-text);
69
69
  }
70
70
 
71
- :host-state([orientation="vertical"]) {
71
+ :host([orientation="vertical"]) {
72
72
  display: inline-grid;
73
73
  justify-items: start;
74
74
  }
@@ -7,7 +7,7 @@ let groups = 0;
7
7
  // Native radios that share a name already move and check with the arrow keys. The group gives its
8
8
  // radios that name, applies a controlled value, and reports the user's choice. Its fieldset disables
9
9
  // them, so a radio's own disabled is never overwritten.
10
- export default function controller(host) {
10
+ function connect(host) {
11
11
  const element = host.element;
12
12
  const name = String(host.props.name.value || `ui-radio-group-${++groups}`);
13
13
  const [trigger, stopTracking] = trackTrigger(host);
@@ -60,3 +60,8 @@ export default function controller(host) {
60
60
  element.removeEventListener("change", onChange);
61
61
  };
62
62
  }
63
+
64
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
65
+ export default function controller(host) {
66
+ host.on("connect", () => connect(host));
67
+ }
@@ -68,37 +68,37 @@
68
68
  flex: 0 0 var(--_ui-reel-item-width, var(--_reel-item-width));
69
69
  }
70
70
 
71
- :host-state([gap="xs"]) {
71
+ :host([gap="xs"]) {
72
72
  --_reel-gap: var(--ui-space-2);
73
73
  }
74
- :host-state([gap="s"]) {
74
+ :host([gap="s"]) {
75
75
  --_reel-gap: var(--ui-space-3);
76
76
  }
77
- :host-state([gap="m"]) {
77
+ :host([gap="m"]) {
78
78
  --_reel-gap: var(--ui-space-4);
79
79
  }
80
- :host-state([gap="l"]) {
80
+ :host([gap="l"]) {
81
81
  --_reel-gap: var(--ui-space-5);
82
82
  }
83
- :host-state([gap="xl"]) {
83
+ :host([gap="xl"]) {
84
84
  --_reel-gap: var(--ui-space-6);
85
85
  }
86
- :host-state([itemWidth="sm"]) {
86
+ :host([itemWidth="sm"]) {
87
87
  --_reel-item-width: 12rem;
88
88
  }
89
- :host-state([itemWidth="md"]) {
89
+ :host([itemWidth="md"]) {
90
90
  --_reel-item-width: 16rem;
91
91
  }
92
- :host-state([itemWidth="lg"]) {
92
+ :host([itemWidth="lg"]) {
93
93
  --_reel-item-width: 20rem;
94
94
  }
95
- :host-state([snap]) {
95
+ :host([snap]) {
96
96
  scroll-snap-type: inline mandatory;
97
97
  }
98
- :host-state([snap="start"]) > :slotted(*) {
98
+ :host([snap="start"]) > :slotted(*) {
99
99
  scroll-snap-align: start;
100
100
  }
101
- :host-state([snap="center"]) > :slotted(*) {
101
+ :host([snap="center"]) > :slotted(*) {
102
102
  scroll-snap-align: center;
103
103
  }
104
104
 
@@ -36,7 +36,7 @@
36
36
  display: flow-root;
37
37
  }
38
38
 
39
- :host-state([orientation="horizontal"]) {
39
+ :host([orientation="horizontal"]) {
40
40
  overflow-x: auto;
41
41
  overflow-y: hidden;
42
42
  --_ui-scroll-fade-direction: var(--_ui-scroll-fade-inline);
@@ -46,13 +46,13 @@
46
46
  --_ui-scroll-fade-inline: to left;
47
47
  }
48
48
 
49
- :host-state([size="sm"]) {
49
+ :host([size="sm"]) {
50
50
  max-block-size: calc(9.375rem + var(--ui-scroll-fade-size, 24px));
51
51
  }
52
- :host-state([size="md"]) {
52
+ :host([size="md"]) {
53
53
  max-block-size: 20rem;
54
54
  }
55
- :host-state([size="lg"]) {
55
+ :host([size="lg"]) {
56
56
  max-block-size: 30rem;
57
57
  }
58
58