{"version":3,"file":"select-field.umd.cjs","sources":["../src/SelectField.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"ModelValue, Value\">\nimport { ActivityIndicator } from '@vue-interface/activity-indicator';\nimport type { FormControlEvents, FormControlProps, FormControlSlots } from '@vue-interface/form-control';\nimport { FormControlErrors, FormControlFeedback, useFormControl } from '@vue-interface/form-control';\nimport { type HTMLAttributes, onMounted, SelectHTMLAttributes, useSlots, useTemplateRef } from 'vue';\n\nconst props = withDefaults(defineProps<SelectFieldProps<ModelValue,Value>>(), {\n    formControlClass: 'form-select',\n    labelClass: 'form-label',\n    size: 'form-select-md'\n});\n\ndefineOptions({\n    inheritAttrs: false\n});\n\nconst model = defineModel<ModelValue>();\n\ndefineSlots<FormControlSlots<SelectFieldControlSizePrefix,ModelValue> & {\n    default: () => unknown\n}>();\n\nconst emit = defineEmits<FormControlEvents>();\n\nconst {\n    controlAttributes,\n    formGroupClasses,\n    listeners,\n} = useFormControl<HTMLAttributes, SelectFieldControlSizePrefix, ModelValue|undefined, Value>({ model, props, emit });\n\nconst activity = useTemplateRef<InstanceType<typeof ActivityIndicator>>('activity');\nconst help = useTemplateRef<HTMLElement>('help');\nconst label = useTemplateRef<HTMLLabelElement>('label');\nconst field = useTemplateRef<HTMLSelectElement>('field');\nconst wrapper = useTemplateRef<HTMLDivElement>('wrapper');\n\ndefineExpose({\n    activity,\n    help,\n    field,\n    label,\n    wrapper,\n    focus: () => field.value?.focus(),\n    blur: () => field.value?.blur(),\n});\n\n// Check the option slots for selected options. If the field has hardcoded\n// selected options, this will ensure the value of the field is always set to\n// the property. This will ensure the model is updated to the selected value.\nonMounted(() => {\n    const slot = useSlots().default;\n\n    if(!slot) {\n        return;\n    }\n\n    for(const child of slot()) {\n        if(!child.props) {\n            return;\n        }\n        \n        if('selected' in child.props && (child.props.value ?? child.children)) {\n            model.value = child.props.value ?? child.children;\n        }\n    }\n});\n</script>\n\n<script lang=\"ts\">\nexport type SelectFieldControlSizePrefix = 'form-select';\n\nexport type SelectFieldProps<ModelValue, Value> = FormControlProps<\n    SelectHTMLAttributes, \n    SelectFieldControlSizePrefix, \n    ModelValue, \n    Value\n>;\n</script>\n\n<template>\n    <div\n        ref=\"wrapper\"\n        class=\"select-field\"\n        :class=\"formGroupClasses\">\n        <slot name=\"label\">\n            <label\n                v-if=\"props.label\"\n                ref=\"label\"\n                :for=\"controlAttributes.id\"\n                :class=\"labelClass\"\n                @click=\"field?.click()\">\n                {{ props.label }}\n            </label>\n        </slot>\n\n        <div class=\"form-control-inner\">\n            <slot\n                name=\"control\"\n                v-bind=\"{ controlAttributes, listeners }\">\n                <div\n                    v-if=\"$slots.icon\"\n                    class=\"form-control-inner-icon\"\n                    @click=\"field?.focus()\">\n                    <slot name=\"icon\" />\n                </div>\n                <select\n                    ref=\"field\"\n                    v-model=\"model\"\n                    v-bind=\"{...controlAttributes, ...listeners}\">\n                    <slot />\n                </select>\n            </slot>\n            \n            <div class=\"form-control-activity-indicator\">\n                <slot name=\"activity\">\n                    <Transition name=\"select-field-fade\">\n                        <ActivityIndicator\n                            v-if=\"props.activity && indicator\"\n                            key=\"activity\"\n                            ref=\"activity\"\n                            :type=\"indicator\"\n                            :size=\"indicatorSize\" />\n                    </Transition>\n                </slot>\n            </div>    \n        </div>\n\n        <slot\n            name=\"errors\"\n            v-bind=\"{ error, errors, id, name }\">        \n            <FormControlErrors\n                v-if=\"!!(error || errors)\"\n                :id=\"id && String(id)\"\n                v-slot=\"{ error }\"\n                :name=\"name && String(name)\"\n                :error=\"error\"\n                :errors=\"errors\">\n                <div\n                    invalid\n                    class=\"invalid-feedback\">\n                    {{ error }}<br>\n                </div>\n            </FormControlErrors>\n        </slot>\n        \n        <slot\n            name=\"feedback\"\n            v-bind=\"{ feedback }\">\n            <FormControlFeedback\n                v-slot=\"{ feedback }\"\n                :feedback=\"feedback\">\n                <div\n                    valid\n                    class=\"valid-feedback\">\n                    {{ feedback }}\n                </div>\n            </FormControlFeedback>\n        </slot>\n\n        <slot\n            name=\"help\"\n            v-bind=\"{ helpText }\">\n            <small\n                v-if=\"helpText\"\n                ref=\"help\">\n                {{ helpText }}\n            </small>\n        </slot>\n    </div>\n</template>"],"names":["props","__props","model","_useModel","emit","__emit","controlAttributes","formGroupClasses","listeners","useFormControl","activity","useTemplateRef","help","label","field","wrapper","__expose","onMounted","slot","useSlots","child","_createElementBlock","_normalizeClass","_unref","_renderSlot","_ctx","_cache","$event","_toDisplayString","_hoisted_1","_createElementVNode","_hoisted_2","_normalizeProps","_guardReactiveProps","$slots","_withDirectives","_mergeProps","_hoisted_3","_createVNode","_Transition","_createBlock","ActivityIndicator","FormControlErrors","_withCtx","error","_hoisted_4","FormControlFeedback","feedback","_hoisted_5"],"mappings":"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"}