@vizejs/ui 0.347.7 → 0.351.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 (96) hide show
  1. package/dist/{button-BMIqJ_M5.d.mts → button-CVX8UBXj.d.mts} +6 -7
  2. package/dist/{button-CaLxP2l2.mjs → button-DT8AKlds.mjs} +2 -2
  3. package/dist/button.d.mts +1 -1
  4. package/dist/button.mjs +1 -1
  5. package/dist/catalog.d.mts +541 -0
  6. package/dist/catalog.mjs +784 -0
  7. package/dist/{checkbox-B4y9GUen.mjs → checkbox-BgIvwjyC.mjs} +2 -2
  8. package/dist/{checkbox-sbhaWekB.d.mts → checkbox-DP3_ko7D.d.mts} +7 -8
  9. package/dist/checkbox.d.mts +1 -1
  10. package/dist/checkbox.mjs +1 -1
  11. package/dist/collection.d.mts +2 -2
  12. package/dist/collection.mjs +1 -1
  13. package/dist/composite-navigation-QINW9GLy.d.mts +115 -0
  14. package/dist/composite-navigation-Skx3LZsv.mjs +354 -0
  15. package/dist/composite-navigation.d.mts +2 -0
  16. package/dist/composite-navigation.mjs +2 -0
  17. package/dist/controllable-state.d.mts +1 -1
  18. package/dist/dismissable-layer-4icKahVs.d.mts +119 -0
  19. package/dist/dismissable-layer-CwG1gtdz.mjs +488 -0
  20. package/dist/dismissable-layer.d.mts +2 -0
  21. package/dist/dismissable-layer.mjs +2 -0
  22. package/dist/focus-CAWi_I-0.mjs +318 -0
  23. package/dist/focus-K6dOifoZ.d.mts +112 -0
  24. package/dist/focus-guards-Bt0C-0qS.d.mts +81 -0
  25. package/dist/focus-guards-DhMPQAT8.mjs +299 -0
  26. package/dist/focus-guards.d.mts +2 -0
  27. package/dist/focus-guards.mjs +2 -0
  28. package/dist/focus-scope-CavhKWx0.d.mts +100 -0
  29. package/dist/focus-scope-D9U1aj67.mjs +340 -0
  30. package/dist/focus-scope-dom-DBwNEWxG.mjs +264 -0
  31. package/dist/focus-scope.d.mts +2 -0
  32. package/dist/focus-scope.mjs +2 -0
  33. package/dist/focus.d.mts +2 -0
  34. package/dist/focus.mjs +2 -0
  35. package/dist/hover-BXwwbSaO.d.mts +80 -0
  36. package/dist/hover.d.mts +2 -0
  37. package/dist/hover.mjs +197 -0
  38. package/dist/{id-BSgJwErt.d.mts → id-5OAUyVPd.d.mts} +2 -3
  39. package/dist/{id-CPBdeoL3.mjs → id-mziSyAse.mjs} +2 -2
  40. package/dist/id.d.mts +2 -2
  41. package/dist/id.mjs +1 -1
  42. package/dist/index.d.mts +22 -11
  43. package/dist/index.mjs +21 -10
  44. package/dist/inert-outside-CyqtoKQ4.mjs +346 -0
  45. package/dist/inert-outside-tuHRmaqJ.d.mts +43 -0
  46. package/dist/inert-outside.d.mts +2 -0
  47. package/dist/inert-outside.mjs +2 -0
  48. package/dist/interaction-modality.d.mts +2 -2
  49. package/dist/interaction-modality.mjs +1 -1
  50. package/dist/long-press-Dsul69gk.mjs +340 -0
  51. package/dist/{long-press-CRjjjJK2.d.mts → long-press-cll6z2K9.d.mts} +8 -18
  52. package/dist/long-press.d.mts +2 -2
  53. package/dist/long-press.mjs +1 -245
  54. package/dist/media-pdf.d.mts +1 -1
  55. package/dist/media-pdf.mjs +1 -1
  56. package/dist/media.d.mts +1 -1
  57. package/dist/media.mjs +1 -1
  58. package/dist/move-BOmXDYbh.d.mts +103 -0
  59. package/dist/move-BVvMHzxr.mjs +386 -0
  60. package/dist/move.d.mts +2 -0
  61. package/dist/move.mjs +2 -0
  62. package/dist/{press-Bp57IOe2.mjs → press-N_mE3Mgx.mjs} +3 -149
  63. package/dist/press-event-Cd2OPpmw.mjs +149 -0
  64. package/dist/press.d.mts +1 -1
  65. package/dist/press.mjs +1 -1
  66. package/dist/{primitive-BE28SwD7.mjs → primitive-BX31dogp.mjs} +2 -2
  67. package/dist/{primitive-Bog8qvd8.d.mts → primitive-C8jW7DLd.d.mts} +3 -4
  68. package/dist/primitive.d.mts +1 -1
  69. package/dist/primitive.mjs +1 -1
  70. package/dist/scroll-lock-BgVtX4wT.d.mts +49 -0
  71. package/dist/scroll-lock-Ckbmm0-J.mjs +313 -0
  72. package/dist/scroll-lock.d.mts +2 -0
  73. package/dist/scroll-lock.mjs +2 -0
  74. package/dist/spatial-navigation-CHj9mDZH.d.mts +106 -0
  75. package/dist/spatial-navigation-D6-UDavU.mjs +301 -0
  76. package/dist/spatial-navigation.d.mts +2 -0
  77. package/dist/spatial-navigation.mjs +2 -0
  78. package/dist/typeahead-B7KDxE_u.mjs +175 -0
  79. package/dist/typeahead-BbgUB2Bj.d.mts +71 -0
  80. package/dist/typeahead.d.mts +2 -0
  81. package/dist/typeahead.mjs +2 -0
  82. package/dist/visually-hidden-BOqfqBFt.d.mts +17 -0
  83. package/dist/{visually-hidden-CTSV3ctZ.mjs → visually-hidden-BwDOx5yf.mjs} +2 -2
  84. package/dist/visually-hidden.d.mts +1 -1
  85. package/dist/visually-hidden.mjs +1 -1
  86. package/package.json +67 -6
  87. package/dist/visually-hidden-CekDwEwR.d.mts +0 -19
  88. /package/dist/{_plugin-vue_export-helper-BVN2DL-U.mjs → _plugin-vue_export-helper-BOaGB7Aw.mjs} +0 -0
  89. /package/dist/{collection-aHZ6Pf0e.d.mts → collection-B_dFZOHO.d.mts} +0 -0
  90. /package/dist/{collection-CoOROaho.mjs → collection-eHN150dT.mjs} +0 -0
  91. /package/dist/{controllable-state-B9v6FClp.d.mts → controllable-state-BtoxKahh.d.mts} +0 -0
  92. /package/dist/{interaction-modality-CO-eQzNy.mjs → interaction-modality-DOZK0BpZ.mjs} +0 -0
  93. /package/dist/{interaction-modality-tee79ZBZ.d.mts → interaction-modality-jgHKjPFB.d.mts} +0 -0
  94. /package/dist/{pdf-source-BbZKF_dS.d.mts → pdf-source-BYFK2Pks.d.mts} +0 -0
  95. /package/dist/{pdf-source-C9zNQd9l.mjs → pdf-source-zu1LkCeE.mjs} +0 -0
  96. /package/dist/{press-types-B8Ssxqg4.d.mts → press-types-CNqStzJf.d.mts} +0 -0
