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
JavaScript
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