@threadlabs/looma 0.28.5 → 0.28.7

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 (453) hide show
  1. package/components/ui-editor-block-actions/ui-editor-block-actions.html +20 -0
  2. package/components/ui-editor-block-actions/ui-editor-block-actions.js +14 -0
  3. package/components/ui-editor-image-toolbar/ui-editor-image-toolbar.html +7 -6
  4. package/components/ui-editor-image-toolbar/ui-editor-image-toolbar.js +2 -1
  5. package/components/ui-editor-link-card/ui-editor-link-card.html +57 -0
  6. package/components/ui-editor-link-card/ui-editor-link-card.js +27 -0
  7. package/components/ui-editor-mention-menu-item/ui-editor-mention-menu-item.html +3 -2
  8. package/dist/index.js +36 -34
  9. package/package.json +3 -2
  10. package/styles/ui-action-bar.css +13 -6
  11. package/styles/ui-affordance-scope.css +12 -5
  12. package/styles/ui-avatar-group.css +17 -10
  13. package/styles/ui-avatar.css +23 -16
  14. package/styles/ui-badge.css +78 -71
  15. package/styles/ui-breadcrumb-item.css +12 -5
  16. package/styles/ui-breadcrumbs.css +10 -3
  17. package/styles/ui-button.css +79 -72
  18. package/styles/ui-callout.css +29 -22
  19. package/styles/ui-card.css +25 -18
  20. package/styles/ui-checkbox.css +45 -37
  21. package/styles/ui-cluster.css +34 -27
  22. package/styles/ui-combobox.css +46 -39
  23. package/styles/ui-container.css +20 -13
  24. package/styles/ui-context-menu.css +17 -10
  25. package/styles/ui-cover.css +12 -5
  26. package/styles/ui-description-item.css +10 -3
  27. package/styles/ui-description-list.css +20 -13
  28. package/styles/ui-dialog.css +44 -35
  29. package/styles/ui-disclosure.css +32 -25
  30. package/styles/ui-editable.css +15 -8
  31. package/styles/ui-editor-block-actions.css +1 -0
  32. package/styles/ui-editor-image-toolbar.css +1 -1
  33. package/styles/ui-editor-insert-table-grid.css +11 -4
  34. package/styles/ui-editor-link-card.css +1 -0
  35. package/styles/ui-editor-mention-menu-item.css +17 -8
  36. package/styles/ui-editor-mention-menu.css +14 -7
  37. package/styles/ui-editor-slash-menu-group.css +10 -3
  38. package/styles/ui-editor-slash-menu-item.css +15 -8
  39. package/styles/ui-editor-slash-menu.css +15 -8
  40. package/styles/ui-editor-surface.css +10 -3
  41. package/styles/ui-editor-table-context-menu.css +17 -10
  42. package/styles/ui-editor-table-overlay.css +17 -10
  43. package/styles/ui-editor-table-toolbar.css +22 -15
  44. package/styles/ui-editor-toolbar.css +18 -11
  45. package/styles/ui-floating-action-button.css +21 -14
  46. package/styles/ui-form-field.css +20 -13
  47. package/styles/ui-grid.css +21 -14
  48. package/styles/ui-icon-button.css +80 -73
  49. package/styles/ui-icon.css +14 -7
  50. package/styles/ui-image.css +25 -18
  51. package/styles/ui-input-group.css +34 -27
  52. package/styles/ui-input.css +42 -35
  53. package/styles/ui-list-item.css +33 -26
  54. package/styles/ui-list.css +22 -15
  55. package/styles/ui-listbox.css +22 -14
  56. package/styles/ui-menu-group.css +10 -3
  57. package/styles/ui-menu-item.css +29 -22
  58. package/styles/ui-menu.css +25 -18
  59. package/styles/ui-meter.css +36 -29
  60. package/styles/ui-nav-item.css +26 -19
  61. package/styles/ui-page-header.css +12 -5
  62. package/styles/ui-popover.css +27 -20
  63. package/styles/ui-radio-group.css +14 -6
  64. package/styles/ui-radio.css +24 -17
  65. package/styles/ui-reel.css +28 -21
  66. package/styles/ui-scroll-area.css +22 -15
  67. package/styles/ui-search-result-row.css +28 -21
  68. package/styles/ui-search-shell.css +24 -17
  69. package/styles/ui-section.css +14 -7
  70. package/styles/ui-select.css +33 -26
  71. package/styles/ui-separator.css +17 -10
  72. package/styles/ui-sidebar.css +35 -28
  73. package/styles/ui-spinner.css +32 -23
  74. package/styles/ui-stack.css +29 -21
  75. package/styles/ui-status-message.css +14 -7
  76. package/styles/ui-switch.css +29 -22
  77. package/styles/ui-switcher.css +27 -20
  78. package/styles/ui-table.css +14 -7
  79. package/styles/ui-tabs.css +24 -17
  80. package/styles/ui-text.css +35 -28
  81. package/styles/ui-textarea.css +37 -30
  82. package/styles/ui-toast-region.css +74 -63
  83. package/styles/ui-toast.css +21 -14
  84. package/styles/ui-tooltip.css +38 -31
  85. package/styles/ui-top-bar.css +19 -12
  86. package/styles/ui-tree-item.css +79 -71
  87. package/styles/ui-tree.css +18 -11
  88. package/vanilla/UiActionBar.d.ts +1 -1
  89. package/vanilla/UiActionBar.js +1 -1
  90. package/vanilla/UiAffordanceScope.d.ts +1 -1
  91. package/vanilla/UiAffordanceScope.js +1 -1
  92. package/vanilla/UiAvatar.d.ts +1 -1
  93. package/vanilla/UiAvatar.js +1 -1
  94. package/vanilla/UiAvatarGroup.d.ts +1 -1
  95. package/vanilla/UiAvatarGroup.js +1 -1
  96. package/vanilla/UiBadge.d.ts +1 -1
  97. package/vanilla/UiBadge.js +1 -1
  98. package/vanilla/UiBreadcrumbItem.d.ts +1 -1
  99. package/vanilla/UiBreadcrumbItem.js +1 -1
  100. package/vanilla/UiBreadcrumbs.d.ts +1 -1
  101. package/vanilla/UiBreadcrumbs.js +1 -1
  102. package/vanilla/UiButton.d.ts +1 -1
  103. package/vanilla/UiButton.js +19 -57
  104. package/vanilla/UiCallout.d.ts +1 -1
  105. package/vanilla/UiCallout.js +25 -73
  106. package/vanilla/UiCard.d.ts +1 -1
  107. package/vanilla/UiCard.js +1 -1
  108. package/vanilla/UiCheckbox.d.ts +1 -1
  109. package/vanilla/UiCheckbox.js +1 -1
  110. package/vanilla/UiCluster.d.ts +1 -1
  111. package/vanilla/UiCluster.js +1 -1
  112. package/vanilla/UiCombobox.d.ts +1 -1
  113. package/vanilla/UiCombobox.js +60 -166
  114. package/vanilla/UiContainer.d.ts +1 -1
  115. package/vanilla/UiContainer.js +1 -1
  116. package/vanilla/UiContextMenu.d.ts +1 -1
  117. package/vanilla/UiContextMenu.js +1 -1
  118. package/vanilla/UiCover.d.ts +1 -1
  119. package/vanilla/UiCover.js +1 -1
  120. package/vanilla/UiDescriptionItem.d.ts +1 -1
  121. package/vanilla/UiDescriptionItem.js +1 -1
  122. package/vanilla/UiDescriptionList.d.ts +1 -1
  123. package/vanilla/UiDescriptionList.js +1 -1
  124. package/vanilla/UiDialog.d.ts +1 -1
  125. package/vanilla/UiDialog.js +4 -10
  126. package/vanilla/UiDisclosure.d.ts +1 -1
  127. package/vanilla/UiDisclosure.js +1 -1
  128. package/vanilla/UiEditable.d.ts +1 -1
  129. package/vanilla/UiEditable.js +7 -19
  130. package/vanilla/UiEditorBlockActions.d.ts +16 -0
  131. package/vanilla/UiEditorBlockActions.js +41 -0
  132. package/vanilla/UiEditorImageToolbar.d.ts +1 -1
  133. package/vanilla/UiEditorImageToolbar.js +2 -2
  134. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  135. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  136. package/vanilla/UiEditorLinkCard.d.ts +20 -0
  137. package/vanilla/UiEditorLinkCard.js +153 -0
  138. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  139. package/vanilla/UiEditorMentionMenu.js +17 -37
  140. package/vanilla/UiEditorMentionMenuItem.d.ts +1 -1
  141. package/vanilla/UiEditorMentionMenuItem.js +4 -10
  142. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  143. package/vanilla/UiEditorSlashMenu.js +5 -4
  144. package/vanilla/UiEditorSlashMenuGroup.d.ts +1 -1
  145. package/vanilla/UiEditorSlashMenuGroup.js +1 -1
  146. package/vanilla/UiEditorSlashMenuItem.d.ts +1 -1
  147. package/vanilla/UiEditorSlashMenuItem.js +7 -19
  148. package/vanilla/UiEditorSurface.d.ts +1 -1
  149. package/vanilla/UiEditorSurface.js +1 -1
  150. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  151. package/vanilla/UiEditorTableContextMenu.js +6 -14
  152. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  153. package/vanilla/UiEditorTableOverlay.js +9 -25
  154. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  155. package/vanilla/UiEditorTableToolbar.js +25 -77
  156. package/vanilla/UiEditorToolbar.d.ts +1 -1
  157. package/vanilla/UiEditorToolbar.js +1 -1
  158. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  159. package/vanilla/UiFloatingActionButton.js +1 -1
  160. package/vanilla/UiFormField.d.ts +1 -1
  161. package/vanilla/UiFormField.js +1 -1
  162. package/vanilla/UiGrid.d.ts +1 -1
  163. package/vanilla/UiGrid.js +1 -1
  164. package/vanilla/UiIcon.d.ts +1 -1
  165. package/vanilla/UiIcon.js +15 -47
  166. package/vanilla/UiIconButton.d.ts +1 -1
  167. package/vanilla/UiIconButton.js +4 -10
  168. package/vanilla/UiImage.d.ts +1 -1
  169. package/vanilla/UiImage.js +1 -1
  170. package/vanilla/UiInput.d.ts +1 -1
  171. package/vanilla/UiInput.js +1 -1
  172. package/vanilla/UiInputGroup.d.ts +1 -1
  173. package/vanilla/UiInputGroup.js +1 -1
  174. package/vanilla/UiList.d.ts +1 -1
  175. package/vanilla/UiList.js +1 -1
  176. package/vanilla/UiListItem.d.ts +1 -1
  177. package/vanilla/UiListItem.js +1 -1
  178. package/vanilla/UiListbox.d.ts +1 -1
  179. package/vanilla/UiListbox.js +4 -10
  180. package/vanilla/UiMenu.d.ts +1 -1
  181. package/vanilla/UiMenu.js +1 -1
  182. package/vanilla/UiMenuGroup.d.ts +1 -1
  183. package/vanilla/UiMenuGroup.js +4 -10
  184. package/vanilla/UiMenuItem.d.ts +1 -1
  185. package/vanilla/UiMenuItem.js +4 -10
  186. package/vanilla/UiMeter.d.ts +1 -1
  187. package/vanilla/UiMeter.js +13 -33
  188. package/vanilla/UiNavItem.d.ts +1 -1
  189. package/vanilla/UiNavItem.js +1 -1
  190. package/vanilla/UiPageHeader.d.ts +1 -1
  191. package/vanilla/UiPageHeader.js +1 -1
  192. package/vanilla/UiPopover.d.ts +1 -1
  193. package/vanilla/UiPopover.js +1 -1
  194. package/vanilla/UiRadio.d.ts +1 -1
  195. package/vanilla/UiRadio.js +1 -1
  196. package/vanilla/UiRadioGroup.d.ts +1 -1
  197. package/vanilla/UiRadioGroup.js +1 -1
  198. package/vanilla/UiReel.d.ts +1 -1
  199. package/vanilla/UiReel.js +1 -1
  200. package/vanilla/UiScrollArea.d.ts +1 -1
  201. package/vanilla/UiScrollArea.js +1 -1
  202. package/vanilla/UiSearchResultRow.d.ts +1 -1
  203. package/vanilla/UiSearchResultRow.js +1 -1
  204. package/vanilla/UiSearchShell.d.ts +1 -1
  205. package/vanilla/UiSearchShell.js +1 -1
  206. package/vanilla/UiSection.d.ts +1 -1
  207. package/vanilla/UiSection.js +1 -1
  208. package/vanilla/UiSelect.d.ts +1 -1
  209. package/vanilla/UiSelect.js +1 -1
  210. package/vanilla/UiSeparator.d.ts +1 -1
  211. package/vanilla/UiSeparator.js +1 -1
  212. package/vanilla/UiSidebar.d.ts +1 -1
  213. package/vanilla/UiSidebar.js +1 -1
  214. package/vanilla/UiSpinner.d.ts +1 -1
  215. package/vanilla/UiSpinner.js +1 -1
  216. package/vanilla/UiStack.d.ts +1 -1
  217. package/vanilla/UiStack.js +1 -1
  218. package/vanilla/UiStatusMessage.d.ts +1 -1
  219. package/vanilla/UiStatusMessage.js +1 -1
  220. package/vanilla/UiSwitch.d.ts +1 -1
  221. package/vanilla/UiSwitch.js +1 -1
  222. package/vanilla/UiSwitcher.d.ts +1 -1
  223. package/vanilla/UiSwitcher.js +1 -1
  224. package/vanilla/UiTable.d.ts +1 -1
  225. package/vanilla/UiTable.js +1 -1
  226. package/vanilla/UiTabs.d.ts +1 -1
  227. package/vanilla/UiTabs.js +1 -1
  228. package/vanilla/UiText.d.ts +1 -1
  229. package/vanilla/UiText.js +1 -1
  230. package/vanilla/UiTextarea.d.ts +1 -1
  231. package/vanilla/UiTextarea.js +1 -1
  232. package/vanilla/UiToast.d.ts +1 -1
  233. package/vanilla/UiToast.js +1 -1
  234. package/vanilla/UiToastRegion.d.ts +1 -1
  235. package/vanilla/UiToastRegion.js +1 -1
  236. package/vanilla/UiTooltip.d.ts +1 -1
  237. package/vanilla/UiTooltip.js +1 -1
  238. package/vanilla/UiTopBar.d.ts +1 -1
  239. package/vanilla/UiTopBar.js +1 -1
  240. package/vanilla/UiTree.d.ts +1 -1
  241. package/vanilla/UiTree.js +1 -1
  242. package/vanilla/UiTreeItem.d.ts +1 -1
  243. package/vanilla/UiTreeItem.js +7 -19
  244. package/vanilla/index.js +2 -0
  245. package/vue/UiActionBar.vue +46 -78
  246. package/vue/UiAffordanceScope.vue +27 -66
  247. package/vue/UiAvatar.d.ts +10 -7
  248. package/vue/UiAvatar.vue +100 -218
  249. package/vue/UiAvatarGroup.d.ts +10 -7
  250. package/vue/UiAvatarGroup.vue +78 -160
  251. package/vue/UiBadge.d.ts +1 -1
  252. package/vue/UiBadge.vue +483 -520
  253. package/vue/UiBreadcrumbItem.vue +52 -123
  254. package/vue/UiBreadcrumbs.vue +27 -70
  255. package/vue/UiButton.d.ts +2 -2
  256. package/vue/UiButton.vue +420 -471
  257. package/vue/UiCallout.vue +131 -175
  258. package/vue/UiCard.d.ts +1 -1
  259. package/vue/UiCard.vue +112 -151
  260. package/vue/UiCheckbox.d.ts +13 -10
  261. package/vue/UiCheckbox.vue +160 -221
  262. package/vue/UiCluster.d.ts +1 -1
  263. package/vue/UiCluster.vue +84 -128
  264. package/vue/UiCombobox.d.ts +71 -68
  265. package/vue/UiCombobox.vue +417 -743
  266. package/vue/UiContainer.vue +43 -87
  267. package/vue/UiContextMenu.d.ts +6 -6
  268. package/vue/UiContextMenu.vue +78 -117
  269. package/vue/UiCover.vue +29 -69
  270. package/vue/UiDescriptionItem.vue +39 -82
  271. package/vue/UiDescriptionList.vue +64 -107
  272. package/vue/UiDialog.d.ts +22 -19
  273. package/vue/UiDialog.vue +193 -246
  274. package/vue/UiDisclosure.d.ts +22 -19
  275. package/vue/UiDisclosure.vue +192 -283
  276. package/vue/UiEditable.d.ts +5 -5
  277. package/vue/UiEditable.vue +124 -207
  278. package/vue/UiEditorBlockActions.d.ts +33 -0
  279. package/vue/UiEditorBlockActions.js +2 -0
  280. package/vue/UiEditorBlockActions.vue +125 -0
  281. package/vue/UiEditorImageToolbar.d.ts +2 -2
  282. package/vue/UiEditorImageToolbar.vue +45 -256
  283. package/vue/UiEditorInsertTableGrid.d.ts +2 -2
  284. package/vue/UiEditorInsertTableGrid.vue +98 -266
  285. package/vue/UiEditorLinkCard.d.ts +58 -0
  286. package/vue/UiEditorLinkCard.js +2 -0
  287. package/vue/UiEditorLinkCard.vue +319 -0
  288. package/vue/UiEditorMentionMenu.d.ts +15 -12
  289. package/vue/UiEditorMentionMenu.vue +150 -239
  290. package/vue/UiEditorMentionMenuItem.vue +66 -110
  291. package/vue/UiEditorSlashMenu.d.ts +16 -13
  292. package/vue/UiEditorSlashMenu.vue +172 -253
  293. package/vue/UiEditorSlashMenuGroup.vue +25 -69
  294. package/vue/UiEditorSlashMenuItem.vue +67 -115
  295. package/vue/UiEditorSurface.vue +19 -63
  296. package/vue/UiEditorTableContextMenu.vue +135 -269
  297. package/vue/UiEditorTableOverlay.d.ts +2 -2
  298. package/vue/UiEditorTableOverlay.vue +310 -479
  299. package/vue/UiEditorTableToolbar.d.ts +2 -2
  300. package/vue/UiEditorTableToolbar.vue +182 -357
  301. package/vue/UiEditorToolbar.vue +143 -183
  302. package/vue/UiFloatingActionButton.vue +70 -114
  303. package/vue/UiFormField.d.ts +1 -1
  304. package/vue/UiFormField.vue +76 -117
  305. package/vue/UiGrid.d.ts +1 -1
  306. package/vue/UiGrid.vue +65 -103
  307. package/vue/UiIcon.vue +32 -106
  308. package/vue/UiIconButton.d.ts +2 -2
  309. package/vue/UiIconButton.vue +359 -411
  310. package/vue/UiImage.vue +145 -180
  311. package/vue/UiInput.vue +158 -190
  312. package/vue/UiInputGroup.vue +199 -239
  313. package/vue/UiList.vue +67 -109
  314. package/vue/UiListItem.vue +154 -201
  315. package/vue/UiListbox.d.ts +10 -7
  316. package/vue/UiListbox.vue +86 -260
  317. package/vue/UiMenu.d.ts +11 -11
  318. package/vue/UiMenu.vue +118 -152
  319. package/vue/UiMenuGroup.vue +21 -67
  320. package/vue/UiMenuItem.d.ts +19 -16
  321. package/vue/UiMenuItem.vue +169 -262
  322. package/vue/UiMeter.d.ts +4 -4
  323. package/vue/UiMeter.vue +166 -680
  324. package/vue/UiNavItem.vue +140 -213
  325. package/vue/UiPageHeader.vue +81 -127
  326. package/vue/UiPopover.d.ts +7 -7
  327. package/vue/UiPopover.vue +90 -129
  328. package/vue/UiRadio.d.ts +12 -9
  329. package/vue/UiRadio.vue +91 -149
  330. package/vue/UiRadioGroup.d.ts +2 -2
  331. package/vue/UiRadioGroup.vue +47 -85
  332. package/vue/UiReel.vue +89 -130
  333. package/vue/UiScrollArea.d.ts +1 -1
  334. package/vue/UiScrollArea.vue +78 -119
  335. package/vue/UiSearchResultRow.vue +96 -149
  336. package/vue/UiSearchShell.d.ts +2 -2
  337. package/vue/UiSearchShell.vue +159 -196
  338. package/vue/UiSection.vue +105 -149
  339. package/vue/UiSelect.d.ts +1 -1
  340. package/vue/UiSelect.vue +114 -146
  341. package/vue/UiSeparator.vue +42 -85
  342. package/vue/UiSidebar.d.ts +10 -7
  343. package/vue/UiSidebar.vue +193 -260
  344. package/vue/UiSpinner.vue +54 -130
  345. package/vue/UiStack.vue +66 -107
  346. package/vue/UiStatusMessage.d.ts +1 -1
  347. package/vue/UiStatusMessage.vue +61 -135
  348. package/vue/UiSwitch.d.ts +12 -9
  349. package/vue/UiSwitch.vue +136 -194
  350. package/vue/UiSwitcher.vue +69 -107
  351. package/vue/UiTable.vue +121 -156
  352. package/vue/UiTabs.d.ts +1 -1
  353. package/vue/UiTabs.vue +139 -267
  354. package/vue/UiText.d.ts +4 -4
  355. package/vue/UiText.vue +145 -184
  356. package/vue/UiTextarea.d.ts +2 -2
  357. package/vue/UiTextarea.vue +162 -194
  358. package/vue/UiToast.vue +70 -118
  359. package/vue/UiToastRegion.vue +157 -276
  360. package/vue/UiTooltip.d.ts +21 -18
  361. package/vue/UiTooltip.vue +174 -234
  362. package/vue/UiTopBar.vue +48 -76
  363. package/vue/UiTree.vue +46 -79
  364. package/vue/UiTreeItem.d.ts +18 -15
  365. package/vue/UiTreeItem.vue +526 -668
  366. package/vue/chunks/UiActionBar.js +5 -17
  367. package/vue/chunks/UiAffordanceScope.js +7 -26
  368. package/vue/chunks/UiAvatar.js +20 -74
  369. package/vue/chunks/UiAvatarGroup.js +14 -56
  370. package/vue/chunks/UiBadge.js +10 -28
  371. package/vue/chunks/UiBreadcrumbItem.js +11 -41
  372. package/vue/chunks/UiBreadcrumbs.js +7 -25
  373. package/vue/chunks/UiButton.js +80 -103
  374. package/vue/chunks/UiCallout.js +9 -27
  375. package/vue/chunks/UiCard.js +33 -53
  376. package/vue/chunks/UiCheckbox.js +14 -46
  377. package/vue/chunks/UiCluster.js +13 -31
  378. package/vue/chunks/UiCombobox.js +99 -237
  379. package/vue/chunks/UiContainer.js +9 -27
  380. package/vue/chunks/UiContextMenu.js +7 -26
  381. package/vue/chunks/UiCover.js +7 -25
  382. package/vue/chunks/UiDescriptionItem.js +6 -24
  383. package/vue/chunks/UiDescriptionList.js +9 -27
  384. package/vue/chunks/UiDialog.js +18 -47
  385. package/vue/chunks/UiDisclosure.js +19 -66
  386. package/vue/chunks/UiEditable.js +18 -60
  387. package/vue/chunks/UiEditorBlockActions.js +127 -0
  388. package/vue/chunks/UiEditorImageToolbar.js +40 -127
  389. package/vue/chunks/UiEditorInsertTableGrid.js +14 -112
  390. package/vue/chunks/UiEditorLinkCard.js +356 -0
  391. package/vue/chunks/UiEditorMentionMenu.js +16 -54
  392. package/vue/chunks/UiEditorMentionMenuItem.js +10 -28
  393. package/vue/chunks/UiEditorSlashMenu.js +17 -46
  394. package/vue/chunks/UiEditorSlashMenuGroup.js +7 -25
  395. package/vue/chunks/UiEditorSlashMenuItem.js +16 -31
  396. package/vue/chunks/UiEditorSurface.js +7 -25
  397. package/vue/chunks/UiEditorTableContextMenu.js +25 -102
  398. package/vue/chunks/UiEditorTableOverlay.js +41 -104
  399. package/vue/chunks/UiEditorTableToolbar.js +44 -122
  400. package/vue/chunks/UiEditorToolbar.js +7 -26
  401. package/vue/chunks/UiFloatingActionButton.js +10 -28
  402. package/vue/chunks/UiFormField.js +8 -27
  403. package/vue/chunks/UiGrid.js +10 -28
  404. package/vue/chunks/UiIcon.js +21 -74
  405. package/vue/chunks/UiIconButton.js +18 -50
  406. package/vue/chunks/UiImage.js +14 -33
  407. package/vue/chunks/UiInput.js +12 -31
  408. package/vue/chunks/UiInputGroup.js +10 -29
  409. package/vue/chunks/UiList.js +17 -37
  410. package/vue/chunks/UiListItem.js +12 -30
  411. package/vue/chunks/UiListbox.js +22 -124
  412. package/vue/chunks/UiMenu.js +13 -32
  413. package/vue/chunks/UiMenuGroup.js +8 -26
  414. package/vue/chunks/UiMenuItem.js +35 -80
  415. package/vue/chunks/UiMeter.js +17 -351
  416. package/vue/chunks/UiNavItem.js +23 -57
  417. package/vue/chunks/UiPageHeader.js +7 -25
  418. package/vue/chunks/UiPopover.js +9 -28
  419. package/vue/chunks/UiRadio.js +11 -43
  420. package/vue/chunks/UiRadioGroup.js +13 -32
  421. package/vue/chunks/UiReel.js +10 -28
  422. package/vue/chunks/UiScrollArea.js +10 -29
  423. package/vue/chunks/UiSearchResultRow.js +10 -28
  424. package/vue/chunks/UiSearchShell.js +9 -28
  425. package/vue/chunks/UiSection.js +9 -27
  426. package/vue/chunks/UiSelect.js +10 -29
  427. package/vue/chunks/UiSeparator.js +10 -28
  428. package/vue/chunks/UiSidebar.js +15 -47
  429. package/vue/chunks/UiSpinner.js +8 -44
  430. package/vue/chunks/UiStack.js +12 -30
  431. package/vue/chunks/UiStatusMessage.js +10 -42
  432. package/vue/chunks/UiSwitch.js +11 -43
  433. package/vue/chunks/UiSwitcher.js +9 -28
  434. package/vue/chunks/UiTable.js +7 -26
  435. package/vue/chunks/UiTabs.js +15 -91
  436. package/vue/chunks/UiText.js +148 -168
  437. package/vue/chunks/UiTextarea.js +16 -35
  438. package/vue/chunks/UiToast.js +13 -37
  439. package/vue/chunks/UiToastRegion.js +16 -88
  440. package/vue/chunks/UiTooltip.js +14 -46
  441. package/vue/chunks/UiTopBar.js +5 -17
  442. package/vue/chunks/UiTree.js +13 -32
  443. package/vue/chunks/UiTreeItem.js +34 -90
  444. package/vue/chunks/_plugin-vue_export-helper.js +904 -1
  445. package/vue/chunks/control.js +3 -0
  446. package/vue/chunks/props.js +1 -1
  447. package/vue/components.css +7689 -7617
  448. package/vue/editor/index.js +30 -95
  449. package/vue/editor/primitives.d.ts +8 -2
  450. package/vue/host.ts +999 -14
  451. package/vue/index.d.ts +2 -0
  452. package/vue/index.js +5 -3
  453. package/vue/chunks/host.js +0 -443