@@ -0,0 +1,784 @@
1
+ //#region src/family-catalog-types.ts
2
+ const UI_FAMILY_CATALOG_SCHEMA_VERSION = 1;
3
+ const stableQualityGates = [
4
+ "behavior-contract",
5
+ "mounted-dom",
6
+ "type-inference",
7
+ "tree-shaking",
8
+ "bundle-size"
9
+ ];
10
+ const rendererQualityGates = [
11
+ "dom-compile",
12
+ "ssr-compile",
13
+ "vapor-compile"
14
+ ];
15
+ const interactionQualityGates = [
16
+ ...stableQualityGates,
17
+ "ssr",
18
+ "hydration",
19
+ ...rendererQualityGates
20
+ ];
21
+ const componentQualityGates = [
22
+ ...stableQualityGates,
23
+ "ssr",
24
+ "hydration",
25
+ ...rendererQualityGates
26
+ ];
27
+ const catalogOwner = "ui-foundations";
28
+ //#endregion
29
+ //#region src/family-catalog-basics.ts
30
+ const basicFamilyCatalog = [
31
+ {
32
+ canonicalName: "button",
33
+ title: "Button",
34
+ packageSubpath: "./button",
35
+ entryFile: "src/button.ts",
36
+ sourceFiles: [
37
+ "src/ActionButton.vue",
38
+ "src/button.ts",
39
+ "src/button-keyboard.ts"
40
+ ],
41
+ behaviorContract: "src/button.behavior.md",
42
+ tests: ["src/button.test.ts"],
43
+ rendererFixture: "ActionButton.vue",
44
+ qualityGates: componentQualityGates,
45
+ bundleBudget: {
46
+ exportName: "Button",
47
+ retainedSignature: "aria-busy",
48
+ maximumJavaScriptGzipBytes: 1e3,
49
+ maximumCssGzipBytes: 0
50
+ },
51
+ aliases: ["action-button", "button primitive"],
52
+ upstreamCoverage: [
53
+ "shadcn/ui Button",
54
+ "Reka UI Primitive",
55
+ "React Aria Button"
56
+ ],
57
+ dependencies: ["primitive", "press"],
58
+ maturity: "stable",
59
+ owner: catalogOwner
60
+ },
61
+ {
62
+ canonicalName: "checkbox",
63
+ title: "Checkbox",
64
+ packageSubpath: "./checkbox",
65
+ entryFile: "src/checkbox.ts",
66
+ sourceFiles: [
67
+ "src/CheckboxControl.vue",
68
+ "src/checkbox.ts",
69
+ "src/checkbox-state.ts"
70
+ ],
71
+ behaviorContract: "src/checkbox.behavior.md",
72
+ tests: ["src/checkbox.test.ts"],
73
+ rendererFixture: "CheckboxControl.vue",
74
+ qualityGates: componentQualityGates,
75
+ bundleBudget: {
76
+ exportName: "Checkbox",
77
+ retainedSignature: "aria-checked",
78
+ allowedRetainedFamilies: ["controllable-state"],
79
+ maximumJavaScriptGzipBytes: 1100,
80
+ maximumCssGzipBytes: 0
81
+ },
82
+ aliases: ["checkbox control", "mixed checkbox"],
83
+ upstreamCoverage: [
84
+ "shadcn/ui Checkbox",
85
+ "Reka UI Checkbox",
86
+ "React Aria Checkbox"
87
+ ],
88
+ dependencies: ["controllable-state"],
89
+ maturity: "stable",
90
+ owner: catalogOwner
91
+ },
92
+ {
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,
110
+ bundleBudget: {
111
+ exportName: "createCollectionRegistry",
112
+ retainedSignature: "VIZE_UI_COLLECTION_DISPOSED",
113
+ maximumJavaScriptGzipBytes: 3150,
114
+ maximumCssGzipBytes: 0
115
+ },
116
+ aliases: [
117
+ "collection registry",
118
+ "item registry",
119
+ "logical focus registry"
120
+ ],
121
+ upstreamCoverage: [
122
+ "React Aria Collection",
123
+ "Ariakit Composite Store",
124
+ "Zag collection"
125
+ ],
126
+ dependencies: [],
127
+ maturity: "stable",
128
+ owner: catalogOwner
129
+ },
130
+ {
131
+ canonicalName: "composite-navigation",
132
+ title: "Composite Navigation",
133
+ packageSubpath: "./composite-navigation",
134
+ entryFile: "src/composite-navigation.ts",
135
+ sourceFiles: [
136
+ "src/composite-navigation.ts",
137
+ "src/composite-navigation-dom.ts",
138
+ "src/composite-navigation-internal.ts",
139
+ "src/composite-navigation-types.ts"
140
+ ],
141
+ behaviorContract: "src/composite-navigation.behavior.md",
142
+ 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"
147
+ ],
148
+ typeTests: ["src/composite-navigation.types.test-d.ts"],
149
+ rendererFixture: "CompositeNavigationConsumer.vue",
150
+ qualityGates: interactionQualityGates,
151
+ bundleBudget: {
152
+ exportName: "createCompositeNavigation",
153
+ retainedSignature: "VIZE_UI_COMPOSITE_NAVIGATION_DISPOSED",
154
+ allowedRetainedFamilies: ["typeahead"],
155
+ maximumJavaScriptGzipBytes: 3900,
156
+ maximumCssGzipBytes: 0
157
+ },
158
+ aliases: [
159
+ "roving focus",
160
+ "active descendant",
161
+ "composite widget navigation"
162
+ ],
163
+ upstreamCoverage: [
164
+ "WAI-ARIA composite widgets",
165
+ "Reka UI Roving Focus",
166
+ "Ariakit Composite"
167
+ ],
168
+ dependencies: ["collection", "typeahead"],
169
+ maturity: "stable",
170
+ owner: catalogOwner
171
+ },
172
+ {
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,
182
+ bundleBudget: {
183
+ exportName: "createContext",
184
+ retainedSignature: "VIZE_UI_CONTEXT_MISSING",
185
+ maximumJavaScriptGzipBytes: 450,
186
+ maximumCssGzipBytes: 0
187
+ },
188
+ aliases: ["provide inject context", "compound component context"],
189
+ upstreamCoverage: ["Reka UI createContext", "Radix context scope"],
190
+ dependencies: [],
191
+ maturity: "stable",
192
+ owner: catalogOwner
193
+ },
194
+ {
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,
204
+ bundleBudget: {
205
+ exportName: "useControllableState",
206
+ retainedSignature: "defaultValue[\\s\\S]*Object\\.is[\\s\\S]*defaultValue",
207
+ maximumJavaScriptGzipBytes: 550,
208
+ maximumCssGzipBytes: 0
209
+ },
210
+ aliases: [
211
+ "controllable state",
212
+ "controlled state",
213
+ "uncontrolled state"
214
+ ],
215
+ upstreamCoverage: ["Radix useControllableState", "React Aria controlled state"],
216
+ dependencies: [],
217
+ maturity: "stable",
218
+ owner: catalogOwner
219
+ }
220
+ ];
221
+ //#endregion
222
+ //#region src/family-catalog-focus.ts
223
+ const focusFamilyCatalog = [
224
+ {
225
+ canonicalName: "dismissable-layer",
226
+ title: "Dismissable Layer",
227
+ packageSubpath: "./dismissable-layer",
228
+ entryFile: "src/dismissable-layer.ts",
229
+ sourceFiles: [
230
+ "src/dismissable-layer.ts",
231
+ "src/dismissable-layer-internal.ts",
232
+ "src/dismissable-layer-stack.ts",
233
+ "src/dismissable-layer-types.ts"
234
+ ],
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,
240
+ bundleBudget: {
241
+ exportName: "createDismissableLayer",
242
+ retainedSignature: "VIZE_UI_DISMISSABLE_LAYER_DISPOSED",
243
+ maximumJavaScriptGzipBytes: 2850,
244
+ maximumCssGzipBytes: 0
245
+ },
246
+ 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"
256
+ ],
257
+ dependencies: [],
258
+ maturity: "stable",
259
+ owner: catalogOwner
260
+ },
261
+ {
262
+ canonicalName: "focus",
263
+ title: "Focus Interactions",
264
+ packageSubpath: "./focus",
265
+ entryFile: "src/focus.ts",
266
+ sourceFiles: [
267
+ "src/focus.ts",
268
+ "src/focus-internal.ts",
269
+ "src/focus-types.ts"
270
+ ],
271
+ behaviorContract: "src/focus.behavior.md",
272
+ tests: [
273
+ "src/focus.test.ts",
274
+ "src/focus-lifecycle.test.ts",
275
+ "src/focus-ssr.test.ts"
276
+ ],
277
+ typeTests: ["src/focus.types.test-d.ts"],
278
+ rendererFixture: "FocusConsumer.vue",
279
+ qualityGates: interactionQualityGates,
280
+ bundleBudget: {
281
+ exportName: "createFocus",
282
+ retainedSignature: "VIZE_UI_FOCUS_DISPOSED",
283
+ allowedRetainedFamilies: ["interaction-modality"],
284
+ maximumJavaScriptGzipBytes: 3300,
285
+ maximumCssGzipBytes: 0
286
+ },
287
+ aliases: [
288
+ "focus ring",
289
+ "focus within",
290
+ "focus visible"
291
+ ],
292
+ upstreamCoverage: [
293
+ "React Aria useFocus",
294
+ "React Aria useFocusRing",
295
+ "WICG focus-visible"
296
+ ],
297
+ dependencies: ["interaction-modality"],
298
+ maturity: "stable",
299
+ owner: catalogOwner
300
+ },
301
+ {
302
+ canonicalName: "focus-guards",
303
+ title: "Focus Guards",
304
+ packageSubpath: "./focus-guards",
305
+ entryFile: "src/focus-guards.ts",
306
+ sourceFiles: [
307
+ "src/focus-guards.ts",
308
+ "src/focus-guards-internal.ts",
309
+ "src/focus-guards-stack.ts",
310
+ "src/focus-guards-types.ts"
311
+ ],
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"],
315
+ rendererFixture: "FocusGuardsConsumer.vue",
316
+ qualityGates: interactionQualityGates,
317
+ bundleBudget: {
318
+ exportName: "createFocusGuards",
319
+ retainedSignature: "VIZE_UI_FOCUS_GUARDS_DISPOSED",
320
+ maximumJavaScriptGzipBytes: 3500,
321
+ maximumCssGzipBytes: 0
322
+ },
323
+ aliases: [
324
+ "focus sentinels",
325
+ "tab guards",
326
+ "focus trap guards"
327
+ ],
328
+ upstreamCoverage: ["Radix FocusGuards", "React Aria FocusScope sentinels"],
329
+ dependencies: ["focus-scope"],
330
+ maturity: "stable",
331
+ owner: catalogOwner
332
+ },
333
+ {
334
+ canonicalName: "focus-scope",
335
+ title: "Focus Scope",
336
+ packageSubpath: "./focus-scope",
337
+ entryFile: "src/focus-scope.ts",
338
+ 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"
346
+ ],
347
+ behaviorContract: "src/focus-scope.behavior.md",
348
+ tests: [
349
+ "src/focus-scope.test.ts",
350
+ "src/focus-scope-lifecycle.test.ts",
351
+ "src/focus-scope-ssr.test.ts"
352
+ ],
353
+ typeTests: ["src/focus-scope.types.test-d.ts"],
354
+ rendererFixture: "FocusScopeConsumer.vue",
355
+ qualityGates: interactionQualityGates,
356
+ bundleBudget: {
357
+ exportName: "createFocusScope",
358
+ retainedSignature: "VIZE_UI_FOCUS_SCOPE_DISPOSED",
359
+ maximumJavaScriptGzipBytes: 4050,
360
+ maximumCssGzipBytes: 0
361
+ },
362
+ aliases: [
363
+ "focus trap",
364
+ "focus containment",
365
+ "focus restoration"
366
+ ],
367
+ upstreamCoverage: [
368
+ "React Aria FocusScope",
369
+ "Radix FocusScope",
370
+ "Ariakit FocusTrap"
371
+ ],
372
+ dependencies: [],
373
+ maturity: "stable",
374
+ owner: catalogOwner
375
+ },
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
+ {
435
+ canonicalName: "inert-outside",
436
+ title: "Outside Inerting",
437
+ packageSubpath: "./inert-outside",
438
+ entryFile: "src/inert-outside.ts",
439
+ 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"
445
+ ],
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"],
449
+ rendererFixture: "InertOutsideConsumer.vue",
450
+ qualityGates: interactionQualityGates,
451
+ bundleBudget: {
452
+ exportName: "createInertOutside",
453
+ retainedSignature: "VIZE_UI_INERT_OUTSIDE_DISPOSED",
454
+ maximumJavaScriptGzipBytes: 2175,
455
+ maximumCssGzipBytes: 0
456
+ },
457
+ aliases: [
458
+ "aria hidden outside",
459
+ "outside inerting",
460
+ "overlay inerting"
461
+ ],
462
+ upstreamCoverage: ["Radix overlay inerting", "Adobe Spectrum overlay provider"],
463
+ dependencies: [],
464
+ maturity: "stable",
465
+ owner: catalogOwner
466
+ },
467
+ {
468
+ canonicalName: "interaction-modality",
469
+ title: "Interaction Modality",
470
+ packageSubpath: "./interaction-modality",
471
+ entryFile: "src/interaction-modality.ts",
472
+ sourceFiles: [
473
+ "src/interaction-modality.ts",
474
+ "src/interaction-modality-events.ts",
475
+ "src/interaction-modality-hub.ts",
476
+ "src/interaction-modality-types.ts"
477
+ ],
478
+ behaviorContract: "src/interaction-modality.behavior.md",
479
+ tests: [
480
+ "src/interaction-modality.test.ts",
481
+ "src/interaction-modality-lifecycle.test.ts",
482
+ "src/interaction-modality-ssr.test.ts"
483
+ ],
484
+ typeTests: ["src/interaction-modality.types.test-d.ts"],
485
+ qualityGates: [
486
+ "behavior-contract",
487
+ "mounted-dom",
488
+ "type-inference",
489
+ "ssr",
490
+ "tree-shaking",
491
+ "bundle-size"
492
+ ],
493
+ bundleBudget: {
494
+ exportName: "createInteractionModalityTracker",
495
+ retainedSignature: "VIZE_UI_INTERACTION_MODALITY_DISPOSED",
496
+ maximumJavaScriptGzipBytes: 1650,
497
+ maximumCssGzipBytes: 0
498
+ },
499
+ aliases: [
500
+ "focus modality",
501
+ "input modality",
502
+ "focus visible modality"
503
+ ],
504
+ upstreamCoverage: ["React Aria useFocusVisible", "WICG focus-visible"],
505
+ dependencies: [],
506
+ maturity: "stable",
507
+ owner: catalogOwner
508
+ }
509
+ ];
510
+ //#endregion
511
+ //#region src/family-catalog-interactions.ts
512
+ const interactionFamilyCatalog = [
513
+ {
514
+ canonicalName: "long-press",
515
+ title: "Long Press Interaction",
516
+ packageSubpath: "./long-press",
517
+ entryFile: "src/long-press.ts",
518
+ 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"
529
+ ],
530
+ typeTests: ["src/long-press.types.test-d.ts"],
531
+ rendererFixture: "LongPressConsumer.vue",
532
+ qualityGates: interactionQualityGates,
533
+ bundleBudget: {
534
+ exportName: "createLongPress",
535
+ retainedSignature: "VIZE_UI_LONG_PRESS_DISPOSED",
536
+ allowedRetainedFamilies: ["press"],
537
+ maximumJavaScriptGzipBytes: 5150,
538
+ maximumCssGzipBytes: 0
539
+ },
540
+ aliases: ["long press", "press and hold"],
541
+ upstreamCoverage: ["React Aria useLongPress"],
542
+ dependencies: ["press"],
543
+ maturity: "stable",
544
+ owner: catalogOwner
545
+ },
546
+ {
547
+ canonicalName: "move",
548
+ title: "Move Interaction",
549
+ packageSubpath: "./move",
550
+ entryFile: "src/move.ts",
551
+ 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"
561
+ ],
562
+ typeTests: ["src/move.types.test-d.ts"],
563
+ rendererFixture: "MoveConsumer.vue",
564
+ qualityGates: interactionQualityGates,
565
+ bundleBudget: {
566
+ exportName: "createMove",
567
+ retainedSignature: "VIZE_UI_MOVE_DISPOSED",
568
+ maximumJavaScriptGzipBytes: 2750,
569
+ maximumCssGzipBytes: 0
570
+ },
571
+ aliases: [
572
+ "move",
573
+ "drag movement",
574
+ "keyboard move"
575
+ ],
576
+ upstreamCoverage: ["React Aria useMove", "Pointer Events pointer capture"],
577
+ dependencies: [],
578
+ maturity: "stable",
579
+ owner: catalogOwner
580
+ },
581
+ {
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,
604
+ bundleBudget: {
605
+ exportName: "createPress",
606
+ retainedSignature: "VIZE_UI_PRESS_DISPOSED",
607
+ maximumJavaScriptGzipBytes: 3550,
608
+ maximumCssGzipBytes: 0
609
+ },
610
+ aliases: [
611
+ "press",
612
+ "activation",
613
+ "pointer press"
614
+ ],
615
+ upstreamCoverage: ["React Aria usePress", "Pointer Events activation"],
616
+ dependencies: [],
617
+ maturity: "stable",
618
+ owner: catalogOwner
619
+ },
620
+ {
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",
629
+ qualityGates: componentQualityGates,
630
+ bundleBudget: {
631
+ exportName: "Primitive",
632
+ retainedSignature: "data-vize-ui.+primitive",
633
+ maximumJavaScriptGzipBytes: 500,
634
+ maximumCssGzipBytes: 0
635
+ },
636
+ aliases: [
637
+ "as child",
638
+ "polymorphic primitive",
639
+ "slot forwarding primitive"
640
+ ],
641
+ upstreamCoverage: [
642
+ "Reka UI Primitive",
643
+ "Radix Slot",
644
+ "shadcn/ui Slot"
645
+ ],
646
+ dependencies: [],
647
+ maturity: "stable",
648
+ owner: catalogOwner
649
+ },
650
+ {
651
+ canonicalName: "scroll-lock",
652
+ title: "Scroll Lock",
653
+ packageSubpath: "./scroll-lock",
654
+ entryFile: "src/scroll-lock.ts",
655
+ 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"
661
+ ],
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,
667
+ bundleBudget: {
668
+ exportName: "createScrollLock",
669
+ retainedSignature: "VIZE_UI_SCROLL_LOCK_DISPOSED",
670
+ maximumJavaScriptGzipBytes: 2150,
671
+ maximumCssGzipBytes: 0
672
+ },
673
+ aliases: [
674
+ "body scroll lock",
675
+ "document scroll lock",
676
+ "overlay scroll lock"
677
+ ],
678
+ upstreamCoverage: ["React Aria usePreventScroll", "Radix RemoveScroll"],
679
+ dependencies: [],
680
+ maturity: "stable",
681
+ owner: catalogOwner
682
+ },
683
+ {
684
+ canonicalName: "spatial-navigation",
685
+ title: "Spatial Navigation",
686
+ packageSubpath: "./spatial-navigation",
687
+ entryFile: "src/spatial-navigation.ts",
688
+ sourceFiles: [
689
+ "src/spatial-navigation.ts",
690
+ "src/spatial-navigation-internal.ts",
691
+ "src/spatial-navigation-types.ts"
692
+ ],
693
+ behaviorContract: "src/spatial-navigation.behavior.md",
694
+ tests: [
695
+ "src/spatial-navigation.test.ts",
696
+ "src/spatial-navigation-lifecycle.test.ts",
697
+ "src/spatial-navigation-ssr.test.ts"
698
+ ],
699
+ typeTests: ["src/spatial-navigation.types.test-d.ts"],
700
+ rendererFixture: "SpatialNavigationConsumer.vue",
701
+ qualityGates: interactionQualityGates,
702
+ bundleBudget: {
703
+ exportName: "createSpatialNavigation",
704
+ retainedSignature: "VIZE_UI_SPATIAL_NAVIGATION_DISPOSED",
705
+ maximumJavaScriptGzipBytes: 2600,
706
+ maximumCssGzipBytes: 0
707
+ },
708
+ aliases: [
709
+ "spatial navigation",
710
+ "grid navigation",
711
+ "geometry navigation"
712
+ ],
713
+ upstreamCoverage: ["CSS Spatial Navigation", "ARIA grid navigation"],
714
+ dependencies: ["collection"],
715
+ maturity: "stable",
716
+ owner: catalogOwner
717
+ },
718
+ {
719
+ canonicalName: "typeahead",
720
+ title: "Collection Typeahead",
721
+ packageSubpath: "./typeahead",
722
+ entryFile: "src/typeahead.ts",
723
+ sourceFiles: [
724
+ "src/typeahead.ts",
725
+ "src/typeahead-internal.ts",
726
+ "src/typeahead-types.ts"
727
+ ],
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,
733
+ bundleBudget: {
734
+ exportName: "createTypeahead",
735
+ retainedSignature: "VIZE_UI_TYPEAHEAD_DISPOSED",
736
+ maximumJavaScriptGzipBytes: 1375,
737
+ maximumCssGzipBytes: 0
738
+ },
739
+ aliases: [
740
+ "typeahead",
741
+ "collection search",
742
+ "keyboard search"
743
+ ],
744
+ upstreamCoverage: ["React Aria useTypeSelect", "Ariakit composite typeahead"],
745
+ dependencies: ["collection"],
746
+ maturity: "stable",
747
+ owner: catalogOwner
748
+ },
749
+ {
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",
758
+ qualityGates: componentQualityGates,
759
+ bundleBudget: {
760
+ exportName: "VisuallyHidden",
761
+ retainedSignature: "visually-hidden",
762
+ maximumJavaScriptGzipBytes: 400,
763
+ maximumCssGzipBytes: 180
764
+ },
765
+ aliases: [
766
+ "screen reader only",
767
+ "sr-only",
768
+ "visually hidden"
769
+ ],
770
+ upstreamCoverage: ["React Aria VisuallyHidden", "Radix VisuallyHidden"],
771
+ dependencies: [],
772
+ maturity: "stable",
773
+ owner: catalogOwner
774
+ }
775
+ ];
776
+ //#endregion
777
+ //#region src/family-catalog.ts
778
+ const uiFamilyCatalog = [
779
+ ...basicFamilyCatalog,
780
+ ...focusFamilyCatalog,
781
+ ...interactionFamilyCatalog
782
+ ];
783
+ //#endregion
784
+ export { UI_FAMILY_CATALOG_SCHEMA_VERSION, uiFamilyCatalog };