@threadlabs/looma 0.21.5 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/components/ui-affordance-scope/ui-affordance-scope.html +1 -1
  2. package/components/ui-avatar/ui-avatar.html +4 -4
  3. package/components/ui-avatar-group/ui-avatar-group.html +14 -4
  4. package/components/ui-avatar-group/ui-avatar-group.js +1 -1
  5. package/components/ui-button/ui-button.html +10 -7
  6. package/components/ui-checkbox/ui-checkbox.html +1 -1
  7. package/components/ui-combobox/ui-combobox.html +18 -18
  8. package/components/ui-context-menu/ui-context-menu.html +1 -1
  9. package/components/ui-dialog/ui-dialog.html +2 -2
  10. package/components/ui-disclosure/ui-disclosure.html +4 -4
  11. package/components/ui-editable/ui-editable.html +3 -3
  12. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +5 -5
  13. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +5 -5
  14. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +3 -3
  15. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +2 -2
  16. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +3 -7
  17. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +6 -6
  18. package/components/ui-listbox/ui-listbox.html +6 -6
  19. package/components/ui-menu/ui-menu.html +1 -1
  20. package/components/ui-menu-item/ui-menu-item.html +1 -1
  21. package/components/ui-popover/ui-popover.html +1 -1
  22. package/components/ui-radio/ui-radio.html +1 -1
  23. package/components/ui-radio-group/ui-radio-group.html +1 -1
  24. package/components/ui-search-shell/ui-search-shell.html +1 -1
  25. package/components/ui-sidebar/ui-sidebar.html +2 -2
  26. package/components/ui-switch/ui-switch.html +1 -1
  27. package/components/ui-switcher/ui-switcher.html +1 -1
  28. package/components/ui-tabs/ui-tabs.html +2 -2
  29. package/components/ui-toast-region/ui-toast-region.html +1 -1
  30. package/components/ui-tooltip/ui-tooltip.html +1 -1
  31. package/components/ui-tree-item/ui-tree-item.html +4 -4
  32. package/dist/index.js +1 -1
  33. package/package.json +2 -2
  34. package/styles/ui-action-bar.css +1 -1
  35. package/styles/ui-affordance-scope.css +1 -1
  36. package/styles/ui-avatar-group.css +10 -1
  37. package/styles/ui-avatar.css +1 -1
  38. package/styles/ui-badge.css +1 -1
  39. package/styles/ui-breadcrumb-item.css +1 -1
  40. package/styles/ui-breadcrumbs.css +1 -1
  41. package/styles/ui-button.css +11 -7
  42. package/styles/ui-callout.css +1 -1
  43. package/styles/ui-card.css +1 -1
  44. package/styles/ui-checkbox.css +1 -1
  45. package/styles/ui-cluster.css +1 -1
  46. package/styles/ui-combobox.css +1 -1
  47. package/styles/ui-container.css +1 -1
  48. package/styles/ui-context-menu.css +1 -1
  49. package/styles/ui-cover.css +1 -1
  50. package/styles/ui-description-item.css +1 -1
  51. package/styles/ui-description-list.css +1 -1
  52. package/styles/ui-dialog.css +1 -1
  53. package/styles/ui-disclosure.css +1 -1
  54. package/styles/ui-editable.css +1 -1
  55. package/styles/ui-editor-insert-table-grid.css +1 -1
  56. package/styles/ui-editor-mention-menu-item.css +1 -1
  57. package/styles/ui-editor-mention-menu.css +1 -1
  58. package/styles/ui-editor-slash-menu-group.css +1 -1
  59. package/styles/ui-editor-slash-menu-item.css +1 -1
  60. package/styles/ui-editor-slash-menu.css +1 -1
  61. package/styles/ui-editor-table-context-menu.css +1 -1
  62. package/styles/ui-editor-table-overlay.css +1 -1
  63. package/styles/ui-editor-table-toolbar.css +1 -1
  64. package/styles/ui-editor-toolbar.css +1 -1
  65. package/styles/ui-floating-action-button.css +1 -1
  66. package/styles/ui-form-field.css +1 -1
  67. package/styles/ui-grid.css +1 -1
  68. package/styles/ui-icon-button.css +1 -1
  69. package/styles/ui-icon.css +1 -1
  70. package/styles/ui-input-group.css +1 -1
  71. package/styles/ui-input.css +1 -1
  72. package/styles/ui-list-item.css +1 -1
  73. package/styles/ui-list.css +1 -1
  74. package/styles/ui-listbox.css +1 -1
  75. package/styles/ui-menu-group.css +1 -1
  76. package/styles/ui-menu-item.css +1 -1
  77. package/styles/ui-menu.css +1 -1
  78. package/styles/ui-meter.css +1 -1
  79. package/styles/ui-nav-item.css +1 -1
  80. package/styles/ui-page-header.css +1 -1
  81. package/styles/ui-popover.css +1 -1
  82. package/styles/ui-radio-group.css +1 -1
  83. package/styles/ui-radio.css +1 -1
  84. package/styles/ui-reel.css +1 -1
  85. package/styles/ui-scroll-area.css +1 -1
  86. package/styles/ui-search-result-row.css +1 -1
  87. package/styles/ui-search-shell.css +1 -1
  88. package/styles/ui-section.css +1 -1
  89. package/styles/ui-select.css +1 -1
  90. package/styles/ui-separator.css +1 -1
  91. package/styles/ui-sidebar.css +1 -1
  92. package/styles/ui-spinner.css +1 -1
  93. package/styles/ui-stack.css +1 -1
  94. package/styles/ui-status-message.css +1 -1
  95. package/styles/ui-switch.css +1 -1
  96. package/styles/ui-switcher.css +1 -1
  97. package/styles/ui-table.css +1 -1
  98. package/styles/ui-tabs.css +1 -1
  99. package/styles/ui-text.css +1 -1
  100. package/styles/ui-textarea.css +1 -1
  101. package/styles/ui-toast-region.css +1 -1
  102. package/styles/ui-toast.css +1 -1
  103. package/styles/ui-tooltip.css +1 -1
  104. package/styles/ui-top-bar.css +1 -1
  105. package/styles/ui-tree-item.css +1 -1
  106. package/styles/ui-tree.css +1 -1
  107. package/vanilla/UiActionBar.d.ts +1 -1
  108. package/vanilla/UiActionBar.js +1 -1
  109. package/vanilla/UiAffordanceScope.d.ts +1 -1
  110. package/vanilla/UiAffordanceScope.js +2 -2
  111. package/vanilla/UiAvatar.d.ts +1 -1
  112. package/vanilla/UiAvatar.js +2 -2
  113. package/vanilla/UiAvatarGroup.d.ts +2 -2
  114. package/vanilla/UiAvatarGroup.js +2 -2
  115. package/vanilla/UiBadge.d.ts +1 -1
  116. package/vanilla/UiBadge.js +1 -1
  117. package/vanilla/UiBreadcrumbItem.d.ts +1 -1
  118. package/vanilla/UiBreadcrumbItem.js +1 -1
  119. package/vanilla/UiBreadcrumbs.d.ts +1 -1
  120. package/vanilla/UiBreadcrumbs.js +1 -1
  121. package/vanilla/UiButton.d.ts +1 -1
  122. package/vanilla/UiButton.js +1 -1
  123. package/vanilla/UiCallout.d.ts +1 -1
  124. package/vanilla/UiCallout.js +1 -1
  125. package/vanilla/UiCard.d.ts +1 -1
  126. package/vanilla/UiCard.js +1 -1
  127. package/vanilla/UiCheckbox.d.ts +1 -1
  128. package/vanilla/UiCheckbox.js +2 -2
  129. package/vanilla/UiCluster.d.ts +1 -1
  130. package/vanilla/UiCluster.js +1 -1
  131. package/vanilla/UiCombobox.d.ts +1 -1
  132. package/vanilla/UiCombobox.js +2 -2
  133. package/vanilla/UiContainer.d.ts +1 -1
  134. package/vanilla/UiContainer.js +1 -1
  135. package/vanilla/UiContextMenu.d.ts +1 -1
  136. package/vanilla/UiContextMenu.js +2 -2
  137. package/vanilla/UiCover.d.ts +1 -1
  138. package/vanilla/UiCover.js +1 -1
  139. package/vanilla/UiDescriptionItem.d.ts +1 -1
  140. package/vanilla/UiDescriptionItem.js +1 -1
  141. package/vanilla/UiDescriptionList.d.ts +1 -1
  142. package/vanilla/UiDescriptionList.js +1 -1
  143. package/vanilla/UiDialog.d.ts +1 -1
  144. package/vanilla/UiDialog.js +2 -2
  145. package/vanilla/UiDisclosure.d.ts +1 -1
  146. package/vanilla/UiDisclosure.js +2 -2
  147. package/vanilla/UiEditable.d.ts +1 -1
  148. package/vanilla/UiEditable.js +2 -2
  149. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  150. package/vanilla/UiEditorInsertTableGrid.js +2 -2
  151. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  152. package/vanilla/UiEditorMentionMenu.js +2 -2
  153. package/vanilla/UiEditorMentionMenuItem.d.ts +1 -1
  154. package/vanilla/UiEditorMentionMenuItem.js +1 -1
  155. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  156. package/vanilla/UiEditorSlashMenu.js +2 -2
  157. package/vanilla/UiEditorSlashMenuGroup.d.ts +1 -1
  158. package/vanilla/UiEditorSlashMenuGroup.js +1 -1
  159. package/vanilla/UiEditorSlashMenuItem.d.ts +1 -1
  160. package/vanilla/UiEditorSlashMenuItem.js +1 -1
  161. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  162. package/vanilla/UiEditorTableContextMenu.js +2 -2
  163. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  164. package/vanilla/UiEditorTableOverlay.js +2 -2
  165. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  166. package/vanilla/UiEditorTableToolbar.js +2 -2
  167. package/vanilla/UiEditorToolbar.d.ts +1 -1
  168. package/vanilla/UiEditorToolbar.js +1 -1
  169. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  170. package/vanilla/UiFloatingActionButton.js +1 -1
  171. package/vanilla/UiFormField.d.ts +1 -1
  172. package/vanilla/UiFormField.js +1 -1
  173. package/vanilla/UiGrid.d.ts +1 -1
  174. package/vanilla/UiGrid.js +1 -1
  175. package/vanilla/UiIcon.d.ts +1 -1
  176. package/vanilla/UiIcon.js +1 -1
  177. package/vanilla/UiIconButton.d.ts +1 -1
  178. package/vanilla/UiIconButton.js +1 -1
  179. package/vanilla/UiInput.d.ts +1 -1
  180. package/vanilla/UiInput.js +1 -1
  181. package/vanilla/UiInputGroup.d.ts +1 -1
  182. package/vanilla/UiInputGroup.js +1 -1
  183. package/vanilla/UiList.d.ts +1 -1
  184. package/vanilla/UiList.js +1 -1
  185. package/vanilla/UiListItem.d.ts +1 -1
  186. package/vanilla/UiListItem.js +1 -1
  187. package/vanilla/UiListbox.d.ts +1 -1
  188. package/vanilla/UiListbox.js +2 -2
  189. package/vanilla/UiMenu.d.ts +1 -1
  190. package/vanilla/UiMenu.js +2 -2
  191. package/vanilla/UiMenuGroup.d.ts +1 -1
  192. package/vanilla/UiMenuGroup.js +1 -1
  193. package/vanilla/UiMenuItem.d.ts +1 -1
  194. package/vanilla/UiMenuItem.js +2 -2
  195. package/vanilla/UiMeter.d.ts +1 -1
  196. package/vanilla/UiMeter.js +1 -1
  197. package/vanilla/UiNavItem.d.ts +1 -1
  198. package/vanilla/UiNavItem.js +1 -1
  199. package/vanilla/UiPageHeader.d.ts +1 -1
  200. package/vanilla/UiPageHeader.js +1 -1
  201. package/vanilla/UiPopover.d.ts +1 -1
  202. package/vanilla/UiPopover.js +2 -2
  203. package/vanilla/UiRadio.d.ts +1 -1
  204. package/vanilla/UiRadio.js +2 -2
  205. package/vanilla/UiRadioGroup.d.ts +1 -1
  206. package/vanilla/UiRadioGroup.js +2 -2
  207. package/vanilla/UiReel.d.ts +1 -1
  208. package/vanilla/UiReel.js +1 -1
  209. package/vanilla/UiScrollArea.d.ts +1 -1
  210. package/vanilla/UiScrollArea.js +1 -1
  211. package/vanilla/UiSearchResultRow.d.ts +1 -1
  212. package/vanilla/UiSearchResultRow.js +1 -1
  213. package/vanilla/UiSearchShell.d.ts +1 -1
  214. package/vanilla/UiSearchShell.js +2 -2
  215. package/vanilla/UiSection.d.ts +1 -1
  216. package/vanilla/UiSection.js +1 -1
  217. package/vanilla/UiSelect.d.ts +1 -1
  218. package/vanilla/UiSelect.js +1 -1
  219. package/vanilla/UiSeparator.d.ts +1 -1
  220. package/vanilla/UiSeparator.js +1 -1
  221. package/vanilla/UiSidebar.d.ts +1 -1
  222. package/vanilla/UiSidebar.js +2 -2
  223. package/vanilla/UiSpinner.d.ts +1 -1
  224. package/vanilla/UiSpinner.js +1 -1
  225. package/vanilla/UiStack.d.ts +1 -1
  226. package/vanilla/UiStack.js +1 -1
  227. package/vanilla/UiStatusMessage.d.ts +1 -1
  228. package/vanilla/UiStatusMessage.js +1 -1
  229. package/vanilla/UiSwitch.d.ts +1 -1
  230. package/vanilla/UiSwitch.js +2 -2
  231. package/vanilla/UiSwitcher.d.ts +1 -1
  232. package/vanilla/UiSwitcher.js +2 -2
  233. package/vanilla/UiTable.d.ts +1 -1
  234. package/vanilla/UiTable.js +1 -1
  235. package/vanilla/UiTabs.d.ts +1 -1
  236. package/vanilla/UiTabs.js +2 -2
  237. package/vanilla/UiText.d.ts +1 -1
  238. package/vanilla/UiText.js +1 -1
  239. package/vanilla/UiTextarea.d.ts +1 -1
  240. package/vanilla/UiTextarea.js +1 -1
  241. package/vanilla/UiToast.d.ts +1 -1
  242. package/vanilla/UiToast.js +1 -1
  243. package/vanilla/UiToastRegion.d.ts +1 -1
  244. package/vanilla/UiToastRegion.js +2 -2
  245. package/vanilla/UiTooltip.d.ts +1 -1
  246. package/vanilla/UiTooltip.js +2 -2
  247. package/vanilla/UiTopBar.d.ts +1 -1
  248. package/vanilla/UiTopBar.js +1 -1
  249. package/vanilla/UiTree.d.ts +1 -1
  250. package/vanilla/UiTree.js +1 -1
  251. package/vanilla/UiTreeItem.d.ts +1 -1
  252. package/vanilla/UiTreeItem.js +2 -2
  253. package/vue/UiActionBar.vue +1 -1
  254. package/vue/UiAffordanceScope.vue +25 -7
  255. package/vue/UiAvatar.vue +125 -30
  256. package/vue/UiAvatarGroup.d.ts +4 -4
  257. package/vue/UiAvatarGroup.vue +79 -24
  258. package/vue/UiBadge.vue +34 -8
  259. package/vue/UiBreadcrumbItem.vue +15 -4
  260. package/vue/UiBreadcrumbs.vue +14 -4
  261. package/vue/UiButton.vue +133 -49
  262. package/vue/UiCallout.vue +16 -4
  263. package/vue/UiCard.vue +46 -10
  264. package/vue/UiCheckbox.d.ts +5 -5
  265. package/vue/UiCheckbox.vue +73 -19
  266. package/vue/UiCluster.vue +39 -10
  267. package/vue/UiCombobox.d.ts +5 -5
  268. package/vue/UiCombobox.vue +317 -78
  269. package/vue/UiContainer.vue +23 -6
  270. package/vue/UiContextMenu.vue +24 -7
  271. package/vue/UiCover.vue +16 -4
  272. package/vue/UiDescriptionItem.vue +14 -4
  273. package/vue/UiDescriptionList.vue +33 -8
  274. package/vue/UiDialog.vue +79 -26
  275. package/vue/UiDisclosure.vue +101 -38
  276. package/vue/UiEditable.d.ts +3 -3
  277. package/vue/UiEditable.vue +107 -27
  278. package/vue/UiEditorInsertTableGrid.vue +47 -11
  279. package/vue/UiEditorMentionMenu.vue +99 -20
  280. package/vue/UiEditorMentionMenuItem.vue +29 -8
  281. package/vue/UiEditorSlashMenu.vue +85 -16
  282. package/vue/UiEditorSlashMenuGroup.vue +14 -4
  283. package/vue/UiEditorSlashMenuItem.vue +43 -12
  284. package/vue/UiEditorTableContextMenu.d.ts +1 -1
  285. package/vue/UiEditorTableContextMenu.vue +95 -19
  286. package/vue/UiEditorTableOverlay.vue +91 -7
  287. package/vue/UiEditorTableToolbar.vue +105 -16
  288. package/vue/UiEditorToolbar.vue +15 -4
  289. package/vue/UiFloatingActionButton.vue +31 -8
  290. package/vue/UiFormField.d.ts +1 -1
  291. package/vue/UiFormField.vue +31 -8
  292. package/vue/UiGrid.vue +30 -8
  293. package/vue/UiIcon.vue +15 -4
  294. package/vue/UiIconButton.vue +70 -24
  295. package/vue/UiInput.vue +114 -39
  296. package/vue/UiInputGroup.vue +15 -4
  297. package/vue/UiList.vue +47 -16
  298. package/vue/UiListItem.vue +24 -6
  299. package/vue/UiListbox.d.ts +3 -3
  300. package/vue/UiListbox.vue +72 -24
  301. package/vue/UiMenu.vue +55 -15
  302. package/vue/UiMenuGroup.vue +14 -4
  303. package/vue/UiMenuItem.d.ts +4 -4
  304. package/vue/UiMenuItem.vue +77 -27
  305. package/vue/UiMeter.vue +65 -16
  306. package/vue/UiNavItem.vue +48 -24
  307. package/vue/UiPageHeader.vue +16 -4
  308. package/vue/UiPopover.vue +46 -21
  309. package/vue/UiRadio.d.ts +4 -4
  310. package/vue/UiRadio.vue +58 -15
  311. package/vue/UiRadioGroup.d.ts +3 -3
  312. package/vue/UiRadioGroup.vue +66 -17
  313. package/vue/UiReel.d.ts +1 -1
  314. package/vue/UiReel.vue +31 -8
  315. package/vue/UiScrollArea.vue +16 -4
  316. package/vue/UiSearchResultRow.vue +23 -6
  317. package/vue/UiSearchShell.vue +38 -11
  318. package/vue/UiSection.vue +33 -8
  319. package/vue/UiSelect.d.ts +1 -1
  320. package/vue/UiSelect.vue +45 -20
  321. package/vue/UiSeparator.vue +16 -4
  322. package/vue/UiSidebar.d.ts +2 -2
  323. package/vue/UiSidebar.vue +86 -22
  324. package/vue/UiSpinner.vue +23 -6
  325. package/vue/UiStack.vue +31 -8
  326. package/vue/UiStatusMessage.vue +32 -8
  327. package/vue/UiSwitch.d.ts +4 -4
  328. package/vue/UiSwitch.vue +57 -15
  329. package/vue/UiSwitcher.vue +41 -17
  330. package/vue/UiTable.vue +24 -6
  331. package/vue/UiTabs.vue +60 -14
  332. package/vue/UiText.vue +98 -35
  333. package/vue/UiTextarea.d.ts +1 -1
  334. package/vue/UiTextarea.vue +67 -26
  335. package/vue/UiToast.vue +24 -6
  336. package/vue/UiToastRegion.vue +41 -13
  337. package/vue/UiTooltip.d.ts +1 -1
  338. package/vue/UiTooltip.vue +85 -30
  339. package/vue/UiTopBar.vue +1 -1
  340. package/vue/UiTree.vue +56 -14
  341. package/vue/UiTreeItem.d.ts +3 -3
  342. package/vue/UiTreeItem.vue +147 -36
  343. package/vue/chunks/UiActionBar.js +1 -1
  344. package/vue/chunks/UiAffordanceScope.js +34 -7
  345. package/vue/chunks/UiAvatar.js +141 -21
  346. package/vue/chunks/UiAvatarGroup.js +83 -12
  347. package/vue/chunks/UiBadge.js +57 -19
  348. package/vue/chunks/UiBreadcrumbItem.js +19 -6
  349. package/vue/chunks/UiBreadcrumbs.js +19 -6
  350. package/vue/chunks/UiButton.js +194 -42
  351. package/vue/chunks/UiCallout.js +27 -13
  352. package/vue/chunks/UiCard.js +83 -25
  353. package/vue/chunks/UiCheckbox.js +104 -17
  354. package/vue/chunks/UiCluster.js +70 -25
  355. package/vue/chunks/UiCombobox.js +441 -46
  356. package/vue/chunks/UiContainer.js +36 -11
  357. package/vue/chunks/UiContextMenu.js +33 -7
  358. package/vue/chunks/UiCover.js +20 -6
  359. package/vue/chunks/UiDescriptionItem.js +18 -5
  360. package/vue/chunks/UiDescriptionList.js +54 -17
  361. package/vue/chunks/UiDialog.js +115 -23
  362. package/vue/chunks/UiDisclosure.js +110 -24
  363. package/vue/chunks/UiEditable.js +146 -18
  364. package/vue/chunks/UiEditorInsertTableGrid.js +65 -10
  365. package/vue/chunks/UiEditorMentionMenu.js +210 -14
  366. package/vue/chunks/UiEditorMentionMenuItem.js +43 -8
  367. package/vue/chunks/UiEditorSlashMenu.js +186 -12
  368. package/vue/chunks/UiEditorSlashMenuGroup.js +19 -6
  369. package/vue/chunks/UiEditorSlashMenuItem.js +65 -10
  370. package/vue/chunks/UiEditorTableContextMenu.js +116 -16
  371. package/vue/chunks/UiEditorTableOverlay.js +188 -7
  372. package/vue/chunks/UiEditorTableToolbar.js +125 -16
  373. package/vue/chunks/UiEditorToolbar.js +19 -6
  374. package/vue/chunks/UiFloatingActionButton.js +43 -8
  375. package/vue/chunks/UiFormField.js +43 -8
  376. package/vue/chunks/UiGrid.js +52 -18
  377. package/vue/chunks/UiIcon.js +19 -6
  378. package/vue/chunks/UiIconButton.js +107 -21
  379. package/vue/chunks/UiInput.js +309 -30
  380. package/vue/chunks/UiInputGroup.js +19 -6
  381. package/vue/chunks/UiList.js +62 -10
  382. package/vue/chunks/UiListItem.js +33 -7
  383. package/vue/chunks/UiListbox.js +105 -13
  384. package/vue/chunks/UiMenu.js +79 -11
  385. package/vue/chunks/UiMenuGroup.js +19 -6
  386. package/vue/chunks/UiMenuItem.js +93 -28
  387. package/vue/chunks/UiMeter.js +96 -19
  388. package/vue/chunks/UiNavItem.js +74 -17
  389. package/vue/chunks/UiPageHeader.js +20 -6
  390. package/vue/chunks/UiPopover.js +58 -21
  391. package/vue/chunks/UiRadio.js +82 -15
  392. package/vue/chunks/UiRadioGroup.js +89 -12
  393. package/vue/chunks/UiReel.js +53 -18
  394. package/vue/chunks/UiScrollArea.js +20 -6
  395. package/vue/chunks/UiSearchResultRow.js +32 -7
  396. package/vue/chunks/UiSearchShell.js +55 -9
  397. package/vue/chunks/UiSection.js +49 -12
  398. package/vue/chunks/UiSelect.js +68 -13
  399. package/vue/chunks/UiSeparator.js +20 -6
  400. package/vue/chunks/UiSidebar.js +123 -19
  401. package/vue/chunks/UiSpinner.js +33 -7
  402. package/vue/chunks/UiStack.js +59 -24
  403. package/vue/chunks/UiStatusMessage.js +53 -16
  404. package/vue/chunks/UiSwitch.js +82 -15
  405. package/vue/chunks/UiSwitcher.js +70 -25
  406. package/vue/chunks/UiTable.js +33 -7
  407. package/vue/chunks/UiTabs.js +81 -11
  408. package/vue/chunks/UiText.js +169 -58
  409. package/vue/chunks/UiTextarea.js +101 -16
  410. package/vue/chunks/UiToast.js +39 -13
  411. package/vue/chunks/UiToastRegion.js +41 -14
  412. package/vue/chunks/UiTooltip.js +113 -30
  413. package/vue/chunks/UiTopBar.js +1 -1
  414. package/vue/chunks/UiTree.js +82 -15
  415. package/vue/chunks/UiTreeItem.js +184 -22
  416. package/vue/chunks/props.js +271 -35
  417. package/vue/components.css +1209 -1198
  418. package/vue/host.ts +6 -6
