@threadlabs/looma 0.21.6 → 0.22.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 (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 +2 -2
  4. package/components/ui-checkbox/ui-checkbox.html +1 -1
  5. package/components/ui-combobox/ui-combobox.html +18 -18
  6. package/components/ui-context-menu/ui-context-menu.html +1 -1
  7. package/components/ui-dialog/ui-dialog.html +2 -2
  8. package/components/ui-disclosure/ui-disclosure.html +4 -4
  9. package/components/ui-editable/ui-editable.html +3 -3
  10. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +5 -5
  11. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +5 -5
  12. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +3 -3
  13. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +2 -2
  14. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +3 -7
  15. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +6 -6
  16. package/components/ui-listbox/ui-listbox.html +6 -6
  17. package/components/ui-menu/ui-menu.html +1 -1
  18. package/components/ui-menu-item/ui-menu-item.html +1 -1
  19. package/components/ui-popover/ui-popover.html +1 -1
  20. package/components/ui-radio/ui-radio.html +1 -1
  21. package/components/ui-radio-group/ui-radio-group.html +1 -1
  22. package/components/ui-search-shell/ui-search-shell.html +1 -1
  23. package/components/ui-sidebar/ui-sidebar.html +2 -2
  24. package/components/ui-switch/ui-switch.html +1 -1
  25. package/components/ui-switcher/ui-switcher.html +1 -1
  26. package/components/ui-tabs/ui-tabs.html +2 -2
  27. package/components/ui-toast-region/ui-toast-region.html +1 -1
  28. package/components/ui-tooltip/ui-tooltip.html +1 -1
  29. package/components/ui-tree-item/ui-tree-item.html +4 -4
  30. package/dist/index.js +1 -1
  31. package/package.json +2 -2
  32. package/styles/ui-action-bar.css +1 -1
  33. package/styles/ui-affordance-scope.css +1 -1
  34. package/styles/ui-avatar-group.css +1 -1
  35. package/styles/ui-avatar.css +1 -1
  36. package/styles/ui-badge.css +1 -1
  37. package/styles/ui-breadcrumb-item.css +1 -1
  38. package/styles/ui-breadcrumbs.css +1 -1
  39. package/styles/ui-button.css +1 -1
  40. package/styles/ui-callout.css +1 -1
  41. package/styles/ui-card.css +1 -1
  42. package/styles/ui-checkbox.css +1 -1
  43. package/styles/ui-cluster.css +1 -1
  44. package/styles/ui-combobox.css +1 -1
  45. package/styles/ui-container.css +1 -1
  46. package/styles/ui-context-menu.css +1 -1
  47. package/styles/ui-cover.css +1 -1
  48. package/styles/ui-description-item.css +1 -1
  49. package/styles/ui-description-list.css +1 -1
  50. package/styles/ui-dialog.css +1 -1
  51. package/styles/ui-disclosure.css +1 -1
  52. package/styles/ui-editable.css +1 -1
  53. package/styles/ui-editor-insert-table-grid.css +1 -1
  54. package/styles/ui-editor-mention-menu-item.css +1 -1
  55. package/styles/ui-editor-mention-menu.css +1 -1
  56. package/styles/ui-editor-slash-menu-group.css +1 -1
  57. package/styles/ui-editor-slash-menu-item.css +1 -1
  58. package/styles/ui-editor-slash-menu.css +1 -1
  59. package/styles/ui-editor-table-context-menu.css +1 -1
  60. package/styles/ui-editor-table-overlay.css +1 -1
  61. package/styles/ui-editor-table-toolbar.css +1 -1
  62. package/styles/ui-editor-toolbar.css +1 -1
  63. package/styles/ui-floating-action-button.css +1 -1
  64. package/styles/ui-form-field.css +1 -1
  65. package/styles/ui-grid.css +1 -1
  66. package/styles/ui-icon-button.css +1 -1
  67. package/styles/ui-icon.css +1 -1
  68. package/styles/ui-input-group.css +1 -1
  69. package/styles/ui-input.css +1 -1
  70. package/styles/ui-list-item.css +1 -1
  71. package/styles/ui-list.css +1 -1
  72. package/styles/ui-listbox.css +1 -1
  73. package/styles/ui-menu-group.css +1 -1
  74. package/styles/ui-menu-item.css +1 -1
  75. package/styles/ui-menu.css +1 -1
  76. package/styles/ui-meter.css +1 -1
  77. package/styles/ui-nav-item.css +1 -1
  78. package/styles/ui-page-header.css +1 -1
  79. package/styles/ui-popover.css +1 -1
  80. package/styles/ui-radio-group.css +1 -1
  81. package/styles/ui-radio.css +1 -1
  82. package/styles/ui-reel.css +1 -1
  83. package/styles/ui-scroll-area.css +1 -1
  84. package/styles/ui-search-result-row.css +1 -1
  85. package/styles/ui-search-shell.css +1 -1
  86. package/styles/ui-section.css +1 -1
  87. package/styles/ui-select.css +1 -1
  88. package/styles/ui-separator.css +1 -1
  89. package/styles/ui-sidebar.css +1 -1
  90. package/styles/ui-spinner.css +1 -1
  91. package/styles/ui-stack.css +1 -1
  92. package/styles/ui-status-message.css +1 -1
  93. package/styles/ui-switch.css +1 -1
  94. package/styles/ui-switcher.css +1 -1
  95. package/styles/ui-table.css +1 -1
  96. package/styles/ui-tabs.css +1 -1
  97. package/styles/ui-text.css +1 -1
  98. package/styles/ui-textarea.css +1 -1
  99. package/styles/ui-toast-region.css +1 -1
  100. package/styles/ui-toast.css +1 -1
  101. package/styles/ui-tooltip.css +1 -1
  102. package/styles/ui-top-bar.css +1 -1
  103. package/styles/ui-tree-item.css +1 -1
  104. package/styles/ui-tree.css +1 -1
  105. package/vanilla/UiActionBar.d.ts +1 -1
  106. package/vanilla/UiActionBar.js +1 -1
  107. package/vanilla/UiAffordanceScope.d.ts +1 -1
  108. package/vanilla/UiAffordanceScope.js +2 -2
  109. package/vanilla/UiAvatar.d.ts +1 -1
  110. package/vanilla/UiAvatar.js +2 -2
  111. package/vanilla/UiAvatarGroup.d.ts +1 -1
  112. package/vanilla/UiAvatarGroup.js +2 -2
  113. package/vanilla/UiBadge.d.ts +1 -1
  114. package/vanilla/UiBadge.js +1 -1
  115. package/vanilla/UiBreadcrumbItem.d.ts +1 -1
  116. package/vanilla/UiBreadcrumbItem.js +1 -1
  117. package/vanilla/UiBreadcrumbs.d.ts +1 -1
  118. package/vanilla/UiBreadcrumbs.js +1 -1
  119. package/vanilla/UiButton.d.ts +1 -1
  120. package/vanilla/UiButton.js +1 -1
  121. package/vanilla/UiCallout.d.ts +1 -1
  122. package/vanilla/UiCallout.js +1 -1
  123. package/vanilla/UiCard.d.ts +1 -1
  124. package/vanilla/UiCard.js +1 -1
  125. package/vanilla/UiCheckbox.d.ts +1 -1
  126. package/vanilla/UiCheckbox.js +2 -2
  127. package/vanilla/UiCluster.d.ts +1 -1
  128. package/vanilla/UiCluster.js +1 -1
  129. package/vanilla/UiCombobox.d.ts +1 -1
  130. package/vanilla/UiCombobox.js +2 -2
  131. package/vanilla/UiContainer.d.ts +1 -1
  132. package/vanilla/UiContainer.js +1 -1
  133. package/vanilla/UiContextMenu.d.ts +1 -1
  134. package/vanilla/UiContextMenu.js +2 -2
  135. package/vanilla/UiCover.d.ts +1 -1
  136. package/vanilla/UiCover.js +1 -1
  137. package/vanilla/UiDescriptionItem.d.ts +1 -1
  138. package/vanilla/UiDescriptionItem.js +1 -1
  139. package/vanilla/UiDescriptionList.d.ts +1 -1
  140. package/vanilla/UiDescriptionList.js +1 -1
  141. package/vanilla/UiDialog.d.ts +1 -1
  142. package/vanilla/UiDialog.js +2 -2
  143. package/vanilla/UiDisclosure.d.ts +1 -1
  144. package/vanilla/UiDisclosure.js +2 -2
  145. package/vanilla/UiEditable.d.ts +1 -1
  146. package/vanilla/UiEditable.js +2 -2
  147. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  148. package/vanilla/UiEditorInsertTableGrid.js +2 -2
  149. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  150. package/vanilla/UiEditorMentionMenu.js +2 -2
  151. package/vanilla/UiEditorMentionMenuItem.d.ts +1 -1
  152. package/vanilla/UiEditorMentionMenuItem.js +1 -1
  153. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  154. package/vanilla/UiEditorSlashMenu.js +2 -2
  155. package/vanilla/UiEditorSlashMenuGroup.d.ts +1 -1
  156. package/vanilla/UiEditorSlashMenuGroup.js +1 -1
  157. package/vanilla/UiEditorSlashMenuItem.d.ts +1 -1
  158. package/vanilla/UiEditorSlashMenuItem.js +1 -1
  159. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  160. package/vanilla/UiEditorTableContextMenu.js +2 -2
  161. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  162. package/vanilla/UiEditorTableOverlay.js +2 -2
  163. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  164. package/vanilla/UiEditorTableToolbar.js +2 -2
  165. package/vanilla/UiEditorToolbar.d.ts +1 -1
  166. package/vanilla/UiEditorToolbar.js +1 -1
  167. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  168. package/vanilla/UiFloatingActionButton.js +1 -1
  169. package/vanilla/UiFormField.d.ts +1 -1
  170. package/vanilla/UiFormField.js +1 -1
  171. package/vanilla/UiGrid.d.ts +1 -1
  172. package/vanilla/UiGrid.js +1 -1
  173. package/vanilla/UiIcon.d.ts +1 -1
  174. package/vanilla/UiIcon.js +1 -1
  175. package/vanilla/UiIconButton.d.ts +1 -1
  176. package/vanilla/UiIconButton.js +1 -1
  177. package/vanilla/UiInput.d.ts +1 -1
  178. package/vanilla/UiInput.js +1 -1
  179. package/vanilla/UiInputGroup.d.ts +1 -1
  180. package/vanilla/UiInputGroup.js +1 -1
  181. package/vanilla/UiList.d.ts +1 -1
  182. package/vanilla/UiList.js +1 -1
  183. package/vanilla/UiListItem.d.ts +1 -1
  184. package/vanilla/UiListItem.js +1 -1
  185. package/vanilla/UiListbox.d.ts +1 -1
  186. package/vanilla/UiListbox.js +2 -2
  187. package/vanilla/UiMenu.d.ts +1 -1
  188. package/vanilla/UiMenu.js +2 -2
  189. package/vanilla/UiMenuGroup.d.ts +1 -1
  190. package/vanilla/UiMenuGroup.js +1 -1
  191. package/vanilla/UiMenuItem.d.ts +1 -1
  192. package/vanilla/UiMenuItem.js +2 -2
  193. package/vanilla/UiMeter.d.ts +1 -1
  194. package/vanilla/UiMeter.js +1 -1
  195. package/vanilla/UiNavItem.d.ts +1 -1
  196. package/vanilla/UiNavItem.js +1 -1
  197. package/vanilla/UiPageHeader.d.ts +1 -1
  198. package/vanilla/UiPageHeader.js +1 -1
  199. package/vanilla/UiPopover.d.ts +1 -1
  200. package/vanilla/UiPopover.js +2 -2
  201. package/vanilla/UiRadio.d.ts +1 -1
  202. package/vanilla/UiRadio.js +2 -2
  203. package/vanilla/UiRadioGroup.d.ts +1 -1
  204. package/vanilla/UiRadioGroup.js +2 -2
  205. package/vanilla/UiReel.d.ts +1 -1
  206. package/vanilla/UiReel.js +1 -1
  207. package/vanilla/UiScrollArea.d.ts +1 -1
  208. package/vanilla/UiScrollArea.js +1 -1
  209. package/vanilla/UiSearchResultRow.d.ts +1 -1
  210. package/vanilla/UiSearchResultRow.js +1 -1
  211. package/vanilla/UiSearchShell.d.ts +1 -1
  212. package/vanilla/UiSearchShell.js +2 -2
  213. package/vanilla/UiSection.d.ts +1 -1
  214. package/vanilla/UiSection.js +1 -1
  215. package/vanilla/UiSelect.d.ts +1 -1
  216. package/vanilla/UiSelect.js +1 -1
  217. package/vanilla/UiSeparator.d.ts +1 -1
  218. package/vanilla/UiSeparator.js +1 -1
  219. package/vanilla/UiSidebar.d.ts +1 -1
  220. package/vanilla/UiSidebar.js +2 -2
  221. package/vanilla/UiSpinner.d.ts +1 -1
  222. package/vanilla/UiSpinner.js +1 -1
  223. package/vanilla/UiStack.d.ts +1 -1
  224. package/vanilla/UiStack.js +1 -1
  225. package/vanilla/UiStatusMessage.d.ts +1 -1
  226. package/vanilla/UiStatusMessage.js +1 -1
  227. package/vanilla/UiSwitch.d.ts +1 -1
  228. package/vanilla/UiSwitch.js +2 -2
  229. package/vanilla/UiSwitcher.d.ts +1 -1
  230. package/vanilla/UiSwitcher.js +2 -2
  231. package/vanilla/UiTable.d.ts +1 -1
  232. package/vanilla/UiTable.js +1 -1
  233. package/vanilla/UiTabs.d.ts +1 -1
  234. package/vanilla/UiTabs.js +2 -2
  235. package/vanilla/UiText.d.ts +1 -1
  236. package/vanilla/UiText.js +1 -1
  237. package/vanilla/UiTextarea.d.ts +1 -1
  238. package/vanilla/UiTextarea.js +1 -1
  239. package/vanilla/UiToast.d.ts +1 -1
  240. package/vanilla/UiToast.js +1 -1
  241. package/vanilla/UiToastRegion.d.ts +1 -1
  242. package/vanilla/UiToastRegion.js +2 -2
  243. package/vanilla/UiTooltip.d.ts +1 -1
  244. package/vanilla/UiTooltip.js +2 -2
  245. package/vanilla/UiTopBar.d.ts +1 -1
  246. package/vanilla/UiTopBar.js +1 -1
  247. package/vanilla/UiTree.d.ts +1 -1
  248. package/vanilla/UiTree.js +1 -1
  249. package/vanilla/UiTreeItem.d.ts +1 -1
  250. package/vanilla/UiTreeItem.js +2 -2
  251. package/vue/UiActionBar.vue +1 -1
  252. package/vue/UiAffordanceScope.vue +25 -7
  253. package/vue/UiAvatar.vue +125 -30
  254. package/vue/UiAvatarGroup.d.ts +1 -1
  255. package/vue/UiAvatarGroup.vue +67 -21
  256. package/vue/UiBadge.vue +34 -8
  257. package/vue/UiBreadcrumbItem.vue +15 -4
  258. package/vue/UiBreadcrumbs.vue +14 -4
  259. package/vue/UiButton.vue +123 -42
  260. package/vue/UiCallout.vue +16 -4
  261. package/vue/UiCard.vue +46 -10
  262. package/vue/UiCheckbox.d.ts +5 -5
  263. package/vue/UiCheckbox.vue +73 -19
  264. package/vue/UiCluster.vue +39 -10
  265. package/vue/UiCombobox.d.ts +5 -5
  266. package/vue/UiCombobox.vue +317 -78
  267. package/vue/UiContainer.vue +23 -6
  268. package/vue/UiContextMenu.vue +24 -7
  269. package/vue/UiCover.vue +16 -4
  270. package/vue/UiDescriptionItem.vue +14 -4
  271. package/vue/UiDescriptionList.vue +33 -8
  272. package/vue/UiDialog.vue +79 -26
  273. package/vue/UiDisclosure.vue +101 -38
  274. package/vue/UiEditable.d.ts +3 -3
  275. package/vue/UiEditable.vue +107 -27
  276. package/vue/UiEditorInsertTableGrid.vue +47 -11
  277. package/vue/UiEditorMentionMenu.vue +99 -20
  278. package/vue/UiEditorMentionMenuItem.vue +29 -8
  279. package/vue/UiEditorSlashMenu.vue +85 -16
  280. package/vue/UiEditorSlashMenuGroup.vue +14 -4
  281. package/vue/UiEditorSlashMenuItem.vue +43 -12
  282. package/vue/UiEditorTableContextMenu.d.ts +1 -1
  283. package/vue/UiEditorTableContextMenu.vue +95 -19
  284. package/vue/UiEditorTableOverlay.vue +91 -7
  285. package/vue/UiEditorTableToolbar.vue +105 -16
  286. package/vue/UiEditorToolbar.vue +15 -4
  287. package/vue/UiFloatingActionButton.vue +31 -8
  288. package/vue/UiFormField.d.ts +1 -1
  289. package/vue/UiFormField.vue +31 -8
  290. package/vue/UiGrid.vue +30 -8
  291. package/vue/UiIcon.vue +15 -4
  292. package/vue/UiIconButton.vue +70 -24
  293. package/vue/UiInput.vue +114 -39
  294. package/vue/UiInputGroup.vue +15 -4
  295. package/vue/UiList.vue +47 -16
  296. package/vue/UiListItem.vue +24 -6
  297. package/vue/UiListbox.d.ts +3 -3
  298. package/vue/UiListbox.vue +72 -24
  299. package/vue/UiMenu.vue +55 -15
  300. package/vue/UiMenuGroup.vue +14 -4
  301. package/vue/UiMenuItem.d.ts +4 -4
  302. package/vue/UiMenuItem.vue +77 -27
  303. package/vue/UiMeter.vue +65 -16
  304. package/vue/UiNavItem.vue +48 -24
  305. package/vue/UiPageHeader.vue +16 -4
  306. package/vue/UiPopover.vue +46 -21
  307. package/vue/UiRadio.d.ts +4 -4
  308. package/vue/UiRadio.vue +58 -15
  309. package/vue/UiRadioGroup.d.ts +3 -3
  310. package/vue/UiRadioGroup.vue +66 -17
  311. package/vue/UiReel.d.ts +1 -1
  312. package/vue/UiReel.vue +31 -8
  313. package/vue/UiScrollArea.vue +16 -4
  314. package/vue/UiSearchResultRow.vue +23 -6
  315. package/vue/UiSearchShell.vue +38 -11
  316. package/vue/UiSection.vue +33 -8
  317. package/vue/UiSelect.d.ts +1 -1
  318. package/vue/UiSelect.vue +45 -20
  319. package/vue/UiSeparator.vue +16 -4
  320. package/vue/UiSidebar.d.ts +2 -2
  321. package/vue/UiSidebar.vue +86 -22
  322. package/vue/UiSpinner.vue +23 -6
  323. package/vue/UiStack.vue +31 -8
  324. package/vue/UiStatusMessage.vue +32 -8
  325. package/vue/UiSwitch.d.ts +4 -4
  326. package/vue/UiSwitch.vue +57 -15
  327. package/vue/UiSwitcher.vue +41 -17
  328. package/vue/UiTable.vue +24 -6
  329. package/vue/UiTabs.vue +60 -14
  330. package/vue/UiText.vue +98 -35
  331. package/vue/UiTextarea.d.ts +1 -1
  332. package/vue/UiTextarea.vue +67 -26
  333. package/vue/UiToast.vue +24 -6
  334. package/vue/UiToastRegion.vue +41 -13
  335. package/vue/UiTooltip.d.ts +1 -1
  336. package/vue/UiTooltip.vue +85 -30
  337. package/vue/UiTopBar.vue +1 -1
  338. package/vue/UiTree.vue +56 -14
  339. package/vue/UiTreeItem.d.ts +3 -3
  340. package/vue/UiTreeItem.vue +147 -36
  341. package/vue/chunks/UiActionBar.js +1 -1
  342. package/vue/chunks/UiAffordanceScope.js +34 -7
  343. package/vue/chunks/UiAvatar.js +141 -21
  344. package/vue/chunks/UiAvatarGroup.js +83 -16
  345. package/vue/chunks/UiBadge.js +57 -19
  346. package/vue/chunks/UiBreadcrumbItem.js +19 -6
  347. package/vue/chunks/UiBreadcrumbs.js +19 -6
  348. package/vue/chunks/UiButton.js +194 -42
  349. package/vue/chunks/UiCallout.js +27 -13
  350. package/vue/chunks/UiCard.js +83 -25
  351. package/vue/chunks/UiCheckbox.js +104 -17
  352. package/vue/chunks/UiCluster.js +70 -25
  353. package/vue/chunks/UiCombobox.js +441 -46
  354. package/vue/chunks/UiContainer.js +36 -11
  355. package/vue/chunks/UiContextMenu.js +33 -7
  356. package/vue/chunks/UiCover.js +20 -6
  357. package/vue/chunks/UiDescriptionItem.js +18 -5
  358. package/vue/chunks/UiDescriptionList.js +54 -17
  359. package/vue/chunks/UiDialog.js +115 -23
  360. package/vue/chunks/UiDisclosure.js +110 -24
  361. package/vue/chunks/UiEditable.js +146 -18
  362. package/vue/chunks/UiEditorInsertTableGrid.js +65 -10
  363. package/vue/chunks/UiEditorMentionMenu.js +210 -14
  364. package/vue/chunks/UiEditorMentionMenuItem.js +43 -8
  365. package/vue/chunks/UiEditorSlashMenu.js +186 -12
  366. package/vue/chunks/UiEditorSlashMenuGroup.js +19 -6
  367. package/vue/chunks/UiEditorSlashMenuItem.js +65 -10
  368. package/vue/chunks/UiEditorTableContextMenu.js +116 -16
  369. package/vue/chunks/UiEditorTableOverlay.js +188 -7
  370. package/vue/chunks/UiEditorTableToolbar.js +125 -16
  371. package/vue/chunks/UiEditorToolbar.js +19 -6
  372. package/vue/chunks/UiFloatingActionButton.js +43 -8
  373. package/vue/chunks/UiFormField.js +43 -8
  374. package/vue/chunks/UiGrid.js +52 -18
  375. package/vue/chunks/UiIcon.js +19 -6
  376. package/vue/chunks/UiIconButton.js +107 -21
  377. package/vue/chunks/UiInput.js +309 -30
  378. package/vue/chunks/UiInputGroup.js +19 -6
  379. package/vue/chunks/UiList.js +62 -10
  380. package/vue/chunks/UiListItem.js +33 -7
  381. package/vue/chunks/UiListbox.js +105 -13
  382. package/vue/chunks/UiMenu.js +79 -11
  383. package/vue/chunks/UiMenuGroup.js +19 -6
  384. package/vue/chunks/UiMenuItem.js +93 -28
  385. package/vue/chunks/UiMeter.js +96 -19
  386. package/vue/chunks/UiNavItem.js +74 -17
  387. package/vue/chunks/UiPageHeader.js +20 -6
  388. package/vue/chunks/UiPopover.js +58 -21
  389. package/vue/chunks/UiRadio.js +82 -15
  390. package/vue/chunks/UiRadioGroup.js +89 -12
  391. package/vue/chunks/UiReel.js +53 -18
  392. package/vue/chunks/UiScrollArea.js +20 -6
  393. package/vue/chunks/UiSearchResultRow.js +32 -7
  394. package/vue/chunks/UiSearchShell.js +55 -9
  395. package/vue/chunks/UiSection.js +49 -12
  396. package/vue/chunks/UiSelect.js +68 -13
  397. package/vue/chunks/UiSeparator.js +20 -6
  398. package/vue/chunks/UiSidebar.js +123 -19
  399. package/vue/chunks/UiSpinner.js +33 -7
  400. package/vue/chunks/UiStack.js +59 -24
  401. package/vue/chunks/UiStatusMessage.js +53 -16
  402. package/vue/chunks/UiSwitch.js +82 -15
  403. package/vue/chunks/UiSwitcher.js +70 -25
  404. package/vue/chunks/UiTable.js +33 -7
  405. package/vue/chunks/UiTabs.js +81 -11
  406. package/vue/chunks/UiText.js +169 -58
  407. package/vue/chunks/UiTextarea.js +101 -16
  408. package/vue/chunks/UiToast.js +39 -13
  409. package/vue/chunks/UiToastRegion.js +41 -14
  410. package/vue/chunks/UiTooltip.js +113 -30
  411. package/vue/chunks/UiTopBar.js +1 -1
  412. package/vue/chunks/UiTree.js +82 -15
  413. package/vue/chunks/UiTreeItem.js +184 -22
  414. package/vue/chunks/props.js +271 -35
  415. package/vue/components.css +1197 -1197
  416. package/vue/editor/index.js +5 -2
  417. package/vue/editor/primitives.d.ts +4 -1
  418. package/vue/host.ts +6 -6
@@ -1,7 +1,7 @@
1
1
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
2
  import { r as useComponentHost, t as createDispatch } from "./host.js";
3
- import { t as checkedProp } from "./props.js";
4
- import { computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, getCurrentInstance, mergeProps, openBlock, ref, renderSlot, toDisplayString, useTemplateRef, watchSyncEffect } from "vue";
3
+ import { r as vPropValidity, t as checkedProp } from "./props.js";
4
+ import { computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, toDisplayString, unref, useTemplateRef, watchSyncEffect, withDirectives } from "vue";
5
5
  //#region .build/vue/UiTreeItem.vue?vue&type=script&setup=true&lang.ts
6
6
  var _hoisted_1 = [
7
7
  "aria-label",
@@ -118,64 +118,204 @@ var UiTreeItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
118
118
  },
119
119
  emits: ["update:expanded", "expand"],
120
120
  setup(__props, { emit: __emit }) {
121
+ const propValidityContract = { props: {
122
+ accepts: {
123
+ type: {
124
+ kind: "terminal",
125
+ name: "string"
126
+ },
127
+ required: false,
128
+ target: { attribute: "data-accepts" },
129
+ description: "A comma-separated list of the dragType values this branch accepts dropped inside it. Empty accepts any type. It does not affect drops before or after the\n item.",
130
+ default: ""
131
+ },
132
+ container: {
133
+ type: {
134
+ kind: "terminal",
135
+ name: "boolean"
136
+ },
137
+ required: false,
138
+ target: { attribute: "container" },
139
+ description: "Makes the item a branch even before it has children: it gets the expand button and aria-expanded, and accepts drops inside it. An item with nested items is\n a branch without it.",
140
+ default: false
141
+ },
142
+ disabled: {
143
+ type: {
144
+ kind: "terminal",
145
+ name: "boolean"
146
+ },
147
+ required: false,
148
+ target: { attribute: "aria-disabled" },
149
+ description: "Makes the item unavailable: faded, skipped by keyboard navigation, unable to expand or be dragged, and closed to drops inside it.",
150
+ default: false
151
+ },
152
+ dragType: {
153
+ type: {
154
+ kind: "terminal",
155
+ name: "string"
156
+ },
157
+ required: false,
158
+ target: { attribute: "data-drag-type" },
159
+ description: "The item's kind, for drag rules: it can be dropped before or after only items of the same type, and inside a branch only if that branch's accepts allows\n it. Reported as sourceType and targetType.",
160
+ default: "item"
161
+ },
162
+ dropDepth: {
163
+ type: {
164
+ kind: "terminal",
165
+ name: "number"
166
+ },
167
+ required: false,
168
+ target: { attribute: "data-drop-depth" },
169
+ description: "Overrides the level this item counts as when the tree checks maxDepth for a drop onto it. Unset, its level in the rendered tree is used; set it when the\n item sits deeper in the real hierarchy than the rendered tree shows."
170
+ },
171
+ dropScope: {
172
+ type: {
173
+ kind: "terminal",
174
+ name: "string"
175
+ },
176
+ required: false,
177
+ target: { attribute: "data-drop-scope" },
178
+ description: "Names the list the item sits in, such as its parent's id, and is reported as sourceScope and targetScope in the tree's reorder events, so a handler can\n tell a reorder within one list from a move between lists. It never restricts where an item can be dropped; dragType and accepts do that.",
179
+ default: ""
180
+ },
181
+ expanded: {
182
+ type: {
183
+ kind: "terminal",
184
+ name: "boolean"
185
+ },
186
+ required: false,
187
+ target: { attribute: "expanded" },
188
+ description: "Whether the branch shows its children, initially or when set externally. The expand button, a click on the row, and the arrow keys toggle it from there,\n each reported as an expand event. Only meaningful for a branch.",
189
+ default: false
190
+ },
191
+ itemId: {
192
+ type: {
193
+ kind: "terminal",
194
+ name: "string"
195
+ },
196
+ required: false,
197
+ target: { attribute: "data-item-id" },
198
+ description: "The item's identifier, reported as sourceId and targetId in the tree's reorder events and as id in its expand event. A sortable item needs one to be\n dragged, and a drop onto an item without one is not reported.",
199
+ default: ""
200
+ },
201
+ label: {
202
+ type: {
203
+ kind: "terminal",
204
+ name: "string"
205
+ },
206
+ required: false,
207
+ target: { attribute: "aria-label" },
208
+ description: "The item's accessible name, also shown as the row text unless the label slot supplies content.",
209
+ default: ""
210
+ },
211
+ lazy: {
212
+ type: {
213
+ kind: "terminal",
214
+ name: "boolean"
215
+ },
216
+ required: false,
217
+ target: { attribute: "lazy" },
218
+ description: "Keeps an empty item expandable while its children are supplied later. Expanding emits expand; the item is aria-busy until child Tree Items are appended.\n Clear lazy if loading finishes with no children.",
219
+ default: false
220
+ },
221
+ marquee: {
222
+ type: {
223
+ kind: "terminal",
224
+ name: "boolean"
225
+ },
226
+ required: false,
227
+ target: { attribute: "marquee" },
228
+ description: "Scrolls a name too long for its row while a pointer hovers the row or keyboard focus is in it, rests at the end, then scrolls it again from the start. A\n touch does not start it. Off by default: a tree of short names should not move, and a product decides whether reading the whole name matters more than a\n still list.",
229
+ default: false
230
+ },
231
+ selected: {
232
+ type: {
233
+ kind: "terminal",
234
+ name: "boolean"
235
+ },
236
+ required: false,
237
+ target: { attribute: "aria-selected" },
238
+ description: "Marks the item selected: it sets aria-selected and highlights the row. This is controlled state; respond to the parent Tree's select request by updating\n it.",
239
+ default: false
240
+ },
241
+ sortable: {
242
+ type: {
243
+ kind: "terminal",
244
+ name: "boolean"
245
+ },
246
+ required: false,
247
+ target: { attribute: "sortable" },
248
+ description: "Gives the item a move handle. Drag it, or activate it and choose a target by a second click or the keyboard. The tree reports reorder and leaves moving the\n item to you. Needs itemId; disabled items show no handle.",
249
+ default: false
250
+ },
251
+ subtreeDepth: {
252
+ type: {
253
+ kind: "terminal",
254
+ name: "number"
255
+ },
256
+ required: false,
257
+ target: { attribute: "data-subtree-depth" },
258
+ description: "Overrides how many levels sit beneath this item when the tree checks maxDepth for a drag of it. Unset, the tree counts the rendered descendants; set it\n when some are not rendered, such as children that load later."
259
+ }
260
+ } };
121
261
  const props = __props;
122
262
  const checkedProps = computed(() => ({
123
263
  accepts: checkedProp(props["accepts"], {
124
264
  kind: "terminal",
125
265
  name: "string"
126
- }, false, "accepts", void 0, void 0),
266
+ }, false, "accepts"),
127
267
  container: checkedProp(props["container"], {
128
268
  kind: "terminal",
129
269
  name: "boolean"
130
- }, false, "container", void 0, void 0),
270
+ }, false, "container"),
131
271
  disabled: checkedProp(props["disabled"], {
132
272
  kind: "terminal",
133
273
  name: "boolean"
134
- }, false, "disabled", void 0, void 0),
274
+ }, false, "disabled"),
135
275
  dragType: checkedProp(props["dragType"], {
136
276
  kind: "terminal",
137
277
  name: "string"
138
- }, false, "dragType", void 0, void 0),
278
+ }, false, "dragType"),
139
279
  dropDepth: checkedProp(props["dropDepth"], {
140
280
  kind: "terminal",
141
281
  name: "number"
142
- }, false, "dropDepth", void 0, void 0),
282
+ }, false, "dropDepth"),
143
283
  dropScope: checkedProp(props["dropScope"], {
144
284
  kind: "terminal",
145
285
  name: "string"
146
- }, false, "dropScope", void 0, void 0),
286
+ }, false, "dropScope"),
147
287
  expanded: checkedProp(props["expanded"], {
148
288
  kind: "terminal",
149
289
  name: "boolean"
150
- }, false, "expanded", void 0, void 0),
290
+ }, false, "expanded"),
151
291
  itemId: checkedProp(props["itemId"], {
152
292
  kind: "terminal",
153
293
  name: "string"
154
- }, false, "itemId", void 0, void 0),
294
+ }, false, "itemId"),
155
295
  label: checkedProp(props["label"], {
156
296
  kind: "terminal",
157
297
  name: "string"
158
- }, false, "label", void 0, void 0),
298
+ }, false, "label"),
159
299
  lazy: checkedProp(props["lazy"], {
160
300
  kind: "terminal",
161
301
  name: "boolean"
162
- }, false, "lazy", void 0, void 0),
302
+ }, false, "lazy"),
163
303
  marquee: checkedProp(props["marquee"], {
164
304
  kind: "terminal",
165
305
  name: "boolean"
166
- }, false, "marquee", void 0, void 0),
306
+ }, false, "marquee"),
167
307
  selected: checkedProp(props["selected"], {
168
308
  kind: "terminal",
169
309
  name: "boolean"
170
- }, false, "selected", void 0, void 0),
310
+ }, false, "selected"),
171
311
  sortable: checkedProp(props["sortable"], {
172
312
  kind: "terminal",
173
313
  name: "boolean"
174
- }, false, "sortable", void 0, void 0),
314
+ }, false, "sortable"),
175
315
  subtreeDepth: checkedProp(props["subtreeDepth"], {
176
316
  kind: "terminal",
177
317
  name: "number"
178
- }, false, "subtreeDepth", void 0, void 0)
318
+ }, false, "subtreeDepth")
179
319
  }));