package/vue/UiSpinner.vue CHANGED
@@ -1,7 +1,8 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.35 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.51 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { computed, getCurrentInstance, watchSyncEffect } from 'vue'
3
+ import { computed, watchSyncEffect } from 'vue'
4
4
  import type { PropType } from 'vue'
5
+ import { attribute, checkHydratedRoot, concat, nativeAttrs, useReflectedProp } from './host'
5
6
  import { checkedProp, vPropValidity } from './props'
6
7
 
7
8
  defineOptions({ inheritAttrs: false })
@@ -51,39 +52,7 @@ void checkedProps.value
51
52
  watchSyncEffect(() => {
52
53
  void checkedProps.value
53
54
  })
54
- function nativeAttrs(attrs: Record<string, unknown>): Record<string, unknown> {
55
- const names = Object.keys(attrs)
56
- if (!names.some((name) => Object.hasOwn(Object.prototype, name))) return attrs
57
- return Object.fromEntries(names.map((name) => [
58
- Object.hasOwn(Object.prototype, name)
59
- ? name === '__proto__' ? '__Proto__' : name[0]!.toUpperCase() + name.slice(1)
60
- : name,
61
- attrs[name],
62
- ]))
63
- }
64
- const componentInstance = getCurrentInstance()
65
- function reflectedProp(
66
- name: string,
67
- kebab: string,
68
- value: unknown,
69
- fallback: string | undefined,
70
- bound: boolean,
71
- separator?: string,
72
- ): string | undefined {
73
- const incoming = componentInstance?.vnode.props
74
- if (
75
- !bound
76
- && (incoming === null || incoming === undefined
77
- || (!Object.hasOwn(incoming, name) && !Object.hasOwn(incoming, kebab)))
78
- ) return fallback
79
- if (value === null || value === undefined) return undefined
80
- return Array.isArray(value) && separator !== undefined
81
- ? value.join(separator)
82
- : typeof value === 'object'
83
- ? JSON.stringify(value)
84
- : String(value)
85
- }
86
- const hydrationInstance = getCurrentInstance()
55
+ const reflectedProp = useReflectedProp()
87
56
 
