@vuetify/v0 0.1.3 → 0.1.4

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 (127) hide show
  1. package/dist/adapter-BN-h5JbD.d.mts +344 -0
  2. package/dist/adapter-CJIj5ySf.d.mts +11 -0
  3. package/dist/adapter-D_0ptsPm.mjs +229 -0
  4. package/dist/adapters-BQ-Lr3PW.mjs +1 -0
  5. package/dist/adapters-DEXpW9If.mjs +1 -0
  6. package/dist/adapters-Q9WaOsJp.mjs +1 -0
  7. package/dist/adapters-SSDVth5e.mjs +1 -0
  8. package/dist/browser/index.js +359 -933
  9. package/dist/components/index.d.mts +19 -6
  10. package/dist/components/index.mjs +37 -5
  11. package/dist/{components-C0zEvP7w.mjs → components-CMuzTJdK.mjs} +11 -4
  12. package/dist/composables/index.d.mts +17 -4
  13. package/dist/composables/index.mjs +36 -4
  14. package/dist/consola-DiUk9j3y.d.mts +15 -0
  15. package/dist/consola-GBy8XRuL.mjs +31 -0
  16. package/dist/constants/index.d.mts +1 -1
  17. package/dist/constants/index.mjs +3 -3
  18. package/dist/constants-B8pMSkcW.mjs +1 -0
  19. package/dist/createDataTable-BJnmvxfb.mjs +387 -0
  20. package/dist/createGroup-CPhp6FUh.mjs +363 -0
  21. package/dist/createPagination-cyOWlpfH.mjs +234 -0
  22. package/dist/createSelection-uqEbFgha.mjs +261 -0
  23. package/dist/createSingle-B59ya3aa.mjs +179 -0
  24. package/dist/createTokens-BlhLdHXE.mjs +682 -0
  25. package/dist/createTrinity-EeHQSsb6.mjs +149 -0
  26. package/dist/data-table/adapters/client/index.d.mts +3 -0
  27. package/dist/data-table/adapters/client/index.mjs +9 -0
  28. package/dist/data-table/adapters/index.d.mts +5 -0
  29. package/dist/data-table/adapters/index.mjs +12 -0
  30. package/dist/data-table/adapters/server/index.d.mts +3 -0
  31. package/dist/data-table/adapters/server/index.mjs +7 -0
  32. package/dist/data-table/adapters/virtual/index.d.mts +3 -0
  33. package/dist/data-table/adapters/virtual/index.mjs +9 -0
  34. package/dist/data-table/index.d.mts +7 -0
  35. package/dist/data-table/index.mjs +25 -0
  36. package/dist/date/index.d.mts +1 -1
  37. package/dist/date/index.mjs +2 -2
  38. package/dist/features/adapters/flagsmith/index.d.mts +16 -0
  39. package/dist/features/adapters/flagsmith/index.mjs +3 -0
  40. package/dist/features/adapters/launchdarkly/index.d.mts +15 -0
  41. package/dist/features/adapters/launchdarkly/index.mjs +3 -0
  42. package/dist/features/adapters/posthog/index.d.mts +15 -0
  43. package/dist/features/adapters/posthog/index.mjs +4 -0
  44. package/dist/features/index.d.mts +17 -0
  45. package/dist/features/index.mjs +18 -0
  46. package/dist/flagsmith-CHmpPGR7.mjs +40 -0
  47. package/dist/{globals-BwYsH-rt.mjs → globals-B_GVfG06.mjs} +2 -2
  48. package/dist/index-7mWYFHA6.d.mts +251 -0
  49. package/dist/index-BDTbJClL.d.mts +11 -0
  50. package/dist/index-BuOz3Rgm.d.mts +32 -0
  51. package/dist/{index-Bmem4l8m.d.mts → index-Bv1VN_j5.d.mts} +1 -1
  52. package/dist/{index-DFM5iBqh.d.mts → index-CQrDeqsK.d.mts} +280 -279
  53. package/dist/{index-2wh69fk5.d.mts → index-Dd0m0LIJ.d.mts} +135 -1407
  54. package/dist/{index-DBZTizq2.d.mts → index-UNwEBkQT.d.mts} +16 -2
  55. package/dist/index.d.mts +20 -7
  56. package/dist/index.mjs +39 -7
  57. package/dist/json/web-types.json +1 -1
  58. package/dist/launchdarkly-W8t8ZANX.mjs +28 -0
  59. package/dist/locale/adapters/index.d.mts +3 -0
  60. package/dist/locale/adapters/index.mjs +6 -0
  61. package/dist/locale/adapters/v0/index.d.mts +3 -0
  62. package/dist/locale/adapters/v0/index.mjs +5 -0
  63. package/dist/locale/index.d.mts +17 -0
  64. package/dist/locale/index.mjs +17 -0
  65. package/dist/logger/adapters/consola/index.d.mts +3 -0
  66. package/dist/logger/adapters/consola/index.mjs +3 -0
  67. package/dist/logger/adapters/index.d.mts +5 -0
  68. package/dist/logger/adapters/index.mjs +8 -0
  69. package/dist/logger/adapters/pino/index.d.mts +3 -0
  70. package/dist/logger/adapters/pino/index.mjs +5 -0
  71. package/dist/logger/adapters/v0/index.d.mts +3 -0
  72. package/dist/logger/adapters/v0/index.mjs +5 -0
  73. package/dist/logger/index.d.mts +17 -0
  74. package/dist/logger/index.mjs +10 -0
  75. package/dist/memory-BsZGbGnG.mjs +27 -0
  76. package/dist/memory-DVjquu_v.d.mts +25 -0
  77. package/dist/permissions/adapters/index.d.mts +18 -0
  78. package/dist/permissions/adapters/index.mjs +6 -0
  79. package/dist/permissions/adapters/v0/index.d.mts +18 -0
  80. package/dist/permissions/adapters/v0/index.mjs +5 -0
  81. package/dist/permissions/index.d.mts +17 -0
  82. package/dist/permissions/index.mjs +15 -0
  83. package/dist/pino-01x_NmWp.mjs +49 -0
  84. package/dist/pino-p-jDkNQd.d.mts +24 -0
  85. package/dist/posthog-BrGBPPir.mjs +50 -0
  86. package/dist/server-6cs14bj1.d.mts +20 -0
  87. package/dist/server-ClCwiLMA.mjs +45 -0
  88. package/dist/storage/adapters/index.d.mts +3 -0
  89. package/dist/storage/adapters/index.mjs +3 -0
  90. package/dist/storage/adapters/memory/index.d.mts +2 -0
  91. package/dist/storage/adapters/memory/index.mjs +3 -0
  92. package/dist/storage/index.d.mts +17 -0
  93. package/dist/storage/index.mjs +37 -0
  94. package/dist/theme/adapters/index.d.mts +17 -0
  95. package/dist/theme/adapters/index.mjs +6 -0
  96. package/dist/theme/adapters/v0/index.d.mts +17 -0
  97. package/dist/theme/adapters/v0/index.mjs +5 -0
  98. package/dist/theme/index.d.mts +17 -0
  99. package/dist/theme/index.mjs +16 -0
  100. package/dist/toArray-DIeXVX1C.mjs +38 -0
  101. package/dist/types/index.d.mts +1 -1
  102. package/dist/useClickOutside-p8HP07At.mjs +4680 -0
  103. package/dist/useFeatures-C4JF3Hgr.mjs +122 -0
  104. package/dist/useLocale-DlbShzF-.mjs +85 -0
  105. package/dist/useLogger-CO9JwbSJ.mjs +283 -0
  106. package/dist/usePermissions-DQVT_4nD.mjs +128 -0
  107. package/dist/useTheme-Bcw1Ebyt.mjs +135 -0
  108. package/dist/utilities/index.d.mts +3 -3
  109. package/dist/utilities/index.mjs +3 -3
  110. package/dist/{utilities-BbKjbXTx.mjs → utilities-BqS1sC1W.mjs} +20 -3
  111. package/dist/v0-B40YkIQ-.mjs +21 -0
  112. package/dist/v0-BOxb3nD1.d.mts +33 -0
  113. package/dist/v0-BogbIzpM.mjs +41 -0
  114. package/dist/v0-BtQCSBOG.mjs +37 -0
  115. package/dist/v0-C-9dv_1S.d.mts +10 -0
  116. package/dist/v0-CtjuUUPl.mjs +73 -0
  117. package/dist/v0-DHMoZ7dS.d.mts +22 -0
  118. package/dist/v0-ONBWyQYQ.mjs +83 -0
  119. package/dist/v0-RepwEY1F.d.mts +9 -0
  120. package/dist/virtual-B3IPkHC0.d.mts +9 -0
  121. package/dist/virtual-BP9WXRzN.mjs +44 -0
  122. package/package.json +34 -2
  123. package/dist/useClickOutside-DrkNYxDe.mjs +0 -8871
  124. /package/dist/{adapter-D95FHAtt.d.mts → adapter-DcwxFryd.d.mts} +0 -0
  125. /package/dist/{constants-DHKqjdjH.mjs → adapters-BGJKsBrw.mjs} +0 -0
  126. /package/dist/{htmlElements-DO9n35bD.mjs → htmlElements-d8iBCGpO.mjs} +0 -0
  127. /package/dist/{index-BLK67J_-.d.mts → index-BFBN5Zl3.d.mts} +0 -0
