base-ui-vue 0.1.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 (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/button/Button.cjs +524 -0
  4. package/dist/button/Button.cjs.map +1 -0
  5. package/dist/button/Button.js +453 -0
  6. package/dist/button/Button.js.map +1 -0
  7. package/dist/composite/composite.cjs +56 -0
  8. package/dist/composite/composite.cjs.map +1 -0
  9. package/dist/composite/composite.js +21 -0
  10. package/dist/composite/composite.js.map +1 -0
  11. package/dist/control/FieldControl.cjs +576 -0
  12. package/dist/control/FieldControl.cjs.map +1 -0
  13. package/dist/control/FieldControl.js +511 -0
  14. package/dist/control/FieldControl.js.map +1 -0
  15. package/dist/control/FieldControlDataAttributes.cjs +42 -0
  16. package/dist/control/FieldControlDataAttributes.cjs.map +1 -0
  17. package/dist/control/FieldControlDataAttributes.js +36 -0
  18. package/dist/control/FieldControlDataAttributes.js.map +1 -0
  19. package/dist/description/FieldDescription.cjs +86 -0
  20. package/dist/description/FieldDescription.cjs.map +1 -0
  21. package/dist/description/FieldDescription.js +81 -0
  22. package/dist/description/FieldDescription.js.map +1 -0
  23. package/dist/direction-provider/DirectionContext.cjs +26 -0
  24. package/dist/direction-provider/DirectionContext.cjs.map +1 -0
  25. package/dist/direction-provider/DirectionContext.js +15 -0
  26. package/dist/direction-provider/DirectionContext.js.map +1 -0
  27. package/dist/direction-provider/DirectionProvider.cjs +37 -0
  28. package/dist/direction-provider/DirectionProvider.cjs.map +1 -0
  29. package/dist/direction-provider/DirectionProvider.js +32 -0
  30. package/dist/direction-provider/DirectionProvider.js.map +1 -0
  31. package/dist/error/FieldError.cjs +414 -0
  32. package/dist/error/FieldError.cjs.map +1 -0
  33. package/dist/error/FieldError.js +373 -0
  34. package/dist/error/FieldError.js.map +1 -0
  35. package/dist/fallback/AvatarFallback.cjs +165 -0
  36. package/dist/fallback/AvatarFallback.cjs.map +1 -0
  37. package/dist/fallback/AvatarFallback.js +136 -0
  38. package/dist/fallback/AvatarFallback.js.map +1 -0
  39. package/dist/form/Form.cjs +159 -0
  40. package/dist/form/Form.cjs.map +1 -0
  41. package/dist/form/Form.js +154 -0
  42. package/dist/form/Form.js.map +1 -0
  43. package/dist/header/AccordionHeader.cjs +189 -0
  44. package/dist/header/AccordionHeader.cjs.map +1 -0
  45. package/dist/header/AccordionHeader.js +148 -0
  46. package/dist/header/AccordionHeader.js.map +1 -0
  47. package/dist/image/AvatarImage.cjs +150 -0
  48. package/dist/image/AvatarImage.cjs.map +1 -0
  49. package/dist/image/AvatarImage.js +145 -0
  50. package/dist/image/AvatarImage.js.map +1 -0
  51. package/dist/image/AvatarImageDataAttributes.cjs +26 -0
  52. package/dist/image/AvatarImageDataAttributes.cjs.map +1 -0
  53. package/dist/image/AvatarImageDataAttributes.js +20 -0
  54. package/dist/image/AvatarImageDataAttributes.js.map +1 -0
  55. package/dist/index.cjs +64 -0
  56. package/dist/index.d.cts +1501 -0
  57. package/dist/index.d.cts.map +1 -0
  58. package/dist/index.d.ts +1501 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +15 -0
  61. package/dist/index2.cjs +2767 -0
  62. package/dist/index2.cjs.map +1 -0
  63. package/dist/index2.js +2618 -0
  64. package/dist/index2.js.map +1 -0
  65. package/package.json +77 -0
  66. package/src/accordion/accordion.types.ts +126 -0
  67. package/src/accordion/header/AccordionHeader.vue +36 -0
  68. package/src/accordion/index.ts +10 -0
  69. package/src/accordion/item/AccordionItem.vue +124 -0
  70. package/src/accordion/item/AccordionItemContext.ts +24 -0
  71. package/src/accordion/item/AccordionItemDataAttributes.ts +15 -0
  72. package/src/accordion/item/stateAttributesMapping.ts +14 -0
  73. package/src/accordion/panel/AccordionPanel.vue +156 -0
  74. package/src/accordion/panel/AccordionPanelCssVars.ts +12 -0
  75. package/src/accordion/root/AccordionRoot.vue +130 -0
  76. package/src/accordion/root/AccordionRootContext.ts +37 -0
  77. package/src/accordion/root/AccordionRootDataAttributes.ts +10 -0
  78. package/src/accordion/root/stateAttributesMapping.ts +6 -0
  79. package/src/accordion/trigger/AccordionTrigger.vue +186 -0
  80. package/src/avatar/fallback/AvatarFallback.vue +75 -0
  81. package/src/avatar/image/AvatarImage.vue +103 -0
  82. package/src/avatar/image/AvatarImageDataAttributes.ts +14 -0
  83. package/src/avatar/image/useImageLoadingStatus.ts +58 -0
  84. package/src/avatar/index.ts +19 -0
  85. package/src/avatar/root/AvatarRoot.vue +62 -0
  86. package/src/avatar/root/AvatarRootContext.ts +22 -0
  87. package/src/avatar/root/stateAttributesMapping.ts +7 -0
  88. package/src/button/Button.vue +59 -0
  89. package/src/button/ButtonDataAttributes.ts +6 -0
  90. package/src/button/button.types.ts +22 -0
  91. package/src/button/index.ts +2 -0
  92. package/src/collapsible/collapsible.types.ts +64 -0
  93. package/src/collapsible/index.ts +6 -0
  94. package/src/collapsible/panel/CollapsiblePanel.vue +145 -0
  95. package/src/collapsible/panel/CollapsiblePanelCssVars.ts +12 -0
  96. package/src/collapsible/panel/CollapsiblePanelDataAttributes.ts +18 -0
  97. package/src/collapsible/panel/useCollapsiblePanel.ts +489 -0
  98. package/src/collapsible/root/CollapsibleRoot.vue +60 -0
  99. package/src/collapsible/root/CollapsibleRootContext.ts +18 -0
  100. package/src/collapsible/root/stateAttributesMapping.ts +9 -0
  101. package/src/collapsible/root/useCollapsibleRoot.ts +252 -0
  102. package/src/collapsible/trigger/CollapsibleTrigger.vue +63 -0
  103. package/src/collapsible/trigger/CollapsibleTriggerDataAttributes.ts +6 -0
  104. package/src/composite/composite.ts +232 -0
  105. package/src/composite/constants.ts +1 -0
  106. package/src/composite/item/CompositeItem.vue +75 -0
  107. package/src/composite/item/useCompositeItem.ts +63 -0
  108. package/src/composite/list/CompositeList.vue +168 -0
  109. package/src/composite/list/CompositeListContext.ts +21 -0
  110. package/src/composite/list/useCompositeListItem.ts +130 -0
  111. package/src/composite/root/CompositeRoot.vue +106 -0
  112. package/src/composite/root/CompositeRootContext.ts +36 -0
  113. package/src/composite/root/index.ts +7 -0
  114. package/src/composite/root/useCompositeRoot.ts +418 -0
  115. package/src/direction-provider/DirectionContext.ts +29 -0
  116. package/src/direction-provider/DirectionProvider.vue +31 -0
  117. package/src/direction-provider/index.ts +8 -0
  118. package/src/field/control/FieldControl.vue +211 -0
  119. package/src/field/control/FieldControlDataAttributes.ts +30 -0
  120. package/src/field/description/FieldDescription.vue +62 -0
  121. package/src/field/description/FieldDescriptionDataAttributes.ts +30 -0
  122. package/src/field/error/FieldError.vue +159 -0
  123. package/src/field/error/FieldErrorDataAttributes.ts +38 -0
  124. package/src/field/index.ts +27 -0
  125. package/src/field/item/FieldItem.vue +63 -0
  126. package/src/field/item/FieldItemContext.ts +16 -0
  127. package/src/field/label/FieldLabel.vue +102 -0
  128. package/src/field/label/FieldLabelDataAttributes.ts +30 -0
  129. package/src/field/root/FieldRoot.vue +262 -0
  130. package/src/field/root/FieldRootContext.ts +97 -0
  131. package/src/field/root/FieldRootDataAttributes.ts +30 -0
  132. package/src/field/root/useFieldRootState.ts +81 -0
  133. package/src/field/root/useFieldValidation.ts +298 -0
  134. package/src/field/root/useFieldValidity.ts +30 -0
  135. package/src/field/useField.ts +73 -0
  136. package/src/field/utils/constants.ts +45 -0
  137. package/src/field/utils/getCombinedFieldValidityData.ts +18 -0
  138. package/src/field/validity/FieldValidity.vue +36 -0
  139. package/src/fieldset/index.ts +8 -0
  140. package/src/fieldset/legend/FieldsetLegend.vue +72 -0
  141. package/src/fieldset/root/FieldsetRoot.vue +74 -0
  142. package/src/fieldset/root/FieldsetRootContext.ts +26 -0
  143. package/src/floating-ui-vue/types.ts +4 -0
  144. package/src/floating-ui-vue/utils/composite.ts +475 -0
  145. package/src/floating-ui-vue/utils/constants.ts +4 -0
  146. package/src/floating-ui-vue/utils/event.ts +4 -0
  147. package/src/floating-ui-vue/utils.ts +2 -0
  148. package/src/form/Form.vue +188 -0
  149. package/src/form/FormContext.ts +59 -0
  150. package/src/form/index.ts +10 -0
  151. package/src/index.ts +14 -0
  152. package/src/labelable-provider/LabelableContext.ts +33 -0
  153. package/src/labelable-provider/LabelableProvider.vue +55 -0
  154. package/src/labelable-provider/index.ts +6 -0
  155. package/src/labelable-provider/useAriaLabelledBy.ts +100 -0
  156. package/src/labelable-provider/useLabelableId.ts +30 -0
  157. package/src/merge-props/index.ts +1 -0
  158. package/src/merge-props/mergeProps.ts +192 -0
  159. package/src/test/index.ts +1 -0
  160. package/src/test/utils.ts +9 -0
  161. package/src/types/index.ts +10 -0
  162. package/src/use-button/index.ts +1 -0
  163. package/src/use-button/useButton.ts +231 -0
  164. package/src/use-render/index.ts +1 -0
  165. package/src/use-render/useRender.spec.ts +90 -0
  166. package/src/use-render/useRender.ts +152 -0
  167. package/src/utils/collapsibleOpenStateMapping.ts +33 -0
  168. package/src/utils/constants.ts +1 -0
  169. package/src/utils/createBaseUIEventDetails.ts +127 -0
  170. package/src/utils/empty.ts +5 -0
  171. package/src/utils/error.ts +19 -0
  172. package/src/utils/getStateAttributesProps.ts +31 -0
  173. package/src/utils/isElementDisabled.ts +7 -0
  174. package/src/utils/noop.ts +1 -0
  175. package/src/utils/reasons.ts +69 -0
  176. package/src/utils/resolveRef.ts +9 -0
  177. package/src/utils/slot.ts +6 -0
  178. package/src/utils/stateAttributesMapping.ts +28 -0
  179. package/src/utils/transitionStatusMapping.ts +22 -0
  180. package/src/utils/types.ts +47 -0
  181. package/src/utils/useAnimationFrame.ts +130 -0
  182. package/src/utils/useAnimationsFinished.ts +101 -0
  183. package/src/utils/useBaseUiId.ts +9 -0
  184. package/src/utils/useControllableState.ts +44 -0
  185. package/src/utils/useFocusableWhenDisabled.ts +85 -0
  186. package/src/utils/useId.ts +26 -0
  187. package/src/utils/useMergedRefs.ts +91 -0
  188. package/src/utils/useOpenChangeComplete.ts +52 -0
  189. package/src/utils/useRenderElement.ts +162 -0
  190. package/src/utils/useTimeout.ts +48 -0
  191. package/src/utils/useTransitionStatus.ts +104 -0
  192. package/src/utils/warn.ts +15 -0
@@ -0,0 +1,453 @@
1
+ import { computed, createBlock, createCommentVNode, defineComponent, inject, mergeProps, normalizeClass, openBlock, ref, renderSlot, resolveDynamicComponent, toValue, unref, useAttrs, watchEffect, withCtx } from "vue";
2
+ import { isHTMLElement } from "@floating-ui/utils/dom";
3
+
4
+ //#region src/merge-props/mergeProps.ts
5
+ function makeEventPreventable(event) {
6
+ const baseUIEvent = event;
7
+ if (!baseUIEvent.preventBaseUIHandler) baseUIEvent.preventBaseUIHandler = () => {
8
+ baseUIEvent.baseUIHandlerPrevented = true;
9
+ };
10
+ return baseUIEvent;
11
+ }
12
+ function mergeClasses(ourClass, theirClass) {
13
+ if (theirClass) {
14
+ if (ourClass) return `${theirClass} ${ourClass}`;
15
+ return theirClass;
16
+ }
17
+ return ourClass;
18
+ }
19
+ function mergeObjects(a, b) {
20
+ if (a && !b) return a;
21
+ if (!a && b) return b;
22
+ if (a || b) return {
23
+ ...a,
24
+ ...b
25
+ };
26
+ }
27
+ function isEventHandler(key, value) {
28
+ return key.startsWith("on") && key.charCodeAt(2) >= 65 && key.charCodeAt(2) <= 90 && (typeof value === "function" || Array.isArray(value) || typeof value === "undefined");
29
+ }
30
+ /**
31
+ * Merges Vue prop/attr objects using Base UI Vue semantics.
32
+ *
33
+ * Later props overwrite earlier ones, except for:
34
+ * - Event listeners: merged so the rightmost listener runs first and can prevent earlier listeners.
35
+ * - `class`: merged in rightmost-first order.
36
+ * - `style`: merged using Vue's native style merging.
37
+ */
38
+ function mergeProps$1(...args) {
39
+ const definedArgs = args.filter((arg) => arg != null);
40
+ const merged = mergeProps(...definedArgs);
41
+ const classValue = mergeClassValues(definedArgs);
42
+ if (classValue !== void 0) merged.class = classValue;
43
+ for (const propName in merged) if (isEventHandler(propName, merged[propName])) merged[propName] = wrapEventHandlers(merged[propName]);
44
+ return merged;
45
+ }
46
+ /**
47
+ * Merges an array of Vue prop/attr objects using the same semantics as {@link mergeProps}.
48
+ *
49
+ * Useful when prop layers are assembled dynamically before being bound with `v-bind`.
50
+ */
51
+ function mergePropsN(props) {
52
+ const definedProps = props.filter((prop) => prop != null);
53
+ if (definedProps.length === 0) return {};
54
+ return mergeProps$1(...definedProps);
55
+ }
56
+ function mergeClassValues(args) {
57
+ const classValues = args.map((props) => props?.class).filter((value) => value != null);
58
+ if (classValues.length === 0) return;
59
+ return normalizeClass(classValues.reverse());
60
+ }
61
+ function wrapEventHandlers(handlers) {
62
+ if (Array.isArray(handlers)) {
63
+ const flatHandlers = handlers.flat(Infinity).filter((handler) => typeof handler === "function");
64
+ return (...args) => {
65
+ const preventableArgs = getPreventableArgs(args);
66
+ if (preventableArgs) {
67
+ let result;
68
+ for (let i = flatHandlers.length - 1; i >= 0; i -= 1) {
69
+ const handlerResult = flatHandlers[i](...preventableArgs.args);
70
+ if (result === void 0) result = handlerResult;
71
+ if (preventableArgs.event.baseUIHandlerPrevented) break;
72
+ }
73
+ return result;
74
+ }
75
+ let result;
76
+ for (let i = flatHandlers.length - 1; i >= 0; i -= 1) {
77
+ const handlerResult = flatHandlers[i](...args);
78
+ if (result === void 0) result = handlerResult;
79
+ }
80
+ return result;
81
+ };
82
+ }
83
+ if (typeof handlers !== "function") return handlers;
84
+ return (...args) => {
85
+ const preventableArgs = getPreventableArgs(args);
86
+ if (preventableArgs) return handlers(...preventableArgs.args);
87
+ return handlers(...args);
88
+ };
89
+ }
90
+ function getPreventableArgs(args) {
91
+ const eventIndex = args.findIndex(isPreventableEventArg);
92
+ if (eventIndex === -1) return null;
93
+ const nextArgs = [...args];
94
+ const event = makeEventPreventable(nextArgs[eventIndex]);
95
+ nextArgs[eventIndex] = event;
96
+ return {
97
+ args: nextArgs,
98
+ event
99
+ };
100
+ }
101
+ function isPreventableEventArg(value) {
102
+ return Boolean(value && typeof value === "object" && (value instanceof Event || "nativeEvent" in value || "preventBaseUIHandler" in value));
103
+ }
104
+
105
+ //#endregion
106
+ //#region src/utils/empty.ts
107
+ function NOOP() {}
108
+ const EMPTY_ARRAY = Object.freeze([]);
109
+ const EMPTY_OBJECT = Object.freeze({});
110
+
111
+ //#endregion
112
+ //#region src/utils/getStateAttributesProps.ts
113
+ function getStateAttributesProps(state, customMapping) {
114
+ const props = {};
115
+ for (const key in state) {
116
+ const value = state[key];
117
+ if (customMapping && Object.prototype.hasOwnProperty.call(customMapping, key)) {
118
+ const customProps = customMapping[key](value);
119
+ if (customProps != null) Object.assign(props, customProps);
120
+ continue;
121
+ }
122
+ if (value === true) props[`data-${key.toLowerCase()}`] = "";
123
+ else if (value !== false && value != null) props[`data-${key.toLowerCase()}`] = value.toString();
124
+ }
125
+ return props;
126
+ }
127
+
128
+ //#endregion
129
+ //#region src/utils/slot.ts
130
+ /**
131
+ * Pass as the `as` prop to make a component renderless.
132
+ */
133
+ const Slot = Symbol("Slot");
134
+
135
+ //#endregion
136
+ //#region src/utils/useMergedRefs.ts
137
+ /**
138
+ * Merges multiple refs or ref callbacks into a single template ref callback.
139
+ * Returns `undefined` when all input refs are nullish (optimization to avoid no-op callbacks).
140
+ *
141
+ * Supports cleanup callbacks: if a callback ref returns a function, it will be
142
+ * called on unmount (when the ref receives `null`) instead of calling the
143
+ * callback with `null` directly.
144
+ *
145
+ * Vue-specific: automatically unwraps `ComponentPublicInstance` to its root `$el`,
146
+ * since Vue template refs on components return the instance, not the DOM element.
147
+ *
148
+ * @example
149
+ * ```vue
150
+ * <script setup>
151
+ * const internalRef = ref(null)
152
+ * const externalRef = ref(null)
153
+ *
154
+ * const mergedRef = useMergedRefs(internalRef, externalRef)
155
+ * <\/script>
156
+ *
157
+ * <template>
158
+ * <div :ref="mergedRef"></div>
159
+ * </template>
160
+ * ```
161
+ */
162
+ function useMergedRefs(...refs) {
163
+ if (refs.every((ref) => ref == null)) return;
164
+ const cleanupCallbacks = Array.from({ length: refs.length }, () => null);
165
+ return (el) => {
166
+ const instance = el && "$el" in el ? el.$el : el;
167
+ if (instance != null) for (let i = 0; i < refs.length; i += 1) {
168
+ const ref = refs[i];
169
+ if (ref == null) continue;
170
+ if (typeof ref === "function") {
171
+ const refCleanup = ref(instance);
172
+ if (typeof refCleanup === "function") cleanupCallbacks[i] = refCleanup;
173
+ } else if ("value" in ref) ref.value = instance;
174
+ }
175
+ else for (let i = 0; i < refs.length; i += 1) {
176
+ const ref = refs[i];
177
+ if (ref == null) continue;
178
+ if (typeof ref === "function") {
179
+ const cleanupCallback = cleanupCallbacks[i];
180
+ if (typeof cleanupCallback === "function") {
181
+ cleanupCallback();
182
+ cleanupCallbacks[i] = null;
183
+ } else ref(null);
184
+ } else if ("value" in ref) ref.value = null;
185
+ }
186
+ };
187
+ }
188
+
189
+ //#endregion
190
+ //#region src/utils/useRenderElement.ts
191
+ /**
192
+ * Renders a Base UI element (internal composable).
193
+ *
194
+ * Assembles state-to-data-attribute conversion, class/style resolution,
195
+ * and ref wrapping into a single composable used by all polymorphic components.
196
+ *
197
+ * @param params - The render element parameters.
198
+ */
199
+ function useRenderElement(params) {
200
+ const renderless = computed(() => params.componentProps.as === Slot);
201
+ return {
202
+ tag: computed(() => {
203
+ if (renderless.value) return;
204
+ return params.componentProps.as ?? params.defaultTagName ?? "div";
205
+ }),
206
+ mergedProps: computed(() => {
207
+ const state = unref(params.state);
208
+ const rawProps = unref(params.props) ?? EMPTY_OBJECT;
209
+ const merged = {
210
+ ...getStateAttributesProps(state, params.stateAttributesMapping),
211
+ ...rawProps
212
+ };
213
+ const resolvedClass = typeof params.componentProps.class === "function" ? params.componentProps.class(state) : params.componentProps.class;
214
+ const resolvedStyle = typeof params.componentProps.style === "function" ? params.componentProps.style(state) : params.componentProps.style;
215
+ if (resolvedClass !== void 0) merged.class = normalizeClass$1(merged.class, resolvedClass);
216
+ if (resolvedStyle !== void 0) merged.style = normalizeStyle(merged.style, resolvedStyle);
217
+ return merged;
218
+ }),
219
+ renderless,
220
+ state: params.state,
221
+ ref: params.ref ? useMergedRefs(params.ref) : void 0
222
+ };
223
+ }
224
+ function normalizeClass$1(currentValue, nextValue) {
225
+ if (currentValue == null) return nextValue;
226
+ if (nextValue == null) return currentValue;
227
+ if (typeof currentValue === "string" && typeof nextValue === "string") return mergeClasses(currentValue, nextValue);
228
+ return [currentValue, nextValue];
229
+ }
230
+ function normalizeStyle(currentValue, nextValue) {
231
+ if (currentValue == null) return nextValue;
232
+ if (nextValue == null) return currentValue;
233
+ if (isPlainObject(currentValue) && isPlainObject(nextValue)) return mergeObjects(currentValue, nextValue);
234
+ return [currentValue, nextValue];
235
+ }
236
+ function isPlainObject(value) {
237
+ return value != null && typeof value === "object" && !Array.isArray(value);
238
+ }
239
+
240
+ //#endregion
241
+ //#region src/composite/root/CompositeRootContext.ts
242
+ const compositeRootContextKey = Symbol("CompositeRootContext");
243
+ function useCompositeRootContext(optional = false) {
244
+ const context = inject(compositeRootContextKey, void 0);
245
+ if (context === void 0 && !optional) throw new Error("Base UI Vue: CompositeRootContext is missing. Composite parts must be placed within <CompositeRoot>.");
246
+ return context;
247
+ }
248
+
249
+ //#endregion
250
+ //#region src/utils/error.ts
251
+ let set;
252
+ if (process.env.NODE_ENV !== "production") set = /* @__PURE__ */ new Set();
253
+ function error(...messages) {
254
+ if (process.env.NODE_ENV !== "production") {
255
+ const messageKey = messages.join(" ");
256
+ if (!set.has(messageKey)) {
257
+ set.add(messageKey);
258
+ console.error(`Base UI Vue: ${messageKey}`);
259
+ }
260
+ }
261
+ }
262
+
263
+ //#endregion
264
+ //#region src/utils/useFocusableWhenDisabled.ts
265
+ function useFocusableWhenDisabled(params) {
266
+ return { props: computed(() => {
267
+ const focusableWhenDisabled = toValue(params.focusableWhenDisabled);
268
+ const disabled = toValue(params.disabled);
269
+ const composite = toValue(params.composite) ?? false;
270
+ const tabIndexProp = toValue(params.tabIndex) ?? 0;
271
+ const isNativeButton = toValue(params.isNativeButton);
272
+ const isFocusableComposite = composite && focusableWhenDisabled !== false;
273
+ const isNonFocusableComposite = composite && focusableWhenDisabled === false;
274
+ const additionalProps = { onKeydown(event) {
275
+ if (disabled && focusableWhenDisabled && event.key !== "Tab") event.preventDefault();
276
+ } };
277
+ if (!composite) {
278
+ additionalProps.tabIndex = tabIndexProp;
279
+ if (!isNativeButton && disabled) additionalProps.tabIndex = focusableWhenDisabled ? tabIndexProp : -1;
280
+ }
281
+ if (isNativeButton && (focusableWhenDisabled || isFocusableComposite) || !isNativeButton && disabled) additionalProps["aria-disabled"] = disabled;
282
+ if (isNativeButton && (!focusableWhenDisabled || isNonFocusableComposite)) additionalProps.disabled = disabled;
283
+ return additionalProps;
284
+ }) };
285
+ }
286
+
287
+ //#endregion
288
+ //#region src/use-button/useButton.ts
289
+ function useButton(parameters = {}) {
290
+ const buttonRef = ref(null);
291
+ const { props: focusableWhenDisabledProps } = useFocusableWhenDisabled({
292
+ focusableWhenDisabled: () => toValue(parameters.focusableWhenDisabled) ?? false,
293
+ disabled: () => toValue(parameters.disabled) ?? false,
294
+ isNativeButton: () => toValue(parameters.native) ?? true,
295
+ tabIndex: () => toValue(parameters.tabIndex) ?? 0
296
+ });
297
+ if (process.env.NODE_ENV !== "production") watchEffect(() => {
298
+ if (!buttonRef.value) return;
299
+ const isButtonTag = isButtonElement(buttonRef.value);
300
+ if (toValue(parameters.native) ?? true) {
301
+ if (!isButtonTag) error("A component that acts as a button expected a native <button> because the `nativeButton` prop is true. Rendering a non-<button> removes native button semantics, which can impact forms and accessibility. Use a real <button> in the `as` prop, or set `nativeButton` to `false`.");
302
+ } else if (isButtonTag) error("A component that acts as a button expected a non-<button> because the `nativeButton` prop is false. Rendering a <button> keeps native behavior while Base UI Vue applies non-native attributes and handlers, which can add unintended extra attributes (such as `role` or `aria-disabled`). Use a non-<button> in the `as` prop, or set `nativeButton` to `true`.");
303
+ });
304
+ const isCompositeItem = useCompositeRootContext(true) !== void 0;
305
+ const updateDisabled = () => {
306
+ const element = buttonRef.value;
307
+ if (!isButtonElement(element)) return;
308
+ if (isCompositeItem && toValue(parameters.disabled) && focusableWhenDisabledProps.value.disabled === void 0 && element.disabled) element.disabled = false;
309
+ };
310
+ watchEffect(updateDisabled, { flush: "post" });
311
+ const getButtonProps = (externalProps = {}) => {
312
+ const { onClick: externalOnClick, onMousedown: externalOnMousedown, onKeydown: externalOnKeydown, onKeyup: externalOnKeyup, onPointerdown: externalOnPointerdown, ...otherExternalProps } = externalProps;
313
+ const disabled = toValue(parameters.disabled) ?? false;
314
+ const isNativeButton = toValue(parameters.native) ?? true;
315
+ return mergeProps$1({
316
+ type: isNativeButton ? "button" : void 0,
317
+ onClick(event) {
318
+ if (disabled) {
319
+ event.preventDefault();
320
+ return;
321
+ }
322
+ externalOnClick?.(event);
323
+ },
324
+ onMousedown(event) {
325
+ if (!disabled) externalOnMousedown?.(event);
326
+ },
327
+ onKeydown(event) {
328
+ if (disabled) return;
329
+ makeEventPreventable(event);
330
+ externalOnKeydown?.(event);
331
+ if (event.baseUIHandlerPrevented) return;
332
+ if (event.target === event.currentTarget && !isNativeButton && !isValidLinkElement(buttonRef.value)) {
333
+ const isEnterKey = event.key === "Enter";
334
+ if (event.key === " " || isEnterKey) event.preventDefault();
335
+ if (isEnterKey) externalOnClick?.(event);
336
+ }
337
+ },
338
+ onKeyup(event) {
339
+ if (disabled) return;
340
+ makeEventPreventable(event);
341
+ externalOnKeyup?.(event);
342
+ if (event.baseUIHandlerPrevented) return;
343
+ if (event.target === event.currentTarget && !isNativeButton && event.key === " ") externalOnClick?.(event);
344
+ },
345
+ onPointerdown(event) {
346
+ if (disabled) {
347
+ event.preventDefault();
348
+ return;
349
+ }
350
+ externalOnPointerdown?.(event);
351
+ }
352
+ }, !isNativeButton ? { role: "button" } : void 0, focusableWhenDisabledProps.value, otherExternalProps);
353
+ };
354
+ return {
355
+ getButtonProps,
356
+ buttonRef
357
+ };
358
+ }
359
+ function isButtonElement(elem) {
360
+ return isHTMLElement(elem) && elem.tagName === "BUTTON";
361
+ }
362
+ function isValidLinkElement(elem) {
363
+ return Boolean(elem?.tagName === "A" && elem?.href);
364
+ }
365
+
366
+ //#endregion
367
+ //#region src/button/Button.vue?vue&type=script&setup=true&lang.ts
368
+ var Button_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
369
+ name: "BaseUIButton",
370
+ inheritAttrs: false,
371
+ __name: "Button",
372
+ props: {
373
+ disabled: {
374
+ type: Boolean,
375
+ required: false,
376
+ default: false
377
+ },
378
+ focusableWhenDisabled: {
379
+ type: Boolean,
380
+ required: false,
381
+ default: false
382
+ },
383
+ nativeButton: {
384
+ type: Boolean,
385
+ required: false,
386
+ default: void 0
387
+ },
388
+ as: {
389
+ type: null,
390
+ required: false,
391
+ default: "button"
392
+ },
393
+ class: {
394
+ type: Function,
395
+ required: false,
396
+ skipCheck: true
397
+ },
398
+ style: {
399
+ type: [
400
+ Boolean,
401
+ null,
402
+ String,
403
+ Object,
404
+ Array,
405
+ Function
406
+ ],
407
+ required: false,
408
+ skipCheck: true
409
+ }
410
+ },
411
+ setup(__props) {
412
+ const props = __props;
413
+ const attrs = useAttrs();
414
+ const { getButtonProps, buttonRef } = useButton({
415
+ disabled: () => props.disabled,
416
+ focusableWhenDisabled: () => props.focusableWhenDisabled,
417
+ native: computed(() => {
418
+ if (props.nativeButton !== void 0) return props.nativeButton;
419
+ return typeof props.as === "string" && props.as.toLowerCase() === "button";
420
+ })
421
+ });
422
+ const state = computed(() => ({ disabled: props.disabled }));
423
+ const { tag, mergedProps, renderless, ref: renderRef } = useRenderElement({
424
+ componentProps: props,
425
+ state,
426
+ props: computed(() => getButtonProps({ ...attrs })),
427
+ defaultTagName: "button",
428
+ ref: buttonRef
429
+ });
430
+ return (_ctx, _cache) => {
431
+ return unref(renderless) ? renderSlot(_ctx.$slots, "default", {
432
+ key: 0,
433
+ ref: unref(renderRef),
434
+ props: unref(mergedProps),
435
+ state: state.value
436
+ }) : (openBlock(), createBlock(resolveDynamicComponent(unref(tag)), mergeProps({
437
+ key: 1,
438
+ ref: unref(renderRef)
439
+ }, unref(mergedProps)), {
440
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", { state: state.value })]),
441
+ _: 3
442
+ }, 16));
443
+ };
444
+ }
445
+ });
446
+
447
+ //#endregion
448
+ //#region src/button/Button.vue
449
+ var Button_default = Button_vue_vue_type_script_setup_true_lang_default;
450
+
451
+ //#endregion
452
+ export { Button_default, EMPTY_OBJECT, NOOP, Slot, makeEventPreventable, mergeClasses, mergeObjects, mergeProps$1 as mergeProps, mergePropsN, useButton, useMergedRefs, useRenderElement };
453
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","names":["mergeProps","vueMergeProps","normalizeClass","mergeProps"],"sources":["../../src/merge-props/mergeProps.ts","../../src/utils/empty.ts","../../src/utils/getStateAttributesProps.ts","../../src/utils/slot.ts","../../src/utils/useMergedRefs.ts","../../src/utils/useRenderElement.ts","../../src/composite/root/CompositeRootContext.ts","../../src/utils/error.ts","../../src/utils/useFocusableWhenDisabled.ts","../../src/use-button/useButton.ts","../../src/button/Button.vue","../../src/button/Button.vue"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ let _floating_ui_utils_dom = require("@floating-ui/utils/dom");
2
+
3
+ //#region src/composite/composite.ts
4
+ const ARROW_UP = "ArrowUp";
5
+ const ARROW_DOWN = "ArrowDown";
6
+ const ARROW_LEFT = "ArrowLeft";
7
+ const ARROW_RIGHT = "ArrowRight";
8
+ const HOME = "Home";
9
+ const END = "End";
10
+ const HORIZONTAL_KEYS = new Set([ARROW_LEFT, ARROW_RIGHT]);
11
+ const VERTICAL_KEYS = new Set([ARROW_UP, ARROW_DOWN]);
12
+ const ARROW_KEYS = new Set([...HORIZONTAL_KEYS, ...VERTICAL_KEYS]);
13
+ const ALL_KEYS = new Set([
14
+ ...ARROW_KEYS,
15
+ HOME,
16
+ END
17
+ ]);
18
+
19
+ //#endregion
20
+ Object.defineProperty(exports, 'ARROW_DOWN', {
21
+ enumerable: true,
22
+ get: function () {
23
+ return ARROW_DOWN;
24
+ }
25
+ });
26
+ Object.defineProperty(exports, 'ARROW_LEFT', {
27
+ enumerable: true,
28
+ get: function () {
29
+ return ARROW_LEFT;
30
+ }
31
+ });
32
+ Object.defineProperty(exports, 'ARROW_RIGHT', {
33
+ enumerable: true,
34
+ get: function () {
35
+ return ARROW_RIGHT;
36
+ }
37
+ });
38
+ Object.defineProperty(exports, 'ARROW_UP', {
39
+ enumerable: true,
40
+ get: function () {
41
+ return ARROW_UP;
42
+ }
43
+ });
44
+ Object.defineProperty(exports, 'END', {
45
+ enumerable: true,
46
+ get: function () {
47
+ return END;
48
+ }
49
+ });
50
+ Object.defineProperty(exports, 'HOME', {
51
+ enumerable: true,
52
+ get: function () {
53
+ return HOME;
54
+ }
55
+ });
56
+ //# sourceMappingURL=composite.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composite.cjs","names":[],"sources":["../../src/composite/composite.ts"],"sourcesContent":[],"mappings":";;;AAqBA,MAAa,WAAW;AACxB,MAAa,aAAa;AAC1B,MAAa,aAAa;AAC1B,MAAa,cAAc;AAC3B,MAAa,OAAO;AACpB,MAAa,MAAM;AAEnB,MAAa,kBAAkB,IAAI,IAAI,CAAC,YAAY,YAAY,CAAC;AAOjE,MAAa,gBAAgB,IAAI,IAAI,CAAC,UAAU,WAAW,CAAC;AAO5D,MAAa,aAAa,IAAI,IAAI,CAAC,GAAG,iBAAiB,GAAG,cAAc,CAAC;AACzE,MAAa,WAAW,IAAI,IAAI;CAAC,GAAG;CAAY;CAAM;CAAI,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { isHTMLElement } from "@floating-ui/utils/dom";
2
+
3
+ //#region src/composite/composite.ts
4
+ const ARROW_UP = "ArrowUp";
5
+ const ARROW_DOWN = "ArrowDown";
6
+ const ARROW_LEFT = "ArrowLeft";
7
+ const ARROW_RIGHT = "ArrowRight";
8
+ const HOME = "Home";
9
+ const END = "End";
10
+ const HORIZONTAL_KEYS = new Set([ARROW_LEFT, ARROW_RIGHT]);
11
+ const VERTICAL_KEYS = new Set([ARROW_UP, ARROW_DOWN]);
12
+ const ARROW_KEYS = new Set([...HORIZONTAL_KEYS, ...VERTICAL_KEYS]);
13
+ const ALL_KEYS = new Set([
14
+ ...ARROW_KEYS,
15
+ HOME,
16
+ END
17
+ ]);
18
+
19
+ //#endregion
20
+ export { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, END, HOME };
21
+ //# sourceMappingURL=composite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composite.js","names":[],"sources":["../../src/composite/composite.ts"],"sourcesContent":[],"mappings":";;;AAqBA,MAAa,WAAW;AACxB,MAAa,aAAa;AAC1B,MAAa,aAAa;AAC1B,MAAa,cAAc;AAC3B,MAAa,OAAO;AACpB,MAAa,MAAM;AAEnB,MAAa,kBAAkB,IAAI,IAAI,CAAC,YAAY,YAAY,CAAC;AAOjE,MAAa,gBAAgB,IAAI,IAAI,CAAC,UAAU,WAAW,CAAC;AAO5D,MAAa,aAAa,IAAI,IAAI,CAAC,GAAG,iBAAiB,GAAG,cAAc,CAAC;AACzE,MAAa,WAAW,IAAI,IAAI;CAAC,GAAG;CAAY;CAAM;CAAI,CAAC"}