88
57
  let guardedPrevious: any = null
89
58
  const guarded = computed(() => {
@@ -221,22 +190,7 @@ const guardedBinding3 = computed(() => {
221
190
  concat(checkedProps.value.label !== ''),
222
191
  ))
223
192
  })
224
- const hydrationNode = hydrationInstance?.vnode.el
225
- if (
226
- typeof window !== 'undefined' && hydrationNode != null
227
- && (!(hydrationNode instanceof Element) || hydrationNode.localName !== ('span'))
228
- ) {
229
- throw Object.assign(
230
- new Error('HR005: Server markup for <ui-spinner> has an incompatible root.'),
231
- {
232
- name: 'HtmlDiagnosticError',
233
- diagnostic: Object.freeze({
234
- code: 'HR005',
235
- message: 'Server markup for <ui-spinner> has an incompatible root.',
236
- }),
237
- },
238
- )
239
- }
193
+ checkHydratedRoot('span', 'ui-spinner')
240
194
 
241
195
  /** The values the styles' :host-state() rules test. */
242
196
  const hostState = computed(() =>
@@ -245,43 +199,11 @@ const hostState = computed(() =>
245
199
  checkedProps.value.size != null && `size=${encodeURIComponent(checkedProps.value.size)}`,
246
200
  ].filter(Boolean).join(' ')
247
201
  )