180
320
  checkedProps.value;
181
321
  watchSyncEffect(() => {
@@ -208,6 +348,25 @@ var UiTreeItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
208
348
  const structuralLevel = ref(1);
209
349
  const tabStop = ref(false);
210
350
  const isContainer = ref(false);
351
+ let guardedPrevious;
352
+ const guarded = computed(() => {
353
+ if (!(structuralLevel.value == null || Number.isInteger(structuralLevel.value))) return guardedPrevious;
354
+ return guardedPrevious = structuralLevel.value;
355
+ });
356
+ let guardedBindingPrevious;
357
+ const guardedBinding = computed(() => {
358
+ if (!(isContainer.value == null || typeof isContainer.value === "boolean")) return guardedBindingPrevious;
359
+ return guardedBindingPrevious = !isContainer.value;
360
+ });
361
+ let guardedBinding2Previous;
362
+ const guardedBinding2 = computed(() => {
363
+ if (!((internalExpanded.value == null || typeof internalExpanded.value === "boolean") && (isContainer.value == null || typeof isContainer.value === "boolean"))) return guardedBinding2Previous;
364
+ return guardedBinding2Previous = !(isContainer.value && internalExpanded.value);
365
+ });
366
+ provide("html-next:ui-tree-item:internalExpanded", internalExpanded);
367
+ provide("html-next:ui-tree-item:structuralLevel", structuralLevel);
368
+ provide("html-next:ui-tree-item:tabStop", tabStop);
369
+ provide("html-next:ui-tree-item:isContainer", isContainer);
211
370
  const hydrationNode = hydrationInstance?.vnode.el;
212
371
  if (typeof window !== "undefined" && hydrationNode != null && (!(hydrationNode instanceof Element) || hydrationNode.localName !== "div")) throw Object.assign(/* @__PURE__ */ new Error("HR005: Server markup for <ui-tree-item> has an incompatible root."), {
213
372
  name: "HtmlDiagnosticError",
@@ -262,12 +421,12 @@ var UiTreeItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
262
421
  }
263
422
  });
264
423
  return (_ctx, _cache) => {
265
- return openBlock(), createElementBlock("div", mergeProps({
424
+ return withDirectives((openBlock(), createElementBlock("div", mergeProps({
266
425
  "data-component": "ui-tree-item",
267
426
  role: "treeitem"
268
427
  }, nativeAttrs(_ctx.$attrs), {
269
428
  "aria-label": checkedProps.value.label ?? void 0,
270
- "aria-level": structuralLevel.value,
429
+ "aria-level": guarded.value,
271
430
  "aria-selected": checkedProps.value.selected ?? void 0,
272
431
  "aria-disabled": checkedProps.value.disabled ?? void 0,
273
432
  "data-accepts": reflectedProp("accepts", "accepts", checkedProps.value.accepts, void 0, true),
@@ -341,7 +500,7 @@ var UiTreeItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
341
500
  class: "disclosure",
342
501
  type: "button",
343
502
  disabled: checkedProps.value.disabled ?? void 0,
344
- hidden: !isContainer.value,
503
+ hidden: guardedBinding.value,
345
504
  ref: "disclosure"
346
505
  }, [..._cache[1] || (_cache[1] = [createElementVNode("span", {
347
506
  class: "disclosure-icon",
@@ -366,16 +525,19 @@ var UiTreeItem_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
366
525
  createElementVNode("div", {
367
526
  class: "children",
368
527
  role: "group",
369
- hidden: !(isContainer.value && internalExpanded.value),
528
+ hidden: guardedBinding2.value,
370
529
  ref: "children"
371
530
  }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_11),
372
531
  _cache[3] || (_cache[3] = createElementVNode("span", {
373
532
  class: "drop-indicator subtree-drop-indicator",
374
533
  "aria-hidden": "true"
375
534
  }, null, -1))
376
- ], 16, _hoisted_1);
535
+ ], 16, _hoisted_1)), [[unref(vPropValidity), {
536
+ contract: propValidityContract,
537
+ values: { ...checkedProps.value }
538
+ }]]);
377
539
  };
378
540
  }
379
- }), [["__scopeId", "data-v-f1e8a2e7"]]);
541
+ }), [["__scopeId", "data-v-0e350273"]]);
380
542
  //#endregion
