@vue-interface/select-field 1.0.0-beta.8 → 2.0.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.
@@ -0,0 +1,160 @@
1
+ <script setup lang="ts" generic="ModelValue, Value">
2
+ import { ActivityIndicator } from '@vue-interface/activity-indicator';
3
+ import type { FormControlEvents, FormControlProps, FormControlSlots } from '@vue-interface/form-control';
4
+ import { FormControlErrors, FormControlFeedback, useFormControl } from '@vue-interface/form-control';
5
+ import { InputHTMLAttributes, onMounted, ref, SelectHTMLAttributes, useSlots } from 'vue';
6
+
7
+ const props = withDefaults(defineProps<SelectFieldProps<ModelValue,Value>>(), {
8
+ formControlClass: 'form-select',
9
+ labelClass: 'form-label'
10
+ });
11
+
12
+ defineOptions({
13
+ inheritAttrs: false
14
+ });
15
+
16
+ const model = defineModel<ModelValue>();
17
+
18
+ defineSlots<FormControlSlots<SelectFieldControlSizePrefix,ModelValue> & {
19
+ default: () => unknown
20
+ }>();
21
+
22
+ const emit = defineEmits<FormControlEvents<ModelValue>>();
23
+
24
+ const {
25
+ controlAttributes,
26
+ formGroupClasses,
27
+ listeners,
28
+ } = useFormControl<InputHTMLAttributes, SelectFieldControlSizePrefix, ModelValue, Value>({ model, props, emit });
29
+
30
+ const field = ref<HTMLSelectElement>();
31
+
32
+ function onMousedownLabel(e: MouseEvent) {
33
+ listeners.onClick(e);
34
+
35
+ field.value?.focus();
36
+ }
37
+
38
+ // Check the option slots for selected options. If the field has hardcoded
39
+ // selected options, this will ensure the value of the field is always set to
40
+ // the property. This will ensure the model is updated to the selected value.
41
+ onMounted(() => {
42
+ const slot = useSlots().default;
43
+
44
+ if(!slot) {
45
+ return;
46
+ }
47
+
48
+ for(const child of slot()) {
49
+ if(!child.props) {
50
+ return;
51
+ }
52
+
53
+ if('selected' in child.props && (child.props.value ?? child.children)) {
54
+ model.value = child.props.value ?? child.children;
55
+ }
56
+ }
57
+ });
58
+ </script>
59
+
60
+ <script lang="ts">
61
+ export type SelectFieldControlSizePrefix = 'form-select';
62
+
63
+ export type SelectFieldProps<ModelValue, Value> = FormControlProps<
64
+ SelectHTMLAttributes,
65
+ SelectFieldControlSizePrefix,
66
+ ModelValue,
67
+ Value
68
+ >;
69
+ </script>
70
+
71
+ <template>
72
+ <div
73
+ class="select-field"
74
+ :class="formGroupClasses">
75
+ <slot name="label">
76
+ <label
77
+ v-if="label"
78
+ ref="label"
79
+ :for="controlAttributes.id"
80
+ :class="labelClass"
81
+ @mousedown="onMousedownLabel">
82
+ {{ label }}
83
+ </label>
84
+ </slot>
85
+
86
+ <div class="form-control-inner">
87
+ <slot
88
+ name="control"
89
+ v-bind="{ controlAttributes, listeners }">
90
+ <div
91
+ v-if="$slots.icon"
92
+ class="form-control-inner-icon"
93
+ @click="field?.focus()">
94
+ <slot name="icon" />
95
+ </div>
96
+ <select
97
+ ref="field"
98
+ v-model="model"
99
+ v-bind="{...controlAttributes, ...listeners}">
100
+ <slot />
101
+ </select>
102
+ </slot>
103
+
104
+ <div class="form-control-activity-indicator">
105
+ <slot name="activity">
106
+ <Transition name="select-field-fade">
107
+ <ActivityIndicator
108
+ v-if="activity && indicator"
109
+ key="activity"
110
+ ref="activity"
111
+ :type="indicator"
112
+ :size="indicatorSize" />
113
+ </Transition>
114
+ </slot>
115
+ </div>
116
+ </div>
117
+
118
+ <slot
119
+ name="errors"
120
+ v-bind="{ error, errors, id, name }">
121
+ <FormControlErrors
122
+ v-if="!!(error || errors)"
123
+ :id="id && String(id)"
124
+ v-slot="{ error }"
125
+ :name="name && String(name)"
126
+ :error="error"
127
+ :errors="errors">
128
+ <div
129
+ invalid
130
+ class="invalid-feedback">
131
+ {{ error }}<br>
132
+ </div>
133
+ </FormControlErrors>
134
+ </slot>
135
+
136
+ <slot
137
+ name="feedback"
138
+ v-bind="{ feedback }">
139
+ <FormControlFeedback
140
+ v-slot="{ feedback }"
141
+ :feedback="feedback">
142
+ <div
143
+ valid
144
+ class="valid-feedback">
145
+ {{ feedback }}
146
+ </div>
147
+ </FormControlFeedback>
148
+ </slot>
149
+
150
+ <slot
151
+ name="help"
152
+ v-bind="{ helpText }">
153
+ <small
154
+ v-if="helpText"
155
+ ref="help">
156
+ {{ helpText }}
157
+ </small>
158
+ </slot>
159
+ </div>
160
+ </template>
package/tsconfig.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+ "moduleResolution": "bundler",
9
+ "customConditions": ["source"],
10
+ "allowImportingTsExtensions": true,
11
+ "resolveJsonModule": true,
12
+ "isolatedModules": true,
13
+ "noEmit": true,
14
+ "strict": true,
15
+ "noUnusedLocals": true,
16
+ "noUnusedParameters": true,
17
+ "noFallthroughCasesInSwitch": true,
18
+ "jsx": "preserve",
19
+ "jsxImportSource": "vue"
20
+ },
21
+ "include": [
22
+ "**/*.ts",
23
+ "**/*.tsx",
24
+ "**/*.vue",
25
+ ],
26
+ "exclude": ["node_modules"]
27
+ }
package/vite.config.js ADDED
@@ -0,0 +1,47 @@
1
+ import tailwindcss from '@tailwindcss/vite';
2
+ import vue from '@vitejs/plugin-vue';
3
+ import { pascalCase } from 'change-case';
4
+ import path from 'path';
5
+ import { defineConfig } from 'vite';
6
+ import dts from 'vite-plugin-dts';
7
+ import pkg from './package.json';
8
+
9
+ const fileName = pkg.name.split('/')[1];
10
+
11
+ const external = [
12
+ ...(pkg.dependencies ? Object.keys(pkg.dependencies) : []),
13
+ ...(pkg.peerDependencies ? Object.keys(pkg.peerDependencies) : [])
14
+ ];
15
+
16
+ export default ({ command }) => defineConfig({
17
+ build: {
18
+ sourcemap: command === 'build',
19
+ lib: {
20
+ entry: path.resolve(__dirname, 'index.ts'),
21
+ name: pascalCase(fileName),
22
+ fileName,
23
+ },
24
+ rollupOptions: {
25
+ external,
26
+ output: {
27
+ globals: external.reduce((carry, dep) => {
28
+ return Object.assign(carry, {
29
+ [dep]: pascalCase(dep)
30
+ });
31
+ }, {}),
32
+ }
33
+ },
34
+ watch: !process.env.NODE_ENV && {
35
+ include: [
36
+ './tailwindcss/**/*.js'
37
+ ]
38
+ }
39
+ },
40
+ plugins: [
41
+ vue(),
42
+ dts({
43
+ entryRoot: path.resolve(__dirname, './'),
44
+ }),
45
+ tailwindcss()
46
+ ],
47
+ });
@@ -1,125 +0,0 @@
1
- import { ActivityIndicator as g } from "@vue-interface/activity-indicator";
2
- import { FormControl as S } from "@vue-interface/form-control";
3
- import { defineComponent as z, resolveComponent as m, resolveDirective as E, openBlock as t, createElementBlock as l, normalizeClass as b, renderSlot as o, toDisplayString as i, createCommentVNode as n, createElementVNode as a, normalizeProps as c, guardReactiveProps as f, withDirectives as V, mergeProps as A, vModelSelect as N, createVNode as k, Transition as T, withCtx as p, createBlock as y, createTextVNode as B } from "vue";
4
- const D = z({
5
- name: "SelectField",
6
- components: {
7
- ActivityIndicator: g
8
- },
9
- extends: S,
10
- props: {
11
- /**
12
- * The default class name assigned to the control element
13
- *
14
- * @param {String}
15
- * @default 'form-select'
16
- */
17
- formControlClass: {
18
- type: String,
19
- default: "form-select"
20
- }
21
- },
22
- computed: {
23
- controlClass() {
24
- return this.plaintext ? `${this.formControlClass}-plaintext` : this.formControlClass;
25
- }
26
- }
27
- });
28
- const P = (e, s) => {
29
- const d = e.__vccOpts || e;
30
- for (const [u, v] of s)
31
- d[u] = v;
32
- return d;
33
- }, w = ["for"], O = { class: "form-group-inner" }, j = {
34
- invalid: "",
35
- class: "invalid-feedback"
36
- }, G = /* @__PURE__ */ a("br", null, null, -1), I = {
37
- valid: "",
38
- class: "valid-feedback"
39
- };
40
- function M(e, s, d, u, v, R) {
41
- const C = m("activity-indicator"), $ = m("FormControlErrors"), h = m("FormControlFeedback"), F = E("bind-events");
42
- return t(), l("div", {
43
- class: b(e.formGroupClasses)
44
- }, [
45
- o(e.$slots, "label", {}, () => [
46
- e.label ? (t(), l("label", {
47
- key: 0,
48
- ref: "label",
49
- for: e.id,
50
- class: b(e.labelClass)
51
- }, i(e.label), 11, w)) : n("", !0)
52
- ]),
53
- a("div", O, [
54
- o(e.$slots, "control", c(f({ bindEvents: e.bindEvents, controlAttributes: e.controlAttributes })), () => [
55
- e.$slots.icon ? (t(), l("div", {
56
- key: 0,
57
- class: "form-group-inner-icon",
58
- onClick: s[0] || (s[0] = (...r) => e.focus && e.focus(...r))
59
- }, [
60
- o(e.$slots, "icon")
61
- ])) : n("", !0),
62
- V((t(), l("select", A({
63
- ref: "field",
64
- "onUpdate:modelValue": s[1] || (s[1] = (r) => e.model = r)
65
- }, Object.assign({
66
- disabled: e.$attrs.readonly
67
- }, e.controlAttributes)), [
68
- o(e.$slots, "default")
69
- ], 16)), [
70
- [N, e.model],
71
- [F]
72
- ])
73
- ]),
74
- o(e.$slots, "activity", {}, () => [
75
- k(T, { name: "select-field-fade" }, {
76
- default: p(() => [
77
- e.activity ? (t(), y(C, {
78
- key: "activity",
79
- ref: "activity",
80
- type: e.indicator,
81
- size: e.indicatorSize || e.size
82
- }, null, 8, ["type", "size"])) : n("", !0)
83
- ]),
84
- _: 1
85
- })
86
- ])
87
- ]),
88
- o(e.$slots, "errors", c(f({ error: e.error, errors: e.errors, id: e.$attrs.id, name: e.$attrs.name })), () => [
89
- e.error || e.errors ? (t(), y($, {
90
- key: 0,
91
- id: e.$attrs.id,
92
- name: e.$attrs.name,
93
- error: e.error,
94
- errors: e.errors
95
- }, {
96
- default: p(({ error: r }) => [
97
- a("div", j, [
98
- B(i(r), 1),
99
- G
100
- ])
101
- ]),
102
- _: 1
103
- }, 8, ["id", "name", "error", "errors"])) : n("", !0)
104
- ]),
105
- o(e.$slots, "feedback", c(f({ feedback: e.feedback })), () => [
106
- k(h, { feedback: e.feedback }, {
107
- default: p(({ feedback: r }) => [
108
- a("div", I, i(r), 1)
109
- ]),
110
- _: 1
111
- }, 8, ["feedback"])
112
- ]),
113
- o(e.$slots, "help", {}, () => [
114
- e.helpText ? (t(), l("small", {
115
- key: 0,
116
- ref: "help"
117
- }, i(e.helpText), 513)) : n("", !0)
118
- ])
119
- ], 2);
120
- }
121
- const J = /* @__PURE__ */ P(D, [["render", M]]);
122
- export {
123
- J as SelectField
124
- };
125
- //# sourceMappingURL=select-field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"select-field.js","sources":["../src/SelectField.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { ActivityIndicator } from '@vue-interface/activity-indicator';\nimport { FormControl } from '@vue-interface/form-control';\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\n name: 'SelectField',\n\n components: {\n ActivityIndicator,\n },\n\n extends: FormControl,\n\n props: {\n /**\n * The default class name assigned to the control element\n *\n * @param {String}\n * @default 'form-select'\n */\n formControlClass: {\n type: String,\n default: 'form-select'\n } \n },\n\n computed: {\n controlClass() {\n return this.plaintext ?\n `${this.formControlClass}-plaintext`\n : this.formControlClass;\n }\n }\n\n});\n</script>\n\n<template>\n <div :class=\"formGroupClasses\">\n <slot name=\"label\">\n <label\n v-if=\"label\"\n ref=\"label\"\n :for=\"id\"\n :class=\"labelClass\">\n {{ label }}\n </label>\n </slot>\n\n <div class=\"form-group-inner\">\n <slot\n name=\"control\"\n v-bind=\"{ bindEvents, controlAttributes }\">\n <div\n v-if=\"$slots.icon\"\n class=\"form-group-inner-icon\"\n @click=\"focus\">\n <slot name=\"icon\" />\n </div>\n <select\n ref=\"field\"\n v-model=\"model\"\n v-bind-events\n v-bind=\"Object.assign({\n ['disabled']: $attrs.readonly\n }, controlAttributes)\">\n <slot />\n </select>\n </slot>\n\n <slot name=\"activity\">\n <transition name=\"select-field-fade\">\n <activity-indicator\n v-if=\"activity\"\n key=\"activity\"\n ref=\"activity\"\n :type=\"indicator\"\n :size=\"indicatorSize || size\" />\n </transition>\n </slot>\n </div>\n\n <slot\n name=\"errors\"\n v-bind=\"{ error, errors, id: $attrs.id, name: $attrs.name }\"> \n <FormControlErrors\n v-if=\"!!(error || errors)\"\n :id=\"$attrs.id\"\n v-slot=\"{ error }\"\n :name=\"$attrs.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 name=\"help\">\n <small\n v-if=\"helpText\"\n ref=\"help\">\n {{ helpText }}\n </small>\n </slot>\n </div>\n</template>\n\n<style>\n.select-field,\n.select-field .form-group-inner {\n position: relative;\n transition: all .25s ease-in-out;\n}\n\n.select-field .activity-indicator {\n position: absolute;\n right: 1.25em;\n top: 50%;\n transform: translate(-1rem, -50%);\n transition: all .15s ease-in;\n}\n\n.select-field .activity-indicator-xs {\n font-size: .5em;\n right: 2em;\n}\n\n.select-field.has-activity .form-control-xs {\n padding-right: 3.75em;\n}\n\n.select-field .activity-indicator-sm {\n font-size: .5em;\n right: 2em;\n}\n\n.select-field.has-activity .form-control-sm {\n padding-right: 3em;\n}\n\n.select-field .activity-indicator-md {\n font-size: .666em;\n}\n\n.select-field.has-activity .form-control-md {\n padding-right: 3em;\n}\n\n.select-field .activity-indicator-lg {\n font-size: .75em;\n}\n\n.select-field.has-activity .form-control-lg {\n padding-right: 3em;\n}\n\n.select-field .activity-indicator-xl {\n font-size: 1em;\n}\n\n.select-field.has-activity .activity-indicator-xl ~ .form-control-xl {\n padding-right: 3.75em;\n}\n\n.select-field .activity-indicator {\n opacity: 1;\n}\n\n.select-field .select-field-fade-enter,\n.select-field .select-field-fade-leave-to {\n opacity: 0;\n}\n\n.select-field.is-valid .valid-feedback,\n.select-field.is-invalid .invalid-feedback {\n display: flex;\n}\n\n.select-field .form-control-icon {\n padding-left: 2em;\n}\n\n.select-field .form-group-inner-icon {\n position: absolute;\n top: 50%;\n left: .666em;\n width: 1rem;\n font-size: 1em;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.select-field-sm .form-group-inner-icon {\n position: absolute;\n top: 50%;\n left: .666rem;\n width: .75em;\n font-size: 1.5em;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.select-field-lg .form-group-inner-icon {\n position: absolute;\n top: 50%;\n left: .666rem;\n width: 1.25em;\n font-size: 1em;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.select-field .activity-indicator {\n opacity: 1;\n}\n\n.select-field .select-field-fade-enter,\n.select-field .select-field-fade-leave-to {\n opacity: 0;\n}\n</style>\n\n"],"names":["_sfc_main","defineComponent","ActivityIndicator","FormControl","_hoisted_2","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_resolveDirective","_normalizeClass","_ctx","_openBlock","_createElementBlock","_toDisplayString","_hoisted_1","_createCommentVNode","_renderSlot","_normalizeProps","_guardReactiveProps","_cache","args","_withDirectives","_mergeProps","$event","_createVNode","_Transition","_withCtx","_createBlock","_component_activity_indicator","_component_FormControlErrors","_createTextVNode","error","_component_FormControlFeedback","feedback"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- (function(r,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("@vue-interface/activity-indicator"),require("@vue-interface/form-control"),require("vue")):typeof define=="function"&&define.amd?define(["exports","@vue-interface/activity-indicator","@vue-interface/form-control","vue"],i):(r=typeof globalThis<"u"?globalThis:r||self,i(r.SelectField={},r.ActivityIndicator,r.FormControl,r.Vue))})(this,function(r,i,d,e){"use strict";const c=e.defineComponent({name:"SelectField",components:{ActivityIndicator:i.ActivityIndicator},extends:d.FormControl,props:{formControlClass:{type:String,default:"form-select"}},computed:{controlClass(){return this.plaintext?`${this.formControlClass}-plaintext`:this.formControlClass}}}),g="",m=(o,n)=>{const l=o.__vccOpts||o;for(const[s,a]of n)l[s]=a;return l},p=["for"],f={class:"form-group-inner"},k={invalid:"",class:"invalid-feedback"},y=e.createElementVNode("br",null,null,-1),C={valid:"",class:"valid-feedback"};function b(o,n,l,s,a,E){const $=e.resolveComponent("activity-indicator"),h=e.resolveComponent("FormControlErrors"),B=e.resolveComponent("FormControlFeedback"),V=e.resolveDirective("bind-events");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(o.formGroupClasses)},[e.renderSlot(o.$slots,"label",{},()=>[o.label?(e.openBlock(),e.createElementBlock("label",{key:0,ref:"label",for:o.id,class:e.normalizeClass(o.labelClass)},e.toDisplayString(o.label),11,p)):e.createCommentVNode("",!0)]),e.createElementVNode("div",f,[e.renderSlot(o.$slots,"control",e.normalizeProps(e.guardReactiveProps({bindEvents:o.bindEvents,controlAttributes:o.controlAttributes})),()=>[o.$slots.icon?(e.openBlock(),e.createElementBlock("div",{key:0,class:"form-group-inner-icon",onClick:n[0]||(n[0]=(...t)=>o.focus&&o.focus(...t))},[e.renderSlot(o.$slots,"icon")])):e.createCommentVNode("",!0),e.withDirectives((e.openBlock(),e.createElementBlock("select",e.mergeProps({ref:"field","onUpdate:modelValue":n[1]||(n[1]=t=>o.model=t)},Object.assign({disabled:o.$attrs.readonly},o.controlAttributes)),[e.renderSlot(o.$slots,"default")],16)),[[e.vModelSelect,o.model],[V]])]),e.renderSlot(o.$slots,"activity",{},()=>[e.createVNode(e.Transition,{name:"select-field-fade"},{default:e.withCtx(()=>[o.activity?(e.openBlock(),e.createBlock($,{key:"activity",ref:"activity",type:o.indicator,size:o.indicatorSize||o.size},null,8,["type","size"])):e.createCommentVNode("",!0)]),_:1})])]),e.renderSlot(o.$slots,"errors",e.normalizeProps(e.guardReactiveProps({error:o.error,errors:o.errors,id:o.$attrs.id,name:o.$attrs.name})),()=>[o.error||o.errors?(e.openBlock(),e.createBlock(h,{key:0,id:o.$attrs.id,name:o.$attrs.name,error:o.error,errors:o.errors},{default:e.withCtx(({error:t})=>[e.createElementVNode("div",k,[e.createTextVNode(e.toDisplayString(t),1),y])]),_:1},8,["id","name","error","errors"])):e.createCommentVNode("",!0)]),e.renderSlot(o.$slots,"feedback",e.normalizeProps(e.guardReactiveProps({feedback:o.feedback})),()=>[e.createVNode(B,{feedback:o.feedback},{default:e.withCtx(({feedback:t})=>[e.createElementVNode("div",C,e.toDisplayString(t),1)]),_:1},8,["feedback"])]),e.renderSlot(o.$slots,"help",{},()=>[o.helpText?(e.openBlock(),e.createElementBlock("small",{key:0,ref:"help"},e.toDisplayString(o.helpText),513)):e.createCommentVNode("",!0)])],2)}const S=m(c,[["render",b]]);r.SelectField=S,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
2
- //# sourceMappingURL=select-field.umd.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"select-field.umd.cjs","sources":["../src/SelectField.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { ActivityIndicator } from '@vue-interface/activity-indicator';\nimport { FormControl } from '@vue-interface/form-control';\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\n name: 'SelectField',\n\n components: {\n ActivityIndicator,\n },\n\n extends: FormControl,\n\n props: {\n /**\n * The default class name assigned to the control element\n *\n * @param {String}\n * @default 'form-select'\n */\n formControlClass: {\n type: String,\n default: 'form-select'\n } \n },\n\n computed: {\n controlClass() {\n return this.plaintext ?\n `${this.formControlClass}-plaintext`\n : this.formControlClass;\n }\n }\n\n});\n</script>\n\n<template>\n <div :class=\"formGroupClasses\">\n <slot name=\"label\">\n <label\n v-if=\"label\"\n ref=\"label\"\n :for=\"id\"\n :class=\"labelClass\">\n {{ label }}\n </label>\n </slot>\n\n <div class=\"form-group-inner\">\n <slot\n name=\"control\"\n v-bind=\"{ bindEvents, controlAttributes }\">\n <div\n v-if=\"$slots.icon\"\n class=\"form-group-inner-icon\"\n @click=\"focus\">\n <slot name=\"icon\" />\n </div>\n <select\n ref=\"field\"\n v-model=\"model\"\n v-bind-events\n v-bind=\"Object.assign({\n ['disabled']: $attrs.readonly\n }, controlAttributes)\">\n <slot />\n </select>\n </slot>\n\n <slot name=\"activity\">\n <transition name=\"select-field-fade\">\n <activity-indicator\n v-if=\"activity\"\n key=\"activity\"\n ref=\"activity\"\n :type=\"indicator\"\n :size=\"indicatorSize || size\" />\n </transition>\n </slot>\n </div>\n\n <slot\n name=\"errors\"\n v-bind=\"{ error, errors, id: $attrs.id, name: $attrs.name }\"> \n <FormControlErrors\n v-if=\"!!(error || errors)\"\n :id=\"$attrs.id\"\n v-slot=\"{ error }\"\n :name=\"$attrs.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 name=\"help\">\n <small\n v-if=\"helpText\"\n ref=\"help\">\n {{ helpText }}\n </small>\n </slot>\n </div>\n</template>\n\n<style>\n.select-field,\n.select-field .form-group-inner {\n position: relative;\n transition: all .25s ease-in-out;\n}\n\n.select-field .activity-indicator {\n position: absolute;\n right: 1.25em;\n top: 50%;\n transform: translate(-1rem, -50%);\n transition: all .15s ease-in;\n}\n\n.select-field .activity-indicator-xs {\n font-size: .5em;\n right: 2em;\n}\n\n.select-field.has-activity .form-control-xs {\n padding-right: 3.75em;\n}\n\n.select-field .activity-indicator-sm {\n font-size: .5em;\n right: 2em;\n}\n\n.select-field.has-activity .form-control-sm {\n padding-right: 3em;\n}\n\n.select-field .activity-indicator-md {\n font-size: .666em;\n}\n\n.select-field.has-activity .form-control-md {\n padding-right: 3em;\n}\n\n.select-field .activity-indicator-lg {\n font-size: .75em;\n}\n\n.select-field.has-activity .form-control-lg {\n padding-right: 3em;\n}\n\n.select-field .activity-indicator-xl {\n font-size: 1em;\n}\n\n.select-field.has-activity .activity-indicator-xl ~ .form-control-xl {\n padding-right: 3.75em;\n}\n\n.select-field .activity-indicator {\n opacity: 1;\n}\n\n.select-field .select-field-fade-enter,\n.select-field .select-field-fade-leave-to {\n opacity: 0;\n}\n\n.select-field.is-valid .valid-feedback,\n.select-field.is-invalid .invalid-feedback {\n display: flex;\n}\n\n.select-field .form-control-icon {\n padding-left: 2em;\n}\n\n.select-field .form-group-inner-icon {\n position: absolute;\n top: 50%;\n left: .666em;\n width: 1rem;\n font-size: 1em;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.select-field-sm .form-group-inner-icon {\n position: absolute;\n top: 50%;\n left: .666rem;\n width: .75em;\n font-size: 1.5em;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.select-field-lg .form-group-inner-icon {\n position: absolute;\n top: 50%;\n left: .666rem;\n width: 1.25em;\n font-size: 1em;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.select-field .activity-indicator {\n opacity: 1;\n}\n\n.select-field .select-field-fade-enter,\n.select-field .select-field-fade-leave-to {\n opacity: 0;\n}\n</style>\n\n"],"names":["_sfc_main","defineComponent","ActivityIndicator","FormControl","_hoisted_2","_hoisted_3","_hoisted_4","_createElementVNode","_hoisted_5","_resolveDirective","_normalizeClass","_ctx","_openBlock","_createElementBlock","_toDisplayString","_hoisted_1","_createCommentVNode","_renderSlot","_normalizeProps","_guardReactiveProps","_cache","args","_withDirectives","_mergeProps","$event","_createVNode","_Transition","_withCtx","_createBlock","_component_activity_indicator","_component_FormControlErrors","_createTextVNode","error","_component_FormControlFeedback","feedback"],"mappings":"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"}