248
-
249
- function text(value: unknown): string {
250
- if (Array.isArray(value)) return value.map(text).join(' ')
251
- return value === null || value === undefined || typeof value === 'object' ? '' : String(value)
252
- }
253
-
254
- function attribute(value: unknown): any {
255
- if (
256
- value === null || value === undefined || value === false
257
- || (typeof value === 'object' && !Array.isArray(value))
258
- ) return undefined
259
- return value === true ? '' : text(value)
260
- }
261
-
262
- // A nonempty scalar call cannot produce the invalid-result sentinel.
263
- type ConcatResult<T extends unknown[]> = T extends
264
- [
265
- string | number | boolean | null | undefined,
266
- ...(string | number | boolean | null | undefined)[],
267
- ] ? string | undefined
268
- : string | symbol | undefined
269
- function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
270
- if (values.some(value => value === Symbol.for('html-next.invalid-result'))) {
271
- return Symbol.for('html-next.invalid-result') as ConcatResult<T>
272
- }
273
- if (values.some(value => value === undefined)) return undefined as ConcatResult<T>
274
- if (values.length === 0 || values.some(value => typeof value === 'object' && value !== null)) {
275
- return Symbol.for('html-next.invalid-result') as ConcatResult<T>
276
- }
277
- return values.map(value => value === null ? '' : String(value)).join('') as ConcatResult<T>
278
- }
279
202
  </script>
