UNPKG

bootstrap-vue-next

Version:

Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development

180 lines (179 loc) 5.78 kB
import { n as usePrimitiveElement, t as VisuallyHidden_default } from "./VisuallyHidden-BYzyjJiY.js"; import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, defineComponent, mergeProps, nextTick, openBlock, ref, renderList, watch } from "vue"; //#region ../../node_modules/.pnpm/reka-ui@2.10.3_vue@3.5.41_typescript@5.9.3_/node_modules/reka-ui/dist/shared/useComposing.js var imeScriptRE = /[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Bopomofo}]/u; var androidRE = /android/i; function isAndroid() { return typeof navigator !== "undefined" && androidRE.test(navigator.userAgent); } function useComposing(onEnd) { const isComposing = ref(false); const isImeComposition = ref(true); const sawImeScript = ref(false); const shouldDeferInput = computed(() => isComposing.value && isImeComposition.value); function handleCompositionStart() { isComposing.value = true; isImeComposition.value = true; sawImeScript.value = false; } function handleCompositionUpdate(event) { if (!event.data) return; if (imeScriptRE.test(event.data)) { isImeComposition.value = true; sawImeScript.value = true; } else if (isAndroid() && !sawImeScript.value) isImeComposition.value = false; } function handleCompositionEnd(event) { nextTick(() => { isComposing.value = false; onEnd?.(event); }); } return { isComposing, shouldDeferInput, handleCompositionStart, handleCompositionUpdate, handleCompositionEnd }; } //#endregion //#region ../../node_modules/.pnpm/reka-ui@2.10.3_vue@3.5.41_typescript@5.9.3_/node_modules/reka-ui/dist/VisuallyHidden/VisuallyHiddenInputBubble.js var VisuallyHiddenInputBubble_default = /* @__PURE__ */ defineComponent({ inheritAttrs: false, __name: "VisuallyHiddenInputBubble", props: { name: { type: String, required: true }, value: { type: null, required: true }, checked: { type: Boolean, required: false, default: void 0 }, required: { type: Boolean, required: false }, disabled: { type: Boolean, required: false }, feature: { type: String, required: false, default: "fully-hidden" } }, setup(__props) { const props = __props; const { primitiveElement, currentElement } = usePrimitiveElement(); const valueState = computed(() => props.checked ?? props.value); watch(valueState, (cur, prev) => { if (!currentElement.value) return; const input = currentElement.value; const inputProto = window.HTMLInputElement.prototype; const setValue = Object.getOwnPropertyDescriptor(inputProto, "value").set; if (setValue && cur !== prev) { const inputEvent = new Event("input", { bubbles: true }); const changeEvent = new Event("change", { bubbles: true }); setValue.call(input, cur); input.dispatchEvent(inputEvent); input.dispatchEvent(changeEvent); } }); return (_ctx, _cache) => { return openBlock(), createBlock(VisuallyHidden_default, mergeProps({ ref_key: "primitiveElement", ref: primitiveElement }, { ...props, ..._ctx.$attrs }, { as: "input" }), null, 16); }; } }); //#endregion //#region ../../node_modules/.pnpm/reka-ui@2.10.3_vue@3.5.41_typescript@5.9.3_/node_modules/reka-ui/dist/VisuallyHidden/VisuallyHiddenInput.js var VisuallyHiddenInput_default = /* @__PURE__ */ defineComponent({ inheritAttrs: false, __name: "VisuallyHiddenInput", props: { name: { type: String, required: true }, value: { type: null, required: true }, checked: { type: Boolean, required: false, default: void 0 }, required: { type: Boolean, required: false }, disabled: { type: Boolean, required: false }, feature: { type: String, required: false, default: "fully-hidden" } }, setup(__props) { const props = __props; const isFormArrayEmptyAndRequired = computed(() => typeof props.value === "object" && Array.isArray(props.value) && props.value.length === 0 && props.required); const parsedValue = computed(() => { if (typeof props.value === "string" || typeof props.value === "number" || typeof props.value === "boolean" || props.value === null || props.value === void 0) return [{ name: props.name, value: props.value }]; else if (typeof props.value === "object" && Array.isArray(props.value)) return props.value.flatMap((obj, index) => { if (typeof obj === "object") return Object.entries(obj).map(([key, value]) => ({ name: `${props.name}[${index}][${key}]`, value })); else return { name: `${props.name}[${index}]`, value: obj }; }); else if (props.value !== null && typeof props.value === "object" && !Array.isArray(props.value)) return Object.entries(props.value).map(([key, value]) => ({ name: `${props.name}[${key}]`, value })); return []; }); return (_ctx, _cache) => { return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" We render single input if it's required "), isFormArrayEmptyAndRequired.value ? (openBlock(), createBlock(VisuallyHiddenInputBubble_default, mergeProps({ key: _ctx.name }, { ...props, ..._ctx.$attrs }, { name: _ctx.name, value: _ctx.value }), null, 16, ["name", "value"])) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(parsedValue.value, (parsed) => { return openBlock(), createBlock(VisuallyHiddenInputBubble_default, mergeProps({ key: parsed.name }, { ref_for: true }, { ...props, ..._ctx.$attrs }, { name: parsed.name, value: parsed.value }), null, 16, ["name", "value"]); }), 128))], 2112); }; } }); //#endregion export { useComposing as n, VisuallyHiddenInput_default as t }; //# sourceMappingURL=VisuallyHiddenInput-CUrc8XXa.js.map