@@ -0,0 +1,261 @@
1
+ import { h as isUndefined, v as useId$1 } from "./utilities-BqS1sC1W.mjs";
2
+ import { i as useContext, n as createContext, t as createTrinity } from "./createTrinity-EeHQSsb6.mjs";
3
+ import { i as createRegistry } from "./createTokens-BlhLdHXE.mjs";
4
+ import { computed, shallowReactive, toRef, toValue } from "vue";
5
+
6
+ //#region src/composables/createSelection/index.ts
7
+ /**
8
+ * @module useSelection
9
+ *
10
+ * @remarks
11
+ * Base composable for managing selected items in a collection with Set-based tracking.
12
+ *
13
+ * Key features:
14
+ * - Set-based selectedIds for O(1) selection checks
15
+ * - Mandatory selection mode (prevents deselecting last item)
16
+ * - Auto-enrollment option (selects non-disabled items on register)
17
+ * - Disabled item filtering
18
+ * - Computed selectedItems and selectedValues Sets
19
+ *
20
+ * Extends useRegistry and serves as the base for useSingle, useGroup, useStep, and useFeatures.
21
+ */
22
+ /**
23
+ * Creates a new selection instance for managing multiple selected items.
24
+ *
25
+ * Extends `useRegistry` with selection tracking via a reactive `Set` of selected IDs.
26
+ * Supports disabled items, mandatory selection enforcement, and auto-enrollment.
27
+ *
28
+ * @param options The options for the selection instance.
29
+ * @template Z The input ticket type - what users provide to register(). Extend SelectionTicketInput to add custom properties.
30
+ * @template E The output ticket type - what users receive from get(). Automatically includes selection methods.
31
+ * @template R The context type. Defaults to SelectionContext<Z, E>.
32
+ * @returns A new selection instance with selection management methods.
33
+ *
34
+ * @remarks
35
+ * **Key Features:**
36
+ * - Multi-selection support (unlike `useSingle` which enforces single selection)
37
+ * - Set-based `selectedIds` tracking for efficient lookups
38
+ * - Computed `selectedItems` and `selectedValues` for reactive access
39
+ * - Each ticket gets `isSelected`, `select()`, `unselect()`, and `toggle()` methods
40
+ * - Disabled items cannot be selected
41
+ * - Mandatory mode prevents deselecting the last item
42
+ * - Force mode auto-selects first non-disabled item on registration
43
+ * - Enroll option auto-selects all non-disabled items on registration
44
+ *
45
+ * **Inheritance Chain:**
46
+ * `useRegistry` → `createSelection` → `createSingle`/`createGroup` → `createStep`
47
+ *
48
+ * @see https://0.vuetifyjs.com/composables/selection/use-selection
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * import { createSelection } from '@vuetify/v0'
53
+ *
54
+ * // Basic usage
55
+ * const selection = createSelection({ mandatory: true })
56
+ *
57
+ * selection.onboard([
58
+ * { id: 'item-1', value: 'Item 1' },
59
+ * { id: 'item-2', value: 'Item 2', disabled: true },
60
+ * { id: 'item-3', value: 'Item 3' },
61
+ * ])
62
+ *
63
+ * selection.select('item-1')
64
+ * selection.select('item-3')
65
+ *
66
+ * console.log(selection.selectedIds) // Set { 'item-1', 'item-3' }
67
+ * console.log(Array.from(selection.selectedValues.value)) // ['Item 1', 'Item 3']
68
+ * ```
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * // With custom ticket type
73
+ * interface MyTicket extends SelectionTicketInput {
74
+ * label: string
75
+ * icon?: string
76
+ * }
77
+ *
78
+ * const tabs = createSelection<MyTicket>()
79
+ *
80
+ * tabs.register({ label: 'Home', icon: 'mdi-home' })
81
+ * tabs.register({ label: 'Settings' })
82
+ *
83
+ * const ticket = tabs.get('...')
84
+ * // ticket has: label, icon, isSelected, select(), unselect(), toggle()
85
+ * ```
86
+ */
87
+ function createSelection(_options = {}) {
88
+ const { disabled = false, enroll = false, mandatory = false, multiple = false, ...options } = _options;
89
+ const registry = createRegistry(options);
90
+ const selectedIds = shallowReactive(/* @__PURE__ */ new Set());
91
+ const selectedItems = computed(() => {
92
+ return new Set(Array.from(selectedIds).map((id) => registry.get(id)).filter((item) => !/* @__PURE__ */ isUndefined(item)));
93
+ });
94
+ const selectedValues = computed(() => {
95
+ return new Set(Array.from(selectedItems.value).map((item) => item.value));
96
+ });
97
+ function seek(direction = "first", from) {
98
+ return registry.seek(direction, from, (ticket) => !toValue(ticket.disabled));
99
+ }
100
+ function mandate() {
101
+ if (!toValue(mandatory) || registry.size === 0 || selectedIds.size > 0) return;
102
+ const ticket = seek("first");
103
+ if (ticket) select(ticket.id);
104
+ }
105
+ function select(id) {
106
+ if (toValue(disabled)) return;
107
+ const item = registry.get(id);
108
+ if (!item || toValue(item.disabled)) return;
109
+ if (!toValue(multiple)) selectedIds.clear();
110
+ selectedIds.add(id);
111
+ }
112
+ function unselect(id) {
113
+ if (toValue(disabled)) return;
114
+ if (toValue(mandatory) && selectedIds.size === 1) return;
115
+ selectedIds.delete(id);
116
+ }
117
+ function toggle(id) {
118
+ if (toValue(disabled)) return;
119
+ if (selected(id)) unselect(id);
120
+ else select(id);
121
+ }
122
+ function selected(id) {
123
+ return selectedIds.has(id);
124
+ }
125
+ function register(registration = {}) {
126
+ const id = registration.id ?? /* @__PURE__ */ useId$1();
127
+ const item = {
128
+ disabled: false,
129
+ select: () => select(id),
130
+ unselect: () => unselect(id),
131
+ toggle: () => toggle(id),
132
+ isSelected: toRef(() => selected(id)),
133
+ ...registration,
134
+ id
135
+ };
136
+ const ticket = registry.register(item);
137
+ if (toValue(enroll) && !toValue(disabled) && !toValue(item.disabled)) select(ticket.id);
138
+ if (toValue(mandatory) === "force") mandate();
139
+ return ticket;
140
+ }
141
+ function unregister(id) {
142
+ selectedIds.delete(id);
143
+ registry.unregister(id);
144
+ }
145
+ function offboard(ids) {
146
+ for (const id of ids) selectedIds.delete(id);
147
+ registry.offboard(ids);
148
+ }
149
+ function onboard(registrations) {
150
+ const tickets = registry.batch(() => registrations.map((registration) => register(registration)));
151
+ if (toValue(mandatory) === "force") mandate();
152
+ return tickets;
153
+ }
154
+ function reset() {
155
+ registry.clear();
156
+ selectedIds.clear();
157
+ mandate();
158
+ }
159
+ return {
160
+ ...registry,
161
+ disabled,
162
+ selectedIds,
163
+ selectedItems,
164
+ selectedValues,
165
+ register,
166
+ unregister,
167
+ onboard,
168
+ offboard,
169
+ reset,
170
+ mandate,
171
+ seek,
172
+ select,
173
+ unselect,
174
+ toggle,
175
+ selected,
176
+ get size() {
177
+ return registry.size;
178
+ }
179
+ };
180
+ }
181
+ /**
182
+ * Creates a new selection context.
183
+ *
184
+ * @param options The options for the selection context.
185
+ * @template Z The input ticket type - what users provide to register().
186
+ * @template E The output ticket type - what users receive from get().
187
+ * @template R The context type. Defaults to SelectionContext<Z, E>.
188
+ * @returns A new selection context.
189
+ *
190
+ * @see https://0.vuetifyjs.com/composables/selection/use-selection
191
+ *
192
+ * @example
193
+ * ```ts
194
+ * import { createSelectionContext } from '@vuetify/v0'
195
+ *
196
+ * // With default namespace 'v0:selection'
197
+ * export const [useCheckboxes, provideCheckboxes, checkboxes] = createSelectionContext()
198
+ *
199
+ * // Or with custom namespace
200
+ * export const [useCheckboxes, provideCheckboxes, checkboxes] = createSelectionContext({ namespace: 'checkboxes' })
201
+ *
202
+ * // In a parent component:
203
+ * provideCheckboxes()
204
+ *
205
+ * // In a child component:
206
+ * const checkboxes = useCheckboxes()
207
+ * checkboxes.select('checkbox-1')
208
+ * ```
209
+ *
210
+ * @example
211
+ * ```ts
212
+ * // With custom ticket type
213
+ * interface TabTicket extends SelectionTicketInput {
214
+ * label: string
215
+ * icon?: string
216
+ * }
217
+ *
218
+ * export const [useTabs, provideTabs, tabs] = createSelectionContext<TabTicket>()
219
+ * ```
220
+ */
221
+ function createSelectionContext(_options = {}) {
222
+ const { namespace = "v0:selection", ...options } = _options;
223
+ const [useSelectionContext, _provideSelectionContext] = createContext(namespace);
224
+ const context = createSelection(options);
225
+ function provideSelectionContext(_context = context, app) {
226
+ return _provideSelectionContext(_context, app);
227
+ }
228
+ return createTrinity(useSelectionContext, provideSelectionContext, context);
229
+ }
230
+ /**
231
+ * Returns the current selection instance.
232
+ *
233
+ * @param namespace The namespace for the selection context. Defaults to `'v0:selection'`.
234
+ * @template Z The input ticket type.
235
+ * @template E The output ticket type.
236
+ * @template R The context type.
237
+ * @returns The current selection instance.
238
+ *
239
+ * @see https://0.vuetifyjs.com/composables/selection/use-selection
240
+ *
241
+ * @example
242
+ * ```vue
243
+ * <script setup lang="ts">
244
+ * import { useSelection } from '@vuetify/v0'
245
+ *
246
+ * const selection = useSelection()
247
+ * <\/script>
248
+ *
249
+ * <template>
250
+ * <div>
251
+ * <p>Selected: {{ selection.selectedIds.size }}</p>
252
+ * </div>
253
+ * </template>
254
+ * ```
255
+ */
256
+ function useSelection(namespace = "v0:selection") {
257
+ return useContext(namespace);
258
+ }
259
+
260
+ //#endregion
261
+ export { createSelectionContext as n, useSelection as r, createSelection as t };
@@ -0,0 +1,179 @@
1
+ import { i as useContext, n as createContext, t as createTrinity } from "./createTrinity-EeHQSsb6.mjs";
2
+ import { t as createSelection } from "./createSelection-uqEbFgha.mjs";
3
+ import { computed } from "vue";
4
+
5
+ //#region src/composables/createSingle/index.ts
6
+ /**
7
+ * @module useSingle
8
+ *
9
+ * @remarks
10
+ * Single-selection composable that extends useSelection to enforce only one selected item.
11
+ *
12
+ * Key features:
13
+ * - Auto-clears previous selection when selecting new item
14
+ * - Singular computed properties (selectedId, selectedItem, selectedIndex, selectedValue)
15
+ * - Perfect for tabs, radio buttons, theme selectors
16
+ *
17
+ * Inheritance chain: useRegistry → useSelection → useSingle
18
+ */
19
+ /**
20
+ * Creates a new single selection instance that enforces only one selected item at a time.
21
+ *
22
+ * Extends `createSelection` by automatically clearing previous selections when a new item is selected.
23
+ * Adds computed singular properties: `selectedId`, `selectedItem`, `selectedIndex`, `selectedValue`.
24
+ *
25
+ * @param options The options for the single selection instance.
26
+ * @template Z The input ticket type - what users provide to register().
27
+ * @template E The output ticket type - what users receive from get().
28
+ * @template R The context type.
29
+ * @returns A new single selection instance with single-selection enforcement.
30
+ *
31
+ * @remarks
32
+ * **Key Differences from `createSelection`:**
33
+ * - Automatically clears `selectedIds` before selecting a new item (enforces single selection)
34
+ * - Provides singular computed properties instead of plural sets
35
+ * - Perfect for tabs, radio buttons, theme selectors, and other single-choice UI components
36
+ *
37
+ * **Computed Properties:**
38
+ * - `selectedId`: The ID of the selected item (undefined if none selected)
39
+ * - `selectedItem`: The selected ticket object (undefined if none selected)
40
+ * - `selectedIndex`: The index of the selected item (-1 if none selected)
41
+ * - `selectedValue`: The value of the selected item (undefined if none selected)
42
+ *
43
+ * **Inheritance Chain:**
44
+ * `useRegistry` → `createSelection` → `createSingle` → `createStep`
45
+ *
46
+ * @see https://0.vuetifyjs.com/composables/selection/use-single
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * import { createSingle } from '@vuetify/v0'
51
+ *
52
+ * const tabs = createSingle({ mandatory: true })
53
+ *
54
+ * tabs.onboard([
55
+ * { id: 'home', value: 'Home' },
56
+ * { id: 'about', value: 'About' },
57
+ * { id: 'contact', value: 'Contact' },
58
+ * ])
59
+ *
60
+ * tabs.first() // Select first tab
61
+ *
62
+ * console.log(tabs.selectedId.value) // 'home'
63
+ * console.log(tabs.selectedIndex.value) // 0
64
+ *
65
+ * tabs.select('about') // Switch to about tab
66
+ * console.log(tabs.selectedId.value) // 'about'
67
+ * console.log(tabs.selectedIds.size) // 1 (always enforces single selection)
68
+ * ```
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * // With custom ticket type
73
+ * interface TabTicket extends SingleTicketInput {
74
+ * label: string
75
+ * icon?: string
76
+ * }
77
+ *
78
+ * const tabs = createSingle<TabTicket>()
79
+ * tabs.register({ label: 'Home', icon: 'mdi-home' })
80
+ * ```
81
+ */
82
+ function createSingle(_options = {}) {
83
+ const { mandatory = false, multiple = false, ...options } = _options;
84
+ const registry = createSelection({
85
+ ...options,
86
+ mandatory,
87
+ multiple
88
+ });
89
+ const selectedId = computed(() => registry.selectedIds.values().next().value);
90
+ const selectedItem = computed(() => registry.selectedItems.value.values().next().value);
91
+ const selectedIndex = computed(() => selectedItem.value?.index ?? -1);
92
+ const selectedValue = computed(() => selectedItem.value?.value);
93
+ function unselect(id) {
94
+ registry.unselect(id);
95
+ }
96
+ function toggle(id) {
97
+ if (registry.selectedIds.has(id)) unselect(id);
98
+ else registry.select(id);
99
+ }
100
+ return {
101
+ ...registry,
102
+ selectedId,
103
+ selectedItem,
104
+ selectedIndex,
105
+ selectedValue,
106
+ unselect,
107
+ toggle,
108
+ get size() {
109
+ return registry.size;
110
+ }
111
+ };
112
+ }
113
+ /**
114
+ * Creates a new single selection context.
115
+ *
116
+ * @param options The options for the single selection context.
117
+ * @template Z The input ticket type.
118
+ * @template E The output ticket type.
119
+ * @template R The context type.
120
+ * @returns A new single selection context.
121
+ *
122
+ * @see https://0.vuetifyjs.com/composables/selection/use-single
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * import { createSingleContext } from '@vuetify/v0'
127
+ *
128
+ * // With default namespace 'v0:single'
129
+ * export const [useSingle, provideSingle, context] = createSingleContext()
130
+ *
131
+ * // In a parent component:
132
+ * provideSingle()
133
+ *
134
+ * // In a child component:
135
+ * const single = useSingle()
136
+ * single.select('tab-1')
137
+ * ```
138
+ */
139
+ function createSingleContext(_options = {}) {
140
+ const { namespace = "v0:single", ...options } = _options;
141
+ const [useSingleContext, _provideSingleContext] = createContext(namespace);
142
+ const context = createSingle(options);
143
+ function provideSingleContext(_context = context, app) {
144
+ return _provideSingleContext(_context, app);
145
+ }
146
+ return createTrinity(useSingleContext, provideSingleContext, context);
147
+ }
148
+ /**
149
+ * Returns the current single selection instance.
150
+ *
151
+ * @param namespace The namespace for the single selection context. Defaults to `'v0:single'`.
152
+ * @template Z The input ticket type.
153
+ * @template E The output ticket type.
154
+ * @template R The context type.
155
+ * @returns The current single selection instance.
156
+ *
157
+ * @see https://0.vuetifyjs.com/composables/selection/use-single
158
+ *
159
+ * @example
160
+ * ```vue
161
+ * <script setup lang="ts">
162
+ * import { useSingle } from '@vuetify/v0'
163
+ *
164
+ * const tabs = useSingle()
165
+ * <\/script>
166
+ *
167
+ * <template>
168
+ * <div>
169
+ * <p>Selected: {{ tabs.selectedId }}</p>
170
+ * </div>
171
+ * </template>
172
+ * ```
173
+ */
174
+ function useSingle(namespace = "v0:single") {
175
+ return useContext(namespace);
176
+ }
177
+
178
+ //#endregion
179
+ export { createSingleContext as n, useSingle as r, createSingle as t };