280
203
 
281
204
  <template>
282
205
  <span
283
- data-component="ui-spinner"
284
- class="ring"
206
+ class="ui-spinner ring"
285
207
  v-bind="nativeAttrs($attrs)"
286
208
  :role="guarded"
287
209
  :aria-label="guardedBinding"
@@ -299,45 +221,6 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
299
221
 
300
222
  <style scoped>
301
223
  /* A rounded SVG arc grows and recedes over a quiet full-circle track. */
302
- [data-component~="ui-spinner"] {
303
- display: inline-flex;
304
- flex: none;
305
- align-items: center;
306
- justify-content: center;
307
- box-sizing: border-box;
308
- inline-size: 1em;
309
- block-size: 1em;
310
- color: currentColor;
311
- font-size: var(--ui-font-size-lg);
312
- line-height: 1;
313
- }
314
-
315
- [data-component~="ui-spinner"][data-ui-spinner-state~="size=sm"] {
316
- font-size: var(--ui-font-size-md);
317
- }
318
-
319
- svg {
320
- display: block;
321
- inline-size: 100%;
322
- block-size: 100%;
323
- animation: ui-spinner-rotate 2s linear infinite;
324
- }
325
-
326
- circle {
327
- stroke-width: 3;
328
- stroke-linecap: round;
329
- }
330
-
331
- .track {
332
- stroke: color-mix(in srgb, currentColor 16%, transparent);
333
- }
334
-
335
- .arc {
336
- stroke: currentColor;
337
- stroke-dasharray: 90, 150;
338
- stroke-dashoffset: 0;
339
- animation: ui-spinner-dash 1.5s ease-in-out infinite;
340
- }
341
224
 
