UNPKG

bootstrap-vue-next

Version:

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

1 lines 5.26 kB
{"version":3,"file":"useFormSelect-BYhUZcK5.mjs","names":["$attrs"],"sources":["../src/components/BFormSelect/BFormSelectOption.vue","../src/components/BFormSelect/BFormSelectOption.vue","../src/composables/useFormSelect.ts"],"sourcesContent":["<template>\n <option :value=\"props.value\" :disabled=\"props.disabled\" :selected=\"isSelected\" v-bind=\"$attrs\">\n <slot />\n </option>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type {BFormSelectOptionSlots} from '../../types'\nimport {computed, inject} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormSelectOptionProps} from '../../types/ComponentProps'\nimport {formSelectKey} from '../../utils/keys'\n\nconst _props = withDefaults(defineProps<BFormSelectOptionProps<T>>(), {\n disabled: false,\n value: undefined,\n})\nconst props = useDefaults<BFormSelectOptionProps<T>>(_props, 'BFormSelectOption')\ndefineSlots<BFormSelectOptionSlots>()\n\n// Inject the form select context to determine if this option is selected\nconst formSelectContext = inject(formSelectKey, null)\n\nconst isSelected = computed(() => {\n if (!formSelectContext) return false\n return formSelectContext.modelValue.value === props.value\n})\n</script>\n","<template>\n <option :value=\"props.value\" :disabled=\"props.disabled\" :selected=\"isSelected\" v-bind=\"$attrs\">\n <slot />\n </option>\n</template>\n\n<script setup lang=\"ts\" generic=\"T\">\nimport type {BFormSelectOptionSlots} from '../../types'\nimport {computed, inject} from 'vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BFormSelectOptionProps} from '../../types/ComponentProps'\nimport {formSelectKey} from '../../utils/keys'\n\nconst _props = withDefaults(defineProps<BFormSelectOptionProps<T>>(), {\n disabled: false,\n value: undefined,\n})\nconst props = useDefaults<BFormSelectOptionProps<T>>(_props, 'BFormSelectOption')\ndefineSlots<BFormSelectOptionSlots>()\n\n// Inject the form select context to determine if this option is selected\nconst formSelectContext = inject(formSelectKey, null)\n\nconst isSelected = computed(() => {\n if (!formSelectContext) return false\n return formSelectContext.modelValue.value === props.value\n})\n</script>\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport {get} from '../utils/object'\nimport type {ComplexSelectOptionRaw, SelectOption} from '../types/SelectTypes'\n\nexport const useFormSelect = (\n options: MaybeRefOrGetter<ReadonlyArray<unknown>>,\n props: MaybeRefOrGetter<Record<string, unknown>>\n) => {\n const isComplex = (option: unknown): option is ComplexSelectOptionRaw =>\n typeof option === 'object' && option !== null && 'options' in option\n\n const normalizeOption = (option: unknown): ComplexSelectOptionRaw | SelectOption => {\n const propsValue = toValue(props)\n\n if (typeof option === 'string') {\n return {value: option, text: option}\n }\n if (typeof option === 'number') {\n return {value: option, text: `${option}`}\n }\n if (option instanceof Date) {\n return {value: option, text: option.toLocaleString()}\n }\n\n const value: unknown = get(option, propsValue.valueField as string)\n const text: string = get(option, propsValue.textField as string)\n const disabled: boolean = get(option, propsValue.disabledField as string)\n\n const opts: undefined | unknown[] = propsValue.optionsField\n ? get(option, propsValue.optionsField as string)\n : undefined\n\n if (opts !== undefined) {\n return {\n label: get(option, propsValue.labelField as string) || text,\n options: opts,\n } as ComplexSelectOptionRaw\n }\n\n return {\n ...(typeof option === 'object' ? option : undefined),\n value,\n text,\n disabled,\n } as SelectOption\n }\n\n const normalizeOptions = (\n opts: ReadonlyArray<unknown>\n ): (ComplexSelectOptionRaw | SelectOption)[] => opts.map((option) => normalizeOption(option))\n\n const normalizedOptions = computed(() => normalizeOptions(toValue(options)))\n\n return {normalizedOptions, isComplex}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAiBA,MAAM,QAAQ,YAJC,SAI8C,oBAAmB;EAIhF,MAAM,oBAAoB,OAAO,eAAe,KAAI;EAEpD,MAAM,aAAa,eAAe;AAChC,OAAI,CAAC,kBAAmB,QAAO;AAC/B,UAAO,kBAAkB,WAAW,UAAU,MAAM;IACrD;;uBAzBC,mBAES,UAFT,WAES;IAFA,OAAO,MAAA,MAAK,CAAC;IAAQ,UAAU,MAAA,MAAK,CAAC;IAAW,UAAU,WAAA;MAAoBA,KAAAA,OAAM,EAAA,CAC3F,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,IAAA,WAAA;;;;;;AEEZ,IAAa,iBACX,SACA,UACG;CACH,MAAM,aAAa,WACjB,OAAO,WAAW,YAAY,WAAW,QAAQ,aAAa;CAEhE,MAAM,mBAAmB,WAA2D;EAClF,MAAM,aAAa,QAAQ,MAAM;AAEjC,MAAI,OAAO,WAAW,SACpB,QAAO;GAAC,OAAO;GAAQ,MAAM;GAAO;AAEtC,MAAI,OAAO,WAAW,SACpB,QAAO;GAAC,OAAO;GAAQ,MAAM,GAAG;GAAS;AAE3C,MAAI,kBAAkB,KACpB,QAAO;GAAC,OAAO;GAAQ,MAAM,OAAO,gBAAgB;GAAC;EAGvD,MAAM,QAAiB,IAAI,QAAQ,WAAW,WAAqB;EACnE,MAAM,OAAe,IAAI,QAAQ,WAAW,UAAoB;EAChE,MAAM,WAAoB,IAAI,QAAQ,WAAW,cAAwB;EAEzE,MAAM,OAA8B,WAAW,eAC3C,IAAI,QAAQ,WAAW,aAAuB,GAC9C,KAAA;AAEJ,MAAI,SAAS,KAAA,EACX,QAAO;GACL,OAAO,IAAI,QAAQ,WAAW,WAAqB,IAAI;GACvD,SAAS;GACV;AAGH,SAAO;GACL,GAAI,OAAO,WAAW,WAAW,SAAS,KAAA;GAC1C;GACA;GACA;GACD;;CAGH,MAAM,oBACJ,SAC8C,KAAK,KAAK,WAAW,gBAAgB,OAAO,CAAC;AAI7F,QAAO;EAAC,mBAFkB,eAAe,iBAAiB,QAAQ,QAAQ,CAAC,CAAC;EAEjD;EAAU"}