@vizejs/ui 0.387.0 → 0.389.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 (411) hide show
  1. package/dist/alert-BX93FNvj.d.mts +92 -0
  2. package/dist/alert-DvhiFK_R.mjs +92 -0
  3. package/dist/alert-dialog-D9tqXQ_Q.mjs +176 -0
  4. package/dist/alert-dialog.d.mts +2 -0
  5. package/dist/alert-dialog.mjs +3 -0
  6. package/dist/alert.d.mts +2 -0
  7. package/dist/alert.mjs +2 -0
  8. package/dist/announcer-CW079p2E.mjs +258 -0
  9. package/dist/announcer-CuBryPW9.d.mts +6829 -0
  10. package/dist/announcer.d.mts +2 -0
  11. package/dist/announcer.mjs +2 -0
  12. package/dist/aspect-ratio-DDqVT6Hg.d.mts +62 -0
  13. package/dist/aspect-ratio-_HLW6_5i.mjs +63 -0
  14. package/dist/aspect-ratio.d.mts +2 -0
  15. package/dist/aspect-ratio.mjs +2 -0
  16. package/dist/avatar-6fQfQ-1x.mjs +195 -0
  17. package/dist/avatar.d.mts +2 -0
  18. package/dist/avatar.mjs +2 -0
  19. package/dist/badge-BTOyu4i6.mjs +53 -0
  20. package/dist/badge.d.mts +2 -0
  21. package/dist/badge.mjs +2 -0
  22. package/dist/banner-CYiSiZJW.mjs +288 -0
  23. package/dist/banner.d.mts +2 -0
  24. package/dist/banner.mjs +2 -0
  25. package/dist/block-ui-Bd2m1m3K.mjs +111 -0
  26. package/dist/block-ui.d.mts +2 -0
  27. package/dist/block-ui.mjs +2 -0
  28. package/dist/blockquote-eTqp3b_r.mjs +65 -0
  29. package/dist/blockquote.d.mts +2 -0
  30. package/dist/blockquote.mjs +2 -0
  31. package/dist/breadcrumb-BvuPBfkj.mjs +212 -0
  32. package/dist/breadcrumb-Cdyh20z-.d.mts +202 -0
  33. package/dist/breadcrumb.d.mts +2 -0
  34. package/dist/breadcrumb.mjs +2 -0
  35. package/dist/{button-DYg1mIIq.d.mts → button-Dye0M41O.d.mts} +3 -3
  36. package/dist/{button-DT8AKlds.mjs → button-VVxUavbS.mjs} +6 -6
  37. package/dist/button-group-C_mR0Jfw.d.mts +137 -0
  38. package/dist/button-group-DyQbTCnY.mjs +418 -0
  39. package/dist/button-group.d.mts +2 -0
  40. package/dist/button-group.mjs +2 -0
  41. package/dist/button.d.mts +1 -1
  42. package/dist/button.mjs +2 -2
  43. package/dist/callout-DAu-98Ti.mjs +277 -0
  44. package/dist/callout.d.mts +2 -0
  45. package/dist/callout.mjs +2 -0
  46. package/dist/card-D94n04s5.mjs +66 -0
  47. package/dist/card.d.mts +2 -0
  48. package/dist/card.mjs +2 -0
  49. package/dist/catalog.d.mts +2112 -302
  50. package/dist/catalog.mjs +3831 -433
  51. package/dist/{checkbox-BgIvwjyC.mjs → checkbox-bM5y7vH8.mjs} +8 -8
  52. package/dist/checkbox.d.mts +1 -1
  53. package/dist/checkbox.mjs +2 -2
  54. package/dist/cluster-BWF028Xt.d.mts +133 -0
  55. package/dist/cluster-BydJTp9X.mjs +149 -0
  56. package/dist/cluster.d.mts +2 -0
  57. package/dist/cluster.mjs +2 -0
  58. package/dist/code-D93YXaeJ.mjs +66 -0
  59. package/dist/code.d.mts +2 -0
  60. package/dist/code.mjs +2 -0
  61. package/dist/collapsible-Cra5y_if.mjs +269 -0
  62. package/dist/collapsible.d.mts +2 -0
  63. package/dist/collapsible.mjs +2 -0
  64. package/dist/{collection-B_dFZOHO.d.mts → collection-BaPf8lgw.d.mts} +3 -3
  65. package/dist/{collection-eHN150dT.mjs → collection-Cncgrq4U.mjs} +5 -5
  66. package/dist/collection.d.mts +1 -1
  67. package/dist/collection.mjs +1 -1
  68. package/dist/command-CAH0yrMT.d.mts +105 -0
  69. package/dist/command.d.mts +2 -0
  70. package/dist/command.mjs +123 -0
  71. package/dist/{composite-navigation-Skx3LZsv.mjs → composite-navigation-D6WKS_BY.mjs} +4 -4
  72. package/dist/{composite-navigation-QINW9GLy.d.mts → composite-navigation-i7ocwmio.d.mts} +4 -4
  73. package/dist/composite-navigation.d.mts +1 -1
  74. package/dist/composite-navigation.mjs +1 -1
  75. package/dist/container-5lSCSbeX.mjs +113 -0
  76. package/dist/container-CYSiwCA-.d.mts +99 -0
  77. package/dist/container.d.mts +2 -0
  78. package/dist/container.mjs +2 -0
  79. package/dist/context-7SpwFHtK.d.mts +25 -0
  80. package/dist/context.d.mts +1 -24
  81. package/dist/context.mjs +1 -1
  82. package/dist/{controllable-state-BtoxKahh.d.mts → controllable-state-CZZF9Pw5.d.mts} +1 -1
  83. package/dist/controllable-state.d.mts +1 -1
  84. package/dist/controllable-state.mjs +1 -1
  85. package/dist/copy-button-BH2em7nG.mjs +212 -0
  86. package/dist/copy-button.d.mts +2 -0
  87. package/dist/copy-button.mjs +2 -0
  88. package/dist/{id-BV9AJ3cm.d.mts → deterministic-id-DYQJ7KzM.d.mts} +2 -35
  89. package/dist/{id-mziSyAse.mjs → deterministic-id-yMq4HfmS.mjs} +3 -46
  90. package/dist/dialog-trigger-ppGKikEP.mjs +717 -0
  91. package/dist/dialog.d.mts +2 -0
  92. package/dist/dialog.mjs +2 -0
  93. package/dist/{dismissable-layer-4icKahVs.d.mts → dismissable-layer-CTWSFZwj.d.mts} +2 -2
  94. package/dist/{dismissable-layer-CwG1gtdz.mjs → dismissable-layer-CpS07KUV.mjs} +3 -3
  95. package/dist/dismissable-layer.d.mts +1 -1
  96. package/dist/dismissable-layer.mjs +1 -1
  97. package/dist/drag-and-drop-BjYgWGcG.mjs +918 -0
  98. package/dist/drag-and-drop-CagE25Kt.d.mts +47 -0
  99. package/dist/drag-and-drop-controller-types-DoTSR_aM.d.mts +304 -0
  100. package/dist/drag-and-drop.d.mts +3 -0
  101. package/dist/drag-and-drop.mjs +2 -0
  102. package/dist/empty-state-DtyOxCA4.mjs +73 -0
  103. package/dist/empty-state.d.mts +2 -0
  104. package/dist/empty-state.mjs +2 -0
  105. package/dist/error-summary-6Xis_769.d.mts +65 -0
  106. package/dist/error-summary-DMe4IlM9.mjs +209 -0
  107. package/dist/error-summary-types-5ePaC9O3.d.mts +74 -0
  108. package/dist/error-summary.d.mts +3 -0
  109. package/dist/error-summary.mjs +2 -0
  110. package/dist/field-CBs2-Z9B.mjs +254 -0
  111. package/dist/field-WWPaJT1x.d.mts +235 -0
  112. package/dist/field-wiring-9Fy-G1rf.d.mts +14 -0
  113. package/dist/field-wiring-runtime-fQ3GoLuG.mjs +64 -0
  114. package/dist/field-wiring-types-Bfyis5hO.d.mts +73 -0
  115. package/dist/field-wiring.d.mts +3 -0
  116. package/dist/field-wiring.mjs +2 -0
  117. package/dist/field.d.mts +2 -0
  118. package/dist/field.mjs +2 -0
  119. package/dist/{focus-CAWi_I-0.mjs → focus-XxVWOwbs.mjs} +3 -3
  120. package/dist/{focus-K6dOifoZ.d.mts → focus-eObxGOtP.d.mts} +2 -2
  121. package/dist/{focus-guards-Bt0C-0qS.d.mts → focus-guards-BZa7vm6O.d.mts} +2 -2
  122. package/dist/{focus-guards-DhMPQAT8.mjs → focus-guards-DSxiemx7.mjs} +4 -4
  123. package/dist/focus-guards.d.mts +1 -1
  124. package/dist/focus-guards.mjs +1 -1
  125. package/dist/{focus-scope-CavhKWx0.d.mts → focus-scope-CsnioDR4.d.mts} +3 -3
  126. package/dist/{focus-scope-dom-DBwNEWxG.mjs → focus-scope-dom-L_EC5GsX.mjs} +2 -2
  127. package/dist/{focus-scope-D9U1aj67.mjs → focus-scope-mEg8UoeE.mjs} +5 -5
  128. package/dist/focus-scope.d.mts +1 -1
  129. package/dist/focus-scope.mjs +1 -1
  130. package/dist/focus.d.mts +1 -1
  131. package/dist/focus.mjs +1 -1
  132. package/dist/form-1V2V30Sv.d.mts +20 -0
  133. package/dist/form-runtime-CcMDY0Iq.mjs +166 -0
  134. package/dist/form-types-DXwZRLcs.d.mts +183 -0
  135. package/dist/form.d.mts +3 -0
  136. package/dist/form.mjs +2 -0
  137. package/dist/fullscreen-button-NTbC4R0W.mjs +276 -0
  138. package/dist/fullscreen-button.d.mts +2 -0
  139. package/dist/fullscreen-button.mjs +2 -0
  140. package/dist/grid-BSM9h2dL.d.mts +154 -0
  141. package/dist/grid-DeC4Wn7Y.mjs +157 -0
  142. package/dist/grid.d.mts +2 -0
  143. package/dist/grid.mjs +2 -0
  144. package/dist/heading-DToVOKV3.mjs +86 -0
  145. package/dist/heading.d.mts +2 -0
  146. package/dist/heading.mjs +2 -0
  147. package/dist/history-BDgNOjcV.mjs +304 -0
  148. package/dist/history-BkcOSOWb.d.mts +157 -0
  149. package/dist/history.d.mts +2 -0
  150. package/dist/history.mjs +2 -0
  151. package/dist/{hover-BXwwbSaO.d.mts → hover-ZiPRiZkb.d.mts} +2 -2
  152. package/dist/hover.d.mts +1 -1
  153. package/dist/hover.mjs +1 -1
  154. package/dist/icon-DhTTndMu.mjs +233 -0
  155. package/dist/icon-button-BuXquME1.mjs +188 -0
  156. package/dist/icon-button.d.mts +2 -0
  157. package/dist/icon-button.mjs +2 -0
  158. package/dist/icon.d.mts +2 -0
  159. package/dist/icon.mjs +2 -0
  160. package/dist/id-BYG8aXPF.mjs +47 -0
  161. package/dist/id-Ba8FHjAo.d.mts +34 -0
  162. package/dist/id.d.mts +2 -1
  163. package/dist/id.mjs +3 -2
  164. package/dist/index.d.mts +74 -24
  165. package/dist/index.mjs +113 -21
  166. package/dist/{inert-outside-tuHRmaqJ.d.mts → inert-outside-B6KdwAHY.d.mts} +2 -2
  167. package/dist/{inert-outside-CyqtoKQ4.mjs → inert-outside-DOufBTyy.mjs} +4 -4
  168. package/dist/inert-outside.d.mts +1 -1
  169. package/dist/inert-outside.mjs +1 -1
  170. package/dist/input-Blyx59CR.mjs +256 -0
  171. package/dist/input-C0fgeRnS.d.mts +159 -0
  172. package/dist/input.d.mts +2 -0
  173. package/dist/input.mjs +2 -0
  174. package/dist/{interaction-modality-DOZK0BpZ.mjs → interaction-modality-BHnjtU4S.mjs} +3 -3
  175. package/dist/{interaction-modality-jgHKjPFB.d.mts → interaction-modality-BTiZ7j98.d.mts} +2 -2
  176. package/dist/interaction-modality.d.mts +1 -1
  177. package/dist/interaction-modality.mjs +1 -1
  178. package/dist/kbd-sJdXIdIm.mjs +66 -0
  179. package/dist/kbd.d.mts +2 -0
  180. package/dist/kbd.mjs +2 -0
  181. package/dist/link-DDaCjrI5.mjs +154 -0
  182. package/dist/link-MbRDN6wJ.d.mts +94 -0
  183. package/dist/link.d.mts +2 -0
  184. package/dist/link.mjs +2 -0
  185. package/dist/list-DjyCLVfG.mjs +66 -0
  186. package/dist/list.d.mts +2 -0
  187. package/dist/list.mjs +2 -0
  188. package/dist/listbox-IaqaoiRn.mjs +549 -0
  189. package/dist/listbox.d.mts +2 -0
  190. package/dist/listbox.mjs +2 -0
  191. package/dist/live-region-DYSpwCTk.mjs +48 -0
  192. package/dist/live-region-G1iobPK5.d.mts +67 -0
  193. package/dist/live-region-runtime-DVUch8Lu.mjs +62 -0
  194. package/dist/live-region.d.mts +2 -0
  195. package/dist/live-region.mjs +3 -0
  196. package/dist/locale-DzWqhJZs.mjs +206 -0
  197. package/dist/locale.d.mts +2 -0
  198. package/dist/locale.mjs +2 -0
  199. package/dist/{long-press-cll6z2K9.d.mts → long-press-DyYxp191.d.mts} +3 -3
  200. package/dist/{long-press-Dsul69gk.mjs → long-press-yJk5zK0j.mjs} +4 -4
  201. package/dist/long-press.d.mts +1 -1
  202. package/dist/long-press.mjs +1 -1
  203. package/dist/measure-4I0YOAXD.d.mts +97 -0
  204. package/dist/measure-runtime-C4qYJp3_.mjs +170 -0
  205. package/dist/measure.d.mts +2 -0
  206. package/dist/measure.mjs +2 -0
  207. package/dist/media-pdf.d.mts +1 -1
  208. package/dist/media-pdf.mjs +1 -1
  209. package/dist/media-source.d.mts +1 -1
  210. package/dist/media-source.mjs +1 -1
  211. package/dist/media.d.mts +1 -1
  212. package/dist/media.mjs +1 -1
  213. package/dist/meter-B3m17_8g.d.mts +174 -0
  214. package/dist/meter-BwOXVWH8.mjs +243 -0
  215. package/dist/meter.d.mts +2 -0
  216. package/dist/meter.mjs +2 -0
  217. package/dist/motion-OdERKfZR.mjs +174 -0
  218. package/dist/motion-iUSBdWaI.d.mts +98 -0
  219. package/dist/motion.d.mts +2 -0
  220. package/dist/motion.mjs +2 -0
  221. package/dist/{move-BOmXDYbh.d.mts → move-BJGaV7Y9.d.mts} +2 -2
  222. package/dist/move-internal-BM_7g70h.mjs +172 -0
  223. package/dist/move.d.mts +1 -1
  224. package/dist/move.mjs +216 -1
  225. package/dist/native-select-H9qvaqQH.mjs +309 -0
  226. package/dist/native-select.d.mts +2 -0
  227. package/dist/native-select.mjs +2 -0
  228. package/dist/pagination-Bs4SBSE4.mjs +791 -0
  229. package/dist/pagination.d.mts +2 -0
  230. package/dist/pagination.mjs +2 -0
  231. package/dist/{pdf-source-zu1LkCeE.mjs → pdf-source-B5JSDKkQ.mjs} +1 -1
  232. package/dist/{pdf-source-BYFK2Pks.d.mts → pdf-source-adS6ZSmR.d.mts} +1 -1
  233. package/dist/pointer-grace-CAFcO4om.d.mts +57 -0
  234. package/dist/pointer-grace-DI0G3oRJ.mjs +162 -0
  235. package/dist/pointer-grace.d.mts +2 -0
  236. package/dist/pointer-grace.mjs +2 -0
  237. package/dist/popover-DeENBKXE.mjs +714 -0
  238. package/dist/popover.d.mts +2 -0
  239. package/dist/popover.mjs +2 -0
  240. package/dist/portal-DeHaLxGL.mjs +114 -0
  241. package/dist/portal-DhWXejr1.d.mts +71 -0
  242. package/dist/portal.d.mts +2 -0
  243. package/dist/portal.mjs +2 -0
  244. package/dist/positioner-BYJVA3Uy.d.mts +477 -0
  245. package/dist/positioner-BYmQk86M.mjs +38 -0
  246. package/dist/positioner-DaPo2YxM.mjs +708 -0
  247. package/dist/positioner.d.mts +2 -0
  248. package/dist/positioner.mjs +3 -0
  249. package/dist/presence-Bhv1qtvn.d.mts +57 -0
  250. package/dist/presence-CTG1EV3w.mjs +62 -0
  251. package/dist/presence-runtime-CYwCafSh.mjs +105 -0
  252. package/dist/presence-types-CRB4HbML.d.mts +45 -0
  253. package/dist/presence.d.mts +3 -0
  254. package/dist/presence.mjs +3 -0
  255. package/dist/{press-N_mE3Mgx.mjs → press-BjLm6bKg.mjs} +6 -6
  256. package/dist/press-R0_juZq2.d.mts +14 -0
  257. package/dist/{press-event-Cd2OPpmw.mjs → press-event-xlWYF9py.mjs} +1 -1
  258. package/dist/{press-types-CNqStzJf.d.mts → press-types-DfTNpqby.d.mts} +1 -1
  259. package/dist/press.d.mts +2 -13
  260. package/dist/press.mjs +1 -1
  261. package/dist/{primitive-C8jW7DLd.d.mts → primitive-BE2mdUcw.d.mts} +2 -2
  262. package/dist/{primitive-BX31dogp.mjs → primitive-beb2EEOc.mjs} +5 -5
  263. package/dist/primitive.d.mts +1 -1
  264. package/dist/primitive.mjs +2 -2
  265. package/dist/print-button-FqD5HqTV.mjs +206 -0
  266. package/dist/print-button.d.mts +2 -0
  267. package/dist/print-button.mjs +2 -0
  268. package/dist/progress--vbV2wTx.mjs +145 -0
  269. package/dist/progress-C4PlKwWq.d.mts +128 -0
  270. package/dist/progress-bar-BqS94auR.mjs +301 -0
  271. package/dist/progress-bar.d.mts +2 -0
  272. package/dist/progress-bar.mjs +2 -0
  273. package/dist/progress.d.mts +2 -0
  274. package/dist/progress.mjs +2 -0
  275. package/dist/radio-group-DbTmWcxl.mjs +317 -0
  276. package/dist/radio-group.d.mts +2 -0
  277. package/dist/radio-group.mjs +2 -0
  278. package/dist/rating-BjKLGPP6.mjs +569 -0
  279. package/dist/rating-souDdL9t.d.mts +273 -0
  280. package/dist/rating.d.mts +2 -0
  281. package/dist/rating.mjs +2 -0
  282. package/dist/scroll-area-BRSwoi9w.mjs +338 -0
  283. package/dist/scroll-area.d.mts +2 -0
  284. package/dist/scroll-area.mjs +2 -0
  285. package/dist/{scroll-lock-Ckbmm0-J.mjs → scroll-lock-BcmK0baN.mjs} +4 -4
  286. package/dist/{scroll-lock-BgVtX4wT.d.mts → scroll-lock-OfSQnfi0.d.mts} +2 -2
  287. package/dist/scroll-lock.d.mts +1 -1
  288. package/dist/scroll-lock.mjs +1 -1
  289. package/dist/search-field-70Kr2616.mjs +319 -0
  290. package/dist/search-field-Biw9vApG.d.mts +158 -0
  291. package/dist/search-field.d.mts +2 -0
  292. package/dist/search-field.mjs +2 -0
  293. package/dist/separator-CnNDqbdR.d.mts +59 -0
  294. package/dist/separator-DDj3tEAz.mjs +66 -0
  295. package/dist/separator.d.mts +2 -0
  296. package/dist/separator.mjs +2 -0
  297. package/dist/share-button-DfvUDFC-.mjs +243 -0
  298. package/dist/share-button.d.mts +2 -0
  299. package/dist/share-button.mjs +2 -0
  300. package/dist/shortcut-CvA_o0_F.mjs +631 -0
  301. package/dist/shortcut-DAZJ9LEd.d.mts +231 -0
  302. package/dist/shortcut.d.mts +2 -0
  303. package/dist/shortcut.mjs +2 -0
  304. package/dist/skeleton-BYXXcwTH.mjs +101 -0
  305. package/dist/skeleton-CQW-Tsnt.d.mts +99 -0
  306. package/dist/skeleton.d.mts +2 -0
  307. package/dist/skeleton.mjs +2 -0
  308. package/dist/skip-link-BUp9HXXt.mjs +164 -0
  309. package/dist/skip-link-DHDrtnP2.d.mts +98 -0
  310. package/dist/skip-link.d.mts +2 -0
  311. package/dist/skip-link.mjs +2 -0
  312. package/dist/slider-BiZSZLDp.mjs +475 -0
  313. package/dist/slider-CYBbxeNy.d.mts +246 -0
  314. package/dist/slider.d.mts +2 -0
  315. package/dist/slider.mjs +2 -0
  316. package/dist/sortable-BntjgYra.mjs +499 -0
  317. package/dist/sortable-DQl92bwo.d.mts +206 -0
  318. package/dist/sortable.d.mts +2 -0
  319. package/dist/sortable.mjs +2 -0
  320. package/dist/spacer-Bc0dInvi.mjs +117 -0
  321. package/dist/spacer-DFstG4G-.d.mts +105 -0
  322. package/dist/spacer.d.mts +2 -0
  323. package/dist/spacer.mjs +2 -0
  324. package/dist/{spatial-navigation-CHj9mDZH.d.mts → spatial-navigation-BPVJGSiJ.d.mts} +3 -3
  325. package/dist/{spatial-navigation-D6-UDavU.mjs → spatial-navigation-DwcUYMyc.mjs} +2 -2
  326. package/dist/spatial-navigation.d.mts +1 -1
  327. package/dist/spatial-navigation.mjs +1 -1
  328. package/dist/spinner-JnRs8fp-.d.mts +155 -0
  329. package/dist/spinner-bizL-oOg.mjs +200 -0
  330. package/dist/spinner.d.mts +2 -0
  331. package/dist/spinner.mjs +2 -0
  332. package/dist/stack-C7DOIxo-.mjs +137 -0
  333. package/dist/stack-CPtBckZB.d.mts +127 -0
  334. package/dist/stack.d.mts +2 -0
  335. package/dist/stack.mjs +2 -0
  336. package/dist/status-light-BGWgQRRf.mjs +125 -0
  337. package/dist/status-light.d.mts +2 -0
  338. package/dist/status-light.mjs +2 -0
  339. package/dist/stepper-CwX6BZaN.mjs +912 -0
  340. package/dist/stepper.d.mts +2 -0
  341. package/dist/stepper.mjs +2 -0
  342. package/dist/style.css +1 -1
  343. package/dist/surface-C2fnxL3g.mjs +102 -0
  344. package/dist/surface.d.mts +2 -0
  345. package/dist/surface.mjs +2 -0
  346. package/dist/switch-Ck5YmfXb.mjs +197 -0
  347. package/dist/switch.d.mts +2 -0
  348. package/dist/switch.mjs +2 -0
  349. package/dist/table-BxU7htxc.mjs +349 -0
  350. package/dist/table-Ce3yWwlH.d.mts +415 -0
  351. package/dist/table.d.mts +2 -0
  352. package/dist/table.mjs +2 -0
  353. package/dist/tabs-DSXIomI_.mjs +595 -0
  354. package/dist/tabs.d.mts +2 -0
  355. package/dist/tabs.mjs +2 -0
  356. package/dist/text-BVeNKPiv.mjs +76 -0
  357. package/dist/text.d.mts +2 -0
  358. package/dist/text.mjs +2 -0
  359. package/dist/textarea-4eIDNcvv.d.mts +175 -0
  360. package/dist/textarea-BZimEPBR.mjs +279 -0
  361. package/dist/textarea.d.mts +2 -0
  362. package/dist/textarea.mjs +2 -0
  363. package/dist/theme-C8Crmb8V.mjs +139 -0
  364. package/dist/theme-CNK06Pja.d.mts +38 -0
  365. package/dist/theme-constants-DAwnxG-P.mjs +29 -0
  366. package/dist/theme-preset-atelier.css +1 -0
  367. package/dist/theme-preset-headless.css +1 -0
  368. package/dist/theme-preset-high-contrast.css +1 -0
  369. package/dist/theme-preset-midnight.css +1 -0
  370. package/dist/theme-preset-paper.css +1 -0
  371. package/dist/theme-preset-play.css +1 -0
  372. package/dist/theme-preset-signal.css +1 -0
  373. package/dist/theme-scope.d.mts +25 -0
  374. package/dist/theme-scope.mjs +89 -0
  375. package/dist/theme-types-CkIa4Sa3.d.mts +71 -0
  376. package/dist/theme.css +1 -0
  377. package/dist/theme.d.mts +3 -0
  378. package/dist/theme.mjs +3 -0
  379. package/dist/toggle-CBTXzwze.mjs +141 -0
  380. package/dist/toggle-group-DO7eGEs3.d.mts +147 -0
  381. package/dist/toggle-group-DybU9N7k.mjs +523 -0
  382. package/dist/toggle-group.d.mts +2 -0
  383. package/dist/toggle-group.mjs +2 -0
  384. package/dist/toggle.d.mts +2 -0
  385. package/dist/toggle.mjs +2 -0
  386. package/dist/toolbar-CIU1bor0.d.mts +259 -0
  387. package/dist/toolbar-CXE8YCX-.mjs +425 -0
  388. package/dist/toolbar.d.mts +2 -0
  389. package/dist/toolbar.mjs +2 -0
  390. package/dist/tooltip-Cgii5xMx.mjs +485 -0
  391. package/dist/tooltip.d.mts +2 -0
  392. package/dist/tooltip.mjs +2 -0
  393. package/dist/transition-BmgFyzA6.mjs +168 -0
  394. package/dist/transition-BtIWNEFU.d.mts +82 -0
  395. package/dist/transition.d.mts +2 -0
  396. package/dist/transition.mjs +2 -0
  397. package/dist/{typeahead-B7KDxE_u.mjs → typeahead-DZSBI5m5.mjs} +2 -2
  398. package/dist/{typeahead-BbgUB2Bj.d.mts → typeahead-Dl6w5PAN.d.mts} +3 -3
  399. package/dist/typeahead.d.mts +1 -1
  400. package/dist/typeahead.mjs +1 -1
  401. package/dist/virtualizer-BlxKjT3W.mjs +793 -0
  402. package/dist/virtualizer-D9qfT4wS.d.mts +349 -0
  403. package/dist/virtualizer.d.mts +2 -0
  404. package/dist/virtualizer.mjs +2 -0
  405. package/dist/{visually-hidden-BOqfqBFt.d.mts → visually-hidden-CUr9BX0K.d.mts} +1 -1
  406. package/dist/{visually-hidden-BwDOx5yf.mjs → visually-hidden-SDjRJYRK.mjs} +5 -5
  407. package/dist/visually-hidden.d.mts +1 -1
  408. package/dist/visually-hidden.mjs +2 -2
  409. package/package.json +426 -7
  410. package/dist/checkbox-DP3_ko7D.d.mts +0 -61
  411. package/dist/move-BVvMHzxr.mjs +0 -386
package/dist/catalog.mjs CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/family-catalog-types.ts
1
+ //#region src/catalog/family-catalog-types.ts
2
2
  const UI_FAMILY_CATALOG_SCHEMA_VERSION = 1;