342
225
  @keyframes ui-spinner-rotate {
343
226
  100% {
@@ -360,15 +243,56 @@ circle {
360
243
  }
361
244
  }
362
245
 
363
- @media (prefers-reduced-motion: reduce) {
364
- svg,
246
+ /* A component that sets its display still honours the hidden attribute on its root. */
247
+
248
+ @scope (.ui-spinner) {
249
+ :scope:where(:scope) {
250
+ display: inline-flex;
251
+ flex: none;
252
+ align-items: center;
253
+ justify-content: center;
254
+ box-sizing: border-box;
255
+ inline-size: 1em;
256
+ block-size: 1em;
257
+ color: currentColor;
258
+ font-size: var(--ui-font-size-lg);
259
+ line-height: 1;
260
+ }
261
+
262
+ :scope:where(:scope):is([data-ui-spinner-state~="size=sm"]) {
263
+ font-size: var(--ui-font-size-md);
264
+ }
265
+
266
+ svg {
267
+ display: block;
268
+ inline-size: 100%;
269
+ block-size: 100%;
270
+ animation: ui-spinner-rotate 2s linear infinite;
271
+ }
272
+
273
+ circle {
274
+ stroke-width: 3;
275
+ stroke-linecap: round;
276
+ }
277
+
278
+ .track {
279
+ stroke: color-mix(in srgb, currentColor 16%, transparent);
280
+ }
281
+
365
282
  .arc {
366
- animation: none;
283
+ stroke: currentColor;
284
+ stroke-dasharray: 90, 150;
285
+ stroke-dashoffset: 0;
286
+ animation: ui-spinner-dash 1.5s ease-in-out infinite;
367
287
  }
368
- }
369
288
 
370
- /* A component that sets its display still honours the hidden attribute on its root. */
371
- [data-component~="ui-spinner"][hidden] {
372
- display: none;
289
+ @media (prefers-reduced-motion: reduce) {
290
+ svg, .arc {
291
+ animation: none;
292
+ }
293
+ }
294
+ :scope:where(:scope):is([hidden]) {
295
+ display: none;
296
+ }
373
297
  }
374
298
  </style>
package/vue/UiStack.vue CHANGED
@@ -1,7 +1,8 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.35 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.51 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { computed, getCurrentInstance, watchSyncEffect } from 'vue'
3
+ import { computed, watchSyncEffect } from 'vue'
4
4
  import type { PropType } from 'vue'
5
+ import { checkHydratedRoot, nativeAttrs, useReflectedProp } from './host'
5
6
  import { checkedProp, vPropValidity } from './props'
6
7
 
7
8
  defineOptions({ inheritAttrs: false })
@@ -113,53 +114,9 @@ void checkedProps.value
113
114
  watchSyncEffect(() => {
114
115
  void checkedProps.value
115
116
  })
116
- function nativeAttrs(attrs: Record<string, unknown>): Record<string, unknown> {
117
- const names = Object.keys(attrs)
118
- if (!names.some((name) => Object.hasOwn(Object.prototype, name))) return attrs
119
- return Object.fromEntries(names.map((name) => [
120
- Object.hasOwn(Object.prototype, name)
121
- ? name === '__proto__' ? '__Proto__' : name[0]!.toUpperCase() + name.slice(1)
122
- : name,
123
- attrs[name],
124
- ]))
125
- }
126
- const componentInstance = getCurrentInstance()
127
- function reflectedProp(
128
- name: string,
129
- kebab: string,
130
- value: unknown,
131
- fallback: string | undefined,
132
- bound: boolean,
133
- separator?: string,
134
- ): string | undefined {
135
- const incoming = componentInstance?.vnode.props
136
- if (
137
- !bound
138
- && (incoming === null || incoming === undefined
139
- || (!Object.hasOwn(incoming, name) && !Object.hasOwn(incoming, kebab)))
140
- ) return fallback
141
- if (value === null || value === undefined) return undefined
142
- return Array.isArray(value) && separator !== undefined
143
- ? value.join(separator)
144
- : typeof value === 'object'
145
- ? JSON.stringify(value)
146
- : String(value)
147
- }
148
- const hydrationInstance = getCurrentInstance()
117
+ const reflectedProp = useReflectedProp()
149
118
 
150
- const hydrationNode = hydrationInstance?.vnode.el
151
- if (
152
- typeof window !== 'undefined' && hydrationNode != null
153
- && (!(hydrationNode instanceof Element) || hydrationNode.localName !== ('div'))
154
- ) {
155
- throw Object.assign(new Error('HR005: Server markup for <ui-stack> has an incompatible root.'), {
156
- name: 'HtmlDiagnosticError',
157
- diagnostic: Object.freeze({
158
- code: 'HR005',
159
- message: 'Server markup for <ui-stack> has an incompatible root.',
160
- }),
161
- })
162
- }
119
+ checkHydratedRoot('div', 'ui-stack')
163
120
 
164
121
  /** The values the styles' :host-state() rules test. */
165
122
  const hostState = computed(() =>
@@ -180,9 +137,9 @@ const hostState = computed(() =>
180
137
 
181
138
  <template>
182
139
  <div
183
- data-component="ui-stack"
140
+ class="ui-stack"
184
141
  v-bind="nativeAttrs($attrs)"
185
- :style="{ '--ui-stack-height': checkedProps.height ?? undefined }"
142
+ :style="{ '--ui-stack-height': checkedProps.height?.toString() }"
186
143
  v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
187
144
  :data-align="reflectedProp('align', 'align', checkedProps.align, undefined, false)"
188
145
  :data-fill="reflectedProp('fill', 'fill', checkedProps.fill, undefined, false)"
@@ -207,65 +164,67 @@ const hostState = computed(() =>
207
164
  inherits: false;
208
165
  }
209
166
 
210
- [data-component~="ui-stack"] {
211
- --_layout-gap: var(--ui-space-4);
212
- display: flex;
213
- flex-direction: column;
214
- align-items: stretch;
215
- gap: var(--ui-stack-gap, var(--_layout-gap));
216
- min-inline-size: 0;
217
- max-inline-size: 100%;
218
- margin: 0;
219
- }
167
+ /* A component that sets its display still honours the hidden attribute on its root. */
220
168
 
221
- [data-component~="ui-stack"][data-ui-stack-state~="fill"] {
222
- flex: 1;
223
- min-block-size: 0;
224
- }
225
- [data-component~="ui-stack"][data-ui-stack-state~="height"] {
226
- block-size: calc(var(--ui-stack-height, 0) * 1px);
227
- min-block-size: 0;
228
- }
169
+ @scope (.ui-stack) {
170
+ :scope:where(:scope) {
171
+ --_layout-gap: var(--ui-space-4);
172
+ display: flex;
173
+ flex-direction: column;
174
+ align-items: stretch;
175
+ gap: var(--ui-stack-gap, var(--_layout-gap));
176
+ min-inline-size: 0;
177
+ max-inline-size: 100%;
178
+ margin: 0;
179
+ }
229
180
 
230
- [data-component~="ui-stack"][data-ui-stack-state~="gap=none"] {
231
- --_layout-gap: 0px;
232
- }
233
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xs"] {
234
- --_layout-gap: var(--ui-space-2);
235
- }
236
- [data-component~="ui-stack"][data-ui-stack-state~="gap=s"] {
237
- --_layout-gap: var(--ui-space-3);
238
- }
239
- [data-component~="ui-stack"][data-ui-stack-state~="gap=m"] {
240
- --_layout-gap: var(--ui-space-4);
241
- }
242
- [data-component~="ui-stack"][data-ui-stack-state~="gap=l"] {
243
- --_layout-gap: var(--ui-space-5);
244
- }
245
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xl"] {
246
- --_layout-gap: var(--ui-space-6);
247
- }
248
- [data-component~="ui-stack"][data-ui-stack-state~="align=start"] {
249
- align-items: flex-start;
250
- }
251
- [data-component~="ui-stack"][data-ui-stack-state~="align=center"] {
252
- align-items: center;
253
- }
254
- [data-component~="ui-stack"][data-ui-stack-state~="align=end"] {
255
- align-items: flex-end;
256
- }
257
- [data-component~="ui-stack"][data-ui-stack-state~="justify=center"] {
258
- justify-content: center;
259
- }
260
- [data-component~="ui-stack"][data-ui-stack-state~="justify=end"] {
261
- justify-content: flex-end;
262
- }
263
- [data-component~="ui-stack"][data-ui-stack-state~="justify=between"] {
264
- justify-content: space-between;
265
- }
181
+ :scope:where(:scope):is([data-ui-stack-state~="fill"]) {
182
+ flex: 1;
183
+ min-block-size: 0;
184
+ }
185
+ :scope:where(:scope):is([data-ui-stack-state~="height"]) {
186
+ block-size: calc(var(--ui-stack-height, 0) * 1px);
187
+ min-block-size: 0;
188
+ }
266
189
 
267
- /* A component that sets its display still honours the hidden attribute on its root. */
268
- [data-component~="ui-stack"][hidden] {
269
- display: none;
190
+ :scope:where(:scope):is([data-ui-stack-state~="gap=none"]) {
191
+ --_layout-gap: 0px;
192
+ }
193
+ :scope:where(:scope):is([data-ui-stack-state~="gap=xs"]) {
194
+ --_layout-gap: var(--ui-space-2);
195
+ }
196
+ :scope:where(:scope):is([data-ui-stack-state~="gap=s"]) {
197
+ --_layout-gap: var(--ui-space-3);
198
+ }
199
+ :scope:where(:scope):is([data-ui-stack-state~="gap=m"]) {
200
+ --_layout-gap: var(--ui-space-4);
201
+ }
202
+ :scope:where(:scope):is([data-ui-stack-state~="gap=l"]) {
203
+ --_layout-gap: var(--ui-space-5);
204
+ }
205
+ :scope:where(:scope):is([data-ui-stack-state~="gap=xl"]) {
206
+ --_layout-gap: var(--ui-space-6);
207
+ }
208
+ :scope:where(:scope):is([data-ui-stack-state~="align=start"]) {
209
+ align-items: flex-start;
210
+ }
211
+ :scope:where(:scope):is([data-ui-stack-state~="align=center"]) {
212
+ align-items: center;
213
+ }
214
+ :scope:where(:scope):is([data-ui-stack-state~="align=end"]) {
215
+ align-items: flex-end;
216
+ }
217
+ :scope:where(:scope):is([data-ui-stack-state~="justify=center"]) {
218
+ justify-content: center;
219
+ }
220
+ :scope:where(:scope):is([data-ui-stack-state~="justify=end"]) {
221
+ justify-content: flex-end;
222
+ }
223
+ :scope:where(:scope):is([data-ui-stack-state~="justify=between"]) {
224
+ justify-content: space-between;
225
+ }
226
+ :scope:where(:scope):is([hidden]) {
227
+ display: none;
228
+ }
270
229
  }
271
230
  </style>
@@ -32,7 +32,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
32
32
  default: string;
33
33
  };
34
34
  }>> & Readonly<{}>, {
35
- kind: "loading" | "error" | "empty" | null;
35
+ kind: "error" | "loading" | "empty" | null;
36
36
  heading: string | null;
37
37
  layout: "fill" | "inline" | "panel" | null;
38
38
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -1,7 +1,8 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.35 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.51 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { computed, getCurrentInstance, watchSyncEffect } from 'vue'
3
+ import { computed, watchSyncEffect } from 'vue'
4
4
  import type { PropType } from 'vue'
5
+ import { attribute, checkHydratedRoot, concat, nativeAttrs, useReflectedProp } from './host'
5
6
  import { checkedProp, vPropValidity } from './props'
6
7
  import UiSpinner from './UiSpinner.vue'
7
8
 
@@ -75,39 +76,7 @@ void checkedProps.value
75
76
  watchSyncEffect(() => {
76
77
  void checkedProps.value
77
78
  })
78
- function nativeAttrs(attrs: Record<string, unknown>): Record<string, unknown> {
79
- const names = Object.keys(attrs)
80
- if (!names.some((name) => Object.hasOwn(Object.prototype, name))) return attrs
81
- return Object.fromEntries(names.map((name) => [
82
- Object.hasOwn(Object.prototype, name)
83
- ? name === '__proto__' ? '__Proto__' : name[0]!.toUpperCase() + name.slice(1)
84
- : name,
85
- attrs[name],
86
- ]))
87
- }
88
- const componentInstance = getCurrentInstance()
89
- function reflectedProp(
90
- name: string,
91
- kebab: string,
92
- value: unknown,
93
- fallback: string | undefined,
94
- bound: boolean,
95
- separator?: string,
96
- ): string | undefined {
97
- const incoming = componentInstance?.vnode.props
98
- if (
99
- !bound
100
- && (incoming === null || incoming === undefined
101
- || (!Object.hasOwn(incoming, name) && !Object.hasOwn(incoming, kebab)))
102
- ) return fallback
103
- if (value === null || value === undefined) return undefined
104
- return Array.isArray(value) && separator !== undefined
105
- ? value.join(separator)
106
- : typeof value === 'object'
107
- ? JSON.stringify(value)
108
- : String(value)
109
- }
110
- const hydrationInstance = getCurrentInstance()
79
+ const reflectedProp = useReflectedProp()
111
80
 
112
81
  let guardedPrevious: any = null
113
82
  const guarded = computed(() => {
@@ -131,22 +100,7 @@ const guarded = computed(() => {
131
100
  concat(checkedProps.value.kind === 'error'),
132
101
  ))
133
102
  })
134
- const hydrationNode = hydrationInstance?.vnode.el
135
- if (
136
- typeof window !== 'undefined' && hydrationNode != null
137
- && (!(hydrationNode instanceof Element) || hydrationNode.localName !== ('div'))
138
- ) {
139
- throw Object.assign(
140
- new Error('HR005: Server markup for <ui-status-message> has an incompatible root.'),
141
- {
142
- name: 'HtmlDiagnosticError',
143
- diagnostic: Object.freeze({
144
- code: 'HR005',
145
- message: 'Server markup for <ui-status-message> has an incompatible root.',
146
- }),
147
- },
148
- )
149
- }
103
+ checkHydratedRoot('div', 'ui-status-message')
150
104
 
151
105
  /** The values the styles' :host-state() rules test. */
152
106
  const hostState = computed(() =>
@@ -157,42 +111,11 @@ const hostState = computed(() =>
157
111
  checkedProps.value.layout != null && `layout=${encodeURIComponent(checkedProps.value.layout)}`,
158
112
  ].filter(Boolean).join(' ')
159
113
  )
160
-
161
- function text(value: unknown): string {
162
- if (Array.isArray(value)) return value.map(text).join(' ')
163
- return value === null || value === undefined || typeof value === 'object' ? '' : String(value)
164
- }
165
-
166
- function attribute(value: unknown): any {
167
- if (
168
- value === null || value === undefined || value === false
169
- || (typeof value === 'object' && !Array.isArray(value))
170
- ) return undefined
171
- return value === true ? '' : text(value)
172
- }
173
-
174
- // A nonempty scalar call cannot produce the invalid-result sentinel.
175
- type ConcatResult<T extends unknown[]> = T extends
176
- [
177
- string | number | boolean | null | undefined,
178
- ...(string | number | boolean | null | undefined)[],
179
- ] ? string | undefined
180
- : string | symbol | undefined
181
- function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
182
- if (values.some(value => value === Symbol.for('html-next.invalid-result'))) {
183
- return Symbol.for('html-next.invalid-result') as ConcatResult<T>
184
- }
185
- if (values.some(value => value === undefined)) return undefined as ConcatResult<T>
186
- if (values.length === 0 || values.some(value => typeof value === 'object' && value !== null)) {
187
- return Symbol.for('html-next.invalid-result') as ConcatResult<T>
188
- }
189
- return values.map(value => value === null ? '' : String(value)).join('') as ConcatResult<T>
190
- }
191
114
  </script>
192
115
 
193
116
  <template>
194
117
  <div
195
- data-component="ui-status-message"
118
+ class="ui-status-message"
196
119
  v-bind="nativeAttrs($attrs)"
197
120
  :role="guarded"
198
121
  v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
@@ -201,7 +124,7 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
201
124
  :data-layout="reflectedProp('layout', 'layout', checkedProps.layout, undefined, false)"
202
125
  :data-ui-status-message-state="hostState || undefined"
203
126
  >
204
- <UiSpinner size="sm" :hidden="checkedProps.kind !== 'loading'" />
127
+ <UiSpinner class="ui-spinner" size="sm" :hidden="checkedProps.kind !== 'loading'" />
205
128
  <span class="copy"><strong class="heading" :hidden="!checkedProps.heading">{{
206
129
  checkedProps.heading
207
130
  }}</strong>
@@ -213,65 +136,68 @@ function concat<T extends unknown[]>(...values: T): ConcatResult<T> {
213
136
  <style scoped>
214
137
  /* The one way a view says it is loading, has nothing yet, or failed, with an optional next step.
215
138
  Every view says it the same way, in the same place, at the same size. */
216
- [data-component~="ui-status-message"] {
217
- display: flex;
218
- flex-wrap: wrap;
219
- align-items: center;
220
- gap: var(--ui-space-2) var(--ui-space-4);
221
- padding-block: var(--ui-space-4);
222
- color: var(--ui-text-muted);
223
- font-size: var(--ui-font-size-md);
224
- line-height: var(--ui-line-height);
225
- }
226
139
 
227
- [data-component~="ui-status-message"][data-ui-status-message-state~="kind=error"] {
228
- color: var(--ui-danger);
229
- }
140
+ /* A component that sets its display still honours the hidden attribute on its root. */
230
141
 
231
- [data-component~="ui-status-message"][data-ui-status-message-state~="layout=panel"] {
232
- padding: var(--ui-space-6);
233
- border: var(--ui-border-width) dashed var(--ui-border-strong);
234
- border-radius: var(--ui-radius-lg);
235
- }
142
+ @scope (.ui-status-message) to (.ui-spinner) {
143
+ :scope:where(:scope) {
144
+ display: flex;
145
+ flex-wrap: wrap;
146
+ align-items: center;
147
+ gap: var(--ui-space-2) var(--ui-space-4);
148
+ padding-block: var(--ui-space-4);
149
+ color: var(--ui-text-muted);
150
+ font-size: var(--ui-font-size-md);
151
+ line-height: var(--ui-line-height);
152
+ }
236
153
 
237
- [data-component~="ui-status-message"][data-ui-status-message-state~="layout=fill"] {
238
- flex: 1;
239
- flex-direction: column;
240
- justify-content: center;
241
- min-block-size: 50vh;
242
- text-align: center;
243
- }
154
+ :scope:where(:scope):is([data-ui-status-message-state~="kind=error"]) {
155
+ color: var(--ui-danger);
156
+ }
244
157
 
245
- .copy {
246
- display: flex;
247
- flex: 1 1 12rem;
248
- flex-direction: column;
249
- gap: var(--ui-space-1);
250
- min-inline-size: 0;
251
- }
158
+ :scope:where(:scope):is([data-ui-status-message-state~="layout=panel"]) {
159
+ padding: var(--ui-space-6);
160
+ border: var(--ui-border-width) dashed var(--ui-border-strong);
161
+ border-radius: var(--ui-radius-lg);
162
+ }
252
163
 
253
- [data-component~="ui-status-message"][data-ui-status-message-state~="layout=fill"] .copy {
254
- flex: none;
255
- align-items: center;
256
- }
164
+ :scope:where(:scope):is([data-ui-status-message-state~="layout=fill"]) {
165
+ flex: 1;
166
+ flex-direction: column;
167
+ justify-content: center;
168
+ min-block-size: 50vh;
169
+ text-align: center;
170
+ }
257
171
 
258
- .heading {
259
- color: var(--ui-text-primary);
260
- font-weight: var(--ui-font-semibold);
261
- }
172
+ .copy {
173
+ display: flex;
174
+ flex: 1 1 12rem;
175
+ flex-direction: column;
176
+ gap: var(--ui-space-1);
177
+ min-inline-size: 0;
178
+ }
262
179
 
263
- .action {
264
- display: inline-flex;
265
- flex-wrap: wrap;
266
- gap: var(--ui-space-2);
267
- }
180
+ :scope[data-ui-status-message-state~="layout=fill"] .copy {
181
+ flex: none;
182
+ align-items: center;
183
+ }
268
184
 
269
- .action:empty {
270
- display: none;
271
- }
185
+ .heading {
186
+ color: var(--ui-text-primary);
187
+ font-weight: var(--ui-font-semibold);
188
+ }
272
189
 
273
- /* A component that sets its display still honours the hidden attribute on its root. */
274
- [data-component~="ui-status-message"][hidden] {
275
- display: none;
190
+ .action {
191
+ display: inline-flex;
192
+ flex-wrap: wrap;
193
+ gap: var(--ui-space-2);
194
+ }
195
+
196
+ .action:empty {
197
+ display: none;
198
+ }
199
+ :scope:where(:scope):is([hidden]) {
200
+ display: none;
201
+ }
276
202
  }
277
203
  </style>