@@ -1,13 +1,100 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.14 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.15 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { computed, defineComponent, getCurrentInstance, h, ref, watchSyncEffect } from 'vue'
3
+ import {
4
+ computed,
5
+ defineComponent,
6
+ getCurrentInstance,
7
+ h,
8
+ provide,
9
+ ref,
10
+ watchSyncEffect,
11
+ } from 'vue'
4
12
  import type { PropType, VNode } from 'vue'
5
13
  import { createDispatch, useComponentHost } from './host'
6
- import { checkedProp } from './props'
14
+ import { checkedProp, vPropValidity } from './props'
7
15
  import UiIcon from './UiIcon.vue'
8
16
 
9
17
  defineOptions({ inheritAttrs: false })
10
18
 
19
+ const propValidityContract = {
20
+ props: {
21
+ actions: {
22
+ type: {
23
+ kind: 'list',
24
+ item: {
25
+ kind: 'constrained',
26
+ base: { kind: 'terminal', name: 'keyword' },
27
+ values: [
28
+ 'align-left',
29
+ 'align-center',
30
+ 'align-right',
31
+ 'background-none',
32
+ 'background-gray',
33
+ 'background-yellow',
34
+ 'background-blue',
35
+ 'background-green',
36
+ 'background-red',
37
+ 'add-row-before',
38
+ 'add-row-after',
39
+ 'add-column-before',
40
+ 'add-column-after',
41
+ 'toggle-header-row',
42
+ 'toggle-header-column',
43
+ 'move-row-up',
44
+ 'move-row-down',
45
+ 'move-column-left',
46
+ 'move-column-right',
47
+ 'clear-cells',
48
+ 'merge-cells',
49
+ 'split-cell',
50
+ 'delete-row',
51
+ 'delete-column',
52
+ 'delete-table',
53
+ ],
54
+ },
55
+ },
56
+ required: false,
57
+ target: { attribute: 'actions' },
58
+ description: 'The complete set of commands the current selection permits.',
59
+ },
60
+ cellAlignment: {
61
+ type: { kind: 'terminal', name: 'keyword' },
62
+ required: false,
63
+ target: { attribute: 'cellalignment' },
64
+ description: 'Marks the alignment command that is active for the current cell.',
65
+ values: ['left', 'center', 'right'],
66
+ default: 'left',
67
+ },
68
+ cellBackground: {
69
+ type: { kind: 'terminal', name: 'string' },
70
+ required: false,
71
+ target: { attribute: 'cellbackground' },
72
+ description: 'Identifies the background choice that is active for the current cell.',
73
+ default: '',
74
+ },
75
+ headerColumn: {
76
+ type: { kind: 'terminal', name: 'boolean' },
77
+ required: false,
78
+ target: { attribute: 'headercolumn' },
79
+ description: 'Whether the table\'s first column currently uses header cells.',
80
+ default: false,
81
+ },
82
+ headerRow: {
83
+ type: { kind: 'terminal', name: 'boolean' },
84
+ required: false,
85
+ target: { attribute: 'headerrow' },
86
+ description: 'Whether the table\'s first row currently uses header cells.',
87
+ default: false,
88
+ },
89
+ open: {
90
+ type: { kind: 'terminal', name: 'boolean' },
91
+ required: false,
92
+ target: { attribute: 'open' },
93
+ description: 'Shows the toolbar while a table selection is active.',
94
+ default: false,
95
+ },
96
+ },
97
+ }
11
98
  const props = defineProps({
12
99
  actions: {
13
100
  type: null as unknown as PropType<
@@ -117,48 +204,36 @@ const checkedProps = computed(() => ({
117
204
  },
118
205
  false,
119
206
  'actions',
120
- undefined,
121
- undefined,
122
207
  ),
123
208
  cellAlignment: checkedProp<'left' | 'center' | 'right'>(
124
209
  props['cellAlignment'],
125
210
  { kind: 'terminal', name: 'keyword' },
126
211
  false,
127
212
  'cellAlignment',
128
- undefined,
129
- ['left', 'center', 'right'],
130
213
  ) as 'left' | 'center' | 'right',
131
214
  cellBackground: checkedProp<string>(
132
215
  props['cellBackground'],
133
216
  { kind: 'terminal', name: 'string' },
134
217
  false,
135
218
  'cellBackground',
136
- undefined,
137
- undefined,
138
219
  ) as string,
139
220
  headerColumn: checkedProp<boolean>(
140
221
  props['headerColumn'],
141
222
  { kind: 'terminal', name: 'boolean' },
142
223
  false,
143
224
  'headerColumn',
144
- undefined,
145
- undefined,
146
225
  ) as boolean,
147
226
  headerRow: checkedProp<boolean>(
148
227
  props['headerRow'],
149
228
  { kind: 'terminal', name: 'boolean' },
150
229
  false,
151
230
  'headerRow',
152
- undefined,
153
- undefined,
154
231
  ) as boolean,
155
232
  open: checkedProp<boolean>(
156
233
  props['open'],
157
234
  { kind: 'terminal', name: 'boolean' },
158
235
  false,
159
236
  'open',
160
- undefined,
161
- undefined,
162
237
  ) as boolean,
163
238
  }))
164
239
  void checkedProps.value
@@ -282,6 +357,19 @@ const sections = ref<
282
357
  >([])
283
358
  const hasOverflow = ref(false)
284
359
  const overflowOpen = ref(false)
360
+ let guardedPrevious: any
361
+ const guarded = computed(() => {
362
+ if (!(overflowOpen.value == null || typeof overflowOpen.value === 'boolean')) {
363
+ return guardedPrevious
364
+ }
365
+ return guardedPrevious = overflowOpen.value
366
+ })
367
+ provide('html-next:ui-editor-table-toolbar:alignments', alignments)
368
+ provide('html-next:ui-editor-table-toolbar:structure', structure)
369
+ provide('html-next:ui-editor-table-toolbar:swatches', swatches)
370
+ provide('html-next:ui-editor-table-toolbar:sections', sections)
371
+ provide('html-next:ui-editor-table-toolbar:hasOverflow', hasOverflow)
372
+ provide('html-next:ui-editor-table-toolbar:overflowOpen', overflowOpen)
285
373
  const hydrationNode = hydrationInstance?.vnode.el
286
374
  if (
287
375
  typeof window !== 'undefined' && hydrationNode != null
@@ -393,6 +481,7 @@ function uniqueKeys<T>(
393
481
  aria-label="Table actions"
394
482
  v-bind="nativeAttrs($attrs)"
395
483
  :hidden="!checkedProps.open"
484
+ v-prop-validity="{ contract: propValidityContract, values: { ...checkedProps } }"
396
485
  :data-actions="reflectedProp('actions', 'actions', checkedProps.actions, undefined, false)"
397
486
  :data-cell-alignment="reflectedProp('cellAlignment', 'cell-alignment', checkedProps.cellAlignment, undefined, false)"
398
487
  :data-cell-background="reflectedProp('cellBackground', 'cell-background', checkedProps.cellBackground, undefined, false)"
@@ -440,7 +529,7 @@ function uniqueKeys<T>(
440
529
  class="more"
441
530
  data-action="toggle-overflow"
442
531
  aria-haspopup="menu"
443
- :aria-expanded="overflowOpen"
532
+ :aria-expanded="guarded"
444
533
  >
445
534
  <UiIcon name="table" />
446
535
  <span>Table options</span>
@@ -1,12 +1,24 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.14 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.15 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
3
  import { computed, getCurrentInstance, ref, useTemplateRef, watchSyncEffect } from 'vue'
4
4
  import type { PropType } from 'vue'
5
5
  import { createDispatch, useComponentHost } from './host'
6
- import { checkedProp } from './props'
6
+ import { checkedProp, vPropValidity } from './props'
7
7
 
8
8
  defineOptions({ inheritAttrs: false })
9
9
 
10
+ const propValidityContract = {
11
+ props: {
12
+ floating: {
13
+ type: { kind: 'terminal', name: 'boolean' },
14
+ required: false,
15
+ target: { attribute: 'floating' },
16
+ description:
17
+ 'Shows the toolbar as a floating bar beside the selection rather than pinned to the editor.',
18
+ default: false,
19
+ },
20
+ },
21
+ }
10
22
  const props = defineProps({
11
23
  floating: { type: null as unknown as PropType<boolean | null>, default: false },
12
24
  })
@@ -16,8 +28,6 @@ const checkedProps = computed(() => ({
16
28
  { kind: 'terminal', name: 'boolean' },
17
29
  false,
18
30
  'floating',
19
- undefined,
20
- undefined,
21
31
  ) as boolean,
22
32
  }))
23
33
  void checkedProps.value
@@ -104,6 +114,7 @@ useComponentHost(() => import('../components/ui-editor-toolbar/ui-editor-toolbar
104
114
  role="toolbar"
105
115
  aria-label="Editor toolbar"
106
116
  v-bind="nativeAttrs($attrs)"
117
+ v-prop-validity="{ contract: propValidityContract, values: { ...checkedProps } }"
107
118
  :data-floating="reflectedProp('floating', 'floating', checkedProps.floating, undefined, false)"
108
119
  :data-ui-editor-toolbar-state="hostState || undefined"
109
120
  ref="root"
@@ -1,11 +1,39 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.14 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.15 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
3
  import { computed, getCurrentInstance, watchSyncEffect } from 'vue'
4
4
  import type { PropType } from 'vue'
5
- import { checkedProp } from './props'
5
+ import { checkedProp, vPropValidity } from './props'
6
6
 
7
7
  defineOptions({ inheritAttrs: false })
8
8
 
9
+ const propValidityContract = {
10
+ props: {
11
+ disabled: {
12
+ type: { kind: 'terminal', name: 'boolean' },
13
+ required: false,
14
+ target: { attribute: 'disabled' },
15
+ description:
16
+ 'Disables the button, so it cannot be pressed or focused, and gives it a flat muted treatment.',
17
+ default: false,
18
+ },
19
+ label: {
20
+ type: { kind: 'terminal', name: 'string' },
21
+ required: false,
22
+ target: { attribute: 'aria-label' },
23
+ description:
24
+ 'The button\'s accessible name. The button usually holds only an icon, so name the action it performs.',
25
+ default: '',
26
+ },
27
+ mobileOnly: {
28
+ type: { kind: 'terminal', name: 'boolean' },
29
+ required: false,
30
+ target: { attribute: 'mobileonly' },
31
+ description:
32
+ 'Hides the button on viewports 768px wide and wider, for a shortcut that only phones need. Make sure the action is reachable another way at those\n widths.',
33
+ default: false,
34
+ },
35
+ },
36
+ }
9
37
  const props = defineProps({
10
38
  disabled: { type: null as unknown as PropType<boolean | null>, default: false },
11
39
  label: { type: null as unknown as PropType<string | null>, default: '' },
@@ -17,24 +45,18 @@ const checkedProps = computed(() => ({
17
45
  { kind: 'terminal', name: 'boolean' },
18
46
  false,
19
47
  'disabled',
20
- undefined,
21
- undefined,
22
48
  ) as boolean,
23
49
  label: checkedProp<string>(
24
50
  props['label'],
25
51
  { kind: 'terminal', name: 'string' },
26
52
  false,
27
53
  'label',
28
- undefined,
29
- undefined,
30
54
  ) as string,
31
55
  mobileOnly: checkedProp<boolean>(
32
56
  props['mobileOnly'],
33
57
  { kind: 'terminal', name: 'boolean' },
34
58
  false,
35
59
  'mobileOnly',
36
- undefined,
37
- undefined,
38
60
  ) as boolean,
39
61
  }))
40
62
  void checkedProps.value
@@ -107,6 +129,7 @@ const hostState = computed(() =>
107
129
  v-bind="nativeAttrs($attrs)"
108
130
  :aria-label="checkedProps.label ?? undefined"
109
131
  :disabled="checkedProps.disabled ?? undefined"
132
+ v-prop-validity="{ contract: propValidityContract, values: { ...checkedProps } }"
110
133
  :data-disabled="reflectedProp('disabled', 'disabled', checkedProps.disabled, undefined, false)"
111
134
  :data-label="reflectedProp('label', 'label', checkedProps.label, undefined, false)"
112
135
  :data-mobile-only="reflectedProp('mobileOnly', 'mobile-only', checkedProps.mobileOnly, undefined, false)"
@@ -38,8 +38,8 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
38
38
  default: boolean;
39
39
  };
40
40
  }>> & Readonly<{}>, {
41
- disabled: boolean | null;
42
41
  invalid: boolean | null;
42
+ disabled: boolean | null;
43
43
  required: boolean | null;
44
44
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
45
45
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,12 +1,40 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.14 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.15 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
3
  import { computed, getCurrentInstance, ref, watchSyncEffect } from 'vue'
4
4
  import type { PropType } from 'vue'
5
5
  import { createDispatch, useComponentHost } from './host'
6
- import { checkedProp } from './props'
6
+ import { checkedProp, vPropValidity } from './props'
7
7
 
8
8
  defineOptions({ inheritAttrs: false })
9
9
 
10
+ const propValidityContract = {
11
+ props: {
12
+ disabled: {
13
+ type: { kind: 'terminal', name: 'boolean' },
14
+ required: false,
15
+ target: { attribute: 'disabled' },
16
+ description:
17
+ 'Disables the field\'s control: the first input, textarea, or select inside it. The field writes this to the control whenever it updates, so set it here\n rather than on the control.',
18
+ default: false,
19
+ },
20
+ invalid: {
21
+ type: { kind: 'terminal', name: 'boolean' },
22
+ required: false,
23
+ target: { attribute: 'invalid' },
24
+ description:
25
+ 'Marks the field\'s control invalid by setting aria-invalid on it. Only while invalid, the error slot appears and becomes part of the control\'s\n description.',
26
+ default: false,
27
+ },
28
+ required: {
29
+ type: { kind: 'terminal', name: 'boolean' },
30
+ required: false,
31
+ target: { attribute: 'required' },
32
+ description:
33
+ 'Marks the field\'s control required, for native form validation. Like disabled, it is written to the control, so set it here rather than on the control. It\n adds no visual marker; show one in the label if the form needs it.',
34
+ default: false,
35
+ },
36
+ },
37
+ }
10
38
  const props = defineProps({
11
39
  disabled: { type: null as unknown as PropType<boolean | null>, default: false },
12
40
  invalid: { type: null as unknown as PropType<boolean | null>, default: false },
@@ -18,24 +46,18 @@ const checkedProps = computed(() => ({
18
46
  { kind: 'terminal', name: 'boolean' },
19
47
  false,
20
48
  'disabled',
21
- undefined,
22
- undefined,
23
49
  ) as boolean,
24
50
  invalid: checkedProp<boolean>(
25
51
  props['invalid'],
26
52
  { kind: 'terminal', name: 'boolean' },
27
53
  false,
28
54
  'invalid',
29
- undefined,
30
- undefined,
31
55
  ) as boolean,
32
56
  required: checkedProp<boolean>(
33
57
  props['required'],
34
58
  { kind: 'terminal', name: 'boolean' },
35
59
  false,
36
60
  'required',
37
- undefined,
38
- undefined,
39
61
  ) as boolean,
40
62
  }))
41
63
  void checkedProps.value
@@ -118,6 +140,7 @@ useComponentHost(() => import('../components/ui-form-field/ui-form-field.js'), {
118
140
  <div
119
141
  data-component="ui-form-field"
120
142
  v-bind="nativeAttrs($attrs)"
143
+ v-prop-validity="{ contract: propValidityContract, values: { ...checkedProps } }"
121
144
  :data-disabled="reflectedProp('disabled', 'disabled', checkedProps.disabled, undefined, false)"
122
145
  :data-invalid="reflectedProp('invalid', 'invalid', checkedProps.invalid, undefined, false)"
123
146
  :data-required="reflectedProp('required', 'required', checkedProps.required, undefined, false)"
package/vue/UiGrid.vue CHANGED
@@ -1,11 +1,38 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.14 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.15 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
3
  import { computed, getCurrentInstance, watchSyncEffect } from 'vue'
4
4
  import type { PropType } from 'vue'
5
- import { checkedProp } from './props'
5
+ import { checkedProp, vPropValidity } from './props'
6
6
 
7
7
  defineOptions({ inheritAttrs: false })
8
8
 
9
+ const propValidityContract = {
10
+ props: {
11
+ columns: {
12
+ type: { kind: 'terminal', name: 'integer' },
13
+ required: false,
14
+ target: { attribute: 'columns' },
15
+ description:
16
+ 'Maximum columns when there is room. Omit for no cap. The grid still drops columns as its container narrows; it never forces a fixed column count.',
17
+ },
18
+ gap: {
19
+ type: { kind: 'terminal', name: 'keyword' },
20
+ required: false,
21
+ target: { attribute: 'gap' },
22
+ description:
23
+ 'Space between cells, on the spacing scale: xs is 0.5rem, s 0.75rem, m 1rem (also the default), l 1.5rem, and xl 2rem. The --ui-grid-gap custom property,\n set on the grid itself, overrides it; set on an ancestor, it does nothing.',
24
+ values: ['xs', 's', 'm', 'l', 'xl'],
25
+ },
26
+ min: {
27
+ type: { kind: 'terminal', name: 'keyword' },
28
+ required: false,
29
+ target: { attribute: 'min' },
30
+ description:
31
+ 'The narrowest a column may get before the grid drops to fewer columns: sm is 12rem (also the default), md is 16rem, and lg is 20rem. The grid fits as many\n equal columns as its width allows, and a single column never overflows a narrower container.',
32
+ values: ['sm', 'md', 'lg'],
33
+ },
34
+ },
35
+ }
9
36
  const props = defineProps({
10
37
  columns: { type: null as unknown as PropType<number | null>, default: null },
11
38
  gap: { type: null as unknown as PropType<'xs' | 's' | 'm' | 'l' | 'xl' | null>, default: null },
@@ -17,24 +44,18 @@ const checkedProps = computed(() => ({
17
44
  { kind: 'terminal', name: 'integer' },
18
45
  false,
19
46
  'columns',
20
- undefined,
21
- undefined,
22
47
  ),
23
48
  gap: checkedProp<'xs' | 's' | 'm' | 'l' | 'xl'>(
24
49
  props['gap'],
25
50
  { kind: 'terminal', name: 'keyword' },
26
51
  false,
27
52
  'gap',
28
- undefined,
29
- ['xs', 's', 'm', 'l', 'xl'],
30
53
  ),
31
54
  min: checkedProp<'sm' | 'md' | 'lg'>(
32
55
  props['min'],
33
56
  { kind: 'terminal', name: 'keyword' },
34
57
  false,
35
58
  'min',
36
- undefined,
37
- ['sm', 'md', 'lg'],
38
59
  ),
39
60
  }))
40
61
  void checkedProps.value
@@ -105,6 +126,7 @@ const hostState = computed(() =>
105
126
  data-component="ui-grid"
106
127
  v-bind="nativeAttrs($attrs)"
107
128
  :style="{ '--_grid-column-cap': checkedProps.columns ?? undefined }"
129
+ v-prop-validity="{ contract: propValidityContract, values: { ...checkedProps } }"
108
130
  :data-columns="reflectedProp('columns', 'columns', checkedProps.columns, undefined, false)"
109
131
  :data-gap="reflectedProp('gap', 'gap', checkedProps.gap, undefined, false)"
110
132
  :data-min="reflectedProp('min', 'min', checkedProps.min, undefined, false)"
package/vue/UiIcon.vue CHANGED
@@ -1,11 +1,23 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.14 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.15 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
3
  import { computed, getCurrentInstance, watchSyncEffect } from 'vue'
4
4
  import type { PropType } from 'vue'
5
- import { checkedProp } from './props'
5
+ import { checkedProp, vPropValidity } from './props'
6
6
 
7
7
  defineOptions({ inheritAttrs: false })
8
8
 
9
+ const propValidityContract = {
10
+ props: {
11
+ name: {
12
+ type: { kind: 'terminal', name: 'string' },
13
+ required: false,
14
+ target: { attribute: 'name' },
15
+ description:
16
+ 'Which icon to draw, by its name in Looma\'s icon set (LOOMA_ICONS), such as "align-left". An unknown or empty name draws nothing. The icon is hidden from\n assistive technology, so name the control it sits in.',
17
+ default: '',
18
+ },
19
+ },
20
+ }
9
21
  const props = defineProps({
10
22
  name: { type: null as unknown as PropType<string | null>, default: '' },
11
23
  })
@@ -15,8 +27,6 @@ const checkedProps = computed(() => ({
15
27
  { kind: 'terminal', name: 'string' },
16
28
  false,
17
29
  'name',
18
- undefined,
19
- undefined,
20
30
  ) as string,
21
31
  }))
22
32
  void checkedProps.value
@@ -438,6 +448,7 @@ function list(value: unknown): any[] {
438
448
  data-component="ui-icon"
439
449
  aria-hidden="true"
440
450
  v-bind="nativeAttrs($attrs)"
451
+ v-prop-validity="{ contract: propValidityContract, values: { ...checkedProps } }"
441
452
  :data-name="reflectedProp('name', 'name', checkedProps.name, undefined, false)"
442
453
  ><svg
443
454
  viewBox="0 0 24 24"
@@ -1,13 +1,79 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.14 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.15 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
3
  import { computed, getCurrentInstance, ref, watchSyncEffect } from 'vue'
4
4
  import type { PropType } from 'vue'
5
5
  import { createDispatch, useComponentHost } from './host'
6
- import { checkedProp } from './props'
6
+ import { checkedProp, vPropValidity } from './props'
7
7
  import UiSpinner from './UiSpinner.vue'
8
8
 
9
9
  defineOptions({ inheritAttrs: false })
10
10
 
11
+ const propValidityContract = {
12
+ props: {
13
+ anticipatory: {
14
+ type: { kind: 'terminal', name: 'boolean' },
15
+ required: false,
16
+ target: { attribute: 'anticipatory' },
17
+ description:
18
+ 'Keeps the button out of sight until it is wanted: at rest a fine pointer sees only a small guide dot, and the button appears on hover, on focus, or when\n the pointer comes near inside a ui-affordance-scope. Touch devices and the solid variant always show it.',
19
+ default: false,
20
+ },
21
+ disabled: {
22
+ type: { kind: 'terminal', name: 'boolean' },
23
+ required: false,
24
+ target: { attribute: 'disabled' },
25
+ description:
26
+ 'Disables the button, so it cannot be pressed or focused, and gives it a flat neutral surface and muted icon.',
27
+ default: false,
28
+ },
29
+ label: {
30
+ type: { kind: 'terminal', name: 'string' },
31
+ required: false,
32
+ target: { attribute: 'aria-label' },
33
+ description: 'Accessible name for the icon.',
34
+ },
35
+ loading: {
36
+ type: { kind: 'terminal', name: 'boolean' },
37
+ required: false,
38
+ target: { attribute: 'loading' },
39
+ description:
40
+ 'Keeps the button focusable and named while work is in progress. It shows a spinner, states aria-disabled and aria-busy, and prevents activation until\n cleared.',
41
+ default: false,
42
+ },
43
+ pending: {
44
+ type: { kind: 'terminal', name: 'boolean' },
45
+ required: false,
46
+ target: { attribute: 'pending' },
47
+ description: 'Deprecated alias for loading.',
48
+ default: false,
49
+ },
50
+ round: {
51
+ type: { kind: 'terminal', name: 'boolean' },
52
+ required: false,
53
+ target: { attribute: 'round' },
54
+ description: 'Use a fully circular shape.',
55
+ default: false,
56
+ },
57
+ size: {
58
+ type: { kind: 'terminal', name: 'keyword' },
59
+ required: false,
60
+ target: { attribute: 'size' },
61
+ description:
62
+ 'Button and icon size together: sm is 1.75rem with a small icon, md is 2rem, and lg is 2.5rem with a large icon. On touch, every size gets an invisible hit\n area of at least 44px.',
63
+ values: ['sm', 'md', 'lg'],
64
+ default: 'md',
65
+ },
66
+ variant: {
67
+ type: { kind: 'terminal', name: 'keyword' },
68
+ required: false,
69
+ target: { attribute: 'variant' },
70
+ description:
71
+ 'Emphasis. ghost shows only the icon until it is hovered, for toolbars and dense rows; outline adds a border on the default surface; solid fills with the\n accent colour, for the one primary action in a group.',
72
+ values: ['ghost', 'outline', 'solid'],
73
+ default: 'ghost',
74
+ },
75
+ },
76
+ }
11
77
  const props = defineProps({
12
78
  anticipatory: { type: null as unknown as PropType<boolean | null>, default: false },
13
79
  disabled: { type: null as unknown as PropType<boolean | null>, default: false },
@@ -27,64 +93,43 @@ const checkedProps = computed(() => ({
27
93
  { kind: 'terminal', name: 'boolean' },
28
94
  false,
29
95
  'anticipatory',
30
- undefined,
31
- undefined,
32
96
  ) as boolean,
33
97
  disabled: checkedProp<boolean>(
34
98
  props['disabled'],
35
99
  { kind: 'terminal', name: 'boolean' },
36
100
  false,
37
101
  'disabled',
38
- undefined,
39
- undefined,
40
102
  ) as boolean,
41
- label: checkedProp<string>(
42
- props['label'],
43
- { kind: 'terminal', name: 'string' },
44
- false,
45
- 'label',
46
- undefined,
47
- undefined,
48
- ),
103
+ label: checkedProp<string>(props['label'], { kind: 'terminal', name: 'string' }, false, 'label'),
49
104
  loading: checkedProp<boolean>(
50
105
  props['loading'],
51
106
  { kind: 'terminal', name: 'boolean' },
52
107
  false,
53
108
  'loading',
54
- undefined,
55
- undefined,
56
109
  ) as boolean,
57
110
  pending: checkedProp<boolean>(
58
111
  props['pending'],
59
112
  { kind: 'terminal', name: 'boolean' },
60
113
  false,
61
114
  'pending',
62
- undefined,
63
- undefined,
64
115
  ) as boolean,
65
116
  round: checkedProp<boolean>(
66
117
  props['round'],
67
118
  { kind: 'terminal', name: 'boolean' },
68
119
  false,
69
120
  'round',
70
- undefined,
71
- undefined,
72
121
  ) as boolean,
73
122
  size: checkedProp<'sm' | 'md' | 'lg'>(
74
123
  props['size'],
75
124
  { kind: 'terminal', name: 'keyword' },
76
125
  false,
77
126
  'size',
78
- undefined,
79
- ['sm', 'md', 'lg'],
80
127
  ) as 'sm' | 'md' | 'lg',
81
128
  variant: checkedProp<'ghost' | 'outline' | 'solid'>(
82
129
  props['variant'],
83
130
  { kind: 'terminal', name: 'keyword' },
84
131
  false,
85
132
  'variant',
86
- undefined,
87
- ['ghost', 'outline', 'solid'],
88
133
  ) as 'ghost' | 'outline' | 'solid',
89
134
  }))
90
135
  void checkedProps.value
@@ -205,6 +250,7 @@ function attribute(value: unknown): any {
205
250
  ],
206
251
  )"
207
252
  :aria-busy="checkedProps.loading || checkedProps.pending"
253
+ v-prop-validity="{ contract: propValidityContract, values: { ...checkedProps } }"
208
254
  :data-anticipatory="reflectedProp('anticipatory', 'anticipatory', checkedProps.anticipatory, undefined, false)"
209
255
  :data-disabled="reflectedProp('disabled', 'disabled', checkedProps.disabled, undefined, false)"
210
256
  :data-label="reflectedProp('label', 'label', checkedProps.label, undefined, false)"