3
3
  const stableQualityGates = [
4
4
  "behavior-contract",
@@ -26,25 +26,26 @@ const componentQualityGates = [
26
26
  ];
27
27
  const catalogOwner = "ui-foundations";
28
28
  //#endregion
29
- //#region src/family-catalog-basics.ts
30
- const basicFamilyCatalog = [
29
+ //#region src/catalog/family-catalog-actions.ts
30
+ const buttonFamilyRoot = "src/families/actions/button/";
31
+ const actionFamilyCatalog = [
31
32
  {
32
33
  canonicalName: "button",
33
34
  title: "Button",
34
35
  packageSubpath: "./button",
35
- entryFile: "src/button.ts",
36
+ entryFile: `${buttonFamilyRoot}button.ts`,
36
37
  sourceFiles: [
37
- "src/ActionButton.vue",
38
- "src/button.ts",
39
- "src/button-keyboard.ts"
38
+ `${buttonFamilyRoot}button.vue`,
39
+ `${buttonFamilyRoot}button.ts`,
40
+ `${buttonFamilyRoot}button-keyboard.ts`
40
41
  ],
41
- behaviorContract: "src/button.behavior.md",
42
- tests: ["src/button.test.ts"],
43
- rendererFixture: "ActionButton.vue",
42
+ behaviorContract: `${buttonFamilyRoot}button.behavior.md`,
43
+ tests: [`${buttonFamilyRoot}button.test.ts`],
44
+ rendererFixture: "families/actions/button/button.vue",
44
45
  qualityGates: componentQualityGates,
45
46
  bundleBudget: {
46
47
  exportName: "Button",
47
- retainedSignature: "aria-busy",
48
+ retainedSignature: "data-vize-ui\":(?:`button`|\"button\"|'button')",
48
49
  maximumJavaScriptGzipBytes: 1e3,
49
50
  maximumCssGzipBytes: 0
50
51
  },
@@ -59,202 +60,282 @@ const basicFamilyCatalog = [
59
60
  owner: catalogOwner
60
61
  },
61
62
  {
62
- canonicalName: "checkbox",
63
- title: "Checkbox",
64
- packageSubpath: "./checkbox",
65
- entryFile: "src/checkbox.ts",
63
+ canonicalName: "button-group",
64
+ title: "Button Group",
65
+ packageSubpath: "./button-group",
66
+ entryFile: "src/families/actions/button-group/button-group.ts",
66
67
  sourceFiles: [
67
- "src/CheckboxControl.vue",
68
- "src/checkbox.ts",
69
- "src/checkbox-state.ts"
68
+ "src/families/actions/button-group/button-group.vue",
69
+ "src/families/actions/button-group/button-group-item.vue",
70
+ "src/families/actions/button-group/button-group.ts",
71
+ "src/families/actions/button-group/button-group-context.ts",
72
+ "src/families/actions/button-group/button-group-types.ts"
70
73
  ],
71
- behaviorContract: "src/checkbox.behavior.md",
72
- tests: ["src/checkbox.test.ts"],
73
- rendererFixture: "CheckboxControl.vue",
74
+ behaviorContract: "src/families/actions/button-group/button-group.behavior.md",
75
+ tests: ["src/families/actions/button-group/button-group.test.ts", "src/families/actions/button-group/button-group-ssr.test.ts"],
76
+ typeTests: ["src/families/actions/button-group/button-group.types.test-d.ts"],
77
+ rendererFixture: "ButtonGroupConsumer.vue",
74
78
  qualityGates: componentQualityGates,
75
79
  bundleBudget: {
76
- exportName: "Checkbox",
77
- retainedSignature: "aria-checked",
78
- allowedRetainedFamilies: ["controllable-state"],
79
- maximumJavaScriptGzipBytes: 1100,
80
+ exportName: "ButtonGroup",
81
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}button-group",
82
+ allowedRetainedFamilies: ["context"],
83
+ maximumJavaScriptGzipBytes: 1900,
80
84
  maximumCssGzipBytes: 0
81
85
  },
82
- aliases: ["checkbox control", "mixed checkbox"],
86
+ aliases: [
87
+ "button group",
88
+ "button bar",
89
+ "action group",
90
+ "toolbar"
91
+ ],
83
92
  upstreamCoverage: [
84
- "shadcn/ui Checkbox",
85
- "Reka UI Checkbox",
86
- "React Aria Checkbox"
93
+ "WAI-ARIA Toolbar",
94
+ "React Aria Toolbar",
95
+ "shadcn/ui Button"
87
96
  ],
88
- dependencies: ["controllable-state"],
97
+ dependencies: ["context"],
89
98
  maturity: "stable",
90
99
  owner: catalogOwner
91
100
  },
92
101
  {
93
- canonicalName: "collection",
94
- title: "Collection Registry",
95
- packageSubpath: "./collection",
96
- entryFile: "src/collection.ts",
97
- sourceFiles: [
98
- "src/collection.ts",
99
- "src/collection-registry.ts",
100
- "src/collection-keys.ts",
101
- "src/collection-observer.ts",
102
- "src/collection-order.ts",
103
- "src/collection-text.ts",
104
- "src/collection-types.ts"
105
- ],
106
- behaviorContract: "src/collection.behavior.md",
107
- tests: ["src/collection.test.ts", "src/collection-dom.test.ts"],
108
- typeTests: ["src/collection.types.test-d.ts"],
109
- qualityGates: stableQualityGates,
102
+ canonicalName: "copy-button",
103
+ title: "Copy Button",
104
+ packageSubpath: "./copy-button",
105
+ entryFile: "src/families/actions/copy-button/copy-button.ts",
106
+ sourceFiles: [
107
+ "src/families/actions/copy-button/copy-button.vue",
108
+ "src/families/actions/copy-button/copy-button.ts",
109
+ "src/families/actions/copy-button/copy-button-types.ts"
110
+ ],
111
+ behaviorContract: "src/families/actions/copy-button/copy-button.behavior.md",
112
+ tests: ["src/families/actions/copy-button/copy-button.test.ts", "src/families/actions/copy-button/copy-button-ssr.test.ts"],
113
+ typeTests: ["src/families/actions/copy-button/copy-button.types.test-d.ts"],
114
+ rendererFixture: "CopyButtonConsumer.vue",
115
+ qualityGates: componentQualityGates,
110
116
  bundleBudget: {
111
- exportName: "createCollectionRegistry",
112
- retainedSignature: "VIZE_UI_COLLECTION_DISPOSED",
113
- maximumJavaScriptGzipBytes: 3150,
117
+ exportName: "CopyButton",
118
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}copy-button",
119
+ maximumJavaScriptGzipBytes: 1650,
114
120
  maximumCssGzipBytes: 0
115
121
  },
116
122
  aliases: [
117
- "collection registry",
118
- "item registry",
119
- "logical focus registry"
123
+ "copy button",
124
+ "clipboard button",
125
+ "copy to clipboard",
126
+ "clipboard action"
120
127
  ],
121
128
  upstreamCoverage: [
122
- "React Aria Collection",
123
- "Ariakit Composite Store",
124
- "Zag collection"
129
+ "shadcn/ui Copy Button",
130
+ "React Aria Button",
131
+ "WAI-ARIA Button"
125
132
  ],
126
133
  dependencies: [],
127
134
  maturity: "stable",
128
135
  owner: catalogOwner
129
136
  },
130
137
  {
131
- canonicalName: "composite-navigation",
132
- title: "Composite Navigation",
133
- packageSubpath: "./composite-navigation",
134
- entryFile: "src/composite-navigation.ts",
138
+ canonicalName: "fullscreen-button",
139
+ title: "Fullscreen Button",
140
+ packageSubpath: "./fullscreen-button",
141
+ entryFile: "src/families/actions/fullscreen-button/fullscreen-button.ts",
135
142
  sourceFiles: [
136
- "src/composite-navigation.ts",
137
- "src/composite-navigation-dom.ts",
138
- "src/composite-navigation-internal.ts",
139
- "src/composite-navigation-types.ts"
143
+ "src/families/actions/fullscreen-button/fullscreen-button.vue",
144
+ "src/families/actions/fullscreen-button/fullscreen-button.ts",
145
+ "src/families/actions/fullscreen-button/fullscreen-button-types.ts"
140
146
  ],
141
- behaviorContract: "src/composite-navigation.behavior.md",
147
+ behaviorContract: "src/families/actions/fullscreen-button/fullscreen-button.behavior.md",
142
148
  tests: [
143
- "src/composite-navigation.test.ts",
144
- "src/composite-navigation-active-descendant.test.ts",
145
- "src/composite-navigation-lifecycle.test.ts",
146
- "src/composite-navigation-ssr.test.ts"
149
+ "src/families/actions/fullscreen-button/fullscreen-button.test.ts",
150
+ "src/families/actions/fullscreen-button/fullscreen-button-slot-expose.test.ts",
151
+ "src/families/actions/fullscreen-button/fullscreen-button-ssr.test.ts"
147
152
  ],
148
- typeTests: ["src/composite-navigation.types.test-d.ts"],
149
- rendererFixture: "CompositeNavigationConsumer.vue",
150
- qualityGates: interactionQualityGates,
153
+ typeTests: ["src/families/actions/fullscreen-button/fullscreen-button.types.test-d.ts"],
154
+ rendererFixture: "FullscreenButtonConsumer.vue",
155
+ qualityGates: componentQualityGates,
151
156
  bundleBudget: {
152
- exportName: "createCompositeNavigation",
153
- retainedSignature: "VIZE_UI_COMPOSITE_NAVIGATION_DISPOSED",
154
- allowedRetainedFamilies: ["typeahead"],
155
- maximumJavaScriptGzipBytes: 3900,
157
+ exportName: "FullscreenButton",
158
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}fullscreen-button",
159
+ allowedRetainedFamilies: ["toggle"],
160
+ maximumJavaScriptGzipBytes: 2750,
156
161
  maximumCssGzipBytes: 0
157
162
  },
158
163
  aliases: [
159
- "roving focus",
160
- "active descendant",
161
- "composite widget navigation"
164
+ "fullscreen button",
165
+ "fullscreen toggle",
166
+ "fullscreen action",
167
+ "screen control"
162
168
  ],
163
169
  upstreamCoverage: [
164
- "WAI-ARIA composite widgets",
165
- "Reka UI Roving Focus",
166
- "Ariakit Composite"
170
+ "Fullscreen API",
171
+ "React Aria Button",
172
+ "WAI-ARIA Button"
167
173
  ],
168
- dependencies: ["collection", "typeahead"],
174
+ dependencies: [],
169
175
  maturity: "stable",
170
176
  owner: catalogOwner
171
177
  },
172
178
  {
173
- canonicalName: "context",
174
- title: "Typed Component Context",
175
- packageSubpath: "./context",
176
- entryFile: "src/context.ts",
177
- sourceFiles: ["src/context.ts"],
178
- behaviorContract: "src/context.behavior.md",
179
- tests: ["src/context.test.ts"],
180
- typeTests: ["src/context.types.test-d.ts"],
181
- qualityGates: stableQualityGates,
179
+ canonicalName: "print-button",
180
+ title: "Print Button",
181
+ packageSubpath: "./print-button",
182
+ entryFile: "src/families/actions/print-button/print-button.ts",
183
+ sourceFiles: [
184
+ "src/families/actions/print-button/print-button.vue",
185
+ "src/families/actions/print-button/print-button.ts",
186
+ "src/families/actions/print-button/print-button-types.ts"
187
+ ],
188
+ behaviorContract: "src/families/actions/print-button/print-button.behavior.md",
189
+ tests: ["src/families/actions/print-button/print-button.test.ts", "src/families/actions/print-button/print-button-ssr.test.ts"],
190
+ typeTests: ["src/families/actions/print-button/print-button.types.test-d.ts"],
191
+ rendererFixture: "PrintButtonConsumer.vue",
192
+ qualityGates: componentQualityGates,
182
193
  bundleBudget: {
183
- exportName: "createContext",
184
- retainedSignature: "VIZE_UI_CONTEXT_MISSING",
185
- maximumJavaScriptGzipBytes: 450,
194
+ exportName: "PrintButton",
195
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}print-button",
196
+ maximumJavaScriptGzipBytes: 1650,
186
197
  maximumCssGzipBytes: 0
187
198
  },
188
- aliases: ["provide inject context", "compound component context"],
189
- upstreamCoverage: ["Reka UI createContext", "Radix context scope"],
199
+ aliases: [
200
+ "print button",
201
+ "browser print",
202
+ "print action",
203
+ "print control"
204
+ ],
205
+ upstreamCoverage: [
206
+ "HTML button",
207
+ "React Aria Button",
208
+ "WAI-ARIA Button"
209
+ ],
190
210
  dependencies: [],
191
211
  maturity: "stable",
192
212
  owner: catalogOwner
193
213
  },
194
214
  {
195
- canonicalName: "controllable-state",
196
- title: "Controlled and Uncontrolled State",
197
- packageSubpath: "./controllable-state",
198
- entryFile: "src/controllable-state.ts",
199
- sourceFiles: ["src/controllable-state.ts"],
200
- behaviorContract: "src/controllable-state.behavior.md",
201
- tests: ["src/controllable-state.test.ts"],
202
- typeTests: ["src/controllable-state.types.test-d.ts"],
203
- qualityGates: stableQualityGates,
215
+ canonicalName: "share-button",
216
+ title: "Share Button",
217
+ packageSubpath: "./share-button",
218
+ entryFile: "src/families/actions/share-button/share-button.ts",
219
+ sourceFiles: [
220
+ "src/families/actions/share-button/share-button.vue",
221
+ "src/families/actions/share-button/share-button.ts",
222
+ "src/families/actions/share-button/share-button-types.ts"
223
+ ],
224
+ behaviorContract: "src/families/actions/share-button/share-button.behavior.md",
225
+ tests: [
226
+ "src/families/actions/share-button/share-button.test.ts",
227
+ "src/families/actions/share-button/share-button-slot-expose.test.ts",
228
+ "src/families/actions/share-button/share-button-ssr.test.ts"
229
+ ],
230
+ typeTests: ["src/families/actions/share-button/share-button.types.test-d.ts"],
231
+ rendererFixture: "ShareButtonConsumer.vue",
232
+ qualityGates: componentQualityGates,
204
233
  bundleBudget: {
205
- exportName: "useControllableState",
206
- retainedSignature: "defaultValue[\\s\\S]*Object\\.is[\\s\\S]*defaultValue",
207
- maximumJavaScriptGzipBytes: 550,
234
+ exportName: "ShareButton",
235
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}share-button",
236
+ maximumJavaScriptGzipBytes: 1700,
208
237
  maximumCssGzipBytes: 0
209
238
  },
210
239
  aliases: [
211
- "controllable state",
212
- "controlled state",
213
- "uncontrolled state"
240
+ "share button",
241
+ "web share button",
242
+ "share action",
243
+ "share control"
244
+ ],
245
+ upstreamCoverage: [
246
+ "Web Share API",
247
+ "React Aria Button",
248
+ "WAI-ARIA Button"
214
249
  ],
215
- upstreamCoverage: ["Radix useControllableState", "React Aria controlled state"],
216
250
  dependencies: [],
217
251
  maturity: "stable",
218
252
  owner: catalogOwner
253
+ },
254
+ {
255
+ canonicalName: "toolbar",
256
+ title: "Toolbar",
257
+ packageSubpath: "./toolbar",
258
+ entryFile: "src/families/actions/toolbar/toolbar.ts",
259
+ sourceFiles: [
260
+ "src/families/actions/toolbar/toolbar.vue",
261
+ "src/families/actions/toolbar/toolbar-item.vue",
262
+ "src/families/actions/toolbar/toolbar.ts",
263
+ "src/families/actions/toolbar/toolbar-context.ts",
264
+ "src/families/actions/toolbar/toolbar-contracts.ts",
265
+ "src/families/actions/toolbar/toolbar-types.ts"
266
+ ],
267
+ behaviorContract: "src/families/actions/toolbar/toolbar.behavior.md",
268
+ tests: ["src/families/actions/toolbar/toolbar.test.ts", "src/families/actions/toolbar/toolbar-ssr.test.ts"],
269
+ typeTests: ["src/families/actions/toolbar/toolbar.types.test-d.ts"],
270
+ rendererFixture: "ToolbarConsumer.vue",
271
+ qualityGates: componentQualityGates,
272
+ bundleBudget: {
273
+ exportName: "Toolbar",
274
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}toolbar",
275
+ allowedRetainedFamilies: ["context"],
276
+ maximumJavaScriptGzipBytes: 1900,
277
+ maximumCssGzipBytes: 0
278
+ },
279
+ aliases: [
280
+ "toolbar",
281
+ "action toolbar",
282
+ "editor toolbar",
283
+ "command toolbar"
284
+ ],
285
+ upstreamCoverage: [
286
+ "WAI-ARIA Toolbar",
287
+ "React Aria Toolbar",
288
+ "Radix Toolbar"
289
+ ],
290
+ dependencies: ["context"],
291
+ maturity: "stable",
292
+ owner: catalogOwner
219
293
  }
220
294
  ];
221
295
  //#endregion