381
543
  export { UiTreeItem_default as t };
@@ -171,17 +171,6 @@ var CSS_NAMED_COLOR_SET = /* @__PURE__ */ new Set([
171
171
  "yellowgreen"
172
172
  ]);
173
173
  var HTML_EMAIL_PATTERN = /^[a-zA-Z0-9.!#$%&'*+/?=^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
174
- var HtmlDiagnosticError = class extends Error {
175
- diagnostic;
176
- constructor(code, message) {
177
- super(code + ": " + message);
178
- this.name = "HtmlDiagnosticError";
179
- this.diagnostic = Object.freeze({
180
- code,
181
- message
182
- });
183
- }
184
- };
185
174
  function issue(path, message) {
186
175
  return {
187
176
  ok: false,
@@ -287,7 +276,7 @@ function typeName(node) {
287
276
  "object"
288
277
  ].includes(node.value) ? node.value : JSON.stringify(node.value);
289
278
  case "union": return node.members.map(typeName).join(" | ");
290
- case "constrained": return typeName(node.base) + " with values " + node.values.map(String).join(", ");
279
+ case "constrained": return typeName(node.base) + (node.values === void 0 ? "" : " with values " + node.values.map(String).join(", "));
291
280
  case "list": return "list(" + typeName(node.item) + ")";
292
281
  case "record": return "record(" + typeName(node.value) + ")";
293
282
  case "object": return "object({ " + [...node.fields.map((field) => field.name + (field.optional ? "?" : "") + ": " + typeName(field.type)), ...node.open ? ["..."] : []].join(", ") + " })";
@@ -371,7 +360,10 @@ function parse(value, node, path) {
371
360
  return issue(path, "Must match " + typeName(node) + ".");
372
361
  case "constrained": {
373
362
  const parsed = parse(value, node.base, path);
374
- return parsed.ok && node.values.some((choice) => choice === parsed.value) ? parsed : issue(path, "Must be one of " + node.values.map(String).join(", ") + ".");
363
+ if (!parsed.ok) return parsed;
364
+ if (node.values !== void 0 && !node.values.some((choice) => choice === parsed.value)) return issue(path, "Must be one of " + node.values.map(String).join(", ") + ".");
365
+ const problem = boundProblem(parsed.value, node.base.kind === "terminal" ? node.base.name : "", node);
366
+ return problem === void 0 ? parsed : issue(path, problem);
375
367
  }
376
368
  case "list": {
377
369
  const input = structured(value);
@@ -445,34 +437,278 @@ function selectedPropNode(selector, options) {
445
437
  kind: "terminal",
446
438
  name: "null"
447
439
  };
448
- const option = options.find((candidate) => candidate.value === selector);
449
- if (option === void 0) throw new HtmlDiagnosticError("HR002", "A selecting prop has no matching type option.");
450
- return option.type;
440
+ return options.find((candidate) => candidate.value === selector)?.type ?? {
441
+ kind: "terminal",
442
+ name: "null"
443
+ };
451
444
  }
452
- function checkedProp(value, type, required, name, pattern, values) {
453
- if (value === void 0) {
454
- if (required) throw new HtmlDiagnosticError("HC020", "Required prop `" + name + "` was not provided.");
455
- return null;
445
+ function comparable(value, type) {
446
+ if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
447
+ if (typeof value !== "string") return void 0;
448
+ const date = /^([0-9]{4,})-([0-9]{2})-([0-9]{2})$/.exec(value);
449
+ const month = /^([0-9]{4,})-([0-9]{2})$/.exec(value);
450
+ const week = /^([0-9]{4,})-W([0-9]{2})$/.exec(value);
451
+ const time = /^([0-9]{2}):([0-9]{2})(?::([0-9]{2})(?:\.([0-9]+))?)?$/.exec(value);
452
+ switch (type) {
453
+ case "number":
454
+ case "integer": return Number.isFinite(Number(value)) ? Number(value) : void 0;
455
+ case "date": return date === null ? void 0 : Number(date[1]) * 372 + Number(date[2]) * 31 + Number(date[3]);
456
+ case "month": return month === null ? void 0 : Number(month[1]) * 12 + Number(month[2]);
457
+ case "week": return week === null ? void 0 : Number(week[1]) * 53 + Number(week[2]);
458
+ case "time": return time === null ? void 0 : Number(time[1]) * 3600 + Number(time[2]) * 60 + Number(time[3] ?? 0) + Number("0." + (time[4] ?? "0"));
459
+ case "datetime-local": {
460
+ const parsed = Date.parse(value.replace(" ", "T") + "Z");
461
+ return Number.isFinite(parsed) ? parsed : void 0;
462
+ }
463
+ case "datetime": {
464
+ const parsed = Date.parse(value);
465
+ return Number.isFinite(parsed) ? parsed : void 0;
466
+ }
467
+ default: return;
456
468
  }
457
- if (value === null) {
458
- if (required) throw new HtmlDiagnosticError("HC021", "A required prop cannot be null.");
459
- return null;
469
+ }
470
+ function boundProblem(value, type, bounds) {
471
+ if (value === null || value === void 0 || value === "") return void 0;
472
+ const actual = comparable(value, type);
473
+ if (actual !== void 0) {
474
+ const min = comparable(bounds.min, type);
475
+ const max = comparable(bounds.max, type);
476
+ if (min !== void 0 && actual < min) return "Value is below its minimum.";
477
+ if (max !== void 0 && actual > max) return "Value is above its maximum.";
460
478
  }
479
+ if (typeof value === "string") {
480
+ if (bounds.minLength !== void 0 && value.length < bounds.minLength) return "Value is too short.";
481
+ if (bounds.maxLength !== void 0 && value.length > bounds.maxLength) return "Value is too long.";
482
+ if (bounds.pattern !== void 0) {
483
+ let expression;
484
+ try {
485
+ expression = new RegExp("^(?:" + bounds.pattern + ")$", "v");
486
+ } catch {
487
+ expression = new RegExp("^(?:" + bounds.pattern + ")$", "u");
488
+ }
489
+ if (!expression.test(value)) return "Value does not match its pattern.";
490
+ }
491
+ }
492
+ }
493
+ function checkedProp(value, type, _required, _name) {
494
+ if (value === void 0 || value === null) return null;
461
495
  if (value === "" && type.kind === "terminal" && type.name === "boolean") value = true;
462
- if (required && value === "") throw new HtmlDiagnosticError("HR002", "A required prop cannot be empty.");
463
496
  const result = parse(value, type, "$");
464
- if (!result.ok) throw new HtmlDiagnosticError("HR002", "A prop invocation value does not satisfy its declared type. " + result.issues.join("; "));
465
- if (values !== void 0 && !values.some((choice) => choice === result.value)) throw new HtmlDiagnosticError("HR002", "A prop invocation value is not among its permitted values.");
466
- if (pattern !== void 0 && value !== "") {
467
- let expression;
468
- try {
469
- expression = new RegExp("^(?:" + pattern + ")$", "v");
470
- } catch {
471
- expression = new RegExp("^(?:" + pattern + ")$", "u");
497
+ return result.ok ? result.value : value;
498
+ }
499
+ function propValidity(binding) {
500
+ const errors = [];
501
+ for (const [name, prop] of Object.entries(binding.contract.props)) {
502
+ const value = binding.values[name];
503
+ const selected = prop.select === void 0 ? prop.type : selectedPropNode(binding.values[prop.select.from], prop.select.options);
504
+ if (value === null || value === void 0 || value === "") {
505
+ if (prop.required) errors.push({
506
+ reason: "valueMissing",
507
+ message: "This field is required.",
508
+ path: name
509
+ });
510
+ continue;
511
+ }
512
+ if (selected.kind === "terminal" && selected.name === "null") {
513
+ errors.push({
514
+ reason: "typeMismatch",
515
+ message: "No type option matches the selector.",
516
+ path: name
517
+ });
518
+ continue;
519
+ }
520
+ const result = parse(value, selected, name);
521
+ if (!result.ok) {
522
+ const terminal = selected.kind === "terminal" ? selected.name : "";
523
+ errors.push(...result.issues.map((message) => ({
524
+ reason: terminal === "email" || terminal === "url" ? "typeMismatch" : "badInput",
525
+ message,
526
+ path: name
527
+ })));
472
528
  }
473
- if (typeof value !== "string" || !expression.test(value)) throw new HtmlDiagnosticError("HR002", "A prop invocation value does not match its pattern.");
529
+ if (prop.values !== void 0 && !prop.values.some((choice) => choice === value)) errors.push({
530
+ reason: "typeMismatch",
531
+ message: "Value must be one of " + prop.values.map(String).join(", ") + ".",
532
+ path: name
533
+ });
534
+ const type = selected.kind === "terminal" ? selected.name : "";
535
+ const actual = comparable(value, type);
536
+ const min = comparable(prop.min, type);
537
+ const max = comparable(prop.max, type);
538
+ if (actual !== void 0 && min !== void 0 && actual < min) errors.push({
539
+ reason: "rangeUnderflow",
540
+ message: "Value must be at least " + prop.min + ".",
541
+ path: name
542
+ });
543
+ if (actual !== void 0 && max !== void 0 && actual > max) errors.push({
544
+ reason: "rangeOverflow",
545
+ message: "Value must be at most " + prop.max + ".",
546
+ path: name
547
+ });
548
+ if (typeof value === "string") {
549
+ if (prop.minLength !== void 0 && value.length < prop.minLength) errors.push({
550
+ reason: "tooShort",
551
+ message: "Use at least " + prop.minLength + " characters.",
552
+ path: name
553
+ });
554
+ if (prop.maxLength !== void 0 && value.length > prop.maxLength) errors.push({
555
+ reason: "tooLong",
556
+ message: "Use at most " + prop.maxLength + " characters.",
557
+ path: name
558
+ });
559
+ if (prop.pattern !== void 0) {
560
+ let pattern;
561
+ try {
562
+ pattern = new RegExp("^(?:" + prop.pattern + ")$", "v");
563
+ } catch {
564
+ try {
565
+ pattern = new RegExp("^(?:" + prop.pattern + ")$", "u");
566
+ } catch {}
567
+ }
568
+ if (pattern !== void 0 && !pattern.test(value)) errors.push({
569
+ reason: "patternMismatch",
570
+ message: "Value does not match the required format.",
571
+ path: name
572
+ });
573
+ }
574
+ }
575
+ }
576
+ return {
577
+ valid: errors.length === 0,
578
+ errors
579
+ };
580
+ }
581
+ var validityStates = /* @__PURE__ */ new WeakMap();
582
+ var ariaMirrors = /* @__PURE__ */ new WeakSet();
583
+ var REASONS = [
584
+ "valueMissing",
585
+ "typeMismatch",
586
+ "patternMismatch",
587
+ "tooLong",
588
+ "tooShort",
589
+ "rangeUnderflow",
590
+ "rangeOverflow",
591
+ "stepMismatch",
592
+ "badInput",
593
+ "customError",
594
+ "schemaMismatch",
595
+ "untrustedValue"
596
+ ];
597
+ function reflectValidity(el, state) {
598
+ const errors = [...state.validity.errors, ...state.external];
599
+ const valid = errors.length === 0;
600
+ if ([
601
+ "button",
602
+ "fieldset",
603
+ "input",
604
+ "object",
605
+ "output",
606
+ "select",
607
+ "textarea"
608
+ ].includes(el.localName) && "setCustomValidity" in el && typeof el.setCustomValidity === "function") {
609
+ el.setCustomValidity(valid ? "" : errors[0].message);
610
+ return;
474
611
  }
475
- return result.value;
612
+ el.toggleAttribute("data-valid", valid);
613
+ el.toggleAttribute("data-invalid", !valid);
614
+ el.toggleAttribute("data-user-invalid", state.interacted && !valid);
615
+ if (valid) {
616
+ if (ariaMirrors.has(el)) {
617
+ el.removeAttribute("aria-invalid");
618
+ ariaMirrors.delete(el);
619
+ }
620
+ } else if (!el.hasAttribute("aria-invalid") || ariaMirrors.has(el)) {
621
+ el.setAttribute("aria-invalid", "true");
622
+ ariaMirrors.add(el);
623
+ }
624
+ }
625
+ function validityState(state) {
626
+ const errors = [...state.validity.errors, ...state.external];
627
+ const reasons = new Set(errors.map((error) => error.reason));
628
+ return Object.freeze({
629
+ valid: errors.length === 0,
630
+ ...Object.fromEntries(REASONS.map((reason) => [reason, reasons.has(reason)])),
631
+ errors
632
+ });
476
633
  }
634
+ var vPropValidity = {
635
+ mounted(el, binding) {
636
+ const state = {
637
+ current: binding.value,
638
+ validity: propValidity(binding.value),
639
+ external: [],
640
+ interacted: false,
641
+ cleanup: () => {}
642
+ };
643
+ validityStates.set(el, state);
644
+ if (!("validity" in el)) {
645
+ const target = el;
646
+ Object.defineProperties(target, {
647
+ validity: {
648
+ configurable: true,
649
+ get: () => validityState(state)
650
+ },
651
+ validationMessage: {
652
+ configurable: true,
653
+ get: () => validityState(state).errors[0]?.message ?? ""
654
+ },
655
+ willValidate: {
656
+ configurable: true,
657
+ get: () => true
658
+ },
659
+ checkValidity: {
660
+ configurable: true,
661
+ value: () => {
662
+ const valid = validityState(state).valid;
663
+ if (!valid) el.dispatchEvent(new Event("invalid", { cancelable: true }));
664
+ return valid;
665
+ }
666
+ },
667
+ reportValidity: {
668
+ configurable: true,
669
+ value: () => {
670
+ state.interacted = true;
671
+ reflectValidity(el, state);
672
+ return target.checkValidity();
673
+ }
674
+ },
675
+ setCustomValidity: {
676
+ configurable: true,
677
+ value: (message) => {
678
+ state.external = message === "" ? [] : [{
679
+ reason: "customError",
680
+ message
681
+ }];
682
+ reflectValidity(el, state);
683
+ }
684
+ }
685
+ });
686
+ }
687
+ const interacted = () => {
688
+ state.interacted = true;
689
+ reflectValidity(el, state);
690
+ };
691
+ el.addEventListener("input", interacted);
692
+ el.addEventListener("change", interacted);
693
+ el.addEventListener("blur", interacted, true);
694
+ state.cleanup = () => {
695
+ el.removeEventListener("input", interacted);
696
+ el.removeEventListener("change", interacted);
697
+ el.removeEventListener("blur", interacted, true);
698
+ };
699
+ reflectValidity(el, state);
700
+ },
701
+ updated(el, binding) {
702
+ const state = validityStates.get(el);
703
+ if (state === void 0) return;
704
+ state.current = binding.value;
705
+ state.validity = propValidity(state.current);
706
+ reflectValidity(el, state);
707
+ },
708
+ unmounted(el) {
709
+ validityStates.get(el)?.cleanup();
710
+ validityStates.delete(el);
711
+ }
712
+ };
477
713
  //#endregion
478
- export { selectedPropNode as n, checkedProp as t };
714
+ export { selectedPropNode as n, vPropValidity as r, checkedProp as t };