@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
package/README.md CHANGED
@@ -15,7 +15,7 @@ import "@threadlabs/looma/vue.css";
15
15
  import { Button, TopBar } from "@threadlabs/looma/vue";
16
16
  ```
17
17
 
18
- The Vue components are ordinary Vue 3.5 single-file components, compiled to JavaScript with
18
+ The Vue components are ordinary Vue 3.5.43+ single-file components, compiled to JavaScript with
19
19
  declarations; the `.vue` sources ship beside them. They depend on Vue and Looma only.
20
20
 
21
21
  The editor is Tiptap-based and needs `@tiptap/vue-3@^2.11.5`:
@@ -19,7 +19,7 @@
19
19
  }
20
20
 
21
21
  /* Published to descendants: each guide multiplies its opacity by it, so none reaches them all. */
22
- :host-state([guide="none"]) {
22
+ :host([guide="none"]) {
23
23
  --ui-affordance-scope-guide: 0;
24
24
  }
25
25
 
@@ -4,7 +4,7 @@ function distance(point, rect) {
4
4
  return Math.hypot(dx, dy);
5
5
  }
6
6
 
7
- export default function controller(host) {
7
+ function connect(host) {
8
8
  const element = host.element;
9
9
  const owner = element.ownerDocument.defaultView;
10
10
  let anchors = [];
@@ -74,3 +74,8 @@ export default function controller(host) {
74
74
  clear();
75
75
  };
76
76
  }
77
+
78
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
79
+ export default function controller(host) {
80
+ host.on("connect", () => connect(host));
81
+ }
@@ -76,14 +76,14 @@
76
76
  text-transform: uppercase;
77
77
  }
78
78
 
79
- :host-state([size="sm"]) {
79
+ :host([size="sm"]) {
80
80
  --_ui-default-icon-size: 1rem;
81
81
  inline-size: 1.75rem;
82
82
  block-size: 1.75rem;
83
83
  font-size: var(--ui-font-size-xs);
84
84
  }
85
85
 
86
- :host-state([size="xs"]) {
86
+ :host([size="xs"]) {
87
87
  --_ui-default-icon-size: 0.75rem;
88
88
  inline-size: 1.25rem;
89
89
  block-size: 1.25rem;
@@ -96,13 +96,13 @@
96
96
  border-color: var(--ui-avatar-border, var(--ui-border-strong));
97
97
  }
98
98
 
99
- :host-state([shape="square"]) {
99
+ :host([shape="square"]) {
100
100
  border-radius: var(--ui-avatar-radius, var(--ui-radius-md));
101
101
  }
102
102
 
103
103
  /* An outline, not a dot: the avatar clips its content to the circle, and an outline is drawn
104
104
  outside the box, so the ring survives the clip and the overlap in an Avatar Group. */
105
- :host-state([active]) {
105
+ :host([active]) {
106
106
  outline: var(--ui-border-width) solid var(--ui-avatar-active-ring, var(--ui-accent-solid));
107
107
  outline-offset: var(--ui-border-width);
108
108
  }
@@ -6,7 +6,7 @@ function toInitials(value) {
6
6
  }
7
7
 
8
8
  // Shows an authored <img>, else the `src` image, else initials, and tracks whether the image loaded.
9
- export default function controller(host) {
9
+ function connect(host) {
10
10
  const element = host.element;
11
11
  const managed = host.refs.image;
12
12
  let active;
@@ -51,3 +51,8 @@ export default function controller(host) {
51
51
  active?.removeEventListener("error", onError);
52
52
  };
53
53
  }
54
+
55
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
56
+ export default function controller(host) {
57
+ host.on("connect", () => connect(host));
58
+ }
@@ -81,13 +81,13 @@
81
81
  flex-shrink: 0;
82
82
  }
83
83
 
84
- :host-state([size="sm"]) .overflow {
84
+ :host([size="sm"]) .overflow {
85
85
  margin-inline-start: -0.25rem;
86
86
  inline-size: 1.75rem;
87
87
  block-size: 1.75rem;
88
88
  }
89
89
 
90
- :host-state([size="xs"]) .overflow {
90
+ :host([size="xs"]) .overflow {
91
91
  margin-inline-start: -0.1875rem;
92
92
  inline-size: 1.25rem;
93
93
  block-size: 1.25rem;
@@ -1,6 +1,6 @@
1
1
  // Hides avatars beyond `max`, counts them into the "+N" badge, and overlaps the rest. Projected
2
2
  // avatars are component roots, which this component's styles do not reach, so the overlap is inline.
3
- export default function controller(host) {
3
+ function connect(host) {
4
4
  const element = host.element;
5
5
  const update = () => {
6
6
  const max = Number(host.props.max.value);
@@ -31,3 +31,8 @@ export default function controller(host) {
31
31
  observer.disconnect();
32
32
  };
33
33
  }
34
+
35
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
36
+ export default function controller(host) {
37
+ host.on("connect", () => connect(host));
38
+ }
@@ -126,7 +126,7 @@
126
126
  }
127
127
  }
128
128
 
129
- :host-state([size="xs"]) {
129
+ :host([size="xs"]) {
130
130
  box-sizing: border-box;
131
131
  min-inline-size: 1rem;
132
132
  min-block-size: var(--ui-badge-min-block-size, 1rem);
@@ -135,61 +135,61 @@
135
135
  line-height: var(--ui-badge-line-height, 1);
136
136
  }
137
137
 
138
- :host-state([tone="accent"]) {
138
+ :host([tone="accent"]) {
139
139
  --_badge-surface: var(--ui-accent-strong-surface, var(--ui-accent-solid));
140
140
  --_badge-border: var(--ui-accent-strong-surface, var(--ui-accent-solid));
141
141
  --_badge-text: var(--ui-accent-on-strong, var(--ui-text-on-accent));
142
142
  }
143
143
 
144
- :host-state([tone="danger"]) {
144
+ :host([tone="danger"]) {
145
145
  --_badge-surface: var(--ui-danger-strong-surface, var(--ui-danger-solid));
146
146
  --_badge-border: var(--ui-danger-strong-surface, var(--ui-danger-solid));
147
147
  --_badge-text: var(--ui-danger-on-strong, var(--ui-text-on-accent));
148
148
  }
149
149
 
150
- :host-state([tone="success"]) {
150
+ :host([tone="success"]) {
151
151
  --_badge-surface: var(--ui-success-strong-surface, var(--ui-success-solid));
152
152
  --_badge-border: var(--ui-success-strong-surface, var(--ui-success-solid));
153
153
  --_badge-text: var(--ui-success-on-strong, var(--ui-text-on-accent));
154
154
  }
155
155
 
156
- :host-state([tone="warning"]) {
156
+ :host([tone="warning"]) {
157
157
  --_badge-surface: var(--ui-warning-strong-surface, var(--ui-warning-solid));
158
158
  --_badge-border: var(--ui-warning-strong-surface, var(--ui-warning-solid));
159
159
  --_badge-text: var(--ui-warning-on-strong, var(--ui-text-on-accent));
160
160
  }
161
161
 
162
- :host-state([tone="info"]) {
162
+ :host([tone="info"]) {
163
163
  --_badge-surface: var(--ui-info-strong-surface, var(--ui-info-solid));
164
164
  --_badge-border: var(--ui-info-strong-surface, var(--ui-info-solid));
165
165
  --_badge-text: var(--ui-info-on-strong, var(--ui-text-on-accent));
166
166
  }
167
167
 
168
- :host-state([variant="subtle"][tone="accent"]) {
168
+ :host([variant="subtle"][tone="accent"]) {
169
169
  --_badge-surface: color-mix(in srgb, var(--ui-accent-solid) 19%, var(--ui-surface-default));
170
170
  --_badge-border: color-mix(in srgb, var(--ui-accent-solid) 25%, var(--ui-surface-default));
171
171
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
172
172
  }
173
173
 
174
- :host-state([variant="subtle"][tone="danger"]) {
174
+ :host([variant="subtle"][tone="danger"]) {
175
175
  --_badge-surface: color-mix(in srgb, var(--ui-danger-solid) 19%, var(--ui-surface-default));
176
176
  --_badge-border: color-mix(in srgb, var(--ui-danger-solid) 25%, var(--ui-surface-default));
177
177
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
178
178
  }
179
179
 
180
- :host-state([variant="subtle"][tone="success"]) {
180
+ :host([variant="subtle"][tone="success"]) {
181
181
  --_badge-surface: color-mix(in srgb, var(--ui-success-solid) 19%, var(--ui-surface-default));
182
182
  --_badge-border: color-mix(in srgb, var(--ui-success-solid) 25%, var(--ui-surface-default));
183
183
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
184
184
  }
185
185
 
186
- :host-state([variant="subtle"][tone="warning"]) {
186
+ :host([variant="subtle"][tone="warning"]) {
187
187
  --_badge-surface: color-mix(in srgb, var(--ui-warning-solid) 19%, var(--ui-surface-default));
188
188
  --_badge-border: color-mix(in srgb, var(--ui-warning-solid) 25%, var(--ui-surface-default));
189
189
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
190
190
  }
191
191
 
192
- :host-state([variant="subtle"][tone="info"]) {
192
+ :host([variant="subtle"][tone="info"]) {
193
193
  --_badge-surface: color-mix(in srgb, var(--ui-info-solid) 19%, var(--ui-surface-default));
194
194
  --_badge-border: color-mix(in srgb, var(--ui-info-solid) 25%, var(--ui-surface-default));
195
195
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
@@ -197,13 +197,13 @@
197
197
 
198
198
  /* A solid colour fills with the ink. Its text is the page surface, mixed at 0% only so that it too is
199
199
  invalid while the hook is unset. */
200
- :host-state([variant="solid"]) {
200
+ :host([variant="solid"]) {
201
201
  --_badge-color-surface: var(--_badge-color-ink);
202
202
  --_badge-color-border: var(--_badge-color-ink);
203
203
  --_badge-color-text: color-mix(in oklab, var(--_ui-badge-color) 0%, var(--ui-surface-default));
204
204
  }
205
205
 
206
- :host-state([variant="outline"]) {
206
+ :host([variant="outline"]) {
207
207
  --_badge-surface: var(--ui-surface-default);
208
208
  --_badge-border: var(--ui-border-strong);
209
209
  --_badge-text: var(--ui-text-secondary);
@@ -212,33 +212,33 @@
212
212
  --_badge-color-border: var(--_badge-color-ink);
213
213
  }
214
214
 
215
- :host-state([variant="outline"][tone="accent"]) {
215
+ :host([variant="outline"][tone="accent"]) {
216
216
  --_badge-border: var(--ui-accent-solid);
217
217
  --_badge-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
218
218
  }
219
219
 
220
- :host-state([variant="outline"][tone="danger"]) {
220
+ :host([variant="outline"][tone="danger"]) {
221
221
  --_badge-border: var(--ui-danger-solid);
222
222
  --_badge-text: var(--ui-danger-subtle-text, var(--ui-danger-solid));
223
223
  }
224
224
 
225
- :host-state([variant="outline"][tone="success"]) {
225
+ :host([variant="outline"][tone="success"]) {
226
226
  --_badge-border: var(--ui-success-solid);
227
227
  --_badge-text: var(--ui-success-subtle-text, var(--ui-success-solid));
228
228
  }
229
229
 
230
- :host-state([variant="outline"][tone="warning"]) {
230
+ :host([variant="outline"][tone="warning"]) {
231
231
  --_badge-border: var(--ui-warning-solid);
232
232
  --_badge-text: var(--ui-warning-subtle-text, var(--ui-warning-solid));
233
233
  }
234
234
 
235
- :host-state([variant="outline"][tone="info"]) {
235
+ :host([variant="outline"][tone="info"]) {
236
236
  --_badge-border: var(--ui-info-solid);
237
237
  --_badge-text: var(--ui-info-subtle-text, var(--ui-info-solid));
238
238
  }
239
239
 
240
240
  /* An icon mark keeps the existing tone recipe and follows the global spacing and radius. */
241
- :host-state([shape="square"]) {
241
+ :host([shape="square"]) {
242
242
  --_badge-square-size: var(--ui-badge-square-size, calc(var(--ui-space-4) * 2));
243
243
  display: inline-flex;
244
244
  box-sizing: border-box;
@@ -252,18 +252,18 @@
252
252
  text-box-trim: none;
253
253
  }
254
254
 
255
- :host-state([shape="square"][size="xs"]) {
255
+ :host([shape="square"][size="xs"]) {
256
256
  --_badge-square-size: var(--ui-badge-square-size, calc(var(--ui-space-3) * 2));
257
257
  }
258
258
 
259
- :host-state([shape="square"]) .label {
259
+ :host([shape="square"]) .label {
260
260
  display: inline-flex;
261
261
  align-items: center;
262
262
  justify-content: center;
263
263
  }
264
264
 
265
265
  /* A dot uses the badge's tone recipe; only its silhouette and visible label change. */
266
- :host-state([shape="dot"]) {
266
+ :host([shape="dot"]) {
267
267
  position: relative;
268
268
  box-sizing: border-box;
269
269
  flex: none;
@@ -276,7 +276,7 @@
276
276
  text-box-trim: none;
277
277
  }
278
278
 
279
- :host-state([shape="dot"]) .label {
279
+ :host([shape="dot"]) .label {
280
280
  position: absolute;
281
281
  inline-size: 1px;
282
282
  block-size: 1px;
@@ -287,7 +287,7 @@
287
287
 
288
288
  /* The clipped point needs an inset surface over an outer border-colour shape: a native border
289
289
  has no diagonal edge to follow. Keep this edge for every tag variant. */
290
- :host-state([shape="tag"]) {
290
+ :host([shape="tag"]) {
291
291
  --_badge-point: var(--ui-badge-point, var(--ui-space-2));
292
292
 
293
293
  position: relative;
@@ -299,7 +299,7 @@
299
299
  clip-path: polygon(0 0, calc(100% - var(--_badge-point)) 0, 100% 50%, calc(100% - var(--_badge-point)) 100%, 0 100%);
300
300
  }
301
301
 
302
- :host-state([shape="tag"])::before {
302
+ :host([shape="tag"])::before {
303
303
  content: "";
304
304
  position: absolute;
305
305
  inset: 0;
@@ -309,30 +309,30 @@
309
309
  pointer-events: none;
310
310
  }
311
311
 
312
- :host-state([shape="tag"]):dir(rtl) {
312
+ :host([shape="tag"]):dir(rtl) {
313
313
  padding-inline-end: var(--ui-badge-padding-inline, var(--ui-space-2));
314
314
  padding-inline-start: calc(var(--ui-badge-padding-inline, var(--ui-space-2)) + var(--_badge-point));
315
315
  clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
316
316
  }
317
317
 
318
- :host-state([shape="tag"]):dir(rtl)::before {
318
+ :host([shape="tag"]):dir(rtl)::before {
319
319
  clip-path: polygon(var(--_badge-point) 0, 100% 0, 100% 100%, var(--_badge-point) 100%, 0 50%);
320
320
  }
321
321
 
322
322
  @media (forced-colors: active) {
323
- :host-state([shape="dot"]) {
323
+ :host([shape="dot"]) {
324
324
  forced-color-adjust: none;
325
325
  border-color: CanvasText;
326
326
  background: CanvasText;
327
327
  }
328
328
 
329
- :host-state([shape="tag"]) {
329
+ :host([shape="tag"]) {
330
330
  forced-color-adjust: none;
331
331
  background: CanvasText;
332
332
  color: CanvasText;
333
333
  }
334
334
 
335
- :host-state([shape="tag"])::before {
335
+ :host([shape="tag"])::before {
336
336
  background: Canvas;
337
337
  }
338
338
  }
@@ -48,7 +48,7 @@
48
48
  text-decoration: underline;
49
49
  }
50
50
 
51
- :host-state([current]) .content {
51
+ :host([current]) .content {
52
52
  color: var(--ui-text-primary);
53
53
  font-weight: var(--ui-font-medium);
54
54
  }
@@ -185,12 +185,12 @@
185
185
  color: var(--_tone-text);
186
186
  }
187
187
 
188
- :host-state([align="start"]) {
188
+ :host([align="start"]) {
189
189
  justify-content: flex-start;
190
190
  text-align: start;
191
191
  }
192
192
 
193
- :host-state([stretch]) {
193
+ :host([stretch]) {
194
194
  display: flex;
195
195
  inline-size: 100%;
196
196
  }
@@ -241,23 +241,23 @@
241
241
  }
242
242
  }
243
243
 
244
- :host-state([size="xs"]) {
244
+ :host([size="xs"]) {
245
245
  min-block-size: 1.5rem;
246
246
  padding: calc(var(--ui-space-0-5) * 1.5) calc(var(--ui-space-1) * 1.25);
247
247
  font-size: var(--ui-font-size-xs);
248
248
  }
249
249
 
250
- :host-state([shape="pill"]) {
250
+ :host([shape="pill"]) {
251
251
  border-radius: var(--ui-button-radius, var(--ui-radius-round));
252
252
  }
253
253
 
254
- :host-state([size="sm"]) {
254
+ :host([size="sm"]) {
255
255
  min-block-size: var(--ui-control-size-sm);
256
256
  padding: var(--ui-space-1) var(--ui-space-2);
257
257
  font-size: var(--ui-font-size-sm);
258
258
  }
259
259
 
260
- :host-state([size="lg"]) {
260
+ :host([size="lg"]) {
261
261
  min-block-size: var(--ui-control-size-lg);
262
262
  padding: var(--ui-space-3) var(--ui-space-4);
263
263
  font-size: var(--ui-font-size-md);
@@ -265,7 +265,7 @@
265
265
 
266
266
  /* Card actions inherit Button's palette and behavior; only their shared layout changes.
267
267
  The icon may contain any decorative composition. Empty icons remove their column. */
268
- :host-state([variant="card"]) {
268
+ :host([variant="card"]) {
269
269
  display: grid;
270
270
  grid-template-columns: auto minmax(0, 1fr) auto;
271
271
  align-content: center;
@@ -278,10 +278,10 @@
278
278
  box-shadow: none;
279
279
  background-image: none;
280
280
  }
281
- :host-state([variant="card"][size="lg"]) {
281
+ :host([variant="card"][size="lg"]) {
282
282
  min-block-size: max(var(--ui-control-min-block-size), var(--ui-control-size-lg));
283
283
  }
284
- :host-state([variant="card"]):has(.card-icon:empty) {
284
+ :host([variant="card"]):has(.card-icon:empty) {
285
285
  grid-template-columns: minmax(0, 1fr) auto;
286
286
  }
287
287
  .card-icon {
@@ -314,19 +314,19 @@
314
314
  box-shadow: var(--ui-pressed);
315
315
  }
316
316
 
317
- :host-state([variant="solid"]), :host-state([variant="danger"]) {
317
+ :host([variant="solid"]), :host([variant="danger"]) {
318
318
  border-color: var(--_tone);
319
319
  background-color: var(--_tone);
320
320
  color: var(--_on-tone);
321
321
  box-shadow: var(--ui-button-solid-shadow, var(--ui-raised));
322
322
  }
323
323
 
324
- :is(:host-state([variant="solid"]), :host-state([variant="danger"])):hover:not(:disabled, [aria-disabled="true"]) {
324
+ :is(:host([variant="solid"]), :host([variant="danger"])):hover:not(:disabled, [aria-disabled="true"]) {
325
325
  background-color: var(--_tone-hover);
326
326
  border-color: var(--_tone-hover);
327
327
  }
328
328
 
329
- :is(:host-state([variant="solid"]), :host-state([variant="danger"])):active:not(:disabled, [aria-disabled="true"]) {
329
+ :is(:host([variant="solid"]), :host([variant="danger"])):active:not(:disabled, [aria-disabled="true"]) {
330
330
  background-color: var(--_tone-active);
331
331
  border-color: var(--_tone-active);
332
332
  background-image: none;
@@ -335,7 +335,7 @@
335
335
 
336
336
  /* Tone is the colour, variant is the volume. Every pairing works: a danger outline is a
337
337
  destructive secondary action, not a special case. */
338
- :host-state([tone="neutral"]) {
338
+ :host([tone="neutral"]) {
339
339
  --_hue: var(--ui-text);
340
340
  --_hue-hover: var(--ui-text);
341
341
  --_hue-active: var(--ui-text);
@@ -343,7 +343,7 @@
343
343
  --_on-hue: var(--ui-surface);
344
344
  }
345
345
 
346
- :host-state([tone="danger"]), :host-state([variant="danger"]) {
346
+ :host([tone="danger"]), :host([variant="danger"]) {
347
347
  --_hue: var(--ui-danger);
348
348
  --_hue-hover: var(--ui-danger-hover);
349
349
  --_hue-active: var(--ui-danger-hover);
@@ -351,7 +351,7 @@
351
351
  --_on-hue: var(--ui-on-danger);
352
352
  }
353
353
 
354
- :host-state([tone="success"]) {
354
+ :host([tone="success"]) {
355
355
  --_hue: var(--ui-success);
356
356
  --_hue-hover: color-mix(in srgb, var(--ui-success) 85%, #000);
357
357
  --_hue-active: color-mix(in srgb, var(--ui-success) 75%, #000);
@@ -359,7 +359,7 @@
359
359
  --_on-hue: var(--ui-surface);
360
360
  }
361
361
 
362
- :host-state([tone="warning"]) {
362
+ :host([tone="warning"]) {
363
363
  --_hue: var(--ui-warning);
364
364
  --_hue-hover: color-mix(in srgb, var(--ui-warning) 85%, #000);
365
365
  --_hue-active: color-mix(in srgb, var(--ui-warning) 75%, #000);
@@ -367,7 +367,7 @@
367
367
  --_on-hue: var(--ui-surface);
368
368
  }
369
369
 
370
- :host-state([tone="info"]) {
370
+ :host([tone="info"]) {
371
371
  --_hue: var(--ui-info);
372
372
  --_hue-hover: color-mix(in srgb, var(--ui-info) 85%, #000);
373
373
  --_hue-active: color-mix(in srgb, var(--ui-info) 75%, #000);
@@ -375,7 +375,7 @@
375
375
  --_on-hue: var(--ui-surface);
376
376
  }
377
377
 
378
- :host-state([variant="ghost"]) {
378
+ :host([variant="ghost"]) {
379
379
  border-color: transparent;
380
380
  background: transparent;
381
381
  box-shadow: none;
@@ -383,14 +383,14 @@
383
383
  }
384
384
 
385
385
  /* Tints derive from the text colour, not a surface token, so hover and press show on any background. */
386
- :host-state([variant="ghost"]):hover:not(:disabled, [aria-disabled="true"]) {
386
+ :host([variant="ghost"]):hover:not(:disabled, [aria-disabled="true"]) {
387
387
  background-color: var(--ui-button-ghost-hover-surface, oklch(from var(--_tone) l c h / 10%));
388
388
  border-color: transparent;
389
389
  }
390
390
 
391
391
  /* Pressed, or holding its menu open, a ghost button sinks slightly: a light surface with a faint
392
392
  edge and a soft inner shadow. Lighter than hover, so an open menu's trigger never reads as heavy. */
393
- :host-state([variant="ghost"]):is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
393
+ :host([variant="ghost"]):is(:active, [aria-expanded="true"]):not(:disabled, [aria-disabled="true"]) {
394
394
  background-color: var(--ui-button-ghost-active-surface, color-mix(in oklch, var(--ui-surface), var(--_tone) 3%));
395
395
  border-color: transparent;
396
396
  box-shadow: inset 0 0 0 1px oklch(from var(--_tone) l c h / 10%), inset 0 1px 2px oklch(from var(--_tone) l c h / 8%);
@@ -404,7 +404,7 @@
404
404
  var(--ui-focus-halo);
405
405
  }
406
406
 
407
- :host-state([variant="solid"]):focus-visible {
407
+ :host([variant="solid"]):focus-visible {
408
408
  box-shadow:
409
409
  var(--ui-button-solid-shadow, var(--ui-raised)),
410
410
  var(--ui-focus-halo);
@@ -423,19 +423,19 @@
423
423
  box-shadow: none;
424
424
  }
425
425
 
426
- :is(:host-state([loading]), :host-state([pending])):focus-visible {
426
+ :is(:host([loading]), :host([pending])):focus-visible {
427
427
  box-shadow: var(--ui-focus-halo);
428
428
  }
429
429
 
430
430
  /* Ghost keeps no border, but gains the same neutral surface as other disabled buttons. */
431
- :host-state([variant="ghost"]):is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
431
+ :host([variant="ghost"]):is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
432
432
  background-color: var(--ui-disabled-surface);
433
433
  border-color: transparent;
434
434
  }
435
435
 
436
436
  /* The size states outrank :host, so sm is named too, or a small button would stay small. */
437
437
  @media (pointer: coarse) {
438
- :host, :host-state([size="sm"]) {
438
+ :host, :host([size="sm"]) {
439
439
  min-block-size: var(--ui-control-min-block-size);
440
440
  }
441
441
  }
@@ -445,13 +445,13 @@
445
445
  a link-style one keeps its text size, so a standalone one ("See all" under a list) needs the
446
446
  area. xs sits inside a line of text the same way, so it keeps its size and gains the area too.
447
447
  Only these need it: a hit area on every button would reach over its neighbours. */
448
- html[data-ui-input-modality="touch"] :host-state([variant="link"]),
449
- html[data-ui-input-modality="touch"] :host-state([size="xs"]) {
448
+ html[data-ui-input-modality="touch"] :host([variant="link"]),
449
+ html[data-ui-input-modality="touch"] :host([size="xs"]) {
450
450
  position: relative;
451
451
  }
452
452
 
453
- html[data-ui-input-modality="touch"] :host-state([variant="link"])::after,
454
- html[data-ui-input-modality="touch"] :host-state([size="xs"])::after {
453
+ html[data-ui-input-modality="touch"] :host([variant="link"])::after,
454
+ html[data-ui-input-modality="touch"] :host([size="xs"])::after {
455
455
  position: absolute;
456
456
  inset: 50% auto auto 50%;
457
457
  inline-size: max(100%, var(--ui-control-min-block-size));
@@ -462,7 +462,7 @@
462
462
 
463
463
  /* Link: an inline text action. No box, padding, or minimum height (inline targets are exempt under
464
464
  WCAG 2.5.8); the inherited font; an underline that strengthens on hover; a visible focus ring. */
465
- :host-state([variant="link"]) {
465
+ :host([variant="link"]) {
466
466
  display: inline;
467
467
  min-block-size: 0;
468
468
  padding: 0;
@@ -479,24 +479,24 @@
479
479
  transition: color var(--ui-motion-fast) var(--ui-motion-ease), text-decoration-color var(--ui-motion-fast) var(--ui-motion-ease);
480
480
  }
481
481
 
482
- :host-state([variant="link"]):hover:not(:disabled, [aria-disabled="true"]) {
482
+ :host([variant="link"]):hover:not(:disabled, [aria-disabled="true"]) {
483
483
  color: var(--ui-button-link-hover-text, var(--ui-text-primary));
484
484
  text-decoration-color: currentColor;
485
485
  background: none;
486
486
  transform: none;
487
487
  }
488
488
 
489
- :host-state([variant="link"]):active:not(:disabled, [aria-disabled="true"]) {
489
+ :host([variant="link"]):active:not(:disabled, [aria-disabled="true"]) {
490
490
  background: none;
491
491
  transform: none;
492
492
  }
493
493
 
494
- :host-state([variant="link"]):is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
494
+ :host([variant="link"]):is(:disabled, [aria-disabled="true"]:not([aria-busy="true"])) {
495
495
  background: none;
496
496
  border-color: transparent;
497
497
  }
498
498
 
499
- :host-state([variant="link"]):focus-visible {
499
+ :host([variant="link"]):focus-visible {
500
500
  box-shadow: none;
501
501
  /* Fallback keeps the ring if the token is missing: an unresolved var() would void the outline. */
502
502
  outline: var(--ui-focus-width) solid var(--ui-focus-ring);
@@ -1,5 +1,5 @@
1
1
  // Loading actions retain focus but cannot activate, navigate, submit, or notify click consumers.
2
- export default function controller(host) {
2
+ function connect(host) {
3
3
  const onClick = (event) => {
4
4
  if (!host.props.loading.value && !host.props.pending.value) return;
5
5
  event.preventDefault();
@@ -8,3 +8,8 @@ export default function controller(host) {
8
8
  host.element.addEventListener("click", onClick, true);
9
9
  return () => host.element.removeEventListener("click", onClick, true);
10
10
  }
11
+
12
+ /** Keep DOM setup and its cleanup tied to each connection, including reconnects. */
13
+ export default function controller(host) {
14
+ host.on("connect", () => connect(host));
15
+ }
@@ -136,25 +136,25 @@
136
136
  min-inline-size: 0;
137
137
  }
138
138
 
139
- :host-state([tone="neutral"]), :host-state([tone="note"]) {
139
+ :host([tone="neutral"]), :host([tone="note"]) {
140
140
  --_callout-surface: var(--ui-surface-muted);
141
141
  --_callout-border: var(--ui-border-strong);
142
142
  --_callout-icon: var(--ui-text-secondary);
143
143
  }
144
144
 
145
- :host-state([tone="warning"]) {
145
+ :host([tone="warning"]) {
146
146
  --_callout-surface: var(--ui-warning-soft);
147
147
  --_callout-border: var(--ui-warning-solid);
148
148
  --_callout-icon: var(--ui-warning-solid);
149
149
  }
150
150
 
151
- :host-state([tone="success"]) {
151
+ :host([tone="success"]) {
152
152
  --_callout-surface: var(--ui-success-soft);
153
153
  --_callout-border: var(--ui-success-solid);
154
154
  --_callout-icon: var(--ui-success-solid);
155
155
  }
156
156
 
157
- :host-state([tone="danger"]) {
157
+ :host([tone="danger"]) {
158
158
  --_callout-surface: var(--ui-danger-soft);
159
159
  --_callout-border: var(--ui-danger-solid);
160
160
  --_callout-icon: var(--ui-danger-solid);