222
- //#region src/family-catalog-focus.ts
223
- const focusFamilyCatalog = [
296
+ //#region src/catalog/family-catalog-accessibility.ts
297
+ const accessibilityFamilyRoot = "src/families/accessibility/";
298
+ const announcerFamilyRoot = `${accessibilityFamilyRoot}announcer/`;
299
+ const focusFamilyRoot = `${accessibilityFamilyRoot}focus/`;
300
+ const focusGuardsFamilyRoot = `${accessibilityFamilyRoot}focus-guards/`;
301
+ const focusScopeFamilyRoot = `${accessibilityFamilyRoot}focus-scope/`;
302
+ const inertOutsideFamilyRoot = `${accessibilityFamilyRoot}inert-outside/`;
303
+ const interactionModalityFamilyRoot = `${accessibilityFamilyRoot}interaction-modality/`;
304
+ const liveRegionFamilyRoot = `${accessibilityFamilyRoot}live-region/`;
305
+ const scrollLockFamilyRoot = `${accessibilityFamilyRoot}scroll-lock/`;
306
+ const visuallyHiddenFamilyRoot = `${accessibilityFamilyRoot}visually-hidden/`;
307
+ const accessibilityFamilyCatalog = [
224
308
  {
225
- canonicalName: "dismissable-layer",
226
- title: "Dismissable Layer",
227
- packageSubpath: "./dismissable-layer",
228
- entryFile: "src/dismissable-layer.ts",
309
+ canonicalName: "announcer",
310
+ title: "Announcer",
311
+ packageSubpath: "./announcer",
312
+ entryFile: `${announcerFamilyRoot}announcer.ts`,
229
313
  sourceFiles: [
230
- "src/dismissable-layer.ts",
231
- "src/dismissable-layer-internal.ts",
232
- "src/dismissable-layer-stack.ts",
233
- "src/dismissable-layer-types.ts"
314
+ `${announcerFamilyRoot}announcer-provider.vue`,
315
+ `${announcerFamilyRoot}announcer.ts`,
316
+ `${announcerFamilyRoot}announcer-busy.ts`,
317
+ `${announcerFamilyRoot}announcer-runtime.ts`,
318
+ `${announcerFamilyRoot}announcer-types.ts`
234
319
  ],
235
- behaviorContract: "src/dismissable-layer.behavior.md",
236
- tests: ["src/dismissable-layer.test.ts", "src/dismissable-layer-ssr.test.ts"],
237
- typeTests: ["src/dismissable-layer.types.test-d.ts"],
238
- rendererFixture: "DismissableLayerConsumer.vue",
239
- qualityGates: interactionQualityGates,
320
+ behaviorContract: `${announcerFamilyRoot}announcer.behavior.md`,
321
+ tests: [`${announcerFamilyRoot}announcer.test.ts`, `${announcerFamilyRoot}announcer-ssr.test.ts`],
322
+ typeTests: [`${announcerFamilyRoot}announcer.types.test-d.ts`],
323
+ rendererFixture: "families/accessibility/announcer/announcer-provider.vue",
324
+ qualityGates: componentQualityGates,
240
325
  bundleBudget: {
241
- exportName: "createDismissableLayer",
242
- retainedSignature: "VIZE_UI_DISMISSABLE_LAYER_DISPOSED",
243
- maximumJavaScriptGzipBytes: 2850,
326
+ exportName: "AnnouncerProvider",
327
+ retainedSignature: "VIZE_UI_ANNOUNCER_DISPOSED",
328
+ allowedRetainedFamilies: ["context", "live-region"],
329
+ maximumJavaScriptGzipBytes: 2050,
244
330
  maximumCssGzipBytes: 0
245
331
  },
246
332
  aliases: [
247
- "dismissible layer",
248
- "outside interaction",
249
- "escape routing",
250
- "overlay stack"
251
- ],
252
- upstreamCoverage: [
253
- "Radix DismissableLayer",
254
- "React Aria overlay dismissal",
255
- "Reka UI DismissableLayer"
333
+ "announcement queue",
334
+ "status announcer",
335
+ "busy announcements"
256
336
  ],
257
- dependencies: [],
337
+ upstreamCoverage: ["ARIA live regions", "coalesced announcement queues"],
338
+ dependencies: ["context", "live-region"],
258
339
  maturity: "stable",
259
340
  owner: catalogOwner
260
341
  },
@@ -262,19 +343,19 @@ const focusFamilyCatalog = [
262
343
  canonicalName: "focus",
263
344
  title: "Focus Interactions",
264
345
  packageSubpath: "./focus",
265
- entryFile: "src/focus.ts",
346
+ entryFile: `${focusFamilyRoot}focus.ts`,
266
347
  sourceFiles: [
267
- "src/focus.ts",
268
- "src/focus-internal.ts",
269
- "src/focus-types.ts"
348
+ `${focusFamilyRoot}focus.ts`,
349
+ `${focusFamilyRoot}focus-internal.ts`,
350
+ `${focusFamilyRoot}focus-types.ts`
270
351
  ],
271
- behaviorContract: "src/focus.behavior.md",
352
+ behaviorContract: `${focusFamilyRoot}focus.behavior.md`,
272
353
  tests: [
273
- "src/focus.test.ts",
274
- "src/focus-lifecycle.test.ts",
275
- "src/focus-ssr.test.ts"
354
+ `${focusFamilyRoot}focus.test.ts`,
355
+ `${focusFamilyRoot}focus-lifecycle.test.ts`,
356
+ `${focusFamilyRoot}focus-ssr.test.ts`
276
357
  ],
277
- typeTests: ["src/focus.types.test-d.ts"],
358
+ typeTests: [`${focusFamilyRoot}focus.types.test-d.ts`],
278
359
  rendererFixture: "FocusConsumer.vue",
279
360
  qualityGates: interactionQualityGates,
280
361
  bundleBudget: {
@@ -302,22 +383,22 @@ const focusFamilyCatalog = [
302
383
  canonicalName: "focus-guards",
303
384
  title: "Focus Guards",
304
385
  packageSubpath: "./focus-guards",
305
- entryFile: "src/focus-guards.ts",
386
+ entryFile: `${focusGuardsFamilyRoot}focus-guards.ts`,
306
387
  sourceFiles: [
307
- "src/focus-guards.ts",
308
- "src/focus-guards-internal.ts",
309
- "src/focus-guards-stack.ts",
310
- "src/focus-guards-types.ts"
388
+ `${focusGuardsFamilyRoot}focus-guards.ts`,
389
+ `${focusGuardsFamilyRoot}focus-guards-internal.ts`,
390
+ `${focusGuardsFamilyRoot}focus-guards-stack.ts`,
391
+ `${focusGuardsFamilyRoot}focus-guards-types.ts`
311
392
  ],
312
- behaviorContract: "src/focus-guards.behavior.md",
313
- tests: ["src/focus-guards.test.ts", "src/focus-guards-ssr.test.ts"],
314
- typeTests: ["src/focus-guards.types.test-d.ts"],
393
+ behaviorContract: `${focusGuardsFamilyRoot}focus-guards.behavior.md`,
394
+ tests: [`${focusGuardsFamilyRoot}focus-guards.test.ts`, `${focusGuardsFamilyRoot}focus-guards-ssr.test.ts`],
395
+ typeTests: [`${focusGuardsFamilyRoot}focus-guards.types.test-d.ts`],
315
396
  rendererFixture: "FocusGuardsConsumer.vue",
316
397
  qualityGates: interactionQualityGates,
317
398
  bundleBudget: {
318
399
  exportName: "createFocusGuards",
319
400
  retainedSignature: "VIZE_UI_FOCUS_GUARDS_DISPOSED",
320
- maximumJavaScriptGzipBytes: 3500,
401
+ maximumJavaScriptGzipBytes: 3525,
321
402
  maximumCssGzipBytes: 0
322
403
  },
323
404
  aliases: [
@@ -334,23 +415,23 @@ const focusFamilyCatalog = [
334
415
  canonicalName: "focus-scope",
335
416
  title: "Focus Scope",
336
417
  packageSubpath: "./focus-scope",
337
- entryFile: "src/focus-scope.ts",
418
+ entryFile: `${focusScopeFamilyRoot}focus-scope.ts`,
338
419
  sourceFiles: [
339
- "src/focus-scope.ts",
340
- "src/focus-scope-dom.ts",
341
- "src/focus-scope-internal.ts",
342
- "src/focus-scope-manager.ts",
343
- "src/focus-scope-stack.ts",
344
- "src/focus-scope-types.ts",
345
- "src/use-focus-scope.ts"
420
+ `${focusScopeFamilyRoot}focus-scope.ts`,
421
+ `${focusScopeFamilyRoot}focus-scope-dom.ts`,
422
+ `${focusScopeFamilyRoot}focus-scope-internal.ts`,
423
+ `${focusScopeFamilyRoot}focus-scope-manager.ts`,
424
+ `${focusScopeFamilyRoot}focus-scope-stack.ts`,
425
+ `${focusScopeFamilyRoot}focus-scope-types.ts`,
426
+ `${focusScopeFamilyRoot}use-focus-scope.ts`
346
427
  ],
347
- behaviorContract: "src/focus-scope.behavior.md",
428
+ behaviorContract: `${focusScopeFamilyRoot}focus-scope.behavior.md`,
348
429
  tests: [
349
- "src/focus-scope.test.ts",
350
- "src/focus-scope-lifecycle.test.ts",
351
- "src/focus-scope-ssr.test.ts"
430
+ `${focusScopeFamilyRoot}focus-scope.test.ts`,
431
+ `${focusScopeFamilyRoot}focus-scope-lifecycle.test.ts`,
432
+ `${focusScopeFamilyRoot}focus-scope-ssr.test.ts`
352
433
  ],
353
- typeTests: ["src/focus-scope.types.test-d.ts"],
434
+ typeTests: [`${focusScopeFamilyRoot}focus-scope.types.test-d.ts`],
354
435
  rendererFixture: "FocusScopeConsumer.vue",
355
436
  qualityGates: interactionQualityGates,
356
437
  bundleBudget: {
@@ -373,79 +454,21 @@ const focusFamilyCatalog = [
373
454
  maturity: "stable",
374
455
  owner: catalogOwner
375
456
  },
376
- {
377
- canonicalName: "hover",
378
- title: "Hover Interaction",
379
- packageSubpath: "./hover",
380
- entryFile: "src/hover.ts",
381
- sourceFiles: ["src/hover.ts", "src/hover-types.ts"],
382
- behaviorContract: "src/hover.behavior.md",
383
- tests: ["src/hover.test.ts", "src/hover-ssr.test.ts"],
384
- typeTests: ["src/hover.types.test-d.ts"],
385
- rendererFixture: "HoverConsumer.vue",
386
- qualityGates: interactionQualityGates,
387
- bundleBudget: {
388
- exportName: "createHover",
389
- retainedSignature: "VIZE_UI_HOVER_DISPOSED",
390
- maximumJavaScriptGzipBytes: 1450,
391
- maximumCssGzipBytes: 0
392
- },
393
- aliases: [
394
- "hover",
395
- "pointer hover",
396
- "pen hover"
397
- ],
398
- upstreamCoverage: ["React Aria useHover", "Pointer Events hover"],
399
- dependencies: [],
400
- maturity: "stable",
401
- owner: catalogOwner
402
- },
403
- {
404
- canonicalName: "id",
405
- title: "Deterministic ID Provider",
406
- packageSubpath: "./id",
407
- entryFile: "src/id.ts",
408
- sourceFiles: [
409
- "src/DeterministicIdProvider.vue",
410
- "src/id.ts",
411
- "src/deterministic-id.ts"
412
- ],
413
- behaviorContract: "src/id.behavior.md",
414
- tests: ["src/id.test.ts"],
415
- typeTests: ["src/id.types.test-d.ts"],
416
- rendererFixture: "DeterministicIdProvider.vue",
417
- qualityGates: componentQualityGates,
418
- bundleBudget: {
419
- exportName: "IdProvider",
420
- retainedSignature: "DeterministicIdProvider",
421
- maximumJavaScriptGzipBytes: 1050,
422
- maximumCssGzipBytes: 0
423
- },
424
- aliases: [
425
- "id provider",
426
- "deterministic ids",
427
- "hydration ids"
428
- ],
429
- upstreamCoverage: ["React Aria SSRProvider", "Vue useId"],
430
- dependencies: ["context"],
431
- maturity: "stable",
432
- owner: catalogOwner
433
- },
434
457
  {
435
458
  canonicalName: "inert-outside",
436
459
  title: "Outside Inerting",
437
460
  packageSubpath: "./inert-outside",
438
- entryFile: "src/inert-outside.ts",
461
+ entryFile: `${inertOutsideFamilyRoot}inert-outside.ts`,
439
462
  sourceFiles: [
440
- "src/inert-outside.ts",
441
- "src/inert-outside-dom.ts",
442
- "src/inert-outside-internal.ts",
443
- "src/inert-outside-stack.ts",
444
- "src/inert-outside-types.ts"
463
+ `${inertOutsideFamilyRoot}inert-outside.ts`,
464
+ `${inertOutsideFamilyRoot}inert-outside-dom.ts`,
465
+ `${inertOutsideFamilyRoot}inert-outside-internal.ts`,
466
+ `${inertOutsideFamilyRoot}inert-outside-stack.ts`,
467
+ `${inertOutsideFamilyRoot}inert-outside-types.ts`
445
468
  ],
446
- behaviorContract: "src/inert-outside.behavior.md",
447
- tests: ["src/inert-outside.test.ts", "src/inert-outside-ssr.test.ts"],
448
- typeTests: ["src/inert-outside.types.test-d.ts"],
469
+ behaviorContract: `${inertOutsideFamilyRoot}inert-outside.behavior.md`,
470
+ tests: [`${inertOutsideFamilyRoot}inert-outside.test.ts`, `${inertOutsideFamilyRoot}inert-outside-ssr.test.ts`],
471
+ typeTests: [`${inertOutsideFamilyRoot}inert-outside.types.test-d.ts`],
449
472
  rendererFixture: "InertOutsideConsumer.vue",
450
473
  qualityGates: interactionQualityGates,
451
474
  bundleBudget: {
@@ -468,20 +491,20 @@ const focusFamilyCatalog = [
468
491
  canonicalName: "interaction-modality",
469
492
  title: "Interaction Modality",
470
493
  packageSubpath: "./interaction-modality",
471
- entryFile: "src/interaction-modality.ts",
494
+ entryFile: `${interactionModalityFamilyRoot}interaction-modality.ts`,
472
495
  sourceFiles: [
473
- "src/interaction-modality.ts",
474
- "src/interaction-modality-events.ts",
475
- "src/interaction-modality-hub.ts",
476
- "src/interaction-modality-types.ts"
496
+ `${interactionModalityFamilyRoot}interaction-modality.ts`,
497
+ `${interactionModalityFamilyRoot}interaction-modality-events.ts`,
498
+ `${interactionModalityFamilyRoot}interaction-modality-hub.ts`,
499
+ `${interactionModalityFamilyRoot}interaction-modality-types.ts`
477
500
  ],
478
- behaviorContract: "src/interaction-modality.behavior.md",
501
+ behaviorContract: `${interactionModalityFamilyRoot}interaction-modality.behavior.md`,
479
502
  tests: [
480
- "src/interaction-modality.test.ts",
481
- "src/interaction-modality-lifecycle.test.ts",
482
- "src/interaction-modality-ssr.test.ts"
503
+ `${interactionModalityFamilyRoot}interaction-modality.test.ts`,
504
+ `${interactionModalityFamilyRoot}interaction-modality-lifecycle.test.ts`,
505
+ `${interactionModalityFamilyRoot}interaction-modality-ssr.test.ts`
483
506
  ],
484
- typeTests: ["src/interaction-modality.types.test-d.ts"],
507
+ typeTests: [`${interactionModalityFamilyRoot}interaction-modality.types.test-d.ts`],
485
508
  qualityGates: [
486
509
  "behavior-contract",
487
510
  "mounted-dom",
@@ -505,280 +528,3655 @@ const focusFamilyCatalog = [
505
528
  dependencies: [],
506
529
  maturity: "stable",
507
530
  owner: catalogOwner
508
- }
509
- ];
510
- //#endregion
511
- //#region src/family-catalog-interactions.ts
512
- const interactionFamilyCatalog = [
531
+ },
513
532
  {
514
- canonicalName: "long-press",
515
- title: "Long Press Interaction",
516
- packageSubpath: "./long-press",
517
- entryFile: "src/long-press.ts",
533
+ canonicalName: "live-region",
534
+ title: "Live Region",
535
+ packageSubpath: "./live-region",
536
+ entryFile: `${liveRegionFamilyRoot}live-region.ts`,
518
537
  sourceFiles: [
519
- "src/long-press.ts",
520
- "src/long-press-internal.ts",
521
- "src/long-press-types.ts"
522
- ],
523
- behaviorContract: "src/long-press.behavior.md",
524
- tests: [
525
- "src/long-press.test.ts",
526
- "src/long-press-hardening.test.ts",
527
- "src/long-press-legacy.test.ts",
528
- "src/long-press-ssr.test.ts"
538
+ `${liveRegionFamilyRoot}live-region.vue`,
539
+ `${liveRegionFamilyRoot}live-region.ts`,
540
+ `${liveRegionFamilyRoot}live-region-runtime.ts`,
541
+ `${liveRegionFamilyRoot}live-region-types.ts`
529
542
  ],
530
- typeTests: ["src/long-press.types.test-d.ts"],
531
- rendererFixture: "LongPressConsumer.vue",
532
- qualityGates: interactionQualityGates,
543
+ behaviorContract: `${liveRegionFamilyRoot}live-region.behavior.md`,
544
+ tests: [`${liveRegionFamilyRoot}live-region.test.ts`, `${liveRegionFamilyRoot}live-region-ssr.test.ts`],
545
+ typeTests: [`${liveRegionFamilyRoot}live-region.types.test-d.ts`],
546
+ rendererFixture: "families/accessibility/live-region/live-region.vue",
547
+ qualityGates: componentQualityGates,
533
548
  bundleBudget: {
534
- exportName: "createLongPress",
535
- retainedSignature: "VIZE_UI_LONG_PRESS_DISPOSED",
536
- allowedRetainedFamilies: ["press"],
537
- maximumJavaScriptGzipBytes: 5150,
549
+ exportName: "createLiveRegion",
550
+ retainedSignature: "VIZE_UI_LIVE_REGION_DISPOSED",
551
+ maximumJavaScriptGzipBytes: 1800,
538
552
  maximumCssGzipBytes: 0
539
553
  },
540
- aliases: ["long press", "press and hold"],
541
- upstreamCoverage: ["React Aria useLongPress"],
542
- dependencies: ["press"],
554
+ aliases: [
555
+ "announcer",
556
+ "aria live",
557
+ "status region"
558
+ ],
559
+ upstreamCoverage: ["ARIA live regions", "WAI-ARIA status and alert"],
560
+ dependencies: [],
543
561
  maturity: "stable",
544
562
  owner: catalogOwner
545
563
  },
546
564
  {
547
- canonicalName: "move",
548
- title: "Move Interaction",
549
- packageSubpath: "./move",
550
- entryFile: "src/move.ts",
565
+ canonicalName: "scroll-lock",
566
+ title: "Scroll Lock",
567
+ packageSubpath: "./scroll-lock",
568
+ entryFile: `${scrollLockFamilyRoot}scroll-lock.ts`,
551
569
  sourceFiles: [
552
- "src/move.ts",
553
- "src/move-internal.ts",
554
- "src/move-types.ts"
555
- ],
556
- behaviorContract: "src/move.behavior.md",
557
- tests: [
558
- "src/move.test.ts",
559
- "src/move-internal.test.ts",
560
- "src/move-ssr.test.ts"
570
+ `${scrollLockFamilyRoot}scroll-lock.ts`,
571
+ `${scrollLockFamilyRoot}scroll-lock-dom.ts`,
572
+ `${scrollLockFamilyRoot}scroll-lock-internal.ts`,
573
+ `${scrollLockFamilyRoot}scroll-lock-stack.ts`,
574
+ `${scrollLockFamilyRoot}scroll-lock-types.ts`
561
575
  ],
562
- typeTests: ["src/move.types.test-d.ts"],
563
- rendererFixture: "MoveConsumer.vue",
576
+ behaviorContract: `${scrollLockFamilyRoot}scroll-lock.behavior.md`,
577
+ tests: [`${scrollLockFamilyRoot}scroll-lock.test.ts`, `${scrollLockFamilyRoot}scroll-lock-ssr.test.ts`],
578
+ typeTests: [`${scrollLockFamilyRoot}scroll-lock.types.test-d.ts`],
579
+ rendererFixture: "ScrollLockConsumer.vue",
564
580
  qualityGates: interactionQualityGates,
565
581
  bundleBudget: {
566
- exportName: "createMove",
567
- retainedSignature: "VIZE_UI_MOVE_DISPOSED",
568
- maximumJavaScriptGzipBytes: 2750,
582
+ exportName: "createScrollLock",
583
+ retainedSignature: "VIZE_UI_SCROLL_LOCK_DISPOSED",
584
+ maximumJavaScriptGzipBytes: 2150,
569
585
  maximumCssGzipBytes: 0
570
586
  },
571
587
  aliases: [
572
- "move",
573
- "drag movement",
574
- "keyboard move"
588
+ "body scroll lock",
589
+ "document scroll lock",
590
+ "overlay scroll lock"
575
591
  ],
576
- upstreamCoverage: ["React Aria useMove", "Pointer Events pointer capture"],
592
+ upstreamCoverage: ["React Aria usePreventScroll", "Radix RemoveScroll"],
577
593
  dependencies: [],
578
594
  maturity: "stable",
579
595
  owner: catalogOwner
580
596
  },
581
597
  {
582
- canonicalName: "press",
583
- title: "Press Interaction",
584
- packageSubpath: "./press",
585
- entryFile: "src/press.ts",
586
- sourceFiles: [
587
- "src/press.ts",
588
- "src/press-activation-memory.ts",
589
- "src/press-event.ts",
590
- "src/press-handlers.ts",
591
- "src/press-lifecycle.ts",
592
- "src/press-types.ts"
593
- ],
594
- behaviorContract: "src/press.behavior.md",
595
- tests: [
596
- "src/press.test.ts",
597
- "src/press-lifecycle.test.ts",
598
- "src/press-legacy.test.ts",
599
- "src/press-ssr.test.ts"
600
- ],
601
- typeTests: ["src/press.types.test-d.ts"],
602
- rendererFixture: "PressConsumer.vue",
603
- qualityGates: interactionQualityGates,
598
+ canonicalName: "visually-hidden",
599
+ title: "Visually Hidden",
600
+ packageSubpath: "./visually-hidden",
601
+ entryFile: `${visuallyHiddenFamilyRoot}visually-hidden.ts`,
602
+ sourceFiles: [`${visuallyHiddenFamilyRoot}visually-hidden.vue`, `${visuallyHiddenFamilyRoot}visually-hidden.ts`],
603
+ behaviorContract: `${visuallyHiddenFamilyRoot}visually-hidden.behavior.md`,
604
+ tests: [`${visuallyHiddenFamilyRoot}visually-hidden.test.ts`],
605
+ rendererFixture: "families/accessibility/visually-hidden/visually-hidden.vue",
606
+ qualityGates: componentQualityGates,
604
607
  bundleBudget: {
605
- exportName: "createPress",
606
- retainedSignature: "VIZE_UI_PRESS_DISPOSED",
607
- maximumJavaScriptGzipBytes: 3550,
608
- maximumCssGzipBytes: 0
608
+ exportName: "VisuallyHidden",
609
+ retainedSignature: "visually-hidden",
610
+ maximumJavaScriptGzipBytes: 400,
611
+ maximumCssGzipBytes: 7600
609
612
  },
610
613
  aliases: [
611
- "press",
612
- "activation",
613
- "pointer press"
614
+ "screen reader only",
615
+ "sr-only",
616
+ "visually hidden"
614
617
  ],
615
- upstreamCoverage: ["React Aria usePress", "Pointer Events activation"],
618
+ upstreamCoverage: ["React Aria VisuallyHidden", "Radix VisuallyHidden"],
616
619
  dependencies: [],
617
620
  maturity: "stable",
618
621
  owner: catalogOwner
619
- },
622
+ }
623
+ ];
624
+ //#endregion
625
+ //#region src/catalog/family-catalog-basics.ts
626
+ const collapsibleFamilyRoot = "src/families/disclosure/collapsible/";
627
+ const inputFamilyRoot = "src/families/form/input/";
628
+ const linkFamilyRoot = "src/families/navigation/link/";
629
+ const searchFieldFamilyRoot = "src/families/form/search-field/";
630
+ const textareaFamilyRoot = "src/families/form/textarea/";
631
+ const basicFamilyCatalog = [
620
632
  {
621
- canonicalName: "primitive",
622
- title: "Polymorphic Primitive",
623
- packageSubpath: "./primitive",
624
- entryFile: "src/primitive.ts",
625
- sourceFiles: ["src/PrimitiveElement.vue", "src/primitive.ts"],
626
- behaviorContract: "src/primitive.behavior.md",
627
- tests: ["src/primitive.test.ts"],
628
- rendererFixture: "PrimitiveElement.vue",
633
+ canonicalName: "collapsible",
634
+ title: "Collapsible",
635
+ packageSubpath: "./collapsible",
636
+ entryFile: `${collapsibleFamilyRoot}collapsible.ts`,
637
+ sourceFiles: [
638
+ `${collapsibleFamilyRoot}collapsible-root.vue`,
639
+ `${collapsibleFamilyRoot}collapsible-trigger.vue`,
640
+ `${collapsibleFamilyRoot}collapsible-content.vue`,
641
+ `${collapsibleFamilyRoot}collapsible.ts`,
642
+ `${collapsibleFamilyRoot}collapsible-context.ts`,
643
+ `${collapsibleFamilyRoot}collapsible-types.ts`
644
+ ],
645
+ behaviorContract: `${collapsibleFamilyRoot}collapsible.behavior.md`,
646
+ tests: [`${collapsibleFamilyRoot}collapsible.test.ts`, `${collapsibleFamilyRoot}collapsible-ssr.test.ts`],
647
+ typeTests: [`${collapsibleFamilyRoot}collapsible.types.test-d.ts`],
648
+ rendererFixture: "CollapsibleConsumer.vue",
629
649
  qualityGates: componentQualityGates,
630
650
  bundleBudget: {
631
- exportName: "Primitive",
632
- retainedSignature: "data-vize-ui.+primitive",
633
- maximumJavaScriptGzipBytes: 500,
651
+ exportName: "Collapsible",
652
+ retainedSignature: "collapsible-(?:root|trigger|content)",
653
+ allowedRetainedFamilies: ["context", "controllable-state"],
654
+ maximumJavaScriptGzipBytes: 1850,
634
655
  maximumCssGzipBytes: 0
635
656
  },
636
657
  aliases: [
637
- "as child",
638
- "polymorphic primitive",
639
- "slot forwarding primitive"
658
+ "disclosure",
659
+ "collapsible region",
660
+ "expand collapse"
640
661
  ],
641
662
  upstreamCoverage: [
642
- "Reka UI Primitive",
643
- "Radix Slot",
644
- "shadcn/ui Slot"
663
+ "WAI-ARIA Disclosure",
664
+ "Radix UI Collapsible",
665
+ "Reka UI Collapsible"
666
+ ],
667
+ dependencies: [
668
+ "context",
669
+ "controllable-state",
670
+ "id"
645
671
  ],
646
- dependencies: [],
647
672
  maturity: "stable",
648
673
  owner: catalogOwner
649
674
  },
650
675
  {
651
- canonicalName: "scroll-lock",
652
- title: "Scroll Lock",
653
- packageSubpath: "./scroll-lock",
654
- entryFile: "src/scroll-lock.ts",
676
+ canonicalName: "link",
677
+ title: "Link",
678
+ packageSubpath: "./link",
679
+ entryFile: `${linkFamilyRoot}link.ts`,
655
680
  sourceFiles: [
656
- "src/scroll-lock.ts",
657
- "src/scroll-lock-dom.ts",
658
- "src/scroll-lock-internal.ts",
659
- "src/scroll-lock-stack.ts",
660
- "src/scroll-lock-types.ts"
681
+ `${linkFamilyRoot}link-anchor.vue`,
682
+ `${linkFamilyRoot}link.ts`,
683
+ `${linkFamilyRoot}link-types.ts`
661
684
  ],
662
- behaviorContract: "src/scroll-lock.behavior.md",
663
- tests: ["src/scroll-lock.test.ts", "src/scroll-lock-ssr.test.ts"],
664
- typeTests: ["src/scroll-lock.types.test-d.ts"],
665
- rendererFixture: "ScrollLockConsumer.vue",
666
- qualityGates: interactionQualityGates,
685
+ behaviorContract: `${linkFamilyRoot}link.behavior.md`,
686
+ tests: [`${linkFamilyRoot}link.test.ts`],
687
+ typeTests: [`${linkFamilyRoot}link.types.test-d.ts`],
688
+ rendererFixture: "families/navigation/link/link-anchor.vue",
689
+ qualityGates: componentQualityGates,
667
690
  bundleBudget: {
668
- exportName: "createScrollLock",
669
- retainedSignature: "VIZE_UI_SCROLL_LOCK_DISPOSED",
670
- maximumJavaScriptGzipBytes: 2150,
691
+ exportName: "Link",
692
+ retainedSignature: "aria-current",
693
+ maximumJavaScriptGzipBytes: 1650,
671
694
  maximumCssGzipBytes: 0
672
695
  },
673
696
  aliases: [
674
- "body scroll lock",
675
- "document scroll lock",
676
- "overlay scroll lock"
697
+ "anchor",
698
+ "navigation link",
699
+ "disabled link"
700
+ ],
701
+ upstreamCoverage: [
702
+ "HTML anchor",
703
+ "React Aria Link",
704
+ "Reka UI Primitive"
705
+ ],
706
+ dependencies: ["id"],
707
+ maturity: "stable",
708
+ owner: catalogOwner
709
+ },
710
+ {
711
+ canonicalName: "input",
712
+ title: "Input",
713
+ packageSubpath: "./input",
714
+ entryFile: `${inputFamilyRoot}input.ts`,
715
+ sourceFiles: [
716
+ `${inputFamilyRoot}text-input.vue`,
717
+ `${inputFamilyRoot}input.ts`,
718
+ `${inputFamilyRoot}input-types.ts`
719
+ ],
720
+ behaviorContract: `${inputFamilyRoot}input.behavior.md`,
721
+ tests: [`${inputFamilyRoot}input.test.ts`],
722
+ typeTests: [`${inputFamilyRoot}input.types.test-d.ts`],
723
+ rendererFixture: "families/form/input/text-input.vue",
724
+ qualityGates: componentQualityGates,
725
+ bundleBudget: {
726
+ exportName: "Input",
727
+ retainedSignature: "data-vize-ui\":(?:`input`|\"input\"|'input')",
728
+ allowedRetainedFamilies: ["controllable-state"],
729
+ maximumJavaScriptGzipBytes: 2400,
730
+ maximumCssGzipBytes: 0
731
+ },
732
+ aliases: [
733
+ "text input",
734
+ "field input",
735
+ "textbox"
736
+ ],
737
+ upstreamCoverage: [
738
+ "HTML input",
739
+ "React Aria TextField",
740
+ "Reka UI Primitive"
741
+ ],
742
+ dependencies: ["controllable-state", "id"],
743
+ maturity: "stable",
744
+ owner: catalogOwner
745
+ },
746
+ {
747
+ canonicalName: "search-field",
748
+ title: "Search Field",
749
+ packageSubpath: "./search-field",
750
+ entryFile: `${searchFieldFamilyRoot}search-field.ts`,
751
+ sourceFiles: [
752
+ `${searchFieldFamilyRoot}search-field.vue`,
753
+ `${searchFieldFamilyRoot}search-field.ts`,
754
+ `${searchFieldFamilyRoot}search-field-types.ts`
755
+ ],
756
+ behaviorContract: `${searchFieldFamilyRoot}search-field.behavior.md`,
757
+ tests: [`${searchFieldFamilyRoot}search-field.test.ts`],
758
+ typeTests: [`${searchFieldFamilyRoot}search-field.types.test-d.ts`],
759
+ rendererFixture: "families/form/search-field/search-field.vue",
760
+ qualityGates: componentQualityGates,
761
+ bundleBudget: {
762
+ exportName: "SearchField",
763
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}search-field",
764
+ allowedRetainedFamilies: ["controllable-state"],
765
+ maximumJavaScriptGzipBytes: 3100,
766
+ maximumCssGzipBytes: 0
767
+ },
768
+ aliases: [
769
+ "search box",
770
+ "search input",
771
+ "query field"
772
+ ],
773
+ upstreamCoverage: [
774
+ "HTML search input",
775
+ "React Aria SearchField",
776
+ "Reka UI Primitive"
777
+ ],
778
+ dependencies: ["controllable-state", "id"],
779
+ maturity: "stable",
780
+ owner: catalogOwner
781
+ },
782
+ {
783
+ canonicalName: "textarea",
784
+ title: "Textarea",
785
+ packageSubpath: "./textarea",
786
+ entryFile: `${textareaFamilyRoot}textarea.ts`,
787
+ sourceFiles: [
788
+ `${textareaFamilyRoot}textarea-control.vue`,
789
+ `${textareaFamilyRoot}textarea.ts`,
790
+ `${textareaFamilyRoot}textarea-types.ts`
791
+ ],
792
+ behaviorContract: `${textareaFamilyRoot}textarea.behavior.md`,
793
+ tests: [`${textareaFamilyRoot}textarea.test.ts`],
794
+ typeTests: [`${textareaFamilyRoot}textarea.types.test-d.ts`],
795
+ rendererFixture: "families/form/textarea/textarea-control.vue",
796
+ qualityGates: componentQualityGates,
797
+ bundleBudget: {
798
+ exportName: "Textarea",
799
+ retainedSignature: "data-vize-ui.+textarea",
800
+ allowedRetainedFamilies: ["controllable-state"],
801
+ maximumJavaScriptGzipBytes: 2400,
802
+ maximumCssGzipBytes: 0
803
+ },
804
+ aliases: [
805
+ "text area",
806
+ "multiline input",
807
+ "textarea field"
808
+ ],
809
+ upstreamCoverage: [
810
+ "HTML textarea",
811
+ "React Aria TextField",
812
+ "Reka UI Primitive"
813
+ ],
814
+ dependencies: ["controllable-state", "id"],
815
+ maturity: "stable",
816
+ owner: catalogOwner
817
+ }
818
+ ];
819
+ //#endregion
820
+ //#region src/catalog/family-catalog-data.ts
821
+ const tableFamilyRoot = "src/families/data/table/";
822
+ const dataFamilyCatalog = [{
823
+ canonicalName: "table",
824
+ title: "Table",
825
+ packageSubpath: "./table",
826
+ entryFile: `${tableFamilyRoot}table.ts`,
827
+ sourceFiles: [
828
+ `${tableFamilyRoot}table-body.vue`,
829
+ `${tableFamilyRoot}table-caption.vue`,
830
+ `${tableFamilyRoot}table-cell.vue`,
831
+ `${tableFamilyRoot}table-head.vue`,
832
+ `${tableFamilyRoot}table-header.vue`,
833
+ `${tableFamilyRoot}table-row.vue`,
834
+ `${tableFamilyRoot}table.vue`,
835
+ `${tableFamilyRoot}table-contracts.ts`,
836
+ `${tableFamilyRoot}table.ts`,
837
+ `${tableFamilyRoot}table-types.ts`
838
+ ],
839
+ behaviorContract: `${tableFamilyRoot}table.behavior.md`,
840
+ tests: [`${tableFamilyRoot}table.test.ts`, `${tableFamilyRoot}table-ssr.test.ts`],
841
+ typeTests: [`${tableFamilyRoot}table.types.test-d.ts`],
842
+ rendererFixture: "TableConsumer.vue",
843
+ qualityGates: componentQualityGates,
844
+ bundleBudget: {
845
+ exportName: "Table",
846
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}table",
847
+ maximumJavaScriptGzipBytes: 650,
848
+ maximumCssGzipBytes: 0
849
+ },
850
+ aliases: [
851
+ "semantic table",
852
+ "data table shell",
853
+ "table primitive",
854
+ "tabular data"
855
+ ],
856
+ upstreamCoverage: [
857
+ "HTML table element",
858
+ "HTML caption element",
859
+ "HTML table section elements",
860
+ "HTML th scope attribute",
861
+ "shadcn/ui Table",
862
+ "Reka UI Primitive"
863
+ ],
864
+ dependencies: [],
865
+ maturity: "stable",
866
+ owner: catalogOwner
867
+ }];
868
+ //#endregion
869
+ //#region src/families/feedback/catalog/core.ts
870
+ const feedbackCoreCatalog = [
871
+ {
872
+ canonicalName: "alert",
873
+ title: "Alert",
874
+ packageSubpath: "./alert",
875
+ entryFile: "src/families/feedback/alert/alert.ts",
876
+ sourceFiles: [
877
+ "src/families/feedback/alert/alert.vue",
878
+ "src/families/feedback/alert/alert.ts",
879
+ "src/families/feedback/alert/alert-types.ts"
880
+ ],
881
+ behaviorContract: "src/families/feedback/alert/alert.behavior.md",
882
+ tests: ["src/families/feedback/alert/alert.test.ts"],
883
+ typeTests: ["src/families/feedback/alert/alert.types.test-d.ts"],
884
+ rendererFixture: "families/feedback/alert/alert.vue",
885
+ qualityGates: componentQualityGates,
886
+ bundleBudget: {
887
+ exportName: "Alert",
888
+ retainedSignature: "data-vize-ui\":(?:`alert`|\"alert\"|'alert')",
889
+ maximumJavaScriptGzipBytes: 750,
890
+ maximumCssGzipBytes: 0
891
+ },
892
+ aliases: [
893
+ "inline alert",
894
+ "status alert",
895
+ "callout primitive"
896
+ ],
897
+ upstreamCoverage: [
898
+ "WAI-ARIA alert role",
899
+ "WAI-ARIA status role",
900
+ "shadcn/ui Alert"
677
901
  ],
678
- upstreamCoverage: ["React Aria usePreventScroll", "Radix RemoveScroll"],
679
902
  dependencies: [],
680
903
  maturity: "stable",
681
904
  owner: catalogOwner
682
905
  },
683
906
  {
684
- canonicalName: "spatial-navigation",
685
- title: "Spatial Navigation",
686
- packageSubpath: "./spatial-navigation",
687
- entryFile: "src/spatial-navigation.ts",
907
+ canonicalName: "badge",
908
+ title: "Badge",
909
+ packageSubpath: "./badge",
910
+ entryFile: "src/families/feedback/badge/badge.ts",
911
+ sourceFiles: [
912
+ "src/families/feedback/badge/badge.vue",
913
+ "src/families/feedback/badge/badge.ts",
914
+ "src/families/feedback/badge/badge-types.ts"
915
+ ],
916
+ behaviorContract: "src/families/feedback/badge/badge.behavior.md",
917
+ tests: ["src/families/feedback/badge/badge.test.ts", "src/families/feedback/badge/badge-ssr.test.ts"],
918
+ typeTests: ["src/families/feedback/badge/badge.types.test-d.ts"],
919
+ rendererFixture: "BadgeConsumer.vue",
920
+ qualityGates: componentQualityGates,
921
+ bundleBudget: {
922
+ exportName: "Badge",
923
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}badge",
924
+ maximumJavaScriptGzipBytes: 600,
925
+ maximumCssGzipBytes: 0
926
+ },
927
+ aliases: [
928
+ "tag",
929
+ "chip",
930
+ "status badge",
931
+ "count badge",
932
+ "unread indicator"
933
+ ],
934
+ upstreamCoverage: [
935
+ "HTML span",
936
+ "shadcn/ui Badge",
937
+ "Radix Themes Badge",
938
+ "Reka UI Primitive"
939
+ ],
940
+ dependencies: [],
941
+ maturity: "stable",
942
+ owner: catalogOwner
943
+ },
944
+ {
945
+ canonicalName: "banner",
946
+ title: "Banner",
947
+ packageSubpath: "./banner",
948
+ entryFile: "src/families/feedback/banner/banner.ts",
688
949
  sourceFiles: [
689
- "src/spatial-navigation.ts",
690
- "src/spatial-navigation-internal.ts",
691
- "src/spatial-navigation-types.ts"
950
+ "src/families/feedback/banner/banner.vue",
951
+ "src/families/feedback/banner/banner.ts",
952
+ "src/families/feedback/banner/banner-aria.ts",
953
+ "src/families/feedback/banner/banner-types.ts"
692
954
  ],
693
- behaviorContract: "src/spatial-navigation.behavior.md",
955
+ behaviorContract: "src/families/feedback/banner/banner.behavior.md",
694
956
  tests: [
695
- "src/spatial-navigation.test.ts",
696
- "src/spatial-navigation-lifecycle.test.ts",
697
- "src/spatial-navigation-ssr.test.ts"
957
+ "src/families/feedback/banner/banner.test.ts",
958
+ "src/families/feedback/banner/banner-aria.test.ts",
959
+ "src/families/feedback/banner/banner-ssr.test.ts"
698
960
  ],
699
- typeTests: ["src/spatial-navigation.types.test-d.ts"],
700
- rendererFixture: "SpatialNavigationConsumer.vue",
701
- qualityGates: interactionQualityGates,
961
+ typeTests: ["src/families/feedback/banner/banner.types.test-d.ts"],
962
+ rendererFixture: "BannerConsumer.vue",
963
+ qualityGates: componentQualityGates,
702
964
  bundleBudget: {
703
- exportName: "createSpatialNavigation",
704
- retainedSignature: "VIZE_UI_SPATIAL_NAVIGATION_DISPOSED",
705
- maximumJavaScriptGzipBytes: 2600,
965
+ exportName: "Banner",
966
+ retainedSignature: "data-vize-ui[\\s\\S]{0,40}banner",
967
+ maximumJavaScriptGzipBytes: 4250,
706
968
  maximumCssGzipBytes: 0
707
969
  },
708
970
  aliases: [
709
- "spatial navigation",
710
- "grid navigation",
711
- "geometry navigation"
971
+ "announcement banner",
972
+ "dismissible notice",
973
+ "page notice",
974
+ "status banner"
712
975
  ],
713
- upstreamCoverage: ["CSS Spatial Navigation", "ARIA grid navigation"],
714
- dependencies: ["collection"],
976
+ upstreamCoverage: [
977
+ "WAI-ARIA region role",
978
+ "WAI-ARIA status role",
979
+ "WAI-ARIA alert role",
980
+ "shadcn/ui Alert",
981
+ "Vuetify Alert",
982
+ "React Aria live regions"
983
+ ],
984
+ dependencies: ["id"],
715
985
  maturity: "stable",
716
986
  owner: catalogOwner
717
987
  },
718
988
  {
719
- canonicalName: "typeahead",
720
- title: "Collection Typeahead",
721
- packageSubpath: "./typeahead",
722
- entryFile: "src/typeahead.ts",
989
+ canonicalName: "block-ui",
990
+ title: "BlockUI",
991
+ packageSubpath: "./block-ui",
992
+ entryFile: "src/families/feedback/block-ui/block-ui.ts",
723
993
  sourceFiles: [
724
- "src/typeahead.ts",
725
- "src/typeahead-internal.ts",
726
- "src/typeahead-types.ts"
994
+ "src/families/feedback/block-ui/block-ui.vue",
995
+ "src/families/feedback/block-ui/block-ui.ts",
996
+ "src/families/feedback/block-ui/block-ui-types.ts"
727
997
  ],
728
- behaviorContract: "src/typeahead.behavior.md",
729
- tests: ["src/typeahead.test.ts", "src/typeahead-ssr.test.ts"],
730
- typeTests: ["src/typeahead.types.test-d.ts"],
731
- rendererFixture: "TypeaheadConsumer.vue",
732
- qualityGates: interactionQualityGates,
998
+ behaviorContract: "src/families/feedback/block-ui/block-ui.behavior.md",
999
+ tests: ["src/families/feedback/block-ui/block-ui.test.ts", "src/families/feedback/block-ui/block-ui-ssr.test.ts"],
1000
+ typeTests: ["src/families/feedback/block-ui/block-ui.types.test-d.ts"],
1001
+ rendererFixture: "BlockUIConsumer.vue",
1002
+ qualityGates: componentQualityGates,
733
1003
  bundleBudget: {
734
- exportName: "createTypeahead",
735
- retainedSignature: "VIZE_UI_TYPEAHEAD_DISPOSED",
736
- maximumJavaScriptGzipBytes: 1375,
1004
+ exportName: "BlockUI",
1005
+ retainedSignature: "data-vize-ui[\\s\\S]{0,40}block-ui",
1006
+ maximumJavaScriptGzipBytes: 975,
737
1007
  maximumCssGzipBytes: 0
738
1008
  },
739
1009
  aliases: [
740
- "typeahead",
741
- "collection search",
742
- "keyboard search"
1010
+ "blocking overlay",
1011
+ "busy region",
1012
+ "pending region",
1013
+ "stale content",
1014
+ "offline gate"
743
1015
  ],
744
- upstreamCoverage: ["React Aria useTypeSelect", "Ariakit composite typeahead"],
745
- dependencies: ["collection"],
1016
+ upstreamCoverage: [
1017
+ "HTML inert attribute",
1018
+ "WAI-ARIA aria-busy",
1019
+ "WAI-ARIA status role"
1020
+ ],
1021
+ dependencies: [],
1022
+ maturity: "stable",
1023
+ owner: catalogOwner
1024
+ }
1025
+ ];
1026
+ //#endregion
1027
+ //#region src/families/feedback/catalog/loading.ts
1028
+ const feedbackLoadingCatalog = [
1029
+ {
1030
+ canonicalName: "progress",
1031
+ title: "Progress",
1032
+ packageSubpath: "./progress",
1033
+ entryFile: "src/families/feedback/progress/progress.ts",
1034
+ sourceFiles: [
1035
+ "src/families/feedback/progress/progress.vue",
1036
+ "src/families/feedback/progress/progress.ts",
1037
+ "src/families/feedback/progress/progress-state.ts",
1038
+ "src/families/feedback/progress/progress-types.ts"
1039
+ ],
1040
+ behaviorContract: "src/families/feedback/progress/progress.behavior.md",
1041
+ tests: ["src/families/feedback/progress/progress.test.ts", "src/families/feedback/progress/progress-ssr.test.ts"],
1042
+ typeTests: ["src/families/feedback/progress/progress.types.test-d.ts"],
1043
+ rendererFixture: "ProgressConsumer.vue",
1044
+ qualityGates: componentQualityGates,
1045
+ bundleBudget: {
1046
+ exportName: "Progress",
1047
+ retainedSignature: "data-vize-ui\":(?:`progress`|\"progress\"|'progress')",
1048
+ maximumJavaScriptGzipBytes: 1550,
1049
+ maximumCssGzipBytes: 0
1050
+ },
1051
+ aliases: [
1052
+ "native progress",
1053
+ "loading progress",
1054
+ "task progress"
1055
+ ],
1056
+ upstreamCoverage: [
1057
+ "HTML progress",
1058
+ "WAI-ARIA progressbar",
1059
+ "React Aria ProgressBar"
1060
+ ],
1061
+ dependencies: ["id"],
746
1062
  maturity: "stable",
747
1063
  owner: catalogOwner
748
1064
  },
749
1065
  {
750
- canonicalName: "visually-hidden",
751
- title: "Visually Hidden",
752
- packageSubpath: "./visually-hidden",
753
- entryFile: "src/visually-hidden.ts",
754
- sourceFiles: ["src/VisuallyHidden.vue", "src/visually-hidden.ts"],
755
- behaviorContract: "src/visually-hidden.behavior.md",
756
- tests: ["src/visually-hidden.test.ts"],
757
- rendererFixture: "VisuallyHidden.vue",
1066
+ canonicalName: "progress-bar",
1067
+ title: "ProgressBar",
1068
+ packageSubpath: "./progress-bar",
1069
+ entryFile: "src/families/feedback/progress-bar/progress-bar.ts",
1070
+ sourceFiles: [
1071
+ "src/families/feedback/progress-bar/progress-bar.vue",
1072
+ "src/families/feedback/progress-bar/progress-bar.ts",
1073
+ "src/families/feedback/progress-bar/progress-bar.css",
1074
+ "src/families/feedback/progress-bar/progress-bar-state.ts",
1075
+ "src/families/feedback/progress-bar/progress-bar-types.ts"
1076
+ ],
1077
+ behaviorContract: "src/families/feedback/progress-bar/progress-bar.behavior.md",
1078
+ tests: ["src/families/feedback/progress-bar/progress-bar.test.ts", "src/families/feedback/progress-bar/progress-bar-ssr.test.ts"],
1079
+ typeTests: ["src/families/feedback/progress-bar/progress-bar.types.test-d.ts"],
1080
+ rendererFixture: "ProgressBarConsumer.vue",
758
1081
  qualityGates: componentQualityGates,
759
1082
  bundleBudget: {
760
- exportName: "VisuallyHidden",
761
- retainedSignature: "visually-hidden",
762
- maximumJavaScriptGzipBytes: 400,
763
- maximumCssGzipBytes: 180
1083
+ exportName: "ProgressBar",
1084
+ retainedSignature: "data-vize-ui[\\s\\S]{0,40}progress-bar",
1085
+ maximumJavaScriptGzipBytes: 2550,
1086
+ maximumCssGzipBytes: 7600
764
1087
  },
765
1088
  aliases: [
766
- "screen reader only",
767
- "sr-only",
768
- "visually hidden"
1089
+ "progress",
1090
+ "loading progress",
1091
+ "task progress",
1092
+ "upload progress"
1093
+ ],
1094
+ upstreamCoverage: [
1095
+ "WAI-ARIA progressbar role",
1096
+ "React Aria ProgressBar",
1097
+ "HTML progress"
1098
+ ],
1099
+ dependencies: ["id"],
1100
+ maturity: "stable",
1101
+ owner: catalogOwner
1102
+ },
1103
+ {
1104
+ canonicalName: "skeleton",
1105
+ title: "Skeleton",
1106
+ packageSubpath: "./skeleton",
1107
+ entryFile: "src/families/feedback/skeleton/skeleton.ts",
1108
+ sourceFiles: [
1109
+ "src/families/feedback/skeleton/skeleton.vue",
1110
+ "src/families/feedback/skeleton/skeleton.ts",
1111
+ "src/families/feedback/skeleton/skeleton-types.ts"
1112
+ ],
1113
+ behaviorContract: "src/families/feedback/skeleton/skeleton.behavior.md",
1114
+ tests: ["src/families/feedback/skeleton/skeleton.test.ts", "src/families/feedback/skeleton/skeleton-ssr.test.ts"],
1115
+ typeTests: ["src/families/feedback/skeleton/skeleton.types.test-d.ts"],
1116
+ rendererFixture: "SkeletonConsumer.vue",
1117
+ qualityGates: componentQualityGates,
1118
+ bundleBudget: {
1119
+ exportName: "Skeleton",
1120
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}skeleton",
1121
+ maximumJavaScriptGzipBytes: 1250,
1122
+ maximumCssGzipBytes: 0
1123
+ },
1124
+ aliases: [
1125
+ "placeholder",
1126
+ "loading skeleton",
1127
+ "deferred content",
1128
+ "suspense fallback"
1129
+ ],
1130
+ upstreamCoverage: [
1131
+ "WAI-ARIA status role",
1132
+ "shadcn/ui Skeleton",
1133
+ "React Aria ProgressBar"
1134
+ ],
1135
+ dependencies: [],
1136
+ maturity: "stable",
1137
+ owner: catalogOwner
1138
+ },
1139
+ {
1140
+ canonicalName: "spinner",
1141
+ title: "Spinner",
1142
+ packageSubpath: "./spinner",
1143
+ entryFile: "src/families/feedback/spinner/spinner.ts",
1144
+ sourceFiles: [
1145
+ "src/families/feedback/spinner/spinner.vue",
1146
+ "src/families/feedback/spinner/spinner.ts",
1147
+ "src/families/feedback/spinner/spinner-types.ts"
1148
+ ],
1149
+ behaviorContract: "src/families/feedback/spinner/spinner.behavior.md",
1150
+ tests: ["src/families/feedback/spinner/spinner.test.ts", "src/families/feedback/spinner/spinner-ssr.test.ts"],
1151
+ typeTests: ["src/families/feedback/spinner/spinner.types.test-d.ts"],
1152
+ rendererFixture: "SpinnerConsumer.vue",
1153
+ qualityGates: componentQualityGates,
1154
+ bundleBudget: {
1155
+ exportName: "Spinner",
1156
+ retainedSignature: "data-vize-ui\":(?:`spinner`|\"spinner\"|'spinner')",
1157
+ maximumJavaScriptGzipBytes: 1900,
1158
+ maximumCssGzipBytes: 0
1159
+ },
1160
+ aliases: [
1161
+ "spinner",
1162
+ "loading indicator",
1163
+ "progress spinner",
1164
+ "activity indicator"
1165
+ ],
1166
+ upstreamCoverage: [
1167
+ "WAI-ARIA status role",
1168
+ "WAI-ARIA progressbar role",
1169
+ "MUI CircularProgress"
1170
+ ],
1171
+ dependencies: ["id"],
1172
+ maturity: "stable",
1173
+ owner: catalogOwner
1174
+ },
1175
+ {
1176
+ canonicalName: "status-light",
1177
+ title: "StatusLight",
1178
+ packageSubpath: "./status-light",
1179
+ entryFile: "src/families/feedback/status-light/status-light.ts",
1180
+ sourceFiles: [
1181
+ "src/families/feedback/status-light/status-light.vue",
1182
+ "src/families/feedback/status-light/status-light.ts",
1183
+ "src/families/feedback/status-light/status-light-types.ts"
1184
+ ],
1185
+ behaviorContract: "src/families/feedback/status-light/status-light.behavior.md",
1186
+ tests: ["src/families/feedback/status-light/status-light.test.ts", "src/families/feedback/status-light/status-light-ssr.test.ts"],
1187
+ typeTests: ["src/families/feedback/status-light/status-light.types.test-d.ts"],
1188
+ rendererFixture: "StatusLightConsumer.vue",
1189
+ qualityGates: componentQualityGates,
1190
+ bundleBudget: {
1191
+ exportName: "StatusLight",
1192
+ retainedSignature: "data-vize-ui[\\s\\S]{0,40}status-light",
1193
+ maximumJavaScriptGzipBytes: 1400,
1194
+ maximumCssGzipBytes: 0
1195
+ },
1196
+ aliases: [
1197
+ "presence indicator",
1198
+ "health indicator",
1199
+ "status dot",
1200
+ "traffic light"
1201
+ ],
1202
+ upstreamCoverage: [
1203
+ "WAI-ARIA img role",
1204
+ "WAI-ARIA status role",
1205
+ "Radix Themes Badge"
769
1206
  ],
770
- upstreamCoverage: ["React Aria VisuallyHidden", "Radix VisuallyHidden"],
771
1207
  dependencies: [],
772
1208
  maturity: "stable",
773
1209
  owner: catalogOwner
774
1210
  }
775
1211
  ];
776
1212
  //#endregion
777
- //#region src/family-catalog.ts
778
- const uiFamilyCatalog = [
779
- ...basicFamilyCatalog,
780
- ...focusFamilyCatalog,
781
- ...interactionFamilyCatalog
1213
+ //#region src/families/feedback/catalog/messages.ts
1214
+ const feedbackMessageCatalog = [
1215
+ {
1216
+ canonicalName: "callout",
1217
+ title: "Callout",
1218
+ packageSubpath: "./callout",
1219
+ entryFile: "src/families/feedback/callout/callout.ts",
1220
+ sourceFiles: [
1221
+ "src/families/feedback/callout/callout.vue",
1222
+ "src/families/feedback/callout/callout.ts",
1223
+ "src/families/feedback/callout/callout-runtime.ts",
1224
+ "src/families/feedback/callout/callout-types.ts"
1225
+ ],
1226
+ behaviorContract: "src/families/feedback/callout/callout.behavior.md",
1227
+ tests: ["src/families/feedback/callout/callout.test.ts", "src/families/feedback/callout/callout-ssr.test.ts"],
1228
+ typeTests: ["src/families/feedback/callout/callout.types.test-d.ts"],
1229
+ rendererFixture: "CalloutConsumer.vue",
1230
+ qualityGates: componentQualityGates,
1231
+ bundleBudget: {
1232
+ exportName: "Callout",
1233
+ retainedSignature: "data-vize-ui[\\s\\S]{0,40}callout",
1234
+ maximumJavaScriptGzipBytes: 2175,
1235
+ maximumCssGzipBytes: 0
1236
+ },
1237
+ aliases: [
1238
+ "callout",
1239
+ "banner",
1240
+ "inline message",
1241
+ "notice",
1242
+ "message"
1243
+ ],
1244
+ upstreamCoverage: [
1245
+ "WAI-ARIA note role",
1246
+ "WAI-ARIA status role",
1247
+ "WAI-ARIA alert role",
1248
+ "Radix Themes Callout",
1249
+ "shadcn/ui Alert",
1250
+ "Vuetify Alert"
1251
+ ],
1252
+ dependencies: ["id"],
1253
+ maturity: "stable",
1254
+ owner: catalogOwner
1255
+ },
1256
+ {
1257
+ canonicalName: "empty-state",
1258
+ title: "EmptyState",
1259
+ packageSubpath: "./empty-state",
1260
+ entryFile: "src/families/feedback/empty-state/empty-state.ts",
1261
+ sourceFiles: [
1262
+ "src/families/feedback/empty-state/empty-state.vue",
1263
+ "src/families/feedback/empty-state/empty-state.ts",
1264
+ "src/families/feedback/empty-state/empty-state-types.ts"
1265
+ ],
1266
+ behaviorContract: "src/families/feedback/empty-state/empty-state.behavior.md",
1267
+ tests: ["src/families/feedback/empty-state/empty-state.test.ts", "src/families/feedback/empty-state/empty-state-ssr.test.ts"],
1268
+ typeTests: ["src/families/feedback/empty-state/empty-state.types.test-d.ts"],
1269
+ rendererFixture: "EmptyStateConsumer.vue",
1270
+ qualityGates: componentQualityGates,
1271
+ bundleBudget: {
1272
+ exportName: "EmptyState",
1273
+ retainedSignature: "data-vize-ui[\\s\\S]{0,40}empty-state",
1274
+ maximumJavaScriptGzipBytes: 600,
1275
+ maximumCssGzipBytes: 0
1276
+ },
1277
+ aliases: [
1278
+ "empty content",
1279
+ "no results",
1280
+ "offline state",
1281
+ "retry prompt",
1282
+ "zero state"
1283
+ ],
1284
+ upstreamCoverage: ["HTML section element", "consumer-owned ARIA status pattern"],
1285
+ dependencies: [],
1286
+ maturity: "stable",
1287
+ owner: catalogOwner
1288
+ },
1289
+ {
1290
+ canonicalName: "meter",
1291
+ title: "Meter",
1292
+ packageSubpath: "./meter",
1293
+ entryFile: "src/families/feedback/meter/meter.ts",
1294
+ sourceFiles: [
1295
+ "src/families/feedback/meter/meter.vue",
1296
+ "src/families/feedback/meter/meter.ts",
1297
+ "src/families/feedback/meter/meter-state.ts",
1298
+ "src/families/feedback/meter/meter-types.ts"
1299
+ ],
1300
+ behaviorContract: "src/families/feedback/meter/meter.behavior.md",
1301
+ tests: ["src/families/feedback/meter/meter.test.ts", "src/families/feedback/meter/meter-ssr.test.ts"],
1302
+ typeTests: ["src/families/feedback/meter/meter.types.test-d.ts"],
1303
+ rendererFixture: "MeterConsumer.vue",
1304
+ qualityGates: componentQualityGates,
1305
+ bundleBudget: {
1306
+ exportName: "Meter",
1307
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}meter",
1308
+ maximumJavaScriptGzipBytes: 2e3,
1309
+ maximumCssGzipBytes: 0
1310
+ },
1311
+ aliases: [
1312
+ "gauge",
1313
+ "usage meter",
1314
+ "storage meter",
1315
+ "threshold meter"
1316
+ ],
1317
+ upstreamCoverage: [
1318
+ "HTML meter element",
1319
+ "WAI-ARIA meter role",
1320
+ "React Aria Meter"
1321
+ ],
1322
+ dependencies: ["id"],
1323
+ maturity: "stable",
1324
+ owner: catalogOwner
1325
+ }
1326
+ ];
1327
+ //#endregion
1328
+ //#region src/families/feedback/catalog/index.ts
1329
+ const feedbackFamilyCatalog = [
1330
+ ...feedbackCoreCatalog,
1331
+ ...feedbackMessageCatalog,
1332
+ ...feedbackLoadingCatalog
782
1333
  ];
783
1334
  //#endregion
1335
+ //#region src/catalog/family-catalog-focus.ts
1336
+ const idFamilyRoot = "src/families/foundations/id/";
1337
+ const dismissableLayerFamilyRoot = "src/families/overlays/dismissable-layer/";
1338
+ const dragAndDropFamilyRoot = "src/families/interaction/drag-and-drop/";
1339
+ const historyFamilyRoot = "src/families/interaction/history/";
1340
+ const focusFamilyCatalog = [
1341
+ {
1342
+ canonicalName: "dismissable-layer",
1343
+ title: "Dismissable Layer",
1344
+ packageSubpath: "./dismissable-layer",
1345
+ entryFile: `${dismissableLayerFamilyRoot}dismissable-layer.ts`,
1346
+ sourceFiles: [
1347
+ `${dismissableLayerFamilyRoot}dismissable-layer.ts`,
1348
+ `${dismissableLayerFamilyRoot}dismissable-layer-internal.ts`,
1349
+ `${dismissableLayerFamilyRoot}dismissable-layer-stack.ts`,
1350
+ `${dismissableLayerFamilyRoot}dismissable-layer-types.ts`
1351
+ ],
1352
+ behaviorContract: `${dismissableLayerFamilyRoot}dismissable-layer.behavior.md`,
1353
+ tests: [`${dismissableLayerFamilyRoot}dismissable-layer.test.ts`, `${dismissableLayerFamilyRoot}dismissable-layer-ssr.test.ts`],
1354
+ typeTests: [`${dismissableLayerFamilyRoot}dismissable-layer.types.test-d.ts`],
1355
+ rendererFixture: "DismissableLayerConsumer.vue",
1356
+ qualityGates: interactionQualityGates,
1357
+ bundleBudget: {
1358
+ exportName: "createDismissableLayer",
1359
+ retainedSignature: "VIZE_UI_DISMISSABLE_LAYER_DISPOSED",
1360
+ maximumJavaScriptGzipBytes: 2850,
1361
+ maximumCssGzipBytes: 0
1362
+ },
1363
+ aliases: [
1364
+ "dismissible layer",
1365
+ "outside interaction",
1366
+ "escape routing",
1367
+ "overlay stack"
1368
+ ],
1369
+ upstreamCoverage: [
1370
+ "Radix DismissableLayer",
1371
+ "React Aria overlay dismissal",
1372
+ "Reka UI DismissableLayer"
1373
+ ],
1374
+ dependencies: [],
1375
+ maturity: "stable",
1376
+ owner: catalogOwner
1377
+ },
1378
+ {
1379
+ canonicalName: "drag-and-drop",
1380
+ title: "Drag and Drop",
1381
+ packageSubpath: "./drag-and-drop",
1382
+ entryFile: `${dragAndDropFamilyRoot}drag-and-drop.ts`,
1383
+ sourceFiles: [
1384
+ `${dragAndDropFamilyRoot}drag-and-drop.ts`,
1385
+ `${dragAndDropFamilyRoot}drag-and-drop-announce.ts`,
1386
+ `${dragAndDropFamilyRoot}drag-and-drop-autoscroll.ts`,
1387
+ `${dragAndDropFamilyRoot}drag-and-drop-controller-types.ts`,
1388
+ `${dragAndDropFamilyRoot}drag-and-drop-internal.ts`,
1389
+ `${dragAndDropFamilyRoot}drag-and-drop-keyboard.ts`,
1390
+ `${dragAndDropFamilyRoot}drag-and-drop-listeners.ts`,
1391
+ `${dragAndDropFamilyRoot}drag-and-drop-session.ts`,
1392
+ `${dragAndDropFamilyRoot}drag-and-drop-transfer.ts`,
1393
+ `${dragAndDropFamilyRoot}drag-and-drop-types.ts`
1394
+ ],
1395
+ behaviorContract: `${dragAndDropFamilyRoot}drag-and-drop.behavior.md`,
1396
+ tests: [
1397
+ `${dragAndDropFamilyRoot}drag-and-drop.test.ts`,
1398
+ `${dragAndDropFamilyRoot}drag-and-drop-keyboard.test.ts`,
1399
+ `${dragAndDropFamilyRoot}drag-and-drop-legacy.test.ts`,
1400
+ `${dragAndDropFamilyRoot}drag-and-drop-ssr.test.ts`,
1401
+ `${dragAndDropFamilyRoot}drag-and-drop-transfer.test.ts`
1402
+ ],
1403
+ typeTests: [`${dragAndDropFamilyRoot}drag-and-drop.types.test-d.ts`],
1404
+ rendererFixture: "DragAndDropConsumer.vue",
1405
+ qualityGates: interactionQualityGates,
1406
+ bundleBudget: {
1407
+ exportName: "createDragAndDrop",
1408
+ retainedSignature: "VIZE_UI_DRAG_AND_DROP_DISPOSED",
1409
+ maximumJavaScriptGzipBytes: 6500,
1410
+ maximumCssGzipBytes: 0
1411
+ },
1412
+ aliases: [
1413
+ "drag and drop",
1414
+ "dnd",
1415
+ "drag handle",
1416
+ "drop target",
1417
+ "drop indicator"
1418
+ ],
1419
+ upstreamCoverage: [
1420
+ "React Aria useDrag and useDrop",
1421
+ "Pragmatic drag and drop adapters",
1422
+ "HTML Drag and Drop DataTransfer"
1423
+ ],
1424
+ dependencies: [],
1425
+ maturity: "stable",
1426
+ owner: catalogOwner
1427
+ },
1428
+ {
1429
+ canonicalName: "history",
1430
+ title: "Undo/Redo History",
1431
+ packageSubpath: "./history",
1432
+ entryFile: `${historyFamilyRoot}history.ts`,
1433
+ sourceFiles: [
1434
+ `${historyFamilyRoot}history.ts`,
1435
+ `${historyFamilyRoot}history-editable.ts`,
1436
+ `${historyFamilyRoot}history-stack.ts`,
1437
+ `${historyFamilyRoot}history-types.ts`
1438
+ ],
1439
+ behaviorContract: `${historyFamilyRoot}history.behavior.md`,
1440
+ tests: [
1441
+ `${historyFamilyRoot}history.test.ts`,
1442
+ `${historyFamilyRoot}history-editable.test.ts`,
1443
+ `${historyFamilyRoot}history-ssr.test.ts`
1444
+ ],
1445
+ typeTests: [`${historyFamilyRoot}history.types.test-d.ts`],
1446
+ rendererFixture: "HistoryConsumer.vue",
1447
+ qualityGates: interactionQualityGates,
1448
+ bundleBudget: {
1449
+ exportName: "createHistory",
1450
+ retainedSignature: "VIZE_UI_HISTORY_DISPOSED",
1451
+ maximumJavaScriptGzipBytes: 1700,
1452
+ maximumCssGzipBytes: 0
1453
+ },
1454
+ aliases: [
1455
+ "undo/redo",
1456
+ "undo stack",
1457
+ "history timeline",
1458
+ "editable transaction"
1459
+ ],
1460
+ upstreamCoverage: [
1461
+ "ProseMirror history",
1462
+ "CodeMirror history",
1463
+ "Redux undo"
1464
+ ],
1465
+ dependencies: [],
1466
+ maturity: "stable",
1467
+ owner: catalogOwner
1468
+ },
1469
+ {
1470
+ canonicalName: "id",
1471
+ title: "Deterministic ID Provider",
1472
+ packageSubpath: "./id",
1473
+ entryFile: `${idFamilyRoot}id.ts`,
1474
+ sourceFiles: [
1475
+ `${idFamilyRoot}deterministic-id-provider.vue`,
1476
+ `${idFamilyRoot}id.ts`,
1477
+ `${idFamilyRoot}deterministic-id.ts`
1478
+ ],
1479
+ behaviorContract: `${idFamilyRoot}id.behavior.md`,
1480
+ tests: [`${idFamilyRoot}id.test.ts`],
1481
+ typeTests: [`${idFamilyRoot}id.types.test-d.ts`],
1482
+ rendererFixture: "families/foundations/id/deterministic-id-provider.vue",
1483
+ qualityGates: componentQualityGates,
1484
+ bundleBudget: {
1485
+ exportName: "IdProvider",
1486
+ retainedSignature: "deterministic-id-provider",
1487
+ maximumJavaScriptGzipBytes: 1050,
1488
+ maximumCssGzipBytes: 0
1489
+ },
1490
+ aliases: [
1491
+ "id provider",
1492
+ "deterministic ids",
1493
+ "hydration ids"
1494
+ ],
1495
+ upstreamCoverage: ["React Aria SSRProvider", "Vue useId"],
1496
+ dependencies: ["context"],
1497
+ maturity: "stable",
1498
+ owner: catalogOwner
1499
+ }
1500
+ ];
1501
+ //#endregion
1502
+ //#region src/catalog/family-catalog-foundations.ts
1503
+ const fieldFamilyRoot = "src/families/form/field/";
1504
+ const fieldWiringFamilyRoot = "src/families/form/field-wiring/";
1505
+ const errorSummaryFamilyRoot = "src/families/form/error-summary/";
1506
+ const formFamilyRoot = "src/families/form/form/";
1507
+ const foundationFamilyRoot = "src/families/foundations/";
1508
+ const collectionFamilyRoot = `${foundationFamilyRoot}collection/`;
1509
+ const commandFamilyRoot = `${foundationFamilyRoot}command/`;
1510
+ const compositeNavigationFamilyRoot = `${foundationFamilyRoot}composite-navigation/`;
1511
+ const contextFamilyRoot = `${foundationFamilyRoot}context/`;
1512
+ const controllableStateFamilyRoot = `${foundationFamilyRoot}controllable-state/`;
1513
+ const foundationFamilyCatalog = [
1514
+ {
1515
+ canonicalName: "collection",
1516
+ title: "Collection Registry",
1517
+ packageSubpath: "./collection",
1518
+ entryFile: `${collectionFamilyRoot}collection.ts`,
1519
+ sourceFiles: [
1520
+ `${collectionFamilyRoot}collection.ts`,
1521
+ `${collectionFamilyRoot}collection-registry.ts`,
1522
+ `${collectionFamilyRoot}collection-keys.ts`,
1523
+ `${collectionFamilyRoot}collection-observer.ts`,
1524
+ `${collectionFamilyRoot}collection-order.ts`,
1525
+ `${collectionFamilyRoot}collection-text.ts`,
1526
+ `${collectionFamilyRoot}collection-types.ts`
1527
+ ],
1528
+ behaviorContract: `${collectionFamilyRoot}collection.behavior.md`,
1529
+ tests: [`${collectionFamilyRoot}collection.test.ts`, `${collectionFamilyRoot}collection-dom.test.ts`],
1530
+ typeTests: [`${collectionFamilyRoot}collection.types.test-d.ts`],
1531
+ qualityGates: stableQualityGates,
1532
+ bundleBudget: {
1533
+ exportName: "createCollectionRegistry",
1534
+ retainedSignature: "VIZE_UI_COLLECTION_DISPOSED",
1535
+ maximumJavaScriptGzipBytes: 3150,
1536
+ maximumCssGzipBytes: 0
1537
+ },
1538
+ aliases: [
1539
+ "collection registry",
1540
+ "item registry",
1541
+ "logical focus registry"
1542
+ ],
1543
+ upstreamCoverage: [
1544
+ "React Aria Collection",
1545
+ "Ariakit Composite Store",
1546
+ "Zag collection"
1547
+ ],
1548
+ dependencies: [],
1549
+ maturity: "stable",
1550
+ owner: catalogOwner
1551
+ },
1552
+ {
1553
+ canonicalName: "command",
1554
+ title: "Command Router",
1555
+ packageSubpath: "./command",
1556
+ entryFile: `${commandFamilyRoot}command.ts`,
1557
+ sourceFiles: [`${commandFamilyRoot}command.ts`, `${commandFamilyRoot}command-types.ts`],
1558
+ behaviorContract: `${commandFamilyRoot}command.behavior.md`,
1559
+ tests: [`${commandFamilyRoot}command.test.ts`, `${commandFamilyRoot}command-ssr.test.ts`],
1560
+ typeTests: [`${commandFamilyRoot}command.types.test-d.ts`],
1561
+ rendererFixture: "CommandConsumer.vue",
1562
+ qualityGates: interactionQualityGates,
1563
+ bundleBudget: {
1564
+ exportName: "createCommandRouter",
1565
+ retainedSignature: "VIZE_UI_COMMAND_DISPOSED",
1566
+ maximumJavaScriptGzipBytes: 1400,
1567
+ maximumCssGzipBytes: 0
1568
+ },
1569
+ aliases: [
1570
+ "command registry",
1571
+ "command routing",
1572
+ "action dispatcher"
1573
+ ],
1574
+ upstreamCoverage: [
1575
+ "VS Code command registry",
1576
+ "Ariakit Combobox commands",
1577
+ "kbar actions"
1578
+ ],
1579
+ dependencies: [],
1580
+ maturity: "stable",
1581
+ owner: catalogOwner
1582
+ },
1583
+ {
1584
+ canonicalName: "composite-navigation",
1585
+ title: "Composite Navigation",
1586
+ packageSubpath: "./composite-navigation",
1587
+ entryFile: `${compositeNavigationFamilyRoot}composite-navigation.ts`,
1588
+ sourceFiles: [
1589
+ `${compositeNavigationFamilyRoot}composite-navigation.ts`,
1590
+ `${compositeNavigationFamilyRoot}composite-navigation-dom.ts`,
1591
+ `${compositeNavigationFamilyRoot}composite-navigation-internal.ts`,
1592
+ `${compositeNavigationFamilyRoot}composite-navigation-types.ts`
1593
+ ],
1594
+ behaviorContract: `${compositeNavigationFamilyRoot}composite-navigation.behavior.md`,
1595
+ tests: [
1596
+ `${compositeNavigationFamilyRoot}composite-navigation.test.ts`,
1597
+ `${compositeNavigationFamilyRoot}composite-navigation-active-descendant.test.ts`,
1598
+ `${compositeNavigationFamilyRoot}composite-navigation-lifecycle.test.ts`,
1599
+ `${compositeNavigationFamilyRoot}composite-navigation-ssr.test.ts`
1600
+ ],
1601
+ typeTests: [`${compositeNavigationFamilyRoot}composite-navigation.types.test-d.ts`],
1602
+ rendererFixture: "CompositeNavigationConsumer.vue",
1603
+ qualityGates: interactionQualityGates,
1604
+ bundleBudget: {
1605
+ exportName: "createCompositeNavigation",
1606
+ retainedSignature: "VIZE_UI_COMPOSITE_NAVIGATION_DISPOSED",
1607
+ allowedRetainedFamilies: ["typeahead"],
1608
+ maximumJavaScriptGzipBytes: 3900,
1609
+ maximumCssGzipBytes: 0
1610
+ },
1611
+ aliases: [
1612
+ "roving focus",
1613
+ "active descendant",
1614
+ "composite widget navigation"
1615
+ ],
1616
+ upstreamCoverage: [
1617
+ "WAI-ARIA composite widgets",
1618
+ "Reka UI Roving Focus",
1619
+ "Ariakit Composite"
1620
+ ],
1621
+ dependencies: ["collection", "typeahead"],
1622
+ maturity: "stable",
1623
+ owner: catalogOwner
1624
+ },
1625
+ {
1626
+ canonicalName: "context",
1627
+ title: "Typed Component Context",
1628
+ packageSubpath: "./context",
1629
+ entryFile: `${contextFamilyRoot}context.ts`,
1630
+ sourceFiles: [`${contextFamilyRoot}context.ts`],
1631
+ behaviorContract: `${contextFamilyRoot}context.behavior.md`,
1632
+ tests: [`${contextFamilyRoot}context.test.ts`],
1633
+ typeTests: [`${contextFamilyRoot}context.types.test-d.ts`],
1634
+ qualityGates: stableQualityGates,
1635
+ bundleBudget: {
1636
+ exportName: "createContext",
1637
+ retainedSignature: "VIZE_UI_CONTEXT_MISSING",
1638
+ maximumJavaScriptGzipBytes: 450,
1639
+ maximumCssGzipBytes: 0
1640
+ },
1641
+ aliases: ["provide inject context", "compound component context"],
1642
+ upstreamCoverage: ["Reka UI createContext", "Radix context scope"],
1643
+ dependencies: [],
1644
+ maturity: "stable",
1645
+ owner: catalogOwner
1646
+ },
1647
+ {
1648
+ canonicalName: "controllable-state",
1649
+ title: "Controlled and Uncontrolled State",
1650
+ packageSubpath: "./controllable-state",
1651
+ entryFile: `${controllableStateFamilyRoot}controllable-state.ts`,
1652
+ sourceFiles: [`${controllableStateFamilyRoot}controllable-state.ts`],
1653
+ behaviorContract: `${controllableStateFamilyRoot}controllable-state.behavior.md`,
1654
+ tests: [`${controllableStateFamilyRoot}controllable-state.test.ts`],
1655
+ typeTests: [`${controllableStateFamilyRoot}controllable-state.types.test-d.ts`],
1656
+ qualityGates: stableQualityGates,
1657
+ bundleBudget: {
1658
+ exportName: "useControllableState",
1659
+ retainedSignature: "defaultValue[\\s\\S]*Object\\.is[\\s\\S]*defaultValue",
1660
+ maximumJavaScriptGzipBytes: 550,
1661
+ maximumCssGzipBytes: 0
1662
+ },
1663
+ aliases: [
1664
+ "controllable state",
1665
+ "controlled state",
1666
+ "uncontrolled state"
1667
+ ],
1668
+ upstreamCoverage: ["Radix useControllableState", "React Aria controlled state"],
1669
+ dependencies: [],
1670
+ maturity: "stable",
1671
+ owner: catalogOwner
1672
+ },
1673
+ {
1674
+ canonicalName: "error-summary",
1675
+ title: "Error Summary",
1676
+ packageSubpath: "./error-summary",
1677
+ entryFile: `${errorSummaryFamilyRoot}error-summary.ts`,
1678
+ sourceFiles: [
1679
+ `${errorSummaryFamilyRoot}error-summary.vue`,
1680
+ `${errorSummaryFamilyRoot}error-summary.ts`,
1681
+ `${errorSummaryFamilyRoot}error-summary-runtime.ts`,
1682
+ `${errorSummaryFamilyRoot}error-summary-types.ts`
1683
+ ],
1684
+ behaviorContract: `${errorSummaryFamilyRoot}error-summary.behavior.md`,
1685
+ tests: [`${errorSummaryFamilyRoot}error-summary.test.ts`, `${errorSummaryFamilyRoot}error-summary-ssr.test.ts`],
1686
+ typeTests: [`${errorSummaryFamilyRoot}error-summary.types.test-d.ts`],
1687
+ rendererFixture: "families/form/error-summary/error-summary.vue",
1688
+ qualityGates: componentQualityGates,
1689
+ bundleBudget: {
1690
+ exportName: "ErrorSummary",
1691
+ retainedSignature: "VIZE_UI_ERROR_SUMMARY_DISPOSED",
1692
+ maximumJavaScriptGzipBytes: 2600,
1693
+ maximumCssGzipBytes: 0
1694
+ },
1695
+ aliases: [
1696
+ "form error summary",
1697
+ "validation summary",
1698
+ "invalid field list"
1699
+ ],
1700
+ upstreamCoverage: ["WCAG 2.2 error identification", "focusable validation summaries"],
1701
+ dependencies: ["id"],
1702
+ maturity: "stable",
1703
+ owner: catalogOwner
1704
+ },
1705
+ {
1706
+ canonicalName: "field",
1707
+ title: "Field",
1708
+ packageSubpath: "./field",
1709
+ entryFile: `${fieldFamilyRoot}field.ts`,
1710
+ sourceFiles: [
1711
+ `${fieldFamilyRoot}field.vue`,
1712
+ `${fieldFamilyRoot}field-description.vue`,
1713
+ `${fieldFamilyRoot}field-error-message.vue`,
1714
+ `${fieldFamilyRoot}field-label.vue`,
1715
+ `${fieldFamilyRoot}field.ts`,
1716
+ `${fieldFamilyRoot}field-context.ts`,
1717
+ `${fieldFamilyRoot}field-types.ts`
1718
+ ],
1719
+ behaviorContract: `${fieldFamilyRoot}field.behavior.md`,
1720
+ tests: [`${fieldFamilyRoot}field.test.ts`, `${fieldFamilyRoot}field-ssr.test.ts`],
1721
+ typeTests: [`${fieldFamilyRoot}field.types.test-d.ts`],
1722
+ rendererFixture: "FieldConsumer.vue",
1723
+ qualityGates: componentQualityGates,
1724
+ bundleBudget: {
1725
+ exportName: "Field",
1726
+ retainedSignature: "data-vize-ui[\\s\\S]{0,16}field[\\s\\S]{0,16}part[\\s\\S]{0,16}root",
1727
+ allowedRetainedFamilies: ["context", "field-wiring"],
1728
+ maximumJavaScriptGzipBytes: 2400,
1729
+ maximumCssGzipBytes: 0
1730
+ },
1731
+ aliases: [
1732
+ "form field",
1733
+ "field label",
1734
+ "field description",
1735
+ "field error message"
1736
+ ],
1737
+ upstreamCoverage: [
1738
+ "React Aria Field",
1739
+ "Radix Form Field",
1740
+ "Reka UI Form"
1741
+ ],
1742
+ dependencies: [
1743
+ "context",
1744
+ "field-wiring",
1745
+ "form"
1746
+ ],
1747
+ maturity: "stable",
1748
+ owner: catalogOwner
1749
+ },
1750
+ {
1751
+ canonicalName: "field-wiring",
1752
+ title: "Field Wiring",
1753
+ packageSubpath: "./field-wiring",
1754
+ entryFile: `${fieldWiringFamilyRoot}field-wiring.ts`,
1755
+ sourceFiles: [
1756
+ `${fieldWiringFamilyRoot}field-wiring.ts`,
1757
+ `${fieldWiringFamilyRoot}field-wiring-runtime.ts`,
1758
+ `${fieldWiringFamilyRoot}field-wiring-types.ts`
1759
+ ],
1760
+ behaviorContract: `${fieldWiringFamilyRoot}field-wiring.behavior.md`,
1761
+ tests: [`${fieldWiringFamilyRoot}field-wiring.test.ts`, `${fieldWiringFamilyRoot}field-wiring-ssr.test.ts`],
1762
+ typeTests: [`${fieldWiringFamilyRoot}field-wiring.types.test-d.ts`],
1763
+ rendererFixture: "FieldWiringConsumer.vue",
1764
+ qualityGates: interactionQualityGates,
1765
+ bundleBudget: {
1766
+ exportName: "useFieldWiring",
1767
+ retainedSignature: "VIZE_UI_FIELD_WIRING_SETUP",
1768
+ maximumJavaScriptGzipBytes: 1300,
1769
+ maximumCssGzipBytes: 0
1770
+ },
1771
+ aliases: [
1772
+ "accessible field",
1773
+ "label wiring",
1774
+ "described by",
1775
+ "error message wiring"
1776
+ ],
1777
+ upstreamCoverage: ["React Aria useField", "WAI-ARIA description relations"],
1778
+ dependencies: ["id"],
1779
+ maturity: "stable",
1780
+ owner: catalogOwner
1781
+ },
1782
+ {
1783
+ canonicalName: "form",
1784
+ title: "Standard Schema Forms",
1785
+ packageSubpath: "./form",
1786
+ entryFile: `${formFamilyRoot}form.ts`,
1787
+ sourceFiles: [
1788
+ `${formFamilyRoot}form.ts`,
1789
+ `${formFamilyRoot}form-runtime.ts`,
1790
+ `${formFamilyRoot}form-types.ts`
1791
+ ],
1792
+ behaviorContract: `${formFamilyRoot}form.behavior.md`,
1793
+ tests: [`${formFamilyRoot}form.test.ts`],
1794
+ typeTests: [`${formFamilyRoot}form.types.test-d.ts`],
1795
+ qualityGates: stableQualityGates,
1796
+ bundleBudget: {
1797
+ exportName: "validateStandardSchema",
1798
+ retainedSignature: "VIZE_UI_FORM_SCHEMA_RESULT",
1799
+ maximumJavaScriptGzipBytes: 2300,
1800
+ maximumCssGzipBytes: 0
1801
+ },
1802
+ aliases: [
1803
+ "forms",
1804
+ "standard schema forms",
1805
+ "validation forms"
1806
+ ],
1807
+ upstreamCoverage: [
1808
+ "Standard Schema V1",
1809
+ "TanStack Form",
1810
+ "Formwerk"
1811
+ ],
1812
+ dependencies: ["error-summary", "field-wiring"],
1813
+ maturity: "stable",
1814
+ owner: catalogOwner
1815
+ },
1816
+ {
1817
+ canonicalName: "theme",
1818
+ title: "Design Tokens",
1819
+ packageSubpath: "./theme",
1820
+ entryFile: "src/families/foundations/theme/theme.ts",
1821
+ sourceFiles: [
1822
+ "src/families/foundations/theme/theme.ts",
1823
+ "src/families/foundations/theme/theme.css",
1824
+ "src/families/foundations/theme/theme-preset-headless.css",
1825
+ "src/families/foundations/theme/theme-preset-atelier.css",
1826
+ "src/families/foundations/theme/theme-preset-midnight.css",
1827
+ "src/families/foundations/theme/theme-preset-paper.css",
1828
+ "src/families/foundations/theme/theme-preset-play.css",
1829
+ "src/families/foundations/theme/theme-preset-signal.css",
1830
+ "src/families/foundations/theme/theme-preset-high-contrast.css",
1831
+ "src/families/foundations/theme/theme-constants.ts",
1832
+ "src/families/foundations/theme/theme-scope.ts",
1833
+ "src/families/foundations/theme/theme-tokens.ts",
1834
+ "src/families/foundations/theme/theme-types.ts"
1835
+ ],
1836
+ behaviorContract: "src/families/foundations/theme/theme.behavior.md",
1837
+ tests: [
1838
+ "src/families/foundations/theme/theme.test.ts",
1839
+ "src/families/foundations/theme/theme-scope.test.ts",
1840
+ "src/families/foundations/theme/theme-stylesheet.test.ts",
1841
+ "src/families/foundations/theme/theme-ssr.test.ts"
1842
+ ],
1843
+ typeTests: ["src/families/foundations/theme/theme.types.test-d.ts", "src/families/foundations/theme/theme-scope.types.test-d.ts"],
1844
+ rendererFixture: "ThemeConsumer.vue",
1845
+ qualityGates: interactionQualityGates,
1846
+ bundleBudget: {
1847
+ exportName: "setThemeTokens",
1848
+ retainedSignature: "VIZE_UI_THEME_",
1849
+ maximumJavaScriptGzipBytes: 1500,
1850
+ maximumCssGzipBytes: 7600
1851
+ },
1852
+ aliases: [
1853
+ "design tokens",
1854
+ "semantic tokens",
1855
+ "feedback tones",
1856
+ "cascade layers",
1857
+ "presets",
1858
+ "headless",
1859
+ "atelier",
1860
+ "midnight",
1861
+ "paper",
1862
+ "play",
1863
+ "signal",
1864
+ "high-contrast"
1865
+ ],
1866
+ upstreamCoverage: [
1867
+ "CSS cascade layers",
1868
+ "CSS custom properties",
1869
+ "semantic feedback tones",
1870
+ "light-dark() color scheme",
1871
+ "forced-colors adaptations"
1872
+ ],
1873
+ dependencies: [],
1874
+ maturity: "stable",
1875
+ owner: catalogOwner
1876
+ }
1877
+ ];
1878
+ //#endregion
1879
+ //#region src/catalog/family-catalog-i18n.ts
1880
+ const localeFamilyRoot = "src/families/i18n/locale/";
1881
+ const i18nFamilyCatalog = [{
1882
+ canonicalName: "locale",
1883
+ title: "Locale and Direction",
1884
+ packageSubpath: "./locale",
1885
+ entryFile: `${localeFamilyRoot}locale.ts`,
1886
+ sourceFiles: [
1887
+ `${localeFamilyRoot}locale-provider.vue`,
1888
+ `${localeFamilyRoot}locale.ts`,
1889
+ `${localeFamilyRoot}locale-runtime.ts`,
1890
+ `${localeFamilyRoot}locale-text.ts`
1891
+ ],
1892
+ behaviorContract: `${localeFamilyRoot}locale.behavior.md`,
1893
+ tests: [`${localeFamilyRoot}locale.test.ts`, `${localeFamilyRoot}locale-ssr.test.ts`],
1894
+ typeTests: [`${localeFamilyRoot}locale.types.test-d.ts`],
1895
+ rendererFixture: "families/i18n/locale/locale-provider.vue",
1896
+ qualityGates: componentQualityGates,
1897
+ bundleBudget: {
1898
+ exportName: "LocaleProvider",
1899
+ retainedSignature: "data-vize-ui.+locale",
1900
+ allowedRetainedFamilies: ["context"],
1901
+ maximumJavaScriptGzipBytes: 1400,
1902
+ maximumCssGzipBytes: 0
1903
+ },
1904
+ aliases: [
1905
+ "direction",
1906
+ "rtl",
1907
+ "writing mode",
1908
+ "i18n provider"
1909
+ ],
1910
+ upstreamCoverage: [
1911
+ "HTML dir",
1912
+ "HTML lang",
1913
+ "Intl.Locale"
1914
+ ],
1915
+ dependencies: ["context"],
1916
+ maturity: "stable",
1917
+ owner: catalogOwner
1918
+ }];
1919
+ //#endregion
1920
+ //#region src/families/interaction/catalog/gestures.ts
1921
+ const hoverFamilyRoot = "src/families/interaction/hover/";
1922
+ const longPressFamilyRoot = "src/families/interaction/long-press/";
1923
+ const moveFamilyRoot = "src/families/interaction/move/";
1924
+ const pointerGraceFamilyRoot = "src/families/interaction/pointer-grace/";
1925
+ const pressFamilyRoot = "src/families/interaction/press/";
1926
+ const interactionGestureFamilyCatalog = [
1927
+ {
1928
+ canonicalName: "hover",
1929
+ title: "Hover",
1930
+ packageSubpath: "./hover",
1931
+ entryFile: `${hoverFamilyRoot}hover.ts`,
1932
+ sourceFiles: [`${hoverFamilyRoot}hover.ts`, `${hoverFamilyRoot}hover-types.ts`],
1933
+ behaviorContract: `${hoverFamilyRoot}hover.behavior.md`,
1934
+ tests: [`${hoverFamilyRoot}hover.test.ts`, `${hoverFamilyRoot}hover-ssr.test.ts`],
1935
+ typeTests: [`${hoverFamilyRoot}hover.types.test-d.ts`],
1936
+ rendererFixture: "HoverConsumer.vue",
1937
+ qualityGates: interactionQualityGates,
1938
+ bundleBudget: {
1939
+ exportName: "createHover",
1940
+ retainedSignature: "VIZE_UI_HOVER_DISPOSED",
1941
+ maximumJavaScriptGzipBytes: 1450,
1942
+ maximumCssGzipBytes: 0
1943
+ },
1944
+ aliases: [
1945
+ "hover",
1946
+ "pointer",
1947
+ "pen"
1948
+ ],
1949
+ upstreamCoverage: ["React Aria useHover", "Pointer Events hover"],
1950
+ dependencies: [],
1951
+ maturity: "stable",
1952
+ owner: catalogOwner
1953
+ },
1954
+ {
1955
+ canonicalName: "long-press",
1956
+ title: "Long Press",
1957
+ packageSubpath: "./long-press",
1958
+ entryFile: `${longPressFamilyRoot}long-press.ts`,
1959
+ sourceFiles: [
1960
+ `${longPressFamilyRoot}long-press.ts`,
1961
+ `${longPressFamilyRoot}long-press-internal.ts`,
1962
+ `${longPressFamilyRoot}long-press-types.ts`
1963
+ ],
1964
+ behaviorContract: `${longPressFamilyRoot}long-press.behavior.md`,
1965
+ tests: [
1966
+ `${longPressFamilyRoot}long-press.test.ts`,
1967
+ `${longPressFamilyRoot}long-press-hardening.test.ts`,
1968
+ `${longPressFamilyRoot}long-press-legacy.test.ts`,
1969
+ `${longPressFamilyRoot}long-press-ssr.test.ts`
1970
+ ],
1971
+ typeTests: [`${longPressFamilyRoot}long-press.types.test-d.ts`],
1972
+ rendererFixture: "LongPressConsumer.vue",
1973
+ qualityGates: interactionQualityGates,
1974
+ bundleBudget: {
1975
+ exportName: "createLongPress",
1976
+ retainedSignature: "VIZE_UI_LONG_PRESS_DISPOSED",
1977
+ allowedRetainedFamilies: ["press"],
1978
+ maximumJavaScriptGzipBytes: 5150,
1979
+ maximumCssGzipBytes: 0
1980
+ },
1981
+ aliases: ["long press", "press and hold"],
1982
+ upstreamCoverage: ["React Aria useLongPress"],
1983
+ dependencies: ["press"],
1984
+ maturity: "stable",
1985
+ owner: catalogOwner
1986
+ },
1987
+ {
1988
+ canonicalName: "move",
1989
+ title: "Move",
1990
+ packageSubpath: "./move",
1991
+ entryFile: `${moveFamilyRoot}move.ts`,
1992
+ sourceFiles: [
1993
+ `${moveFamilyRoot}move.ts`,
1994
+ `${moveFamilyRoot}move-internal.ts`,
1995
+ `${moveFamilyRoot}move-types.ts`
1996
+ ],
1997
+ behaviorContract: `${moveFamilyRoot}move.behavior.md`,
1998
+ tests: [
1999
+ `${moveFamilyRoot}move.test.ts`,
2000
+ `${moveFamilyRoot}move-internal.test.ts`,
2001
+ `${moveFamilyRoot}move-ssr.test.ts`
2002
+ ],
2003
+ typeTests: [`${moveFamilyRoot}move.types.test-d.ts`],
2004
+ rendererFixture: "MoveConsumer.vue",
2005
+ qualityGates: interactionQualityGates,
2006
+ bundleBudget: {
2007
+ exportName: "createMove",
2008
+ retainedSignature: "VIZE_UI_MOVE_DISPOSED",
2009
+ maximumJavaScriptGzipBytes: 2750,
2010
+ maximumCssGzipBytes: 0
2011
+ },
2012
+ aliases: [
2013
+ "move",
2014
+ "drag",
2015
+ "keyboard"
2016
+ ],
2017
+ upstreamCoverage: ["React Aria useMove", "Pointer Events capture"],
2018
+ dependencies: [],
2019
+ maturity: "stable",
2020
+ owner: catalogOwner
2021
+ },
2022
+ {
2023
+ canonicalName: "pointer-grace",
2024
+ title: "Pointer Grace",
2025
+ packageSubpath: "./pointer-grace",
2026
+ entryFile: `${pointerGraceFamilyRoot}pointer-grace.ts`,
2027
+ sourceFiles: [
2028
+ `${pointerGraceFamilyRoot}pointer-grace.ts`,
2029
+ `${pointerGraceFamilyRoot}pointer-grace-runtime.ts`,
2030
+ `${pointerGraceFamilyRoot}pointer-grace-types.ts`
2031
+ ],
2032
+ behaviorContract: `${pointerGraceFamilyRoot}pointer-grace.behavior.md`,
2033
+ tests: [`${pointerGraceFamilyRoot}pointer-grace.test.ts`, `${pointerGraceFamilyRoot}pointer-grace-ssr.test.ts`],
2034
+ typeTests: [`${pointerGraceFamilyRoot}pointer-grace.types.test-d.ts`],
2035
+ rendererFixture: "PointerGraceConsumer.vue",
2036
+ qualityGates: interactionQualityGates,
2037
+ bundleBudget: {
2038
+ exportName: "createPointerGrace",
2039
+ retainedSignature: "VIZE_UI_POINTER_GRACE_DISPOSED",
2040
+ maximumJavaScriptGzipBytes: 1050,
2041
+ maximumCssGzipBytes: 0
2042
+ },
2043
+ aliases: [
2044
+ "safe triangle",
2045
+ "hover bridge",
2046
+ "pointer grace"
2047
+ ],
2048
+ upstreamCoverage: ["safe triangle", "hover intent polygon"],
2049
+ dependencies: [],
2050
+ maturity: "stable",
2051
+ owner: catalogOwner
2052
+ },
2053
+ {
2054
+ canonicalName: "press",
2055
+ title: "Press",
2056
+ packageSubpath: "./press",
2057
+ entryFile: `${pressFamilyRoot}press.ts`,
2058
+ sourceFiles: [
2059
+ `${pressFamilyRoot}press.ts`,
2060
+ `${pressFamilyRoot}press-activation-memory.ts`,
2061
+ `${pressFamilyRoot}press-event.ts`,
2062
+ `${pressFamilyRoot}press-handlers.ts`,
2063
+ `${pressFamilyRoot}press-lifecycle.ts`,
2064
+ `${pressFamilyRoot}press-types.ts`
2065
+ ],
2066
+ behaviorContract: `${pressFamilyRoot}press.behavior.md`,
2067
+ tests: [
2068
+ `${pressFamilyRoot}press.test.ts`,
2069
+ `${pressFamilyRoot}press-lifecycle.test.ts`,
2070
+ `${pressFamilyRoot}press-legacy.test.ts`,
2071
+ `${pressFamilyRoot}press-ssr.test.ts`
2072
+ ],
2073
+ typeTests: [`${pressFamilyRoot}press.types.test-d.ts`],
2074
+ rendererFixture: "PressConsumer.vue",
2075
+ qualityGates: interactionQualityGates,
2076
+ bundleBudget: {
2077
+ exportName: "createPress",
2078
+ retainedSignature: "VIZE_UI_PRESS_DISPOSED",
2079
+ maximumJavaScriptGzipBytes: 3550,
2080
+ maximumCssGzipBytes: 0
2081
+ },
2082
+ aliases: [
2083
+ "press",
2084
+ "activation",
2085
+ "pointer"
2086
+ ],
2087
+ upstreamCoverage: ["React Aria usePress", "Pointer Events activation"],
2088
+ dependencies: [],
2089
+ maturity: "stable",
2090
+ owner: catalogOwner
2091
+ }
2092
+ ];
2093
+ //#endregion
2094
+ //#region src/families/interaction/catalog/support.ts
2095
+ const measureFamilyRoot = "src/families/interaction/measure/";
2096
+ const primitiveFamilyRoot = "src/families/foundations/primitive/";
2097
+ const shortcutFamilyRoot = "src/families/interaction/shortcut/";
2098
+ const sortableFamilyRoot = "src/families/interaction/sortable/";
2099
+ const spatialNavigationFamilyRoot = "src/families/interaction/spatial-navigation/";
2100
+ const typeaheadFamilyRoot = "src/families/interaction/typeahead/";
2101
+ const virtualizerFamilyRoot = "src/families/interaction/virtualizer/";
2102
+ const interactionSupportFamilyCatalog = [
2103
+ {
2104
+ canonicalName: "measure",
2105
+ title: "Measure",
2106
+ packageSubpath: "./measure",
2107
+ entryFile: `${measureFamilyRoot}measure.ts`,
2108
+ sourceFiles: [
2109
+ `${measureFamilyRoot}measure.ts`,
2110
+ `${measureFamilyRoot}measure-runtime.ts`,
2111
+ `${measureFamilyRoot}measure-types.ts`
2112
+ ],
2113
+ behaviorContract: `${measureFamilyRoot}measure.behavior.md`,
2114
+ tests: [`${measureFamilyRoot}measure.test.ts`, `${measureFamilyRoot}measure-ssr.test.ts`],
2115
+ typeTests: [`${measureFamilyRoot}measure.types.test-d.ts`],
2116
+ rendererFixture: "MeasureConsumer.vue",
2117
+ qualityGates: interactionQualityGates,
2118
+ bundleBudget: {
2119
+ exportName: "createSizeObserver",
2120
+ retainedSignature: "VIZE_UI_MEASURE_DISPOSED",
2121
+ maximumJavaScriptGzipBytes: 1050,
2122
+ maximumCssGzipBytes: 0
2123
+ },
2124
+ aliases: [
2125
+ "resize observer",
2126
+ "intersection observer",
2127
+ "element size",
2128
+ "visibility"
2129
+ ],
2130
+ upstreamCoverage: ["ResizeObserver", "IntersectionObserver"],
2131
+ dependencies: [],
2132
+ maturity: "stable",
2133
+ owner: catalogOwner
2134
+ },
2135
+ {
2136
+ canonicalName: "primitive",
2137
+ title: "Primitive",
2138
+ packageSubpath: "./primitive",
2139
+ entryFile: `${primitiveFamilyRoot}primitive.ts`,
2140
+ sourceFiles: [`${primitiveFamilyRoot}primitive-element.vue`, `${primitiveFamilyRoot}primitive.ts`],
2141
+ behaviorContract: `${primitiveFamilyRoot}primitive.behavior.md`,
2142
+ tests: [`${primitiveFamilyRoot}primitive.test.ts`],
2143
+ rendererFixture: "families/foundations/primitive/primitive-element.vue",
2144
+ qualityGates: componentQualityGates,
2145
+ bundleBudget: {
2146
+ exportName: "Primitive",
2147
+ retainedSignature: "data-vize-ui.+primitive",
2148
+ maximumJavaScriptGzipBytes: 500,
2149
+ maximumCssGzipBytes: 0
2150
+ },
2151
+ aliases: [
2152
+ "as child",
2153
+ "polymorphic primitive",
2154
+ "slot forwarding primitive"
2155
+ ],
2156
+ upstreamCoverage: [
2157
+ "Reka UI Primitive",
2158
+ "Radix Slot",
2159
+ "shadcn/ui Slot"
2160
+ ],
2161
+ dependencies: [],
2162
+ maturity: "stable",
2163
+ owner: catalogOwner
2164
+ },
2165
+ {
2166
+ canonicalName: "shortcut",
2167
+ title: "Shortcut",
2168
+ packageSubpath: "./shortcut",
2169
+ entryFile: `${shortcutFamilyRoot}shortcut.ts`,
2170
+ sourceFiles: [
2171
+ `${shortcutFamilyRoot}shortcut.ts`,
2172
+ `${shortcutFamilyRoot}shortcut-format.ts`,
2173
+ `${shortcutFamilyRoot}shortcut-parse.ts`,
2174
+ `${shortcutFamilyRoot}shortcut-registry.ts`,
2175
+ `${shortcutFamilyRoot}shortcut-types.ts`
2176
+ ],
2177
+ behaviorContract: `${shortcutFamilyRoot}shortcut.behavior.md`,
2178
+ tests: [
2179
+ `${shortcutFamilyRoot}shortcut.test.ts`,
2180
+ `${shortcutFamilyRoot}shortcut-format.test.ts`,
2181
+ `${shortcutFamilyRoot}shortcut-lifecycle.test.ts`,
2182
+ `${shortcutFamilyRoot}shortcut-ssr.test.ts`
2183
+ ],
2184
+ typeTests: [`${shortcutFamilyRoot}shortcut.types.test-d.ts`],
2185
+ rendererFixture: "ShortcutConsumer.vue",
2186
+ qualityGates: interactionQualityGates,
2187
+ bundleBudget: {
2188
+ exportName: "createShortcutRegistry",
2189
+ retainedSignature: "VIZE_UI_SHORTCUT_DISPOSED",
2190
+ maximumJavaScriptGzipBytes: 4100,
2191
+ maximumCssGzipBytes: 0
2192
+ },
2193
+ aliases: [
2194
+ "keyboard shortcuts",
2195
+ "hotkeys",
2196
+ "keybindings",
2197
+ "kbd formatting"
2198
+ ],
2199
+ upstreamCoverage: [
2200
+ "VS Code keybindings",
2201
+ "React Aria useKeyboard",
2202
+ "GitHub Hotkey"
2203
+ ],
2204
+ dependencies: [],
2205
+ maturity: "stable",
2206
+ owner: catalogOwner
2207
+ },
2208
+ {
2209
+ canonicalName: "sortable",
2210
+ title: "Sortable",
2211
+ packageSubpath: "./sortable",
2212
+ entryFile: `${sortableFamilyRoot}sortable.ts`,
2213
+ sourceFiles: [
2214
+ `${sortableFamilyRoot}sortable.ts`,
2215
+ `${sortableFamilyRoot}sortable-internal.ts`,
2216
+ `${sortableFamilyRoot}sortable-keyboard.ts`,
2217
+ `${sortableFamilyRoot}sortable-types.ts`
2218
+ ],
2219
+ behaviorContract: `${sortableFamilyRoot}sortable.behavior.md`,
2220
+ tests: [`${sortableFamilyRoot}sortable.test.ts`, `${sortableFamilyRoot}sortable-ssr.test.ts`],
2221
+ typeTests: [`${sortableFamilyRoot}sortable.types.test-d.ts`],
2222
+ rendererFixture: "SortableConsumer.vue",
2223
+ qualityGates: interactionQualityGates,
2224
+ bundleBudget: {
2225
+ exportName: "createSortable",
2226
+ retainedSignature: "VIZE_UI_SORTABLE_DISPOSED",
2227
+ allowedRetainedFamilies: ["drag-and-drop"],
2228
+ maximumJavaScriptGzipBytes: 9e3,
2229
+ maximumCssGzipBytes: 0
2230
+ },
2231
+ aliases: [
2232
+ "sortable list",
2233
+ "reorder",
2234
+ "sortable grid",
2235
+ "sortable tree"
2236
+ ],
2237
+ upstreamCoverage: ["React Aria useDraggableCollection", "ARIA APG drag reordering"],
2238
+ dependencies: ["drag-and-drop"],
2239
+ maturity: "stable",
2240
+ owner: catalogOwner
2241
+ },
2242
+ {
2243
+ canonicalName: "spatial-navigation",
2244
+ title: "Spatial Navigation",
2245
+ packageSubpath: "./spatial-navigation",
2246
+ entryFile: `${spatialNavigationFamilyRoot}spatial-navigation.ts`,
2247
+ sourceFiles: [
2248
+ `${spatialNavigationFamilyRoot}spatial-navigation.ts`,
2249
+ `${spatialNavigationFamilyRoot}spatial-navigation-internal.ts`,
2250
+ `${spatialNavigationFamilyRoot}spatial-navigation-types.ts`
2251
+ ],
2252
+ behaviorContract: `${spatialNavigationFamilyRoot}spatial-navigation.behavior.md`,
2253
+ tests: [
2254
+ `${spatialNavigationFamilyRoot}spatial-navigation.test.ts`,
2255
+ `${spatialNavigationFamilyRoot}spatial-navigation-lifecycle.test.ts`,
2256
+ `${spatialNavigationFamilyRoot}spatial-navigation-ssr.test.ts`
2257
+ ],
2258
+ typeTests: [`${spatialNavigationFamilyRoot}spatial-navigation.types.test-d.ts`],
2259
+ rendererFixture: "SpatialNavigationConsumer.vue",
2260
+ qualityGates: interactionQualityGates,
2261
+ bundleBudget: {
2262
+ exportName: "createSpatialNavigation",
2263
+ retainedSignature: "VIZE_UI_SPATIAL_NAVIGATION_DISPOSED",
2264
+ maximumJavaScriptGzipBytes: 4100,
2265
+ maximumCssGzipBytes: 0
2266
+ },
2267
+ aliases: [
2268
+ "spatial navigation",
2269
+ "grid navigation",
2270
+ "geometry navigation"
2271
+ ],
2272
+ upstreamCoverage: ["CSS Spatial Navigation", "ARIA grid navigation"],
2273
+ dependencies: ["collection"],
2274
+ maturity: "stable",
2275
+ owner: catalogOwner
2276
+ },
2277
+ {
2278
+ canonicalName: "typeahead",
2279
+ title: "Typeahead",
2280
+ packageSubpath: "./typeahead",
2281
+ entryFile: `${typeaheadFamilyRoot}typeahead.ts`,
2282
+ sourceFiles: [
2283
+ `${typeaheadFamilyRoot}typeahead.ts`,
2284
+ `${typeaheadFamilyRoot}typeahead-internal.ts`,
2285
+ `${typeaheadFamilyRoot}typeahead-types.ts`
2286
+ ],
2287
+ behaviorContract: `${typeaheadFamilyRoot}typeahead.behavior.md`,
2288
+ tests: [`${typeaheadFamilyRoot}typeahead.test.ts`, `${typeaheadFamilyRoot}typeahead-ssr.test.ts`],
2289
+ typeTests: [`${typeaheadFamilyRoot}typeahead.types.test-d.ts`],
2290
+ rendererFixture: "TypeaheadConsumer.vue",
2291
+ qualityGates: interactionQualityGates,
2292
+ bundleBudget: {
2293
+ exportName: "createTypeahead",
2294
+ retainedSignature: "VIZE_UI_TYPEAHEAD_DISPOSED",
2295
+ maximumJavaScriptGzipBytes: 1375,
2296
+ maximumCssGzipBytes: 0
2297
+ },
2298
+ aliases: [
2299
+ "typeahead",
2300
+ "collection search",
2301
+ "keyboard search"
2302
+ ],
2303
+ upstreamCoverage: ["React Aria useTypeSelect", "Ariakit composite typeahead"],
2304
+ dependencies: ["collection"],
2305
+ maturity: "stable",
2306
+ owner: catalogOwner
2307
+ },
2308
+ {
2309
+ canonicalName: "virtualizer",
2310
+ title: "Virtualizer",
2311
+ packageSubpath: "./virtualizer",
2312
+ entryFile: `${virtualizerFamilyRoot}virtualizer.ts`,
2313
+ sourceFiles: [
2314
+ `${virtualizerFamilyRoot}virtualizer.ts`,
2315
+ `${virtualizerFamilyRoot}virtualizer-grid.ts`,
2316
+ `${virtualizerFamilyRoot}virtualizer-infinite.ts`,
2317
+ `${virtualizerFamilyRoot}virtualizer-measure-cache.ts`,
2318
+ `${virtualizerFamilyRoot}virtualizer-options.ts`,
2319
+ `${virtualizerFamilyRoot}virtualizer-runtime.ts`,
2320
+ `${virtualizerFamilyRoot}virtualizer-types.ts`,
2321
+ `${virtualizerFamilyRoot}virtualizer-viewport.ts`,
2322
+ `${virtualizerFamilyRoot}virtualizer-window.ts`
2323
+ ],
2324
+ behaviorContract: `${virtualizerFamilyRoot}virtualizer.behavior.md`,
2325
+ tests: [
2326
+ `${virtualizerFamilyRoot}virtualizer.test.ts`,
2327
+ `${virtualizerFamilyRoot}virtualizer-grid.test.ts`,
2328
+ `${virtualizerFamilyRoot}virtualizer-infinite.test.ts`,
2329
+ `${virtualizerFamilyRoot}virtualizer-measure-cache.test.ts`,
2330
+ `${virtualizerFamilyRoot}virtualizer-ssr.test.ts`
2331
+ ],
2332
+ typeTests: [`${virtualizerFamilyRoot}virtualizer.types.test-d.ts`],
2333
+ rendererFixture: "VirtualizerConsumer.vue",
2334
+ qualityGates: interactionQualityGates,
2335
+ bundleBudget: {
2336
+ exportName: "createVirtualizer",
2337
+ retainedSignature: "VIZE_UI_VIRTUALIZER_DISPOSED",
2338
+ allowedRetainedFamilies: ["measure"],
2339
+ maximumJavaScriptGzipBytes: 4800,
2340
+ maximumCssGzipBytes: 0
2341
+ },
2342
+ aliases: [
2343
+ "virtual list",
2344
+ "virtual scroll",
2345
+ "windowing",
2346
+ "infinite scroll"
2347
+ ],
2348
+ upstreamCoverage: [
2349
+ "windowed rendering",
2350
+ "scroll anchoring",
2351
+ "scroll restoration"
2352
+ ],
2353
+ dependencies: ["measure"],
2354
+ maturity: "stable",
2355
+ owner: catalogOwner
2356
+ }
2357
+ ];
2358
+ //#endregion
2359
+ //#region src/catalog/family-catalog-layout-avatar.ts
2360
+ const familyRoot$4 = "src/families/layout/avatar/";
2361
+ const avatarLayoutFamilyCatalog = [{
2362
+ canonicalName: "avatar",
2363
+ title: "Avatar",
2364
+ packageSubpath: "./avatar",
2365
+ entryFile: `${familyRoot$4}avatar.ts`,
2366
+ sourceFiles: [
2367
+ `${familyRoot$4}avatar.vue`,
2368
+ `${familyRoot$4}avatar.ts`,
2369
+ `${familyRoot$4}avatar-types.ts`
2370
+ ],
2371
+ behaviorContract: `${familyRoot$4}avatar.behavior.md`,
2372
+ tests: [`${familyRoot$4}avatar.test.ts`, `${familyRoot$4}avatar-ssr.test.ts`],
2373
+ typeTests: [`${familyRoot$4}avatar.types.test-d.ts`],
2374
+ rendererFixture: "AvatarConsumer.vue",
2375
+ qualityGates: componentQualityGates,
2376
+ bundleBudget: {
2377
+ exportName: "Avatar",
2378
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}avatar",
2379
+ maximumJavaScriptGzipBytes: 1450,
2380
+ maximumCssGzipBytes: 0
2381
+ },
2382
+ aliases: [
2383
+ "profile image",
2384
+ "user avatar",
2385
+ "presence avatar",
2386
+ "fallback avatar"
2387
+ ],
2388
+ upstreamCoverage: [
2389
+ "HTML img element",
2390
+ "native image loading",
2391
+ "native image decoding"
2392
+ ],
2393
+ dependencies: [],
2394
+ maturity: "stable",
2395
+ owner: catalogOwner
2396
+ }];
2397
+ //#endregion
2398
+ //#region src/catalog/family-catalog-layout-icon.ts
2399
+ const familyRoot$3 = "src/families/layout/icon/";
2400
+ const iconLayoutFamilyCatalog = [{
2401
+ canonicalName: "icon",
2402
+ title: "Icon",
2403
+ packageSubpath: "./icon",
2404
+ entryFile: `${familyRoot$3}icon.ts`,
2405
+ sourceFiles: [
2406
+ `${familyRoot$3}icon.vue`,
2407
+ `${familyRoot$3}icon.ts`,
2408
+ `${familyRoot$3}icon-types.ts`
2409
+ ],
2410
+ behaviorContract: `${familyRoot$3}icon.behavior.md`,
2411
+ tests: [`${familyRoot$3}icon.test.ts`, `${familyRoot$3}icon-ssr.test.ts`],
2412
+ typeTests: [`${familyRoot$3}icon.types.test-d.ts`],
2413
+ rendererFixture: "IconConsumer.vue",
2414
+ qualityGates: componentQualityGates,
2415
+ bundleBudget: {
2416
+ exportName: "Icon",
2417
+ retainedSignature: "data-vize-ui\":(?:`icon`|\"icon\"|'icon')",
2418
+ maximumJavaScriptGzipBytes: 1900,
2419
+ maximumCssGzipBytes: 0
2420
+ },
2421
+ aliases: [
2422
+ "svg icon",
2423
+ "glyph",
2424
+ "pictogram",
2425
+ "icon composer"
2426
+ ],
2427
+ upstreamCoverage: [
2428
+ "SVG title element",
2429
+ "SVG desc element",
2430
+ "React Aria SVG semantics"
2431
+ ],
2432
+ dependencies: ["id"],
2433
+ maturity: "stable",
2434
+ owner: catalogOwner
2435
+ }, {
2436
+ canonicalName: "icon-button",
2437
+ title: "IconButton",
2438
+ packageSubpath: "./icon-button",
2439
+ entryFile: `${familyRoot$3}icon-button.ts`,
2440
+ sourceFiles: [
2441
+ `${familyRoot$3}icon-button.vue`,
2442
+ `${familyRoot$3}icon-button.ts`,
2443
+ `${familyRoot$3}icon-types.ts`
2444
+ ],
2445
+ behaviorContract: `${familyRoot$3}icon-button.behavior.md`,
2446
+ tests: [`${familyRoot$3}icon-button.test.ts`, `${familyRoot$3}icon-button-ssr.test.ts`],
2447
+ typeTests: [`${familyRoot$3}icon.types.test-d.ts`],
2448
+ rendererFixture: "IconButtonConsumer.vue",
2449
+ qualityGates: componentQualityGates,
2450
+ bundleBudget: {
2451
+ exportName: "IconButton",
2452
+ retainedSignature: "data-vize-ui\":(?:`icon-button`|\"icon-button\"|'icon-button')",
2453
+ maximumJavaScriptGzipBytes: 2200,
2454
+ maximumCssGzipBytes: 0
2455
+ },
2456
+ aliases: [
2457
+ "icon button",
2458
+ "toolbar icon",
2459
+ "icon-only action",
2460
+ "glyph button"
2461
+ ],
2462
+ upstreamCoverage: [
2463
+ "HTML button",
2464
+ "WAI-ARIA Button Pattern",
2465
+ "React Aria Button"
2466
+ ],
2467
+ dependencies: [],
2468
+ maturity: "stable",
2469
+ owner: catalogOwner
2470
+ }];
2471
+ //#endregion
2472
+ //#region src/catalog/family-catalog-layout-list.ts
2473
+ const familyRoot$2 = "src/families/layout/list/";
2474
+ const listLayoutFamilyCatalog = [{
2475
+ canonicalName: "list",
2476
+ title: "List",
2477
+ packageSubpath: "./list",
2478
+ entryFile: `${familyRoot$2}list.ts`,
2479
+ sourceFiles: [
2480
+ `${familyRoot$2}list.vue`,
2481
+ `${familyRoot$2}list.ts`,
2482
+ `${familyRoot$2}list-types.ts`
2483
+ ],
2484
+ behaviorContract: `${familyRoot$2}list.behavior.md`,
2485
+ tests: [`${familyRoot$2}list.test.ts`, `${familyRoot$2}list-ssr.test.ts`],
2486
+ typeTests: [`${familyRoot$2}list.types.test-d.ts`],
2487
+ rendererFixture: "ListConsumer.vue",
2488
+ qualityGates: componentQualityGates,
2489
+ bundleBudget: {
2490
+ exportName: "List",
2491
+ retainedSignature: "data-vize-ui\":(?:`list`|\"list\"|'list')",
2492
+ maximumJavaScriptGzipBytes: 900,
2493
+ maximumCssGzipBytes: 0
2494
+ },
2495
+ aliases: [
2496
+ "ordered list",
2497
+ "unordered list",
2498
+ "list group",
2499
+ "content list"
2500
+ ],
2501
+ upstreamCoverage: [
2502
+ "HTML ul element",
2503
+ "HTML ol element",
2504
+ "Reka UI Primitive"
2505
+ ],
2506
+ dependencies: [],
2507
+ maturity: "stable",
2508
+ owner: catalogOwner
2509
+ }];
2510
+ //#endregion
2511
+ //#region src/catalog/family-catalog-layout-scroll-area.ts
2512
+ const familyRoot$1 = "src/families/layout/scroll-area/";
2513
+ const scrollAreaLayoutFamilyCatalog = [{
2514
+ canonicalName: "scroll-area",
2515
+ title: "Scroll Area",
2516
+ packageSubpath: "./scroll-area",
2517
+ entryFile: `${familyRoot$1}scroll-area.ts`,
2518
+ sourceFiles: [
2519
+ `${familyRoot$1}scroll-area.vue`,
2520
+ `${familyRoot$1}scroll-area.ts`,
2521
+ `${familyRoot$1}scroll-area.css`,
2522
+ `${familyRoot$1}scroll-area-runtime.ts`,
2523
+ `${familyRoot$1}scroll-area-types.ts`
2524
+ ],
2525
+ behaviorContract: `${familyRoot$1}scroll-area.behavior.md`,
2526
+ tests: [
2527
+ `${familyRoot$1}scroll-area.test.ts`,
2528
+ `${familyRoot$1}scroll-area-state.test.ts`,
2529
+ `${familyRoot$1}scroll-area-ssr.test.ts`
2530
+ ],
2531
+ typeTests: [`${familyRoot$1}scroll-area.types.test-d.ts`],
2532
+ rendererFixture: "ScrollAreaConsumer.vue",
2533
+ qualityGates: componentQualityGates,
2534
+ bundleBudget: {
2535
+ exportName: "ScrollArea",
2536
+ retainedSignature: "data-vize-ui\":(?:`scroll-area`|\"scroll-area\"|'scroll-area')",
2537
+ maximumJavaScriptGzipBytes: 2800,
2538
+ maximumCssGzipBytes: 7600
2539
+ },
2540
+ aliases: [
2541
+ "scroll area",
2542
+ "scroll viewport",
2543
+ "native scroll container",
2544
+ "overflow region"
2545
+ ],
2546
+ upstreamCoverage: [
2547
+ "CSS overflow",
2548
+ "CSS overscroll-behavior",
2549
+ "CSS scrollbar-gutter",
2550
+ "CSS scrollbar-width",
2551
+ "WAI-ARIA named region",
2552
+ "Radix UI ScrollArea",
2553
+ "Reka UI ScrollArea"
2554
+ ],
2555
+ dependencies: [],
2556
+ maturity: "stable",
2557
+ owner: catalogOwner
2558
+ }];
2559
+ //#endregion
2560
+ //#region src/catalog/family-catalog-layout-surface.ts
2561
+ const familyRoot = "src/families/layout/surface/";
2562
+ const surfaceLayoutFamilyCatalog = [{
2563
+ canonicalName: "surface",
2564
+ title: "Surface",
2565
+ packageSubpath: "./surface",
2566
+ entryFile: `${familyRoot}surface.ts`,
2567
+ sourceFiles: [
2568
+ `${familyRoot}surface.vue`,
2569
+ `${familyRoot}surface.ts`,
2570
+ `${familyRoot}surface-runtime.ts`,
2571
+ `${familyRoot}surface-types.ts`
2572
+ ],
2573
+ behaviorContract: `${familyRoot}surface.behavior.md`,
2574
+ tests: [`${familyRoot}surface.test.ts`, `${familyRoot}surface-ssr.test.ts`],
2575
+ typeTests: [`${familyRoot}surface.types.test-d.ts`],
2576
+ rendererFixture: "SurfaceConsumer.vue",
2577
+ qualityGates: componentQualityGates,
2578
+ bundleBudget: {
2579
+ exportName: "Surface",
2580
+ retainedSignature: "data-vize-ui\":(?:`surface`|\"surface\"|'surface')",
2581
+ maximumJavaScriptGzipBytes: 1200,
2582
+ maximumCssGzipBytes: 0
2583
+ },
2584
+ aliases: [
2585
+ "surface",
2586
+ "semantic surface",
2587
+ "section wrapper",
2588
+ "panel wrapper"
2589
+ ],
2590
+ upstreamCoverage: [
2591
+ "HTML section element",
2592
+ "HTML article element",
2593
+ "HTML aside element",
2594
+ "ARIA labelledby and describedby IDREFs",
2595
+ "shadcn/ui Card",
2596
+ "Reka UI Primitive"
2597
+ ],
2598
+ dependencies: [],
2599
+ maturity: "stable",
2600
+ owner: catalogOwner
2601
+ }];
2602
+ //#endregion
2603
+ //#region src/catalog/family-catalog-layout.ts
2604
+ const aspectRatioFamilyRoot = "src/families/layout/aspect-ratio/";
2605
+ const cardFamilyRoot = "src/families/layout/card/";
2606
+ const clusterFamilyRoot = "src/families/layout/cluster/";
2607
+ const containerFamilyRoot = "src/families/layout/container/";
2608
+ const gridFamilyRoot = "src/families/layout/grid/";
2609
+ const separatorFamilyRoot = "src/families/layout/separator/";
2610
+ const spacerFamilyRoot = "src/families/layout/spacer/";
2611
+ const stackFamilyRoot = "src/families/layout/stack/";
2612
+ const layoutFamilyCatalog = [
2613
+ {
2614
+ canonicalName: "aspect-ratio",
2615
+ title: "Aspect Ratio",
2616
+ packageSubpath: "./aspect-ratio",
2617
+ entryFile: `${aspectRatioFamilyRoot}aspect-ratio.ts`,
2618
+ sourceFiles: [
2619
+ `${aspectRatioFamilyRoot}aspect-ratio.vue`,
2620
+ `${aspectRatioFamilyRoot}aspect-ratio.ts`,
2621
+ `${aspectRatioFamilyRoot}aspect-ratio-runtime.ts`,
2622
+ `${aspectRatioFamilyRoot}aspect-ratio-types.ts`
2623
+ ],
2624
+ behaviorContract: `${aspectRatioFamilyRoot}aspect-ratio.behavior.md`,
2625
+ tests: [`${aspectRatioFamilyRoot}aspect-ratio.test.ts`, `${aspectRatioFamilyRoot}aspect-ratio-ssr.test.ts`],
2626
+ typeTests: [`${aspectRatioFamilyRoot}aspect-ratio.types.test-d.ts`],
2627
+ rendererFixture: "AspectRatioConsumer.vue",
2628
+ qualityGates: componentQualityGates,
2629
+ bundleBudget: {
2630
+ exportName: "AspectRatio",
2631
+ retainedSignature: "data-vize-ui.+aspect-ratio",
2632
+ maximumJavaScriptGzipBytes: 1e3,
2633
+ maximumCssGzipBytes: 0
2634
+ },
2635
+ aliases: [
2636
+ "aspect ratio",
2637
+ "intrinsic ratio",
2638
+ "responsive media box"
2639
+ ],
2640
+ upstreamCoverage: [
2641
+ "CSS aspect-ratio",
2642
+ "Radix UI AspectRatio",
2643
+ "Reka UI AspectRatio"
2644
+ ],
2645
+ dependencies: [],
2646
+ maturity: "stable",
2647
+ owner: catalogOwner
2648
+ },
2649
+ ...avatarLayoutFamilyCatalog,
2650
+ ...iconLayoutFamilyCatalog,
2651
+ {
2652
+ canonicalName: "card",
2653
+ title: "Card",
2654
+ packageSubpath: "./card",
2655
+ entryFile: `${cardFamilyRoot}card.ts`,
2656
+ sourceFiles: [
2657
+ `${cardFamilyRoot}card.vue`,
2658
+ `${cardFamilyRoot}card.ts`,
2659
+ `${cardFamilyRoot}card-types.ts`
2660
+ ],
2661
+ behaviorContract: `${cardFamilyRoot}card.behavior.md`,
2662
+ tests: [`${cardFamilyRoot}card.test.ts`, `${cardFamilyRoot}card-ssr.test.ts`],
2663
+ typeTests: [`${cardFamilyRoot}card.types.test-d.ts`],
2664
+ rendererFixture: "CardConsumer.vue",
2665
+ qualityGates: componentQualityGates,
2666
+ bundleBudget: {
2667
+ exportName: "Card",
2668
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}card",
2669
+ maximumJavaScriptGzipBytes: 625,
2670
+ maximumCssGzipBytes: 0
2671
+ },
2672
+ aliases: [
2673
+ "surface card",
2674
+ "panel",
2675
+ "content surface",
2676
+ "section shell"
2677
+ ],
2678
+ upstreamCoverage: [
2679
+ "HTML section",
2680
+ "HTML article",
2681
+ "shadcn/ui Card",
2682
+ "Reka UI Primitive"
2683
+ ],
2684
+ dependencies: [],
2685
+ maturity: "stable",
2686
+ owner: catalogOwner
2687
+ },
2688
+ {
2689
+ canonicalName: "cluster",
2690
+ title: "Cluster",
2691
+ packageSubpath: "./cluster",
2692
+ entryFile: `${clusterFamilyRoot}cluster.ts`,
2693
+ sourceFiles: [
2694
+ `${clusterFamilyRoot}cluster.vue`,
2695
+ `${clusterFamilyRoot}cluster.ts`,
2696
+ `${clusterFamilyRoot}cluster-runtime.ts`,
2697
+ `${clusterFamilyRoot}cluster-types.ts`
2698
+ ],
2699
+ behaviorContract: `${clusterFamilyRoot}cluster.behavior.md`,
2700
+ tests: [`${clusterFamilyRoot}cluster.test.ts`, `${clusterFamilyRoot}cluster-ssr.test.ts`],
2701
+ typeTests: [`${clusterFamilyRoot}cluster.types.test-d.ts`],
2702
+ rendererFixture: "ClusterConsumer.vue",
2703
+ qualityGates: componentQualityGates,
2704
+ bundleBudget: {
2705
+ exportName: "Cluster",
2706
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}cluster",
2707
+ maximumJavaScriptGzipBytes: 1200,
2708
+ maximumCssGzipBytes: 0
2709
+ },
2710
+ aliases: [
2711
+ "layout cluster",
2712
+ "wrapping row",
2713
+ "inline group",
2714
+ "action group"
2715
+ ],
2716
+ upstreamCoverage: [
2717
+ "CSS flexbox",
2718
+ "CSS gap",
2719
+ "Reka UI Primitive"
2720
+ ],
2721
+ dependencies: [],
2722
+ maturity: "stable",
2723
+ owner: catalogOwner
2724
+ },
2725
+ {
2726
+ canonicalName: "container",
2727
+ title: "Container",
2728
+ packageSubpath: "./container",
2729
+ entryFile: `${containerFamilyRoot}container.ts`,
2730
+ sourceFiles: [
2731
+ `${containerFamilyRoot}container.vue`,
2732
+ `${containerFamilyRoot}container.ts`,
2733
+ `${containerFamilyRoot}container-runtime.ts`,
2734
+ `${containerFamilyRoot}container-types.ts`
2735
+ ],
2736
+ behaviorContract: `${containerFamilyRoot}container.behavior.md`,
2737
+ tests: [`${containerFamilyRoot}container.test.ts`, `${containerFamilyRoot}container-ssr.test.ts`],
2738
+ typeTests: [`${containerFamilyRoot}container.types.test-d.ts`],
2739
+ rendererFixture: "ContainerConsumer.vue",
2740
+ qualityGates: componentQualityGates,
2741
+ bundleBudget: {
2742
+ exportName: "Container",
2743
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}container",
2744
+ maximumJavaScriptGzipBytes: 1250,
2745
+ maximumCssGzipBytes: 0
2746
+ },
2747
+ aliases: [
2748
+ "layout container",
2749
+ "page container",
2750
+ "max width wrapper",
2751
+ "centered region"
2752
+ ],
2753
+ upstreamCoverage: [
2754
+ "CSS logical properties",
2755
+ "CSS max-inline-size",
2756
+ "Reka UI Primitive"
2757
+ ],
2758
+ dependencies: [],
2759
+ maturity: "stable",
2760
+ owner: catalogOwner
2761
+ },
2762
+ {
2763
+ canonicalName: "grid",
2764
+ title: "Grid",
2765
+ packageSubpath: "./grid",
2766
+ entryFile: `${gridFamilyRoot}grid.ts`,
2767
+ sourceFiles: [
2768
+ `${gridFamilyRoot}grid.vue`,
2769
+ `${gridFamilyRoot}grid.ts`,
2770
+ `${gridFamilyRoot}grid-runtime.ts`,
2771
+ `${gridFamilyRoot}grid-types.ts`
2772
+ ],
2773
+ behaviorContract: `${gridFamilyRoot}grid.behavior.md`,
2774
+ tests: [`${gridFamilyRoot}grid.test.ts`, `${gridFamilyRoot}grid-ssr.test.ts`],
2775
+ typeTests: [`${gridFamilyRoot}grid.types.test-d.ts`],
2776
+ rendererFixture: "GridConsumer.vue",
2777
+ qualityGates: componentQualityGates,
2778
+ bundleBudget: {
2779
+ exportName: "Grid",
2780
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}grid",
2781
+ maximumJavaScriptGzipBytes: 1200,
2782
+ maximumCssGzipBytes: 0
2783
+ },
2784
+ aliases: [
2785
+ "layout grid",
2786
+ "responsive grid",
2787
+ "two-dimensional layout",
2788
+ "card grid"
2789
+ ],
2790
+ upstreamCoverage: [
2791
+ "CSS grid",
2792
+ "CSS gap",
2793
+ "Reka UI Primitive"
2794
+ ],
2795
+ dependencies: [],
2796
+ maturity: "stable",
2797
+ owner: catalogOwner
2798
+ },
2799
+ ...listLayoutFamilyCatalog,
2800
+ ...scrollAreaLayoutFamilyCatalog,
2801
+ {
2802
+ canonicalName: "separator",
2803
+ title: "Separator",
2804
+ packageSubpath: "./separator",
2805
+ entryFile: `${separatorFamilyRoot}separator.ts`,
2806
+ sourceFiles: [
2807
+ `${separatorFamilyRoot}separator.vue`,
2808
+ `${separatorFamilyRoot}separator.ts`,
2809
+ `${separatorFamilyRoot}separator-types.ts`
2810
+ ],
2811
+ behaviorContract: `${separatorFamilyRoot}separator.behavior.md`,
2812
+ tests: [`${separatorFamilyRoot}separator.test.ts`, `${separatorFamilyRoot}separator-ssr.test.ts`],
2813
+ typeTests: [`${separatorFamilyRoot}separator.types.test-d.ts`],
2814
+ rendererFixture: "SeparatorConsumer.vue",
2815
+ qualityGates: componentQualityGates,
2816
+ bundleBudget: {
2817
+ exportName: "Separator",
2818
+ retainedSignature: "data-vize-ui.+separator",
2819
+ maximumJavaScriptGzipBytes: 650,
2820
+ maximumCssGzipBytes: 0
2821
+ },
2822
+ aliases: [
2823
+ "divider",
2824
+ "rule",
2825
+ "thematic break",
2826
+ "splitter boundary"
2827
+ ],
2828
+ upstreamCoverage: [
2829
+ "HTML hr",
2830
+ "WAI-ARIA Separator",
2831
+ "Radix UI Separator",
2832
+ "Reka UI Separator"
2833
+ ],
2834
+ dependencies: [],
2835
+ maturity: "stable",
2836
+ owner: catalogOwner
2837
+ },
2838
+ {
2839
+ canonicalName: "spacer",
2840
+ title: "Spacer",
2841
+ packageSubpath: "./spacer",
2842
+ entryFile: `${spacerFamilyRoot}spacer.ts`,
2843
+ sourceFiles: [
2844
+ `${spacerFamilyRoot}spacer.vue`,
2845
+ `${spacerFamilyRoot}spacer.ts`,
2846
+ `${spacerFamilyRoot}spacer-runtime.ts`,
2847
+ `${spacerFamilyRoot}spacer-types.ts`
2848
+ ],
2849
+ behaviorContract: `${spacerFamilyRoot}spacer.behavior.md`,
2850
+ tests: [`${spacerFamilyRoot}spacer.test.ts`, `${spacerFamilyRoot}spacer-ssr.test.ts`],
2851
+ typeTests: [`${spacerFamilyRoot}spacer.types.test-d.ts`],
2852
+ rendererFixture: "SpacerConsumer.vue",
2853
+ qualityGates: componentQualityGates,
2854
+ bundleBudget: {
2855
+ exportName: "Spacer",
2856
+ retainedSignature: "data-vize-ui.+spacer",
2857
+ maximumJavaScriptGzipBytes: 950,
2858
+ maximumCssGzipBytes: 0
2859
+ },
2860
+ aliases: [
2861
+ "layout spacer",
2862
+ "gap spacer",
2863
+ "white space",
2864
+ "svg spacer"
2865
+ ],
2866
+ upstreamCoverage: [
2867
+ "CSS logical properties",
2868
+ "HTML span",
2869
+ "SVG element host",
2870
+ "Reka UI Primitive"
2871
+ ],
2872
+ dependencies: [],
2873
+ maturity: "stable",
2874
+ owner: catalogOwner
2875
+ },
2876
+ {
2877
+ canonicalName: "stack",
2878
+ title: "Stack",
2879
+ packageSubpath: "./stack",
2880
+ entryFile: `${stackFamilyRoot}stack.ts`,
2881
+ sourceFiles: [
2882
+ `${stackFamilyRoot}stack.vue`,
2883
+ `${stackFamilyRoot}stack.ts`,
2884
+ `${stackFamilyRoot}stack-runtime.ts`,
2885
+ `${stackFamilyRoot}stack-types.ts`
2886
+ ],
2887
+ behaviorContract: `${stackFamilyRoot}stack.behavior.md`,
2888
+ tests: [`${stackFamilyRoot}stack.test.ts`, `${stackFamilyRoot}stack-ssr.test.ts`],
2889
+ typeTests: [`${stackFamilyRoot}stack.types.test-d.ts`],
2890
+ rendererFixture: "StackConsumer.vue",
2891
+ qualityGates: componentQualityGates,
2892
+ bundleBudget: {
2893
+ exportName: "Stack",
2894
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}stack",
2895
+ maximumJavaScriptGzipBytes: 1050,
2896
+ maximumCssGzipBytes: 0
2897
+ },
2898
+ aliases: [
2899
+ "layout stack",
2900
+ "vertical stack",
2901
+ "logical stack",
2902
+ "single-axis layout"
2903
+ ],
2904
+ upstreamCoverage: [
2905
+ "CSS flexbox",
2906
+ "CSS logical properties",
2907
+ "Reka UI Primitive"
2908
+ ],
2909
+ dependencies: [],
2910
+ maturity: "stable",
2911
+ owner: catalogOwner
2912
+ },
2913
+ ...surfaceLayoutFamilyCatalog
2914
+ ];
2915
+ //#endregion
2916
+ //#region src/catalog/family-catalog-navigation.ts
2917
+ const breadcrumbFamilyRoot = "src/families/navigation/breadcrumb/";
2918
+ const paginationFamilyRoot = "src/families/navigation/pagination/";
2919
+ const stepperFamilyRoot = "src/families/navigation/stepper/";
2920
+ const tabsFamilyRoot = "src/families/navigation/tabs/";
2921
+ const navigationFamilyCatalog = [
2922
+ {
2923
+ canonicalName: "breadcrumb",
2924
+ title: "Breadcrumb",
2925
+ packageSubpath: "./breadcrumb",
2926
+ entryFile: `${breadcrumbFamilyRoot}breadcrumb.ts`,
2927
+ sourceFiles: [
2928
+ `${breadcrumbFamilyRoot}breadcrumb.vue`,
2929
+ `${breadcrumbFamilyRoot}breadcrumb-item.vue`,
2930
+ `${breadcrumbFamilyRoot}breadcrumb-link.vue`,
2931
+ `${breadcrumbFamilyRoot}breadcrumb-list.vue`,
2932
+ `${breadcrumbFamilyRoot}breadcrumb-separator.vue`,
2933
+ `${breadcrumbFamilyRoot}breadcrumb.ts`,
2934
+ `${breadcrumbFamilyRoot}breadcrumb-types.ts`
2935
+ ],
2936
+ behaviorContract: `${breadcrumbFamilyRoot}breadcrumb.behavior.md`,
2937
+ tests: [`${breadcrumbFamilyRoot}breadcrumb.test.ts`, `${breadcrumbFamilyRoot}breadcrumb-ssr.test.ts`],
2938
+ typeTests: [`${breadcrumbFamilyRoot}breadcrumb.types.test-d.ts`],
2939
+ rendererFixture: "BreadcrumbConsumer.vue",
2940
+ qualityGates: componentQualityGates,
2941
+ bundleBudget: {
2942
+ exportName: "Breadcrumb",
2943
+ retainedSignature: "data-vize-ui\":(?:`breadcrumb`|\"breadcrumb\"|'breadcrumb')",
2944
+ maximumJavaScriptGzipBytes: 1725,
2945
+ maximumCssGzipBytes: 0
2946
+ },
2947
+ aliases: [
2948
+ "breadcrumb navigation",
2949
+ "route breadcrumb",
2950
+ "path trail",
2951
+ "hierarchy trail"
2952
+ ],
2953
+ upstreamCoverage: [
2954
+ "HTML nav landmark",
2955
+ "WAI-ARIA breadcrumb pattern",
2956
+ "React Aria Breadcrumbs"
2957
+ ],
2958
+ dependencies: [],
2959
+ maturity: "stable",
2960
+ owner: catalogOwner
2961
+ },
2962
+ {
2963
+ canonicalName: "skip-link",
2964
+ title: "Skip Link",
2965
+ packageSubpath: "./skip-link",
2966
+ entryFile: "src/families/navigation/skip-link/skip-link.ts",
2967
+ sourceFiles: [
2968
+ "src/families/navigation/skip-link/skip-link.vue",
2969
+ "src/families/navigation/skip-link/skip-link.ts",
2970
+ "src/families/navigation/skip-link/skip-link-types.ts"
2971
+ ],
2972
+ behaviorContract: "src/families/navigation/skip-link/skip-link.behavior.md",
2973
+ tests: ["src/families/navigation/skip-link/skip-link.test.ts", "src/families/navigation/skip-link/skip-link-ssr.test.ts"],
2974
+ typeTests: ["src/families/navigation/skip-link/skip-link.types.test-d.ts"],
2975
+ rendererFixture: "SkipLinkConsumer.vue",
2976
+ qualityGates: componentQualityGates,
2977
+ bundleBudget: {
2978
+ exportName: "SkipLink",
2979
+ retainedSignature: "data-vize-ui\":(?:`skip-link`|\"skip-link\"|'skip-link')",
2980
+ maximumJavaScriptGzipBytes: 1850,
2981
+ maximumCssGzipBytes: 0
2982
+ },
2983
+ aliases: [
2984
+ "skip link",
2985
+ "skip navigation",
2986
+ "skip to content",
2987
+ "bypass block"
2988
+ ],
2989
+ upstreamCoverage: [
2990
+ "WCAG bypass blocks",
2991
+ "HTML same-document fragment navigation",
2992
+ "WebAIM skip navigation links"
2993
+ ],
2994
+ dependencies: ["id"],
2995
+ maturity: "stable",
2996
+ owner: catalogOwner
2997
+ },
2998
+ {
2999
+ canonicalName: "tabs",
3000
+ title: "Tabs",
3001
+ packageSubpath: "./tabs",
3002
+ entryFile: `${tabsFamilyRoot}tabs.ts`,
3003
+ sourceFiles: [
3004
+ `${tabsFamilyRoot}tabs-content.vue`,
3005
+ `${tabsFamilyRoot}tabs-list.vue`,
3006
+ `${tabsFamilyRoot}tabs-root.vue`,
3007
+ `${tabsFamilyRoot}tabs-trigger.vue`,
3008
+ `${tabsFamilyRoot}tabs.ts`,
3009
+ `${tabsFamilyRoot}tabs-context.ts`,
3010
+ `${tabsFamilyRoot}tabs-types.ts`,
3011
+ `${tabsFamilyRoot}tabs-value.ts`
3012
+ ],
3013
+ behaviorContract: `${tabsFamilyRoot}tabs.behavior.md`,
3014
+ tests: [`${tabsFamilyRoot}tabs.test.ts`, `${tabsFamilyRoot}tabs-ssr.test.ts`],
3015
+ typeTests: [`${tabsFamilyRoot}tabs.types.test-d.ts`],
3016
+ rendererFixture: "TabsConsumer.vue",
3017
+ qualityGates: componentQualityGates,
3018
+ bundleBudget: {
3019
+ exportName: "TabsRoot",
3020
+ retainedSignature: "data-vize-ui\":(?:`tabs-root`|\"tabs-root\"|'tabs-root')",
3021
+ allowedRetainedFamilies: [
3022
+ "collection",
3023
+ "composite-navigation",
3024
+ "context",
3025
+ "controllable-state",
3026
+ "typeahead"
3027
+ ],
3028
+ maximumJavaScriptGzipBytes: 8700,
3029
+ maximumCssGzipBytes: 0
3030
+ },
3031
+ aliases: [
3032
+ "tablist",
3033
+ "tab panels",
3034
+ "segmented navigation",
3035
+ "application sections"
3036
+ ],
3037
+ upstreamCoverage: [
3038
+ "WAI-ARIA tabs pattern",
3039
+ "React Aria Tabs",
3040
+ "Radix Tabs",
3041
+ "Reka UI Tabs"
3042
+ ],
3043
+ dependencies: [
3044
+ "collection",
3045
+ "composite-navigation",
3046
+ "context",
3047
+ "controllable-state",
3048
+ "typeahead"
3049
+ ],
3050
+ maturity: "stable",
3051
+ owner: catalogOwner
3052
+ },
3053
+ {
3054
+ canonicalName: "stepper",
3055
+ title: "Stepper",
3056
+ packageSubpath: "./stepper",
3057
+ entryFile: `${stepperFamilyRoot}stepper.ts`,
3058
+ sourceFiles: [
3059
+ `${stepperFamilyRoot}stepper-content.vue`,
3060
+ `${stepperFamilyRoot}stepper-item.vue`,
3061
+ `${stepperFamilyRoot}stepper-list.vue`,
3062
+ `${stepperFamilyRoot}stepper-root.vue`,
3063
+ `${stepperFamilyRoot}stepper-trigger.vue`,
3064
+ `${stepperFamilyRoot}stepper.ts`,
3065
+ `${stepperFamilyRoot}stepper-context.ts`,
3066
+ `${stepperFamilyRoot}stepper-navigation.ts`,
3067
+ `${stepperFamilyRoot}stepper-types.ts`,
3068
+ `${stepperFamilyRoot}stepper-value.ts`
3069
+ ],
3070
+ behaviorContract: `${stepperFamilyRoot}stepper.behavior.md`,
3071
+ tests: [
3072
+ `${stepperFamilyRoot}stepper.test.ts`,
3073
+ `${stepperFamilyRoot}stepper-expose.test.ts`,
3074
+ `${stepperFamilyRoot}stepper-ssr.test.ts`
3075
+ ],
3076
+ typeTests: [`${stepperFamilyRoot}stepper.types.test-d.ts`],
3077
+ rendererFixture: "StepperConsumer.vue",
3078
+ qualityGates: componentQualityGates,
3079
+ bundleBudget: {
3080
+ exportName: "StepperRoot",
3081
+ retainedSignature: "data-vize-ui\":(?:`stepper-root`|\"stepper-root\"|'stepper-root')",
3082
+ allowedRetainedFamilies: [
3083
+ "collection",
3084
+ "composite-navigation",
3085
+ "context",
3086
+ "controllable-state",
3087
+ "typeahead"
3088
+ ],
3089
+ maximumJavaScriptGzipBytes: 9250,
3090
+ maximumCssGzipBytes: 0
3091
+ },
3092
+ aliases: [
3093
+ "stepper",
3094
+ "wizard",
3095
+ "multi-step flow",
3096
+ "checkout steps"
3097
+ ],
3098
+ upstreamCoverage: [
3099
+ "WAI-ARIA aria-current step",
3100
+ "MUI Stepper",
3101
+ "Vuetify Stepper",
3102
+ "Reka UI Stepper"
3103
+ ],
3104
+ dependencies: [
3105
+ "collection",
3106
+ "composite-navigation",
3107
+ "context",
3108
+ "controllable-state",
3109
+ "id",
3110
+ "typeahead"
3111
+ ],
3112
+ maturity: "stable",
3113
+ owner: catalogOwner
3114
+ },
3115
+ {
3116
+ canonicalName: "pagination",
3117
+ title: "Pagination",
3118
+ packageSubpath: "./pagination",
3119
+ entryFile: `${paginationFamilyRoot}pagination.ts`,
3120
+ sourceFiles: [
3121
+ `${paginationFamilyRoot}pagination.vue`,
3122
+ `${paginationFamilyRoot}pagination-list.vue`,
3123
+ `${paginationFamilyRoot}pagination-item.vue`,
3124
+ `${paginationFamilyRoot}pagination-page.vue`,
3125
+ `${paginationFamilyRoot}pagination-previous.vue`,
3126
+ `${paginationFamilyRoot}pagination-next.vue`,
3127
+ `${paginationFamilyRoot}pagination-ellipsis.vue`,
3128
+ `${paginationFamilyRoot}pagination.ts`,
3129
+ `${paginationFamilyRoot}pagination-context.ts`,
3130
+ `${paginationFamilyRoot}pagination-range.ts`,
3131
+ `${paginationFamilyRoot}pagination-types.ts`
3132
+ ],
3133
+ behaviorContract: `${paginationFamilyRoot}pagination.behavior.md`,
3134
+ tests: [
3135
+ `${paginationFamilyRoot}pagination.test.ts`,
3136
+ `${paginationFamilyRoot}pagination-edge.test.ts`,
3137
+ `${paginationFamilyRoot}pagination-ssr.test.ts`
3138
+ ],
3139
+ typeTests: [`${paginationFamilyRoot}pagination.types.test-d.ts`],
3140
+ rendererFixture: "PaginationConsumer.vue",
3141
+ qualityGates: componentQualityGates,
3142
+ bundleBudget: {
3143
+ exportName: "Pagination",
3144
+ retainedSignature: "data-vize-ui\":(?:`pagination`|\"pagination\"|'pagination')",
3145
+ allowedRetainedFamilies: ["context", "controllable-state"],
3146
+ maximumJavaScriptGzipBytes: 2750,
3147
+ maximumCssGzipBytes: 0
3148
+ },
3149
+ aliases: [
3150
+ "pagination",
3151
+ "pager",
3152
+ "page navigation",
3153
+ "page controls"
3154
+ ],
3155
+ upstreamCoverage: [
3156
+ "HTML nav landmark",
3157
+ "WAI-ARIA aria-current page",
3158
+ "MUI Pagination",
3159
+ "Vuetify Pagination",
3160
+ "Reka UI Pagination"
3161
+ ],
3162
+ dependencies: [
3163
+ "context",
3164
+ "controllable-state",
3165
+ "id"
3166
+ ],
3167
+ maturity: "stable",
3168
+ owner: catalogOwner
3169
+ }
3170
+ ];
3171
+ //#endregion
3172
+ //#region src/catalog/family-catalog-dialogs.ts
3173
+ const dialogFamilyRoot = "src/families/overlays/dialog/";
3174
+ const alertDialogFamilyRoot = "src/families/overlays/alert-dialog/";
3175
+ const dialogFamilyCatalog = [{
3176
+ canonicalName: "dialog",
3177
+ title: "Dialog",
3178
+ packageSubpath: "./dialog",
3179
+ entryFile: `${dialogFamilyRoot}dialog.ts`,
3180
+ sourceFiles: [
3181
+ `${dialogFamilyRoot}dialog-close.vue`,
3182
+ `${dialogFamilyRoot}dialog-content.vue`,
3183
+ `${dialogFamilyRoot}dialog-context.ts`,
3184
+ `${dialogFamilyRoot}dialog-description.vue`,
3185
+ `${dialogFamilyRoot}dialog-overlay.vue`,
3186
+ `${dialogFamilyRoot}dialog-portal.vue`,
3187
+ `${dialogFamilyRoot}dialog-root.vue`,
3188
+ `${dialogFamilyRoot}dialog-title.vue`,
3189
+ `${dialogFamilyRoot}dialog-trigger.vue`,
3190
+ `${dialogFamilyRoot}dialog.ts`,
3191
+ `${dialogFamilyRoot}dialog-types.ts`
3192
+ ],
3193
+ behaviorContract: `${dialogFamilyRoot}dialog.behavior.md`,
3194
+ tests: [`${dialogFamilyRoot}dialog.test.ts`, `${dialogFamilyRoot}dialog-ssr.test.ts`],
3195
+ typeTests: [`${dialogFamilyRoot}dialog.types.test-d.ts`],
3196
+ rendererFixture: "DialogConsumer.vue",
3197
+ qualityGates: componentQualityGates,
3198
+ bundleBudget: {
3199
+ exportName: "DialogRoot",
3200
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}dialog-root",
3201
+ allowedRetainedFamilies: ["context", "controllable-state"],
3202
+ maximumJavaScriptGzipBytes: 2100,
3203
+ maximumCssGzipBytes: 0
3204
+ },
3205
+ aliases: [
3206
+ "modal",
3207
+ "alert dialog",
3208
+ "sheet foundation",
3209
+ "overlay dialog"
3210
+ ],
3211
+ upstreamCoverage: [
3212
+ "WAI-ARIA dialog pattern",
3213
+ "Radix Dialog",
3214
+ "Reka UI Dialog"
3215
+ ],
3216
+ dependencies: [
3217
+ "context",
3218
+ "controllable-state",
3219
+ "dismissable-layer",
3220
+ "focus-guards",
3221
+ "focus-scope",
3222
+ "id",
3223
+ "inert-outside",
3224
+ "portal",
3225
+ "scroll-lock"
3226
+ ],
3227
+ maturity: "stable",
3228
+ owner: catalogOwner
3229
+ }, {
3230
+ canonicalName: "alert-dialog",
3231
+ title: "Alert Dialog",
3232
+ packageSubpath: "./alert-dialog",
3233
+ entryFile: `${alertDialogFamilyRoot}alert-dialog.ts`,
3234
+ sourceFiles: [
3235
+ `${alertDialogFamilyRoot}alert-dialog-content.vue`,
3236
+ `${alertDialogFamilyRoot}alert-dialog.ts`,
3237
+ `${alertDialogFamilyRoot}alert-dialog-types.ts`
3238
+ ],
3239
+ behaviorContract: `${alertDialogFamilyRoot}alert-dialog.behavior.md`,
3240
+ tests: [`${alertDialogFamilyRoot}alert-dialog.test.ts`, `${alertDialogFamilyRoot}alert-dialog-ssr.test.ts`],
3241
+ typeTests: [`${alertDialogFamilyRoot}alert-dialog.types.test-d.ts`],
3242
+ rendererFixture: "AlertDialogConsumer.vue",
3243
+ qualityGates: componentQualityGates,
3244
+ bundleBudget: {
3245
+ exportName: "AlertDialogContent",
3246
+ retainedSignature: "alert-dialog-content",
3247
+ allowedRetainedFamilies: [
3248
+ "context",
3249
+ "dismissable-layer",
3250
+ "focus-guards",
3251
+ "focus-scope",
3252
+ "inert-outside",
3253
+ "scroll-lock"
3254
+ ],
3255
+ maximumJavaScriptGzipBytes: 12e3,
3256
+ maximumCssGzipBytes: 0
3257
+ },
3258
+ aliases: [
3259
+ "confirm dialog",
3260
+ "destructive confirmation",
3261
+ "modal alertdialog"
3262
+ ],
3263
+ upstreamCoverage: [
3264
+ "WAI-ARIA alertdialog pattern",
3265
+ "Radix Alert Dialog",
3266
+ "Reka UI AlertDialog"
3267
+ ],
3268
+ dependencies: [
3269
+ "context",
3270
+ "dialog",
3271
+ "dismissable-layer",
3272
+ "focus-guards",
3273
+ "focus-scope",
3274
+ "inert-outside",
3275
+ "scroll-lock"
3276
+ ],
3277
+ maturity: "stable",
3278
+ owner: catalogOwner
3279
+ }];
3280
+ //#endregion
3281
+ //#region src/catalog/family-catalog-popover.ts
3282
+ const popoverFamilyRoot = "src/families/overlays/popover/";
3283
+ const popoverFamilyCatalog = [{
3284
+ canonicalName: "popover",
3285
+ title: "Popover",
3286
+ packageSubpath: "./popover",
3287
+ entryFile: `${popoverFamilyRoot}popover.ts`,
3288
+ sourceFiles: [
3289
+ `${popoverFamilyRoot}popover-arrow.vue`,
3290
+ `${popoverFamilyRoot}popover-content.vue`,
3291
+ `${popoverFamilyRoot}popover-content-runtime.ts`,
3292
+ `${popoverFamilyRoot}popover-context.ts`,
3293
+ `${popoverFamilyRoot}popover-root.vue`,
3294
+ `${popoverFamilyRoot}popover-trigger.vue`,
3295
+ `${popoverFamilyRoot}popover.ts`,
3296
+ `${popoverFamilyRoot}popover-types.ts`
3297
+ ],
3298
+ behaviorContract: `${popoverFamilyRoot}popover.behavior.md`,
3299
+ tests: [`${popoverFamilyRoot}popover.test.ts`, `${popoverFamilyRoot}popover-ssr.test.ts`],
3300
+ typeTests: [`${popoverFamilyRoot}popover.types.test-d.ts`],
3301
+ rendererFixture: "PopoverConsumer.vue",
3302
+ qualityGates: componentQualityGates,
3303
+ bundleBudget: {
3304
+ exportName: "PopoverRoot",
3305
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}popover-root",
3306
+ allowedRetainedFamilies: ["context", "controllable-state"],
3307
+ maximumJavaScriptGzipBytes: 3e3,
3308
+ maximumCssGzipBytes: 0
3309
+ },
3310
+ aliases: [
3311
+ "floating dialog",
3312
+ "disclosure layer",
3313
+ "coach mark shell",
3314
+ "anchored popup"
3315
+ ],
3316
+ upstreamCoverage: [
3317
+ "WAI-ARIA dialog pattern",
3318
+ "HTML Popover API authoring model",
3319
+ "Radix Popover",
3320
+ "Reka UI Popover"
3321
+ ],
3322
+ dependencies: [
3323
+ "context",
3324
+ "controllable-state",
3325
+ "dismissable-layer",
3326
+ "focus-guards",
3327
+ "focus-scope",
3328
+ "id",
3329
+ "inert-outside",
3330
+ "portal",
3331
+ "positioner",
3332
+ "presence",
3333
+ "scroll-lock"
3334
+ ],
3335
+ maturity: "stable",
3336
+ owner: catalogOwner
3337
+ }];
3338
+ //#endregion
3339
+ //#region src/catalog/family-catalog-overlays.ts
3340
+ const motionFamilyRoot = "src/families/overlays/motion/";
3341
+ const portalFamilyRoot = "src/families/overlays/portal/";
3342
+ const positionerFamilyRoot = "src/families/overlays/positioner/";
3343
+ const presenceFamilyRoot = "src/families/overlays/presence/";
3344
+ const transitionFamilyRoot = "src/families/overlays/transition/";
3345
+ const overlayFamilyCatalog = [
3346
+ ...dialogFamilyCatalog,
3347
+ {
3348
+ canonicalName: "motion",
3349
+ title: "Motion Tokens",
3350
+ packageSubpath: "./motion",
3351
+ entryFile: `${motionFamilyRoot}motion.ts`,
3352
+ sourceFiles: [
3353
+ `${motionFamilyRoot}motion.ts`,
3354
+ `${motionFamilyRoot}motion.css`,
3355
+ `${motionFamilyRoot}motion-adapters.ts`,
3356
+ `${motionFamilyRoot}motion-tokens.ts`,
3357
+ `${motionFamilyRoot}motion-types.ts`
3358
+ ],
3359
+ behaviorContract: `${motionFamilyRoot}motion.behavior.md`,
3360
+ tests: [
3361
+ `${motionFamilyRoot}motion.test.ts`,
3362
+ `${motionFamilyRoot}motion-stylesheet.test.ts`,
3363
+ `${motionFamilyRoot}motion-ssr.test.ts`
3364
+ ],
3365
+ typeTests: [`${motionFamilyRoot}motion.types.test-d.ts`],
3366
+ rendererFixture: "MotionConsumer.vue",
3367
+ qualityGates: interactionQualityGates,
3368
+ bundleBudget: {
3369
+ exportName: "startViewTransition",
3370
+ retainedSignature: "VIZE_UI_MOTION_",
3371
+ maximumJavaScriptGzipBytes: 1500,
3372
+ maximumCssGzipBytes: 7600
3373
+ },
3374
+ aliases: [
3375
+ "motion tokens",
3376
+ "easing",
3377
+ "view transitions",
3378
+ "starting style",
3379
+ "reduced motion"
3380
+ ],
3381
+ upstreamCoverage: [
3382
+ "View Transitions API",
3383
+ "CSS @starting-style",
3384
+ "prefers-reduced-motion",
3385
+ "scroll-driven animations"
3386
+ ],
3387
+ dependencies: [],
3388
+ maturity: "stable",
3389
+ owner: catalogOwner
3390
+ },
3391
+ {
3392
+ canonicalName: "portal",
3393
+ title: "Portal",
3394
+ packageSubpath: "./portal",
3395
+ entryFile: `${portalFamilyRoot}portal.ts`,
3396
+ sourceFiles: [
3397
+ `${portalFamilyRoot}portal.vue`,
3398
+ `${portalFamilyRoot}portal.ts`,
3399
+ `${portalFamilyRoot}portal-stack.ts`
3400
+ ],
3401
+ behaviorContract: `${portalFamilyRoot}portal.behavior.md`,
3402
+ tests: [
3403
+ `${portalFamilyRoot}portal.test.ts`,
3404
+ `${portalFamilyRoot}portal-stack.test.ts`,
3405
+ `${portalFamilyRoot}portal-ssr.test.ts`
3406
+ ],
3407
+ typeTests: [`${portalFamilyRoot}portal.types.test-d.ts`],
3408
+ rendererFixture: "families/overlays/portal/portal.vue",
3409
+ qualityGates: componentQualityGates,
3410
+ bundleBudget: {
3411
+ exportName: "Portal",
3412
+ retainedSignature: "data-vize-ui.+portal",
3413
+ maximumJavaScriptGzipBytes: 800,
3414
+ maximumCssGzipBytes: 0
3415
+ },
3416
+ aliases: [
3417
+ "teleport",
3418
+ "portalled content",
3419
+ "nested portal stack"
3420
+ ],
3421
+ upstreamCoverage: ["HTML Teleport", "document portal"],
3422
+ dependencies: [],
3423
+ maturity: "stable",
3424
+ owner: catalogOwner
3425
+ },
3426
+ {
3427
+ canonicalName: "positioner",
3428
+ title: "Positioner",
3429
+ packageSubpath: "./positioner",
3430
+ entryFile: `${positionerFamilyRoot}positioner.ts`,
3431
+ sourceFiles: [
3432
+ `${positionerFamilyRoot}positioner.vue`,
3433
+ `${positionerFamilyRoot}positioner-arrow.vue`,
3434
+ `${positionerFamilyRoot}positioner.ts`,
3435
+ `${positionerFamilyRoot}positioner-context.ts`,
3436
+ `${positionerFamilyRoot}positioner-geometry.ts`,
3437
+ `${positionerFamilyRoot}positioner-runtime.ts`,
3438
+ `${positionerFamilyRoot}positioner-size.ts`,
3439
+ `${positionerFamilyRoot}positioner-types.ts`,
3440
+ `${positionerFamilyRoot}positioner-viewport.ts`
3441
+ ],
3442
+ behaviorContract: `${positionerFamilyRoot}positioner.behavior.md`,
3443
+ tests: [
3444
+ `${positionerFamilyRoot}positioner.test.ts`,
3445
+ `${positionerFamilyRoot}positioner-geometry.test.ts`,
3446
+ `${positionerFamilyRoot}positioner-size.test.ts`,
3447
+ `${positionerFamilyRoot}positioner-viewport.test.ts`,
3448
+ `${positionerFamilyRoot}positioner-ssr.test.ts`
3449
+ ],
3450
+ typeTests: [`${positionerFamilyRoot}positioner.types.test-d.ts`],
3451
+ rendererFixture: "families/overlays/positioner/positioner.vue",
3452
+ qualityGates: componentQualityGates,
3453
+ bundleBudget: {
3454
+ exportName: "createPositioner",
3455
+ retainedSignature: "VIZE_UI_POSITIONER_DISPOSED",
3456
+ allowedRetainedFamilies: ["context"],
3457
+ maximumJavaScriptGzipBytes: 3500,
3458
+ maximumCssGzipBytes: 0
3459
+ },
3460
+ aliases: [
3461
+ "floating",
3462
+ "anchor position",
3463
+ "collision",
3464
+ "arrow",
3465
+ "size",
3466
+ "safe area"
3467
+ ],
3468
+ upstreamCoverage: [
3469
+ "CSS absolute positioning",
3470
+ "visual viewport",
3471
+ "collision flipping",
3472
+ "safe-area environment insets"
3473
+ ],
3474
+ dependencies: ["context"],
3475
+ maturity: "stable",
3476
+ owner: catalogOwner
3477
+ },
3478
+ {
3479
+ canonicalName: "presence",
3480
+ title: "Presence",
3481
+ packageSubpath: "./presence",
3482
+ entryFile: `${presenceFamilyRoot}presence.ts`,
3483
+ sourceFiles: [
3484
+ `${presenceFamilyRoot}presence.vue`,
3485
+ `${presenceFamilyRoot}presence.ts`,
3486
+ `${presenceFamilyRoot}presence-runtime.ts`,
3487
+ `${presenceFamilyRoot}presence-types.ts`
3488
+ ],
3489
+ behaviorContract: `${presenceFamilyRoot}presence.behavior.md`,
3490
+ tests: [`${presenceFamilyRoot}presence.test.ts`, `${presenceFamilyRoot}presence-ssr.test.ts`],
3491
+ typeTests: [`${presenceFamilyRoot}presence.types.test-d.ts`],
3492
+ rendererFixture: "families/overlays/presence/presence.vue",
3493
+ qualityGates: componentQualityGates,
3494
+ bundleBudget: {
3495
+ exportName: "createPresence",
3496
+ retainedSignature: "VIZE_UI_PRESENCE_DISPOSED",
3497
+ maximumJavaScriptGzipBytes: 2200,
3498
+ maximumCssGzipBytes: 0
3499
+ },
3500
+ aliases: [
3501
+ "enter exit",
3502
+ "mount animation",
3503
+ "presence"
3504
+ ],
3505
+ upstreamCoverage: [
3506
+ "CSS animations",
3507
+ "CSS transitions",
3508
+ "View Transitions"
3509
+ ],
3510
+ dependencies: [],
3511
+ maturity: "stable",
3512
+ owner: catalogOwner
3513
+ },
3514
+ ...popoverFamilyCatalog,
3515
+ {
3516
+ canonicalName: "tooltip",
3517
+ title: "Tooltip",
3518
+ packageSubpath: "./tooltip",
3519
+ entryFile: "src/families/overlays/tooltip/tooltip.ts",
3520
+ sourceFiles: [
3521
+ "src/families/overlays/tooltip/tooltip-content.vue",
3522
+ "src/families/overlays/tooltip/tooltip-context.ts",
3523
+ "src/families/overlays/tooltip/tooltip-root.vue",
3524
+ "src/families/overlays/tooltip/tooltip-trigger.vue",
3525
+ "src/families/overlays/tooltip/tooltip.ts",
3526
+ "src/families/overlays/tooltip/tooltip-types.ts"
3527
+ ],
3528
+ behaviorContract: "src/families/overlays/tooltip/tooltip.behavior.md",
3529
+ tests: ["src/families/overlays/tooltip/tooltip.test.ts", "src/families/overlays/tooltip/tooltip-ssr.test.ts"],
3530
+ typeTests: ["src/families/overlays/tooltip/tooltip.types.test-d.ts"],
3531
+ rendererFixture: "TooltipConsumer.vue",
3532
+ qualityGates: componentQualityGates,
3533
+ bundleBudget: {
3534
+ exportName: "TooltipRoot",
3535
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}tooltip-root",
3536
+ allowedRetainedFamilies: ["context", "controllable-state"],
3537
+ maximumJavaScriptGzipBytes: 2200,
3538
+ maximumCssGzipBytes: 0
3539
+ },
3540
+ aliases: [
3541
+ "hover tip",
3542
+ "description bubble",
3543
+ "help text",
3544
+ "floating hint"
3545
+ ],
3546
+ upstreamCoverage: [
3547
+ "WAI-ARIA tooltip pattern",
3548
+ "Radix Tooltip",
3549
+ "Reka UI Tooltip"
3550
+ ],
3551
+ dependencies: [
3552
+ "context",
3553
+ "controllable-state",
3554
+ "dismissable-layer",
3555
+ "hover",
3556
+ "id",
3557
+ "portal",
3558
+ "positioner",
3559
+ "presence"
3560
+ ],
3561
+ maturity: "stable",
3562
+ owner: catalogOwner
3563
+ },
3564
+ {
3565
+ canonicalName: "transition",
3566
+ title: "Transition",
3567
+ packageSubpath: "./transition",
3568
+ entryFile: `${transitionFamilyRoot}transition.ts`,
3569
+ sourceFiles: [
3570
+ `${transitionFamilyRoot}transition.vue`,
3571
+ `${transitionFamilyRoot}transition.ts`,
3572
+ `${transitionFamilyRoot}transition-runtime.ts`,
3573
+ `${transitionFamilyRoot}transition-types.ts`
3574
+ ],
3575
+ behaviorContract: `${transitionFamilyRoot}transition.behavior.md`,
3576
+ tests: [`${transitionFamilyRoot}transition.test.ts`, `${transitionFamilyRoot}transition-ssr.test.ts`],
3577
+ typeTests: [`${transitionFamilyRoot}transition.types.test-d.ts`],
3578
+ rendererFixture: "families/overlays/transition/transition.vue",
3579
+ qualityGates: componentQualityGates,
3580
+ bundleBudget: {
3581
+ exportName: "createTransition",
3582
+ retainedSignature: "VIZE_UI_TRANSITION_DISPOSED",
3583
+ allowedRetainedFamilies: ["presence"],
3584
+ maximumJavaScriptGzipBytes: 1400,
3585
+ maximumCssGzipBytes: 0
3586
+ },
3587
+ aliases: [
3588
+ "css transition",
3589
+ "enter leave",
3590
+ "motion complete"
3591
+ ],
3592
+ upstreamCoverage: [
3593
+ "CSS transitions",
3594
+ "CSS animations",
3595
+ "computed motion duration"
3596
+ ],
3597
+ dependencies: ["presence"],
3598
+ maturity: "stable",
3599
+ owner: catalogOwner
3600
+ }
3601
+ ];
3602
+ //#endregion
3603
+ //#region src/catalog/family-catalog-rating.ts
3604
+ const ratingFamilyRoot = "src/families/form/rating/";
3605
+ const ratingFamilyCatalog = [{
3606
+ canonicalName: "rating",
3607
+ title: "Rating",
3608
+ packageSubpath: "./rating",
3609
+ entryFile: `${ratingFamilyRoot}rating.ts`,
3610
+ sourceFiles: [
3611
+ `${ratingFamilyRoot}rating.vue`,
3612
+ `${ratingFamilyRoot}rating.ts`,
3613
+ `${ratingFamilyRoot}rating-runtime.ts`,
3614
+ `${ratingFamilyRoot}rating-state.ts`,
3615
+ `${ratingFamilyRoot}rating-types.ts`
3616
+ ],
3617
+ behaviorContract: `${ratingFamilyRoot}rating.behavior.md`,
3618
+ tests: [
3619
+ `${ratingFamilyRoot}rating.test.ts`,
3620
+ `${ratingFamilyRoot}rating-ssr.test.ts`,
3621
+ `${ratingFamilyRoot}rating-state.test.ts`
3622
+ ],
3623
+ typeTests: [`${ratingFamilyRoot}rating.types.test-d.ts`],
3624
+ rendererFixture: "families/form/rating/rating.vue",
3625
+ qualityGates: componentQualityGates,
3626
+ bundleBudget: {
3627
+ exportName: "Rating",
3628
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}rating",
3629
+ allowedRetainedFamilies: ["controllable-state"],
3630
+ maximumJavaScriptGzipBytes: 4100,
3631
+ maximumCssGzipBytes: 0
3632
+ },
3633
+ aliases: [
3634
+ "rating",
3635
+ "star rating",
3636
+ "score picker"
3637
+ ],
3638
+ upstreamCoverage: [
3639
+ "HTML radio",
3640
+ "WAI-ARIA Radio Group",
3641
+ "React Aria RadioGroup",
3642
+ "Radix ToggleGroup rating examples"
3643
+ ],
3644
+ dependencies: ["controllable-state", "id"],
3645
+ maturity: "stable",
3646
+ owner: catalogOwner
3647
+ }];
3648
+ //#endregion
3649
+ //#region src/catalog/family-catalog-selection.ts
3650
+ const checkboxFamilyRoot = "src/families/selection/checkbox/";
3651
+ const listboxFamilyRoot = "src/families/selection/listbox/";
3652
+ const nativeSelectFamilyRoot = "src/families/selection/native-select/";
3653
+ const radioGroupFamilyRoot = "src/families/selection/radio-group/";
3654
+ const switchFamilyRoot = "src/families/selection/switch/";
3655
+ const toggleFamilyRoot = "src/families/selection/toggle/";
3656
+ const toggleGroupFamilyRoot = "src/families/selection/toggle-group/";
3657
+ const selectionFamilyCatalog = [
3658
+ {
3659
+ canonicalName: "checkbox",
3660
+ title: "Checkbox",
3661
+ packageSubpath: "./checkbox",
3662
+ entryFile: `${checkboxFamilyRoot}checkbox.ts`,
3663
+ sourceFiles: [
3664
+ `${checkboxFamilyRoot}checkbox-control.vue`,
3665
+ `${checkboxFamilyRoot}checkbox.ts`,
3666
+ `${checkboxFamilyRoot}checkbox-state.ts`
3667
+ ],
3668
+ behaviorContract: `${checkboxFamilyRoot}checkbox.behavior.md`,
3669
+ tests: [`${checkboxFamilyRoot}checkbox.test.ts`],
3670
+ rendererFixture: "families/selection/checkbox/checkbox-control.vue",
3671
+ qualityGates: componentQualityGates,
3672
+ bundleBudget: {
3673
+ exportName: "Checkbox",
3674
+ retainedSignature: "data-vize-ui[\\s\\S]{0,24}checkbox",
3675
+ allowedRetainedFamilies: ["controllable-state"],
3676
+ maximumJavaScriptGzipBytes: 1100,
3677
+ maximumCssGzipBytes: 0
3678
+ },
3679
+ aliases: ["checkbox control", "mixed checkbox"],
3680
+ upstreamCoverage: [
3681
+ "shadcn/ui Checkbox",
3682
+ "Reka UI Checkbox",
3683
+ "React Aria Checkbox"
3684
+ ],
3685
+ dependencies: ["controllable-state"],
3686
+ maturity: "stable",
3687
+ owner: catalogOwner
3688
+ },
3689
+ {
3690
+ canonicalName: "listbox",
3691
+ title: "Listbox",
3692
+ packageSubpath: "./listbox",
3693
+ entryFile: `${listboxFamilyRoot}listbox.ts`,
3694
+ sourceFiles: [
3695
+ `${listboxFamilyRoot}listbox.vue`,
3696
+ `${listboxFamilyRoot}listbox-item.vue`,
3697
+ `${listboxFamilyRoot}listbox.ts`,
3698
+ `${listboxFamilyRoot}listbox-context.ts`,
3699
+ `${listboxFamilyRoot}listbox-types.ts`,
3700
+ `${listboxFamilyRoot}listbox-value.ts`
3701
+ ],
3702
+ behaviorContract: `${listboxFamilyRoot}listbox.behavior.md`,
3703
+ tests: [`${listboxFamilyRoot}listbox.test.ts`, `${listboxFamilyRoot}listbox-ssr.test.ts`],
3704
+ typeTests: [`${listboxFamilyRoot}listbox.types.test-d.ts`],
3705
+ rendererFixture: "ListboxConsumer.vue",
3706
+ qualityGates: componentQualityGates,
3707
+ bundleBudget: {
3708
+ exportName: "Listbox",
3709
+ retainedSignature: "data-vize-ui\":(?:`listbox`|\"listbox\"|'listbox')",
3710
+ allowedRetainedFamilies: [
3711
+ "collection",
3712
+ "composite-navigation",
3713
+ "context",
3714
+ "controllable-state",
3715
+ "typeahead"
3716
+ ],
3717
+ maximumJavaScriptGzipBytes: 9100,
3718
+ maximumCssGzipBytes: 0
3719
+ },
3720
+ aliases: [
3721
+ "listbox",
3722
+ "option list",
3723
+ "single select",
3724
+ "multi select"
3725
+ ],
3726
+ upstreamCoverage: [
3727
+ "WAI-ARIA listbox pattern",
3728
+ "React Aria ListBox",
3729
+ "Ariakit Select",
3730
+ "Reka UI Listbox"
3731
+ ],
3732
+ dependencies: [
3733
+ "collection",
3734
+ "composite-navigation",
3735
+ "context",
3736
+ "controllable-state",
3737
+ "id",
3738
+ "typeahead"
3739
+ ],
3740
+ maturity: "stable",
3741
+ owner: catalogOwner
3742
+ },
3743
+ {
3744
+ canonicalName: "native-select",
3745
+ title: "Native Select",
3746
+ packageSubpath: "./native-select",
3747
+ entryFile: `${nativeSelectFamilyRoot}native-select.ts`,
3748
+ sourceFiles: [
3749
+ `${nativeSelectFamilyRoot}native-select.vue`,
3750
+ `${nativeSelectFamilyRoot}native-select.ts`,
3751
+ `${nativeSelectFamilyRoot}native-select-types.ts`,
3752
+ `${nativeSelectFamilyRoot}native-select-value.ts`
3753
+ ],
3754
+ behaviorContract: `${nativeSelectFamilyRoot}native-select.behavior.md`,
3755
+ tests: [`${nativeSelectFamilyRoot}native-select.test.ts`, `${nativeSelectFamilyRoot}native-select-ssr.test.ts`],
3756
+ typeTests: [`${nativeSelectFamilyRoot}native-select.types.test-d.ts`],
3757
+ rendererFixture: "families/selection/native-select/native-select.vue",
3758
+ qualityGates: componentQualityGates,
3759
+ bundleBudget: {
3760
+ exportName: "NativeSelect",
3761
+ retainedSignature: "data-vize-ui[\\s\\S]{0,40}native-select",
3762
+ allowedRetainedFamilies: ["controllable-state"],
3763
+ maximumJavaScriptGzipBytes: 4800,
3764
+ maximumCssGzipBytes: 0
3765
+ },
3766
+ aliases: [
3767
+ "native select",
3768
+ "select",
3769
+ "form select",
3770
+ "html select"
3771
+ ],
3772
+ upstreamCoverage: [
3773
+ "HTML select element",
3774
+ "React Aria Select native escape hatch",
3775
+ "Radix Select native form fallback",
3776
+ "Reka UI Select hidden native select interop"
3777
+ ],
3778
+ dependencies: ["controllable-state", "id"],
3779
+ maturity: "stable",
3780
+ owner: catalogOwner
3781
+ },
3782
+ {
3783
+ canonicalName: "radio-group",
3784
+ title: "Radio Group",
3785
+ packageSubpath: "./radio-group",
3786
+ entryFile: `${radioGroupFamilyRoot}radio-group.ts`,
3787
+ sourceFiles: [
3788
+ `${radioGroupFamilyRoot}radio-group.vue`,
3789
+ `${radioGroupFamilyRoot}radio-group-item.vue`,
3790
+ `${radioGroupFamilyRoot}radio-group.ts`,
3791
+ `${radioGroupFamilyRoot}radio-group-context.ts`,
3792
+ `${radioGroupFamilyRoot}radio-group-types.ts`
3793
+ ],
3794
+ behaviorContract: `${radioGroupFamilyRoot}radio-group.behavior.md`,
3795
+ tests: [`${radioGroupFamilyRoot}radio-group.test.ts`, `${radioGroupFamilyRoot}radio-group-ssr.test.ts`],
3796
+ typeTests: [`${radioGroupFamilyRoot}radio-group.types.test-d.ts`],
3797
+ rendererFixture: "RadioGroupConsumer.vue",
3798
+ qualityGates: componentQualityGates,
3799
+ bundleBudget: {
3800
+ exportName: "RadioGroup",
3801
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}radio-group",
3802
+ allowedRetainedFamilies: ["context", "controllable-state"],
3803
+ maximumJavaScriptGzipBytes: 2300,
3804
+ maximumCssGzipBytes: 0
3805
+ },
3806
+ aliases: [
3807
+ "radio group",
3808
+ "choice group",
3809
+ "single choice"
3810
+ ],
3811
+ upstreamCoverage: [
3812
+ "HTML radio",
3813
+ "WAI-ARIA Radio Group",
3814
+ "React Aria RadioGroup",
3815
+ "Reka UI Radio Group"
3816
+ ],
3817
+ dependencies: [
3818
+ "context",
3819
+ "controllable-state",
3820
+ "id"
3821
+ ],
3822
+ maturity: "stable",
3823
+ owner: catalogOwner
3824
+ },
3825
+ {
3826
+ canonicalName: "switch",
3827
+ title: "Switch",
3828
+ packageSubpath: "./switch",
3829
+ entryFile: `${switchFamilyRoot}switch.ts`,
3830
+ sourceFiles: [
3831
+ `${switchFamilyRoot}switch-control.vue`,
3832
+ `${switchFamilyRoot}switch.ts`,
3833
+ `${switchFamilyRoot}switch-types.ts`
3834
+ ],
3835
+ behaviorContract: `${switchFamilyRoot}switch.behavior.md`,
3836
+ tests: [`${switchFamilyRoot}switch.test.ts`],
3837
+ typeTests: [`${switchFamilyRoot}switch.types.test-d.ts`],
3838
+ rendererFixture: "families/selection/switch/switch-control.vue",
3839
+ qualityGates: componentQualityGates,
3840
+ bundleBudget: {
3841
+ exportName: "Switch",
3842
+ retainedSignature: "role[\\s\\S]{0,24}switch",
3843
+ allowedRetainedFamilies: ["controllable-state"],
3844
+ maximumJavaScriptGzipBytes: 3200,
3845
+ maximumCssGzipBytes: 0
3846
+ },
3847
+ aliases: [
3848
+ "switch control",
3849
+ "on off switch",
3850
+ "form switch"
3851
+ ],
3852
+ upstreamCoverage: [
3853
+ "WAI-ARIA Switch",
3854
+ "React Aria Switch",
3855
+ "Reka UI Switch"
3856
+ ],
3857
+ dependencies: ["controllable-state", "id"],
3858
+ maturity: "stable",
3859
+ owner: catalogOwner
3860
+ },
3861
+ {
3862
+ canonicalName: "toggle",
3863
+ title: "Toggle",
3864
+ packageSubpath: "./toggle",
3865
+ entryFile: `${toggleFamilyRoot}toggle.ts`,
3866
+ sourceFiles: [
3867
+ `${toggleFamilyRoot}toggle-button.vue`,
3868
+ `${toggleFamilyRoot}toggle.ts`,
3869
+ `${toggleFamilyRoot}toggle-types.ts`
3870
+ ],
3871
+ behaviorContract: `${toggleFamilyRoot}toggle.behavior.md`,
3872
+ tests: [`${toggleFamilyRoot}toggle.test.ts`],
3873
+ typeTests: [`${toggleFamilyRoot}toggle.types.test-d.ts`],
3874
+ rendererFixture: "families/selection/toggle/toggle-button.vue",
3875
+ qualityGates: componentQualityGates,
3876
+ bundleBudget: {
3877
+ exportName: "Toggle",
3878
+ retainedSignature: "aria-pressed",
3879
+ allowedRetainedFamilies: ["controllable-state"],
3880
+ maximumJavaScriptGzipBytes: 1700,
3881
+ maximumCssGzipBytes: 0
3882
+ },
3883
+ aliases: [
3884
+ "toggle button",
3885
+ "pressed button",
3886
+ "on off button"
3887
+ ],
3888
+ upstreamCoverage: [
3889
+ "WAI-ARIA toggle button",
3890
+ "React Aria ToggleButton",
3891
+ "Reka UI Toggle"
3892
+ ],
3893
+ dependencies: ["controllable-state"],
3894
+ maturity: "stable",
3895
+ owner: catalogOwner
3896
+ },
3897
+ {
3898
+ canonicalName: "toggle-group",
3899
+ title: "Toggle Group",
3900
+ packageSubpath: "./toggle-group",
3901
+ entryFile: `${toggleGroupFamilyRoot}toggle-group.ts`,
3902
+ sourceFiles: [
3903
+ `${toggleGroupFamilyRoot}toggle-group.vue`,
3904
+ `${toggleGroupFamilyRoot}toggle-group-item.vue`,
3905
+ `${toggleGroupFamilyRoot}toggle-group.ts`,
3906
+ `${toggleGroupFamilyRoot}toggle-group-context.ts`,
3907
+ `${toggleGroupFamilyRoot}toggle-group-types.ts`,
3908
+ `${toggleGroupFamilyRoot}toggle-group-value.ts`
3909
+ ],
3910
+ behaviorContract: `${toggleGroupFamilyRoot}toggle-group.behavior.md`,
3911
+ tests: [`${toggleGroupFamilyRoot}toggle-group.test.ts`, `${toggleGroupFamilyRoot}toggle-group-ssr.test.ts`],
3912
+ typeTests: [`${toggleGroupFamilyRoot}toggle-group.types.test-d.ts`],
3913
+ rendererFixture: "ToggleGroupConsumer.vue",
3914
+ qualityGates: componentQualityGates,
3915
+ bundleBudget: {
3916
+ exportName: "ToggleGroup",
3917
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}toggle-group",
3918
+ allowedRetainedFamilies: ["context", "controllable-state"],
3919
+ maximumJavaScriptGzipBytes: 4e3,
3920
+ maximumCssGzipBytes: 0
3921
+ },
3922
+ aliases: [
3923
+ "toggle button group",
3924
+ "pressed button group",
3925
+ "segmented control"
3926
+ ],
3927
+ upstreamCoverage: [
3928
+ "WAI-ARIA toggle button group",
3929
+ "Radix UI ToggleGroup",
3930
+ "Reka UI ToggleGroup"
3931
+ ],
3932
+ dependencies: ["context", "controllable-state"],
3933
+ maturity: "stable",
3934
+ owner: catalogOwner
3935
+ }
3936
+ ];
3937
+ //#endregion
3938
+ //#region src/catalog/family-catalog-slider.ts
3939
+ const sliderFamilyRoot = "src/families/form/slider/";
3940
+ const sliderFamilyCatalog = [{
3941
+ canonicalName: "slider",
3942
+ title: "Slider",
3943
+ packageSubpath: "./slider",
3944
+ entryFile: `${sliderFamilyRoot}slider.ts`,
3945
+ sourceFiles: [
3946
+ `${sliderFamilyRoot}slider.vue`,
3947
+ `${sliderFamilyRoot}slider.ts`,
3948
+ `${sliderFamilyRoot}slider-state.ts`,
3949
+ `${sliderFamilyRoot}slider-types.ts`
3950
+ ],
3951
+ behaviorContract: `${sliderFamilyRoot}slider.behavior.md`,
3952
+ tests: [`${sliderFamilyRoot}slider.test.ts`, `${sliderFamilyRoot}slider-ssr.test.ts`],
3953
+ typeTests: [`${sliderFamilyRoot}slider.types.test-d.ts`],
3954
+ rendererFixture: "families/form/slider/slider.vue",
3955
+ qualityGates: componentQualityGates,
3956
+ bundleBudget: {
3957
+ exportName: "Slider",
3958
+ retainedSignature: "data-vize-ui[\\s\\S]{0,32}slider",
3959
+ allowedRetainedFamilies: ["controllable-state"],
3960
+ maximumJavaScriptGzipBytes: 3600,
3961
+ maximumCssGzipBytes: 0
3962
+ },
3963
+ aliases: [
3964
+ "range input",
3965
+ "single-thumb slider",
3966
+ "volume slider"
3967
+ ],
3968
+ upstreamCoverage: [
3969
+ "HTML range input",
3970
+ "WAI-ARIA Slider",
3971
+ "React Aria Slider"
3972
+ ],
3973
+ dependencies: ["controllable-state", "id"],
3974
+ maturity: "stable",
3975
+ owner: catalogOwner
3976
+ }];
3977
+ //#endregion
3978
+ //#region src/catalog/family-catalog-typography.ts
3979
+ const typographyFamilyCatalog = [
3980
+ {
3981
+ canonicalName: "blockquote",
3982
+ title: "Blockquote",
3983
+ packageSubpath: "./blockquote",
3984
+ entryFile: "src/families/typography/blockquote/blockquote.ts",
3985
+ sourceFiles: [
3986
+ "src/families/typography/blockquote/blockquote.vue",
3987
+ "src/families/typography/blockquote/blockquote.ts",
3988
+ "src/families/typography/blockquote/blockquote-types.ts"
3989
+ ],
3990
+ behaviorContract: "src/families/typography/blockquote/blockquote.behavior.md",
3991
+ tests: ["src/families/typography/blockquote/blockquote.test.ts", "src/families/typography/blockquote/blockquote-ssr.test.ts"],
3992
+ typeTests: ["src/families/typography/blockquote/blockquote.types.test-d.ts"],
3993
+ rendererFixture: "BlockquoteConsumer.vue",
3994
+ qualityGates: componentQualityGates,
3995
+ bundleBudget: {
3996
+ exportName: "Blockquote",
3997
+ retainedSignature: "data-vize-ui\":(?:`blockquote`|\"blockquote\"|'blockquote')",
3998
+ maximumJavaScriptGzipBytes: 900,
3999
+ maximumCssGzipBytes: 0
4000
+ },
4001
+ aliases: [
4002
+ "quote",
4003
+ "pull quote",
4004
+ "quoted text",
4005
+ "quotation block"
4006
+ ],
4007
+ upstreamCoverage: [
4008
+ "HTML blockquote element",
4009
+ "HTML cite attribute",
4010
+ "Reka UI Primitive"
4011
+ ],
4012
+ dependencies: [],
4013
+ maturity: "stable",
4014
+ owner: catalogOwner
4015
+ },
4016
+ {
4017
+ canonicalName: "code",
4018
+ title: "Code",
4019
+ packageSubpath: "./code",
4020
+ entryFile: "src/families/typography/code/code.ts",
4021
+ sourceFiles: [
4022
+ "src/families/typography/code/code.vue",
4023
+ "src/families/typography/code/code.ts",
4024
+ "src/families/typography/code/code-types.ts"
4025
+ ],
4026
+ behaviorContract: "src/families/typography/code/code.behavior.md",
4027
+ tests: ["src/families/typography/code/code.test.ts", "src/families/typography/code/code-ssr.test.ts"],
4028
+ typeTests: ["src/families/typography/code/code.types.test-d.ts"],
4029
+ rendererFixture: "CodeConsumer.vue",
4030
+ qualityGates: componentQualityGates,
4031
+ bundleBudget: {
4032
+ exportName: "Code",
4033
+ retainedSignature: "data-vize-ui\":(?:`code`|\"code\"|'code')",
4034
+ maximumJavaScriptGzipBytes: 850,
4035
+ maximumCssGzipBytes: 0
4036
+ },
4037
+ aliases: [
4038
+ "inline code",
4039
+ "code snippet",
4040
+ "code block",
4041
+ "monospace text"
4042
+ ],
4043
+ upstreamCoverage: [
4044
+ "HTML code element",
4045
+ "HTML pre element",
4046
+ "Reka UI Primitive"
4047
+ ],
4048
+ dependencies: [],
4049
+ maturity: "stable",
4050
+ owner: catalogOwner
4051
+ },
4052
+ {
4053
+ canonicalName: "heading",
4054
+ title: "Heading",
4055
+ packageSubpath: "./heading",
4056
+ entryFile: "src/families/typography/heading/heading.ts",
4057
+ sourceFiles: [
4058
+ "src/families/typography/heading/heading.vue",
4059
+ "src/families/typography/heading/heading.ts",
4060
+ "src/families/typography/heading/heading-types.ts"
4061
+ ],
4062
+ behaviorContract: "src/families/typography/heading/heading.behavior.md",
4063
+ tests: ["src/families/typography/heading/heading.test.ts", "src/families/typography/heading/heading-ssr.test.ts"],
4064
+ typeTests: ["src/families/typography/heading/heading.types.test-d.ts"],
4065
+ rendererFixture: "HeadingConsumer.vue",
4066
+ qualityGates: componentQualityGates,
4067
+ bundleBudget: {
4068
+ exportName: "Heading",
4069
+ retainedSignature: "data-vize-ui\":(?:`heading`|\"heading\"|'heading')",
4070
+ maximumJavaScriptGzipBytes: 950,
4071
+ maximumCssGzipBytes: 0
4072
+ },
4073
+ aliases: [
4074
+ "semantic heading",
4075
+ "typography heading",
4076
+ "title",
4077
+ "section heading"
4078
+ ],
4079
+ upstreamCoverage: [
4080
+ "HTML heading content",
4081
+ "ARIA document structure",
4082
+ "Reka UI Primitive"
4083
+ ],
4084
+ dependencies: [],
4085
+ maturity: "stable",
4086
+ owner: catalogOwner
4087
+ },
4088
+ {
4089
+ canonicalName: "kbd",
4090
+ title: "Kbd",
4091
+ packageSubpath: "./kbd",
4092
+ entryFile: "src/families/typography/kbd/kbd.ts",
4093
+ sourceFiles: [
4094
+ "src/families/typography/kbd/kbd.vue",
4095
+ "src/families/typography/kbd/kbd.ts",
4096
+ "src/families/typography/kbd/kbd-types.ts"
4097
+ ],
4098
+ behaviorContract: "src/families/typography/kbd/kbd.behavior.md",
4099
+ tests: ["src/families/typography/kbd/kbd.test.ts", "src/families/typography/kbd/kbd-ssr.test.ts"],
4100
+ typeTests: ["src/families/typography/kbd/kbd.types.test-d.ts"],
4101
+ rendererFixture: "KbdConsumer.vue",
4102
+ qualityGates: componentQualityGates,
4103
+ bundleBudget: {
4104
+ exportName: "Kbd",
4105
+ retainedSignature: "data-vize-ui\":(?:`kbd`|\"kbd\"|'kbd')",
4106
+ maximumJavaScriptGzipBytes: 850,
4107
+ maximumCssGzipBytes: 0
4108
+ },
4109
+ aliases: [
4110
+ "keyboard input",
4111
+ "shortcut",
4112
+ "keycap",
4113
+ "keyboard sequence"
4114
+ ],
4115
+ upstreamCoverage: [
4116
+ "HTML kbd element",
4117
+ "CSS inline layout",
4118
+ "Reka UI Primitive"
4119
+ ],
4120
+ dependencies: [],
4121
+ maturity: "stable",
4122
+ owner: catalogOwner
4123
+ },
4124
+ {
4125
+ canonicalName: "text",
4126
+ title: "Text",
4127
+ packageSubpath: "./text",
4128
+ entryFile: "src/families/typography/text/text.ts",
4129
+ sourceFiles: [
4130
+ "src/families/typography/text/text.vue",
4131
+ "src/families/typography/text/text.ts",
4132
+ "src/families/typography/text/text-types.ts"
4133
+ ],
4134
+ behaviorContract: "src/families/typography/text/text.behavior.md",
4135
+ tests: ["src/families/typography/text/text.test.ts", "src/families/typography/text/text-ssr.test.ts"],
4136
+ typeTests: ["src/families/typography/text/text.types.test-d.ts"],
4137
+ rendererFixture: "TextConsumer.vue",
4138
+ qualityGates: componentQualityGates,
4139
+ bundleBudget: {
4140
+ exportName: "Text",
4141
+ retainedSignature: "data-vize-ui\":(?:`text`|\"text\"|'text')",
4142
+ maximumJavaScriptGzipBytes: 900,
4143
+ maximumCssGzipBytes: 0
4144
+ },
4145
+ aliases: [
4146
+ "body text",
4147
+ "typography text",
4148
+ "copy",
4149
+ "inline text",
4150
+ "truncated text"
4151
+ ],
4152
+ upstreamCoverage: [
4153
+ "HTML phrasing content",
4154
+ "CSS text-overflow",
4155
+ "Reka UI Primitive"
4156
+ ],
4157
+ dependencies: [],
4158
+ maturity: "stable",
4159
+ owner: catalogOwner
4160
+ }
4161
+ ];
4162
+ const uiFamilyCatalog = [...[
4163
+ ...actionFamilyCatalog,
4164
+ ...accessibilityFamilyCatalog,
4165
+ ...basicFamilyCatalog,
4166
+ ...dataFamilyCatalog,
4167
+ ...feedbackFamilyCatalog,
4168
+ ...foundationFamilyCatalog,
4169
+ ...focusFamilyCatalog,
4170
+ ...i18nFamilyCatalog,
4171
+ ...interactionGestureFamilyCatalog,
4172
+ ...interactionSupportFamilyCatalog,
4173
+ ...layoutFamilyCatalog,
4174
+ ...navigationFamilyCatalog,
4175
+ ...overlayFamilyCatalog,
4176
+ ...ratingFamilyCatalog,
4177
+ ...selectionFamilyCatalog,
4178
+ ...sliderFamilyCatalog,
4179
+ ...typographyFamilyCatalog
4180
+ ]].sort((a, b) => a.canonicalName < b.canonicalName ? -1 : a.canonicalName > b.canonicalName ? 1 : 0);
4181
+ //#endregion
784
4182
  export { UI_FAMILY_CATALOG_SCHEMA_VERSION, uiFamilyCatalog };