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,373 @@
1
+ import { useRenderElement } from "../button/Button.js";
2
+ import { fieldValidityMapping, useBaseUiId, useFieldRootContext, useFormContext, useLabelableContext } from "../control/FieldControl.js";
3
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createTextVNode, defineComponent, mergeProps, nextTick, onUnmounted, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toValue, unref, useAttrs, watch, watchEffect, withCtx } from "vue";
4
+
5
+ //#region src/utils/stateAttributesMapping.ts
6
+ let TransitionStatusDataAttributes = /* @__PURE__ */ function(TransitionStatusDataAttributes) {
7
+ /**
8
+ * Present when the component is animating in.
9
+ */
10
+ TransitionStatusDataAttributes["startingStyle"] = "data-starting-style";
11
+ /**
12
+ * Present when the component is animating out.
13
+ */
14
+ TransitionStatusDataAttributes["endingStyle"] = "data-ending-style";
15
+ return TransitionStatusDataAttributes;
16
+ }({});
17
+ const STARTING_HOOK = { [TransitionStatusDataAttributes.startingStyle]: "" };
18
+ const ENDING_HOOK = { [TransitionStatusDataAttributes.endingStyle]: "" };
19
+ const transitionStatusMapping = { transitionStatus(value) {
20
+ if (value === "starting") return STARTING_HOOK;
21
+ if (value === "ending") return ENDING_HOOK;
22
+ return null;
23
+ } };
24
+
25
+ //#endregion
26
+ //#region src/utils/resolveRef.ts
27
+ function resolveRef(refOrElement) {
28
+ const element = unref(refOrElement);
29
+ if (element && "$el" in element) return element.$el;
30
+ return element;
31
+ }
32
+
33
+ //#endregion
34
+ //#region src/utils/useAnimationFrame.ts
35
+ /**
36
+ * Unlike `setTimeout`, rAF doesn't guarantee a positive integer return value, so we can't have
37
+ * a monomorphic `uint` type with `0` meaning empty.
38
+ * See warning note at:
39
+ * https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame#return_value
40
+ */
41
+ const EMPTY = null;
42
+ let LAST_RAF = typeof window !== "undefined" ? window.requestAnimationFrame : void 0;
43
+ var Scheduler = class {
44
+ callbacks = [];
45
+ callbacksCount = 0;
46
+ nextId = 1;
47
+ startId = 1;
48
+ isScheduled = false;
49
+ tick = (timestamp) => {
50
+ this.isScheduled = false;
51
+ const currentCallbacks = this.callbacks;
52
+ const currentCallbacksCount = this.callbacksCount;
53
+ this.callbacks = [];
54
+ this.callbacksCount = 0;
55
+ this.startId = this.nextId;
56
+ if (currentCallbacksCount > 0) for (let i = 0; i < currentCallbacks.length; i += 1) currentCallbacks[i]?.(timestamp);
57
+ };
58
+ request(fn) {
59
+ if (typeof window === "undefined") return 0;
60
+ const id = this.nextId;
61
+ this.nextId += 1;
62
+ this.callbacks.push(fn);
63
+ this.callbacksCount += 1;
64
+ const didRAFChange = process.env.NODE_ENV !== "production" && LAST_RAF !== window.requestAnimationFrame && (LAST_RAF = window.requestAnimationFrame, true);
65
+ if (!this.isScheduled || didRAFChange) {
66
+ window.requestAnimationFrame(this.tick);
67
+ this.isScheduled = true;
68
+ }
69
+ return id;
70
+ }
71
+ cancel(id) {
72
+ const index = id - this.startId;
73
+ if (index < 0 || index >= this.callbacks.length) return;
74
+ this.callbacks[index] = null;
75
+ this.callbacksCount -= 1;
76
+ }
77
+ };
78
+ const scheduler = new Scheduler();
79
+ var AnimationFrame = class AnimationFrame {
80
+ static create() {
81
+ return new AnimationFrame();
82
+ }
83
+ static request(fn) {
84
+ return scheduler.request(fn);
85
+ }
86
+ static cancel(id) {
87
+ return scheduler.cancel(id);
88
+ }
89
+ currentId = EMPTY;
90
+ request(fn) {
91
+ this.cancel();
92
+ this.currentId = scheduler.request((timestamp) => {
93
+ this.currentId = EMPTY;
94
+ fn(timestamp);
95
+ });
96
+ }
97
+ cancel = () => {
98
+ if (this.currentId !== EMPTY) {
99
+ scheduler.cancel(this.currentId);
100
+ this.currentId = EMPTY;
101
+ }
102
+ };
103
+ disposeEffect = () => {
104
+ return this.cancel;
105
+ };
106
+ };
107
+ /**
108
+ * A `requestAnimationFrame` with automatic cleanup and guard.
109
+ */
110
+ function useAnimationFrame() {
111
+ const animationFrame = AnimationFrame.create();
112
+ onUnmounted(animationFrame.disposeEffect());
113
+ return animationFrame;
114
+ }
115
+
116
+ //#endregion
117
+ //#region src/utils/useAnimationsFinished.ts
118
+ function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, treatAbortedAsFinished = true) {
119
+ const frame = useAnimationFrame();
120
+ return (fnToExecute, signal = null) => {
121
+ frame.cancel();
122
+ function done() {
123
+ nextTick(() => {
124
+ fnToExecute();
125
+ });
126
+ }
127
+ const resolvedElement = resolveRef(elementOrRef);
128
+ if (resolvedElement == null) return;
129
+ if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) fnToExecute();
130
+ else {
131
+ function execWaitForStartingStyleRemoved() {
132
+ const startingStyleAttribute = TransitionStatusDataAttributes.startingStyle;
133
+ if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
134
+ frame.request(exec);
135
+ return;
136
+ }
137
+ const attributeObserver = new MutationObserver(() => {
138
+ if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
139
+ attributeObserver.disconnect();
140
+ exec();
141
+ }
142
+ });
143
+ attributeObserver.observe(resolvedElement, {
144
+ attributes: true,
145
+ attributeFilter: [startingStyleAttribute]
146
+ });
147
+ signal?.addEventListener("abort", () => attributeObserver.disconnect(), { once: true });
148
+ }
149
+ function exec() {
150
+ Promise.all(resolvedElement.getAnimations().map((anim) => anim.finished)).then(() => {
151
+ if (signal?.aborted) return;
152
+ done();
153
+ }).catch(() => {
154
+ const currentAnimations = resolvedElement.getAnimations();
155
+ if (treatAbortedAsFinished) {
156
+ if (signal?.aborted) return;
157
+ done();
158
+ } else if (currentAnimations.length > 0 && currentAnimations.some((anim) => anim.pending || anim.playState !== "finished")) exec();
159
+ });
160
+ }
161
+ if (toValue(waitForStartingStyleRemoved)) {
162
+ execWaitForStartingStyleRemoved();
163
+ return;
164
+ }
165
+ frame.request(exec);
166
+ }
167
+ };
168
+ }
169
+
170
+ //#endregion
171
+ //#region src/utils/useTransitionStatus.ts
172
+ /**
173
+ * Provides a status string for CSS animations.
174
+ * @param openRef - a boolean that determines if the element is open.
175
+ * @param enableIdleStateRef - a boolean that enables the `'idle'` state between `'starting'` and `'ending'`
176
+ * @param deferEndingStateRef - a boolean that defers the `'ending'` state.
177
+ */
178
+ function useTransitionStatus(openRef, enableIdleStateRef = false, deferEndingStateRef = false) {
179
+ const open = computed(() => toValue(openRef));
180
+ const enableIdleState = computed(() => toValue(enableIdleStateRef));
181
+ const deferEndingState = computed(() => toValue(deferEndingStateRef));
182
+ const transitionStatus = ref(open.value && enableIdleState.value ? "idle" : void 0);
183
+ const mounted = ref(open.value);
184
+ watchEffect(() => {
185
+ if (open.value && !mounted.value) {
186
+ mounted.value = true;
187
+ transitionStatus.value = "starting";
188
+ }
189
+ if (!open.value && mounted.value && transitionStatus.value !== "ending" && !deferEndingState.value) transitionStatus.value = "ending";
190
+ if (!open.value && !mounted.value && transitionStatus.value === "ending") transitionStatus.value = void 0;
191
+ });
192
+ watchEffect((onCleanup) => {
193
+ if (!open.value && mounted.value && transitionStatus.value !== "ending" && deferEndingState.value) {
194
+ const frame = AnimationFrame.request(() => {
195
+ transitionStatus.value = "ending";
196
+ });
197
+ onCleanup(() => {
198
+ AnimationFrame.cancel(frame);
199
+ });
200
+ }
201
+ });
202
+ watchEffect((onCleanup) => {
203
+ if (!open.value || enableIdleState.value) return;
204
+ const frame = AnimationFrame.request(() => {
205
+ transitionStatus.value = void 0;
206
+ });
207
+ onCleanup(() => {
208
+ AnimationFrame.cancel(frame);
209
+ });
210
+ });
211
+ watchEffect((onCleanup) => {
212
+ if (!open.value || !enableIdleState.value) return;
213
+ if (open.value && mounted.value && transitionStatus.value !== "idle") transitionStatus.value = "starting";
214
+ const frame = AnimationFrame.request(() => {
215
+ transitionStatus.value = "idle";
216
+ });
217
+ onCleanup(() => {
218
+ AnimationFrame.cancel(frame);
219
+ });
220
+ });
221
+ return {
222
+ mounted,
223
+ setMounted(value) {
224
+ mounted.value = value;
225
+ },
226
+ transitionStatus
227
+ };
228
+ }
229
+
230
+ //#endregion
231
+ //#region src/utils/useOpenChangeComplete.ts
232
+ /**
233
+ * Calls the provided function when the CSS open/close animation or transition completes.
234
+ */
235
+ function useOpenChangeComplete(parameters) {
236
+ const runOnceAnimationsFinish = useAnimationsFinished(parameters.ref, parameters.open, false);
237
+ watchEffect((onCleanup) => {
238
+ if (!(toValue(parameters.enabled) ?? true)) return;
239
+ const abortController = new AbortController();
240
+ runOnceAnimationsFinish(parameters.onComplete, abortController.signal);
241
+ onCleanup(() => {
242
+ abortController.abort();
243
+ });
244
+ });
245
+ }
246
+
247
+ //#endregion
248
+ //#region src/field/error/FieldError.vue?vue&type=script&setup=true&lang.ts
249
+ const _hoisted_1 = { key: 1 };
250
+ var FieldError_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
251
+ name: "FieldError",
252
+ inheritAttrs: false,
253
+ __name: "FieldError",
254
+ props: {
255
+ id: {
256
+ type: String,
257
+ required: false
258
+ },
259
+ match: {
260
+ type: Boolean,
261
+ required: false,
262
+ skipCheck: true
263
+ },
264
+ as: {
265
+ type: null,
266
+ required: false,
267
+ default: "div"
268
+ },
269
+ class: {
270
+ type: Function,
271
+ required: false,
272
+ skipCheck: true
273
+ },
274
+ style: {
275
+ type: [
276
+ Boolean,
277
+ null,
278
+ String,
279
+ Object,
280
+ Array,
281
+ Function
282
+ ],
283
+ required: false,
284
+ skipCheck: true
285
+ }
286
+ },
287
+ setup(__props) {
288
+ const props = __props;
289
+ const stateAttributesMapping = {
290
+ ...fieldValidityMapping,
291
+ ...transitionStatusMapping
292
+ };
293
+ const attrs = useAttrs();
294
+ const id = useBaseUiId(props.id);
295
+ const { validityData, state: fieldState, name } = useFieldRootContext(false);
296
+ const { setMessageIds } = useLabelableContext();
297
+ const { errors } = useFormContext();
298
+ const formError = computed(() => {
299
+ const n = name.value;
300
+ return n ? errors.value[n] ?? null : null;
301
+ });
302
+ const rendered = computed(() => {
303
+ if (formError.value || props.match === true) return true;
304
+ if (props.match) return Boolean(validityData.value.state[props.match]);
305
+ return validityData.value.state.valid === false;
306
+ });
307
+ const { mounted, transitionStatus, setMounted } = useTransitionStatus(rendered);
308
+ watch(() => ({
309
+ rendered: rendered.value,
310
+ id
311
+ }), ({ rendered: isRendered }) => {
312
+ if (isRendered && id) setMessageIds((ids) => ids.concat(id));
313
+ else if (id) setMessageIds((ids) => ids.filter((item) => item !== id));
314
+ }, { immediate: true });
315
+ onUnmounted(() => {
316
+ if (id) setMessageIds((ids) => ids.filter((item) => item !== id));
317
+ });
318
+ const errorRef = ref(null);
319
+ const errorMessage = computed(() => {
320
+ const fe = formError.value;
321
+ if (fe) return fe;
322
+ if (validityData.value.errors.length > 1) return validityData.value.errors;
323
+ return validityData.value.error;
324
+ });
325
+ useOpenChangeComplete({
326
+ open: rendered,
327
+ ref: errorRef,
328
+ onComplete() {
329
+ if (!rendered.value) setMounted(false);
330
+ }
331
+ });
332
+ const state = computed(() => ({
333
+ ...fieldState.value,
334
+ transitionStatus: transitionStatus.value
335
+ }));
336
+ const { tag, mergedProps, renderless, ref: renderRef } = useRenderElement({
337
+ componentProps: props,
338
+ state,
339
+ props: computed(() => ({
340
+ ...attrs,
341
+ id
342
+ })),
343
+ stateAttributesMapping,
344
+ defaultTagName: "div",
345
+ ref: errorRef
346
+ });
347
+ return (_ctx, _cache) => {
348
+ return unref(mounted) && unref(renderless) ? renderSlot(_ctx.$slots, "default", {
349
+ key: 0,
350
+ ref: unref(renderRef),
351
+ props: unref(mergedProps),
352
+ state: state.value,
353
+ message: errorMessage.value
354
+ }) : unref(mounted) ? (openBlock(), createBlock(resolveDynamicComponent(unref(tag)), mergeProps({
355
+ key: 1,
356
+ ref: unref(renderRef)
357
+ }, unref(mergedProps)), {
358
+ default: withCtx(() => [_ctx.$slots.default ? renderSlot(_ctx.$slots, "default", { key: 0 }) : Array.isArray(errorMessage.value) ? (openBlock(), createElementBlock("ul", _hoisted_1, [(openBlock(true), createElementBlock(Fragment, null, renderList(errorMessage.value, (message) => {
359
+ return openBlock(), createElementBlock("li", { key: message }, toDisplayString(message), 1);
360
+ }), 128))])) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [createTextVNode(toDisplayString(errorMessage.value), 1)], 64))]),
361
+ _: 3
362
+ }, 16)) : createCommentVNode("v-if", true);
363
+ };
364
+ }
365
+ });
366
+
367
+ //#endregion
368
+ //#region src/field/error/FieldError.vue
369
+ var FieldError_default = FieldError_vue_vue_type_script_setup_true_lang_default;
370
+
371
+ //#endregion
372
+ export { AnimationFrame, FieldError_default, transitionStatusMapping, useAnimationFrame, useAnimationsFinished, useOpenChangeComplete, useTransitionStatus };
373
+ //# sourceMappingURL=FieldError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldError.js","names":["$slots"],"sources":["../../src/utils/stateAttributesMapping.ts","../../src/utils/resolveRef.ts","../../src/utils/useAnimationFrame.ts","../../src/utils/useAnimationsFinished.ts","../../src/utils/useTransitionStatus.ts","../../src/utils/useOpenChangeComplete.ts","../../src/field/error/FieldError.vue","../../src/field/error/FieldError.vue"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ const require_button_Button = require('../button/Button.cjs');
2
+ let vue = require("vue");
3
+
4
+ //#region src/utils/useTimeout.ts
5
+ const EMPTY = 0;
6
+ var Timeout = class Timeout {
7
+ currentId = EMPTY;
8
+ static create() {
9
+ return new Timeout();
10
+ }
11
+ /**
12
+ * Executes `fn` after `delay`, clearing any previously scheduled call.
13
+ */
14
+ start(delay, fn) {
15
+ this.clear();
16
+ this.currentId = setTimeout(() => {
17
+ this.currentId = EMPTY;
18
+ fn();
19
+ }, delay);
20
+ }
21
+ isStarted() {
22
+ return this.currentId !== EMPTY;
23
+ }
24
+ clear = () => {
25
+ if (this.currentId !== EMPTY) {
26
+ clearTimeout(this.currentId);
27
+ this.currentId = EMPTY;
28
+ }
29
+ };
30
+ };
31
+ /**
32
+ * A `setTimeout` with automatic cleanup on unmount.
33
+ */
34
+ function useTimeout() {
35
+ const timeout = Timeout.create();
36
+ (0, vue.onUnmounted)(() => {
37
+ timeout.clear();
38
+ });
39
+ return timeout;
40
+ }
41
+
42
+ //#endregion
43
+ //#region src/avatar/root/AvatarRootContext.ts
44
+ const AvatarRootContextKey = Symbol("AvatarRootContext");
45
+ function useAvatarRootContext() {
46
+ const context = (0, vue.inject)(AvatarRootContextKey, void 0);
47
+ if (context === void 0) throw new Error("Base UI Vue: AvatarRootContext is missing. Avatar parts must be placed within <AvatarRoot>.");
48
+ return context;
49
+ }
50
+
51
+ //#endregion
52
+ //#region src/avatar/root/stateAttributesMapping.ts
53
+ const avatarStateAttributesMapping = { imageLoadingStatus: () => null };
54
+
55
+ //#endregion
56
+ //#region src/avatar/fallback/AvatarFallback.vue?vue&type=script&setup=true&lang.ts
57
+ var AvatarFallback_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ (0, vue.defineComponent)({
58
+ name: "AvatarFallback",
59
+ inheritAttrs: false,
60
+ __name: "AvatarFallback",
61
+ props: {
62
+ delay: {
63
+ type: Number,
64
+ required: false
65
+ },
66
+ as: {
67
+ type: null,
68
+ required: false,
69
+ default: "span"
70
+ },
71
+ class: {
72
+ type: Function,
73
+ required: false,
74
+ skipCheck: true
75
+ },
76
+ style: {
77
+ type: [
78
+ Boolean,
79
+ null,
80
+ String,
81
+ Object,
82
+ Array,
83
+ Function
84
+ ],
85
+ required: false,
86
+ skipCheck: true
87
+ }
88
+ },
89
+ setup(__props) {
90
+ const props = __props;
91
+ const attrs = (0, vue.useAttrs)();
92
+ const { imageLoadingStatus } = useAvatarRootContext();
93
+ const delayPassed = (0, vue.ref)(props.delay === void 0);
94
+ const timeout = useTimeout();
95
+ (0, vue.watchEffect)((onCleanup) => {
96
+ if (props.delay !== void 0) {
97
+ delayPassed.value = false;
98
+ timeout.start(props.delay, () => {
99
+ delayPassed.value = true;
100
+ });
101
+ } else delayPassed.value = true;
102
+ onCleanup(() => {
103
+ timeout.clear();
104
+ });
105
+ });
106
+ const state = (0, vue.computed)(() => ({ imageLoadingStatus: imageLoadingStatus.value }));
107
+ const isEnabled = (0, vue.computed)(() => {
108
+ return imageLoadingStatus.value !== "loaded" && delayPassed.value;
109
+ });
110
+ const { tag, mergedProps, renderless } = require_button_Button.useRenderElement({
111
+ componentProps: props,
112
+ state,
113
+ props: (0, vue.computed)(() => ({ ...attrs })),
114
+ stateAttributesMapping: avatarStateAttributesMapping,
115
+ defaultTagName: "span"
116
+ });
117
+ return (_ctx, _cache) => {
118
+ return (0, vue.unref)(renderless) && isEnabled.value ? (0, vue.renderSlot)(_ctx.$slots, "default", {
119
+ key: 0,
120
+ props: (0, vue.unref)(mergedProps),
121
+ state: state.value
122
+ }) : isEnabled.value ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(tag)), (0, vue.normalizeProps)((0, vue.mergeProps)({ key: 1 }, (0, vue.unref)(mergedProps))), {
123
+ default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "default", { state: state.value })]),
124
+ _: 3
125
+ }, 16)) : (0, vue.createCommentVNode)("v-if", true);
126
+ };
127
+ }
128
+ });
129
+
130
+ //#endregion
131
+ //#region src/avatar/fallback/AvatarFallback.vue
132
+ var AvatarFallback_default = AvatarFallback_vue_vue_type_script_setup_true_lang_default;
133
+
134
+ //#endregion
135
+ Object.defineProperty(exports, 'AvatarFallback_default', {
136
+ enumerable: true,
137
+ get: function () {
138
+ return AvatarFallback_default;
139
+ }
140
+ });
141
+ Object.defineProperty(exports, 'AvatarRootContextKey', {
142
+ enumerable: true,
143
+ get: function () {
144
+ return AvatarRootContextKey;
145
+ }
146
+ });
147
+ Object.defineProperty(exports, 'avatarStateAttributesMapping', {
148
+ enumerable: true,
149
+ get: function () {
150
+ return avatarStateAttributesMapping;
151
+ }
152
+ });
153
+ Object.defineProperty(exports, 'useAvatarRootContext', {
154
+ enumerable: true,
155
+ get: function () {
156
+ return useAvatarRootContext;
157
+ }
158
+ });
159
+ Object.defineProperty(exports, 'useTimeout', {
160
+ enumerable: true,
161
+ get: function () {
162
+ return useTimeout;
163
+ }
164
+ });
165
+ //# sourceMappingURL=AvatarFallback.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarFallback.cjs","names":[],"sources":["../../src/utils/useTimeout.ts","../../src/avatar/root/AvatarRootContext.ts","../../src/avatar/root/stateAttributesMapping.ts","../../src/avatar/fallback/AvatarFallback.vue","../../src/avatar/fallback/AvatarFallback.vue"],"sourcesContent":[],"mappings":";;;;AAIA,MAAM,QAAQ;AAEd,IAAa,UAAb,MAAa,QAAQ;CACnB,YAAuB;CAEvB,OAAO,SAAS;AACd,SAAO,IAAI,SAAS;;;;;CAMtB,MAAM,OAAe,IAAgB;AACnC,OAAK,OAAO;AACZ,OAAK,YAAY,iBAAiB;AAChC,QAAK,YAAY;AACjB,OAAI;KACH,MAAM;;CAGX,YAAY;AACV,SAAO,KAAK,cAAc;;CAG5B,cAAc;AACZ,MAAI,KAAK,cAAc,OAAO;AAC5B,gBAAa,KAAK,UAAU;AAC5B,QAAK,YAAY;;;;;;;AAQvB,SAAgB,aAAa;CAC3B,MAAM,UAAU,QAAQ,QAAQ;AAEhC,4BAAkB;AAChB,UAAQ,OAAO;GACf;AAEF,QAAO;;;;;ACrCT,MAAa,uBACT,OAAO,oBAAoB;AAE/B,SAAgB,uBAAuB;CACrC,MAAM,0BAAiB,sBAAsB,OAAU;AACvD,KAAI,YAAY,OACd,OAAM,IAAI,MACR,8FACD;AAGH,QAAO;;;;;ACjBT,MAAa,+BACT,EACA,0BAA0B,MAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECiBH,MAAM,QAAQ;EAId,MAAM,2BAAiB;EAEvB,MAAM,EAAE,uBAAuB,sBAAqB;EAEpD,MAAM,2BAAkB,MAAM,UAAU,OAAS;EACjD,MAAM,UAAU,YAAW;AAE3B,wBAAa,cAAc;AACzB,OAAI,MAAM,UAAU,QAAW;AAC7B,gBAAY,QAAQ;AACpB,YAAQ,MAAM,MAAM,aAAa;AAC/B,iBAAY,QAAQ;MACrB;SAGD,aAAY,QAAQ;AAGtB,mBAAgB;AACd,YAAQ,OAAM;KACf;IACF;EAED,MAAM,iCAA6C,EACjD,oBAAoB,mBAAmB,OACxC,EAAC;EAEF,MAAM,oCAA2B;AAC/B,UAAO,mBAAmB,UAAU,YAAY,YAAY;IAC7D;EAED,MAAM,EAAE,KAAK,aAAa,eAAe,uCAAiB;GACxD,gBAAgB;GAChB;GACA,gCAAuB,EACrB,GAAG,OACJ,EAAE;GACH,wBAAwB;GACxB,gBAAgB;GACjB,CAAA;;yBAIa,WAAU,IAAI,UAAA,4BAAiD,KAAA,QAAA,WAAA;;IAArC,sBAAO,YAAW;IAAG,OAAO,MAAA;QAClC,UAAA,oGAAhB,IAAG,CAAA,8CAAA,EAAA,KAAA,GAAA,iBAAgC,YAAW,CAAA,CAAA,EAAA;oCACrC,qBAAA,KAAA,QAAA,WAAA,EAAhB,OAAO,MAAA,OAAK,CAAA"}
@@ -0,0 +1,136 @@
1
+ import { useRenderElement } from "../button/Button.js";
2
+ import { computed, createBlock, createCommentVNode, defineComponent, guardReactiveProps, inject, mergeProps, normalizeProps, onUnmounted, openBlock, ref, renderSlot, resolveDynamicComponent, unref, useAttrs, watchEffect, withCtx } from "vue";
3
+
4
+ //#region src/utils/useTimeout.ts
5
+ const EMPTY = 0;
6
+ var Timeout = class Timeout {
7
+ currentId = EMPTY;
8
+ static create() {
9
+ return new Timeout();
10
+ }
11
+ /**
12
+ * Executes `fn` after `delay`, clearing any previously scheduled call.
13
+ */
14
+ start(delay, fn) {
15
+ this.clear();
16
+ this.currentId = setTimeout(() => {
17
+ this.currentId = EMPTY;
18
+ fn();
19
+ }, delay);
20
+ }
21
+ isStarted() {
22
+ return this.currentId !== EMPTY;
23
+ }
24
+ clear = () => {
25
+ if (this.currentId !== EMPTY) {
26
+ clearTimeout(this.currentId);
27
+ this.currentId = EMPTY;
28
+ }
29
+ };
30
+ };
31
+ /**
32
+ * A `setTimeout` with automatic cleanup on unmount.
33
+ */
34
+ function useTimeout() {
35
+ const timeout = Timeout.create();
36
+ onUnmounted(() => {
37
+ timeout.clear();
38
+ });
39
+ return timeout;
40
+ }
41
+
42
+ //#endregion
43
+ //#region src/avatar/root/AvatarRootContext.ts
44
+ const AvatarRootContextKey = Symbol("AvatarRootContext");
45
+ function useAvatarRootContext() {
46
+ const context = inject(AvatarRootContextKey, void 0);
47
+ if (context === void 0) throw new Error("Base UI Vue: AvatarRootContext is missing. Avatar parts must be placed within <AvatarRoot>.");
48
+ return context;
49
+ }
50
+
51
+ //#endregion
52
+ //#region src/avatar/root/stateAttributesMapping.ts
53
+ const avatarStateAttributesMapping = { imageLoadingStatus: () => null };
54
+
55
+ //#endregion
56
+ //#region src/avatar/fallback/AvatarFallback.vue?vue&type=script&setup=true&lang.ts
57
+ var AvatarFallback_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
58
+ name: "AvatarFallback",
59
+ inheritAttrs: false,
60
+ __name: "AvatarFallback",
61
+ props: {
62
+ delay: {
63
+ type: Number,
64
+ required: false
65
+ },
66
+ as: {
67
+ type: null,
68
+ required: false,
69
+ default: "span"
70
+ },
71
+ class: {
72
+ type: Function,
73
+ required: false,
74
+ skipCheck: true
75
+ },
76
+ style: {
77
+ type: [
78
+ Boolean,
79
+ null,
80
+ String,
81
+ Object,
82
+ Array,
83
+ Function
84
+ ],
85
+ required: false,
86
+ skipCheck: true
87
+ }
88
+ },
89
+ setup(__props) {
90
+ const props = __props;
91
+ const attrs = useAttrs();
92
+ const { imageLoadingStatus } = useAvatarRootContext();
93
+ const delayPassed = ref(props.delay === void 0);
94
+ const timeout = useTimeout();
95
+ watchEffect((onCleanup) => {
96
+ if (props.delay !== void 0) {
97
+ delayPassed.value = false;
98
+ timeout.start(props.delay, () => {
99
+ delayPassed.value = true;
100
+ });
101
+ } else delayPassed.value = true;
102
+ onCleanup(() => {
103
+ timeout.clear();
104
+ });
105
+ });
106
+ const state = computed(() => ({ imageLoadingStatus: imageLoadingStatus.value }));
107
+ const isEnabled = computed(() => {
108
+ return imageLoadingStatus.value !== "loaded" && delayPassed.value;
109
+ });
110
+ const { tag, mergedProps, renderless } = useRenderElement({
111
+ componentProps: props,
112
+ state,
113
+ props: computed(() => ({ ...attrs })),
114
+ stateAttributesMapping: avatarStateAttributesMapping,
115
+ defaultTagName: "span"
116
+ });
117
+ return (_ctx, _cache) => {
118
+ return unref(renderless) && isEnabled.value ? renderSlot(_ctx.$slots, "default", {
119
+ key: 0,
120
+ props: unref(mergedProps),
121
+ state: state.value
122
+ }) : isEnabled.value ? (openBlock(), createBlock(resolveDynamicComponent(unref(tag)), normalizeProps(mergeProps({ key: 1 }, unref(mergedProps))), {
123
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", { state: state.value })]),
124
+ _: 3
125
+ }, 16)) : createCommentVNode("v-if", true);
126
+ };
127
+ }
128
+ });
129
+
130
+ //#endregion
131
+ //#region src/avatar/fallback/AvatarFallback.vue
132
+ var AvatarFallback_default = AvatarFallback_vue_vue_type_script_setup_true_lang_default;
133
+
134
+ //#endregion
135
+ export { AvatarFallback_default, AvatarRootContextKey, avatarStateAttributesMapping, useAvatarRootContext, useTimeout };
136
+ //# sourceMappingURL=AvatarFallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarFallback.js","names":[],"sources":["../../src/utils/useTimeout.ts","../../src/avatar/root/AvatarRootContext.ts","../../src/avatar/root/stateAttributesMapping.ts","../../src/avatar/fallback/AvatarFallback.vue","../../src/avatar/fallback/AvatarFallback.vue"],"sourcesContent":[],"mappings":";;;;AAIA,MAAM,QAAQ;AAEd,IAAa,UAAb,MAAa,QAAQ;CACnB,YAAuB;CAEvB,OAAO,SAAS;AACd,SAAO,IAAI,SAAS;;;;;CAMtB,MAAM,OAAe,IAAgB;AACnC,OAAK,OAAO;AACZ,OAAK,YAAY,iBAAiB;AAChC,QAAK,YAAY;AACjB,OAAI;KACH,MAAM;;CAGX,YAAY;AACV,SAAO,KAAK,cAAc;;CAG5B,cAAc;AACZ,MAAI,KAAK,cAAc,OAAO;AAC5B,gBAAa,KAAK,UAAU;AAC5B,QAAK,YAAY;;;;;;;AAQvB,SAAgB,aAAa;CAC3B,MAAM,UAAU,QAAQ,QAAQ;AAEhC,mBAAkB;AAChB,UAAQ,OAAO;GACf;AAEF,QAAO;;;;;ACrCT,MAAa,uBACT,OAAO,oBAAoB;AAE/B,SAAgB,uBAAuB;CACrC,MAAM,UAAU,OAAO,sBAAsB,OAAU;AACvD,KAAI,YAAY,OACd,OAAM,IAAI,MACR,8FACD;AAGH,QAAO;;;;;ACjBT,MAAa,+BACT,EACA,0BAA0B,MAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECiBH,MAAM,QAAQ;EAId,MAAM,QAAQ,UAAS;EAEvB,MAAM,EAAE,uBAAuB,sBAAqB;EAEpD,MAAM,cAAc,IAAI,MAAM,UAAU,OAAS;EACjD,MAAM,UAAU,YAAW;AAE3B,eAAa,cAAc;AACzB,OAAI,MAAM,UAAU,QAAW;AAC7B,gBAAY,QAAQ;AACpB,YAAQ,MAAM,MAAM,aAAa;AAC/B,iBAAY,QAAQ;MACrB;SAGD,aAAY,QAAQ;AAGtB,mBAAgB;AACd,YAAQ,OAAM;KACf;IACF;EAED,MAAM,QAAQ,gBAAqC,EACjD,oBAAoB,mBAAmB,OACxC,EAAC;EAEF,MAAM,YAAY,eAAe;AAC/B,UAAO,mBAAmB,UAAU,YAAY,YAAY;IAC7D;EAED,MAAM,EAAE,KAAK,aAAa,eAAe,iBAAiB;GACxD,gBAAgB;GAChB;GACA,OAAO,gBAAgB,EACrB,GAAG,OACJ,EAAE;GACH,wBAAwB;GACxB,gBAAgB;GACjB,CAAA;;UAIa,MAAA,WAAU,IAAI,UAAA,QAA1B,WAA2E,KAAA,QAAA,WAAA;;IAArC,OAAO,MAAA,YAAW;IAAG,OAAO,MAAA;QAClC,UAAA,sBAAhC,YAEY,wBAFI,MAAA,IAAG,CAAA,EAAA,eAAA,WAAA,EAAA,KAAA,GAAA,EAAgC,MAAA,YAAW,CAAA,CAAA,EAAA;2BACrC,CAAvB,WAAuB,KAAA,QAAA,WAAA,EAAhB,OAAO,MAAA,OAAK,CAAA"}