ropav 0.0.2 → 0.0.4
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.
- package/README.md +32 -3
- package/dist/base.css +153 -77
- package/dist/button.css +276 -32
- package/dist/button.js +40 -19
- package/dist/button.js.map +1 -1
- package/dist/checkbox.css +127 -19
- package/dist/checkbox.js +57 -44
- package/dist/checkbox.js.map +1 -1
- package/dist/components/button/button.d.ts +2 -2
- package/dist/components/button/index.d.ts +1 -1
- package/dist/components/button/types.d.ts +8 -1
- package/dist/components/checkbox/index.d.ts +1 -1
- package/dist/components/checkbox/types.d.ts +8 -0
- package/dist/components/input/index.d.ts +1 -1
- package/dist/components/input/input.d.ts +5 -1
- package/dist/components/input/types.d.ts +5 -0
- package/dist/components/radio/index.d.ts +1 -1
- package/dist/components/radio/types.d.ts +12 -0
- package/dist/components/select/types.d.ts +3 -0
- package/dist/components/select/useSelect.d.ts +2 -0
- package/dist/components/switch/index.d.ts +1 -1
- package/dist/components/switch/types.d.ts +4 -0
- package/dist/components/textarea/index.d.ts +1 -1
- package/dist/components/textarea/types.d.ts +5 -0
- package/dist/components/textarea/useTextarea.d.ts +1 -0
- package/dist/index.d.ts +0 -2
- package/dist/index.js +2 -4
- package/dist/input.css +91 -15
- package/dist/input.js +66 -23
- package/dist/input.js.map +1 -1
- package/dist/radio.css +84 -16
- package/dist/radio.js +35 -8
- package/dist/radio.js.map +1 -1
- package/dist/select.css +97 -32
- package/dist/select.js +128 -88
- package/dist/select.js.map +1 -1
- package/dist/switch.css +75 -20
- package/dist/switch.js +8 -4
- package/dist/switch.js.map +1 -1
- package/dist/textarea.css +84 -14
- package/dist/textarea.js +33 -5
- package/dist/textarea.js.map +1 -1
- package/dist/useControlState.js +4 -0
- package/dist/useControlState.js.map +1 -1
- package/package.json +11 -10
- package/src/styles/_mixins.scss +21 -11
- package/src/styles/_tokens.scss +168 -96
- package/src/styles/_variables.scss +30 -28
- package/dist/components/_internal/icons/CheckIcon.d.ts +0 -18
- package/dist/components/_internal/icons/ChevronDownIcon.d.ts +0 -18
- package/dist/components/_internal/icons/MinusIcon.d.ts +0 -18
- package/dist/components/_internal/icons/index.d.ts +0 -3
- package/dist/components/_internal/optionList.d.ts +0 -9
- package/dist/components/tabs/index.d.ts +0 -5
- package/dist/components/tabs/index.js +0 -2
- package/dist/components/tabs/tab-panel.d.ts +0 -21
- package/dist/components/tabs/tabs-list.d.ts +0 -20
- package/dist/components/tabs/tabs-trigger.d.ts +0 -21
- package/dist/components/tabs/tabs.d.ts +0 -23
- package/dist/components/tabs/types.d.ts +0 -18
- package/dist/components/tabs/useTabs.d.ts +0 -19
- package/dist/components/tooltip/index.d.ts +0 -2
- package/dist/components/tooltip/index.js +0 -2
- package/dist/components/tooltip/tooltip.d.ts +0 -23
- package/dist/components/tooltip/types.d.ts +0 -5
- package/dist/components/tooltip/useTooltip.d.ts +0 -8
- package/dist/tabs.css +0 -45
- package/dist/tabs.js +0 -205
- package/dist/tabs.js.map +0 -1
- package/dist/tooltip.css +0 -78
- package/dist/tooltip.js +0 -112
- package/dist/tooltip.js.map +0 -1
- package/dist/useRequiredInject.js +0 -11
- package/dist/useRequiredInject.js.map +0 -1
package/dist/radio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio.js","names":[],"sources":["../src/components/radio/types.ts","../src/components/radio/useRadio.ts","../src/components/radio/radio.vue","../src/components/radio/radio.vue","../src/components/radio/radio-group.vue","../src/components/radio/radio-group.vue"],"sourcesContent":["import type { InjectionKey } from 'vue';\n\nexport interface RadioProps {\n value: string | number;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n id?: string;\n name?: string;\n modelValue: string | number | null;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n ariaLabel?: string;\n describedby?: string;\n labelledby?: string;\n}\n\nexport interface RadioGroupContext {\n modelValue: string | number | null;\n name: string;\n disabled: boolean;\n required: boolean;\n select: (value: string | number) => void;\n}\n\nexport const radioGroupKey = Symbol('radioGroup') as InjectionKey<RadioGroupContext>;\n","import { computed, provide, useId } from 'vue';\nimport { useControlState } from '@/composables/useControlState';\nimport { useRequiredInject } from '@/composables/useRequiredInject';\nimport { bem } from '@/utils/bem';\nimport { radioGroupKey } from './types';\nimport type { RadioGroupContext, RadioGroupProps, RadioProps } from './types';\n\nexport function useRadio(props: Readonly<RadioProps>) {\n const group = useRequiredInject(radioGroupKey, 'RpRadio');\n const isChecked = computed(() => group.modelValue === props.value);\n const isDisabled = computed(() => props.disabled || group.disabled);\n\n const rootClass = computed(() =>\n bem('rp-radio', {\n checked: isChecked.value,\n disabled: isDisabled.value,\n }),\n );\n\n function onSelect() {\n if (isDisabled.value) return;\n group.select(props.value);\n }\n\n return {\n group,\n isChecked,\n isDisabled,\n rootClass,\n onSelect,\n };\n}\n\nexport function useRadioGroup(\n props: Readonly<RadioGroupProps>,\n emitUpdate: (value: string | number | null) => void,\n) {\n const control = useControlState(props);\n\n const rootClass = computed(() =>\n bem('rp-radio-group', {\n disabled: control.disabled,\n invalid: control.invalid,\n }),\n );\n\n const generatedName = useId();\n const groupName = computed(() => props.name ?? `${control.id ?? generatedName}-radio`);\n\n provide<RadioGroupContext>(radioGroupKey, {\n get modelValue() { return props.modelValue; },\n get name() { return groupName.value; },\n get disabled() { return control.disabled; },\n get required() { return control.required; },\n select(value) {\n emitUpdate(value);\n },\n });\n\n return {\n control,\n rootClass,\n };\n}\n","<template>\n <label :class=\"rootClass\" :data-disabled=\"isDisabled || undefined\" :data-state=\"isChecked ? 'checked' : 'unchecked'\">\n <input\n type=\"radio\"\n class=\"rp-radio__native\"\n :name=\"group.name\"\n :value=\"value\"\n :checked=\"isChecked\"\n :disabled=\"isDisabled || undefined\"\n :required=\"group.required || undefined\"\n @change=\"onSelect\"\n />\n <span class=\"rp-radio__dot\" />\n <span v-if=\"$slots.default\" class=\"rp-radio__label\">\n <slot />\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useRadio } from './useRadio';\nimport type { RadioProps } from './types';\n\ndefineOptions({ name: 'RpRadio' });\n\nconst props = withDefaults(defineProps<RadioProps>(), {\n disabled: false,\n});\n\nconst { group, isChecked, isDisabled, rootClass, onSelect } = useRadio(props);\n</script>\n\n<style src=\"./radio.scss\" lang=\"scss\" scoped></style>\n","<template>\n <label :class=\"rootClass\" :data-disabled=\"isDisabled || undefined\" :data-state=\"isChecked ? 'checked' : 'unchecked'\">\n <input\n type=\"radio\"\n class=\"rp-radio__native\"\n :name=\"group.name\"\n :value=\"value\"\n :checked=\"isChecked\"\n :disabled=\"isDisabled || undefined\"\n :required=\"group.required || undefined\"\n @change=\"onSelect\"\n />\n <span class=\"rp-radio__dot\" />\n <span v-if=\"$slots.default\" class=\"rp-radio__label\">\n <slot />\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useRadio } from './useRadio';\nimport type { RadioProps } from './types';\n\ndefineOptions({ name: 'RpRadio' });\n\nconst props = withDefaults(defineProps<RadioProps>(), {\n disabled: false,\n});\n\nconst { group, isChecked, isDisabled, rootClass, onSelect } = useRadio(props);\n</script>\n\n<style src=\"./radio.scss\" lang=\"scss\" scoped></style>\n","<template>\n <div\n :id=\"control.id\"\n :class=\"rootClass\"\n role=\"radiogroup\"\n :data-disabled=\"control.disabled || undefined\"\n :data-invalid=\"control.invalid || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n >\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useRadioGroup } from './useRadio';\nimport type { RadioGroupProps } from './types';\n\ndefineOptions({ name: 'RpRadioGroup' });\n\nconst props = withDefaults(defineProps<RadioGroupProps>(), {\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null];\n}>();\n\nconst { control, rootClass } = useRadioGroup(props, (value) => {\n emit('update:modelValue', value);\n});\n</script>\n\n<style src=\"./radio-group.scss\" lang=\"scss\" scoped></style>\n","<template>\n <div\n :id=\"control.id\"\n :class=\"rootClass\"\n role=\"radiogroup\"\n :data-disabled=\"control.disabled || undefined\"\n :data-invalid=\"control.invalid || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n >\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useRadioGroup } from './useRadio';\nimport type { RadioGroupProps } from './types';\n\ndefineOptions({ name: 'RpRadioGroup' });\n\nconst props = withDefaults(defineProps<RadioGroupProps>(), {\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null];\n}>();\n\nconst { control, rootClass } = useRadioGroup(props, (value) => {\n emit('update:modelValue', value);\n});\n</script>\n\n<style src=\"./radio-group.scss\" lang=\"scss\" scoped></style>\n"],"mappings":";;;;;AA2BA,IAAa,gBAAgB,OAAO,YAAY;;;ACpBhD,SAAgB,SAAS,OAA6B;CAClD,MAAM,QAAQ,kBAAkB,eAAe,SAAS;CACxD,MAAM,YAAY,eAAe,MAAM,eAAe,MAAM,KAAK;CACjE,MAAM,aAAa,eAAe,MAAM,YAAY,MAAM,QAAQ;CAElE,MAAM,YAAY,eACd,IAAI,YAAY;EACZ,SAAS,UAAU;EACnB,UAAU,WAAW;CACzB,CAAC,CACL;CAEA,SAAS,WAAW;EAChB,IAAI,WAAW,OAAO;EACtB,MAAM,OAAO,MAAM,KAAK;CAC5B;CAEA,OAAO;EACH;EACA;EACA;EACA;EACA;CACJ;AACJ;AAEA,SAAgB,cACZ,OACA,YACF;CACE,MAAM,UAAU,gBAAgB,KAAK;CAErC,MAAM,YAAY,eACd,IAAI,kBAAkB;EAClB,UAAU,QAAQ;EAClB,SAAS,QAAQ;CACrB,CAAC,CACL;CAEA,MAAM,gBAAgB,MAAM;CAC5B,MAAM,YAAY,eAAe,MAAM,QAAQ,GAAG,QAAQ,MAAM,cAAc,OAAO;CAErF,QAA2B,eAAe;EACtC,IAAI,aAAa;GAAE,OAAO,MAAM;EAAY;EAC5C,IAAI,OAAO;GAAE,OAAO,UAAU;EAAO;EACrC,IAAI,WAAW;GAAE,OAAO,QAAQ;EAAU;EAC1C,IAAI,WAAW;GAAE,OAAO,QAAQ;EAAU;EAC1C,OAAO,OAAO;GACV,WAAW,KAAK;EACpB;CACJ,CAAC;CAED,OAAO;EACH;EACA;CACJ;AACJ;;;;;;;;;;;;;;;;;;EClCA,MAAM,EAAE,OAAO,WAAW,YAAY,WAAW,aAAa,SAAS,OAAK;;;SAnB/D,WAAM,MAAE,MAAA,QAAA,CAAQ,CAAA,CAAA,CAAA;;;;gBATV,MAAA,SAAA,CAAS;eAAG,iBAAe,MAAA,UAAA,KAAc,KAAA,CAAS;eAAG,cAAY,aAAS,YAAA,WAAA;eAIhF,QAAM,OAAK,IAAA;gBACJ,QAAA,KAAK;eACZ,WAAS,UAAS;eAClB,YAAU,MAAA,UAAA,KAAc,KAAA,CAAS;eACjC,YAAU,OAAK,YAAa,KAAA,CAAS;;;iBAI9B,OAAM,eAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EEU1B,MAAM,QAAQ;EAMd,MAAM,OAAO;EAIb,MAAM,EAAE,SAAS,cAAc,cAAc,QAAQ,UAAU;GAC3D,KAAK,qBAAqB,KAAK;EACnC,CAAC;;;;;eAjCQ,MAAI,SAAO,EAAA;gBACJ,MAAA,SAAA,CAAS;eAEhB,iBAAe,SAAO,YAAa,KAAA,CAAS;eAC5C,gBAAc,oBAAmB,KAAA,CAAS;eAC1C,cAAY,QAAA,aAAa,KAAA,CAAS;eAClC,mBAAiB,SAAO,cAAA;eACxB,oBAAkB,SAAO,eAAA;eACzB,gBAAc,oBAAmB,KAAA,CAAS;eAC1C,iBAAe,SAAO,YAAa,KAAA,CAAS"}
|
|
1
|
+
{"version":3,"file":"radio.js","names":[],"sources":["../src/composables/useRequiredInject.ts","../src/components/radio/types.ts","../src/components/radio/useRadio.ts","../src/components/radio/radio.vue","../src/components/radio/radio.vue","../src/components/radio/radio-group.vue","../src/components/radio/radio-group.vue"],"sourcesContent":["import { inject, type InjectionKey } from 'vue';\n\nexport function useRequiredInject<T>(key: InjectionKey<T>, componentName: string): T {\n const value = inject(key);\n if (value == null) {\n throw new Error(\n `[Ropav] <${componentName}> must be used inside its parent provider component.`,\n );\n }\n return value;\n}\n","import type { InjectionKey } from 'vue';\n\nexport type RadioColor =\n | 'primary'\n | 'secondary'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'neutral';\n\nexport type RadioSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport type RadioVariant = 'solid' | 'outline';\n\nexport interface RadioProps {\n value: string | number;\n variant?: RadioVariant;\n color?: RadioColor;\n size?: RadioSize;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n id?: string;\n name?: string;\n modelValue: string | number | null;\n variant?: RadioVariant;\n color?: RadioColor;\n size?: RadioSize;\n disabled?: boolean;\n required?: boolean;\n invalid?: boolean;\n ariaLabel?: string;\n describedby?: string;\n labelledby?: string;\n}\n\nexport interface RadioGroupContext {\n modelValue: string | number | null;\n name: string;\n disabled: boolean;\n required: boolean;\n variant?: RadioVariant;\n color?: RadioColor;\n size?: RadioSize;\n select: (value: string | number) => void;\n}\n\nexport const radioGroupKey = Symbol('radioGroup') as InjectionKey<RadioGroupContext>;\n","import { computed, provide, useId } from 'vue';\nimport { useControlState } from '@/composables/useControlState';\nimport { useRequiredInject } from '@/composables/useRequiredInject';\nimport { bem } from '@/utils/bem';\nimport { radioGroupKey } from './types';\nimport type { RadioGroupContext, RadioGroupProps, RadioProps } from './types';\n\nexport function useRadio(props: Readonly<RadioProps>) {\n const group = useRequiredInject(radioGroupKey, 'RpRadio');\n const isChecked = computed(() => group.modelValue === props.value);\n const isDisabled = computed(() => props.disabled || group.disabled);\n const variant = computed(() => props.variant ?? group.variant);\n const color = computed(() => props.color ?? group.color);\n const size = computed(() => props.size ?? group.size);\n\n const rootClass = computed(() =>\n bem('rp-radio', {\n checked: isChecked.value,\n disabled: isDisabled.value,\n [variant.value ?? '']: Boolean(variant.value),\n [`color-${color.value}`]: Boolean(color.value),\n [`size-${size.value}`]: Boolean(size.value),\n }),\n );\n\n function onSelect() {\n if (isDisabled.value) return;\n group.select(props.value);\n }\n\n return {\n group,\n isChecked,\n isDisabled,\n rootClass,\n onSelect,\n };\n}\n\nexport function useRadioGroup(\n props: Readonly<RadioGroupProps>,\n emitUpdate: (value: string | number | null) => void,\n) {\n const control = useControlState(props);\n\n const rootClass = computed(() =>\n bem('rp-radio-group', {\n disabled: control.disabled,\n invalid: control.invalid,\n }),\n );\n\n const generatedName = useId();\n const groupName = computed(() => props.name ?? `${control.id ?? generatedName}-radio`);\n\n provide<RadioGroupContext>(radioGroupKey, {\n get modelValue() {\n return props.modelValue;\n },\n get name() {\n return groupName.value;\n },\n get disabled() {\n return control.disabled;\n },\n get required() {\n return control.required;\n },\n get variant() {\n return props.variant;\n },\n get color() {\n return props.color;\n },\n get size() {\n return props.size;\n },\n select(value) {\n emitUpdate(value);\n },\n });\n\n return {\n control,\n rootClass,\n };\n}\n","<template>\n <label\n :class=\"rootClass\"\n :data-disabled=\"isDisabled || undefined\"\n :data-state=\"isChecked ? 'checked' : 'unchecked'\"\n >\n <input\n type=\"radio\"\n class=\"rp-radio__native\"\n :name=\"group.name\"\n :value=\"value\"\n :checked=\"isChecked\"\n :disabled=\"isDisabled || undefined\"\n :required=\"group.required || undefined\"\n @change=\"onSelect\"\n />\n <span class=\"rp-radio__dot\" />\n <span v-if=\"$slots.default\" class=\"rp-radio__label\">\n <slot />\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useRadio } from './useRadio';\nimport type { RadioProps } from './types';\n\ndefineOptions({ name: 'RpRadio' });\n\nconst props = withDefaults(defineProps<RadioProps>(), {\n variant: undefined,\n color: undefined,\n size: undefined,\n disabled: false,\n});\n\nconst { group, isChecked, isDisabled, rootClass, onSelect } = useRadio(props);\n</script>\n\n<style src=\"./radio.scss\" lang=\"scss\" scoped></style>\n","<template>\n <label\n :class=\"rootClass\"\n :data-disabled=\"isDisabled || undefined\"\n :data-state=\"isChecked ? 'checked' : 'unchecked'\"\n >\n <input\n type=\"radio\"\n class=\"rp-radio__native\"\n :name=\"group.name\"\n :value=\"value\"\n :checked=\"isChecked\"\n :disabled=\"isDisabled || undefined\"\n :required=\"group.required || undefined\"\n @change=\"onSelect\"\n />\n <span class=\"rp-radio__dot\" />\n <span v-if=\"$slots.default\" class=\"rp-radio__label\">\n <slot />\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useRadio } from './useRadio';\nimport type { RadioProps } from './types';\n\ndefineOptions({ name: 'RpRadio' });\n\nconst props = withDefaults(defineProps<RadioProps>(), {\n variant: undefined,\n color: undefined,\n size: undefined,\n disabled: false,\n});\n\nconst { group, isChecked, isDisabled, rootClass, onSelect } = useRadio(props);\n</script>\n\n<style src=\"./radio.scss\" lang=\"scss\" scoped></style>\n","<template>\n <div\n :id=\"control.id\"\n :class=\"rootClass\"\n role=\"radiogroup\"\n :data-disabled=\"control.disabled || undefined\"\n :data-invalid=\"control.invalid || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n >\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useRadioGroup } from './useRadio';\nimport type { RadioGroupProps } from './types';\n\ndefineOptions({ name: 'RpRadioGroup' });\n\nconst props = withDefaults(defineProps<RadioGroupProps>(), {\n variant: undefined,\n color: undefined,\n size: undefined,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null];\n}>();\n\nconst { control, rootClass } = useRadioGroup(props, (value) => {\n emit('update:modelValue', value);\n});\n</script>\n\n<style src=\"./radio-group.scss\" lang=\"scss\" scoped></style>\n","<template>\n <div\n :id=\"control.id\"\n :class=\"rootClass\"\n role=\"radiogroup\"\n :data-disabled=\"control.disabled || undefined\"\n :data-invalid=\"control.invalid || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n >\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useRadioGroup } from './useRadio';\nimport type { RadioGroupProps } from './types';\n\ndefineOptions({ name: 'RpRadioGroup' });\n\nconst props = withDefaults(defineProps<RadioGroupProps>(), {\n variant: undefined,\n color: undefined,\n size: undefined,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | number | null];\n}>();\n\nconst { control, rootClass } = useRadioGroup(props, (value) => {\n emit('update:modelValue', value);\n});\n</script>\n\n<style src=\"./radio-group.scss\" lang=\"scss\" scoped></style>\n"],"mappings":"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"}
|
package/dist/select.css
CHANGED
|
@@ -1,109 +1,174 @@
|
|
|
1
|
-
.rp-select[data-v-
|
|
1
|
+
.rp-select[data-v-9838513c] {
|
|
2
|
+
--_rp-select-radius: var(--rp-radius-sm);
|
|
2
3
|
position: relative;
|
|
3
4
|
display: inline-flex;
|
|
4
5
|
font-family: var(--rp-font-family);
|
|
5
6
|
font-weight: var(--rp-font-weight-normal);
|
|
6
7
|
line-height: var(--rp-line-height-none);
|
|
7
8
|
}
|
|
8
|
-
.rp-select--disabled[data-v-
|
|
9
|
+
.rp-select--disabled[data-v-9838513c] {
|
|
9
10
|
opacity: var(--rp-opacity-disabled);
|
|
10
11
|
cursor: not-allowed;
|
|
11
12
|
}
|
|
12
|
-
.rp-select__trigger[data-v-
|
|
13
|
+
.rp-select__trigger[data-v-9838513c] {
|
|
13
14
|
display: inline-flex;
|
|
14
15
|
align-items: center;
|
|
15
16
|
justify-content: center;
|
|
16
17
|
justify-content: space-between;
|
|
17
18
|
width: 100%;
|
|
18
|
-
min-width:
|
|
19
|
+
min-width: 180px;
|
|
19
20
|
height: var(--rp-size-control-md);
|
|
20
|
-
padding: 0 var(--rp-spacing-
|
|
21
|
+
padding: 0 var(--rp-spacing-3);
|
|
21
22
|
font-size: var(--rp-font-size-base);
|
|
22
23
|
background-color: var(--rp-color-control-bg);
|
|
23
24
|
border: var(--rp-border-width-thin) solid var(--rp-color-control-border);
|
|
24
|
-
border-radius: var(--
|
|
25
|
+
border-radius: var(--_rp-select-radius);
|
|
25
26
|
cursor: pointer;
|
|
26
27
|
transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
|
|
27
28
|
gap: var(--rp-spacing-2);
|
|
28
29
|
}
|
|
29
|
-
.rp-select__trigger[data-v-
|
|
30
|
+
.rp-select__trigger[data-v-9838513c]:hover {
|
|
30
31
|
border-color: var(--rp-color-control-border-hover);
|
|
31
32
|
}
|
|
32
|
-
.rp-select__trigger[data-v-
|
|
33
|
+
.rp-select__trigger[data-v-9838513c]:focus-visible {
|
|
33
34
|
outline: none;
|
|
34
35
|
border-color: var(--rp-color-control-border-focus);
|
|
35
36
|
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
36
37
|
}
|
|
37
|
-
.rp-select--
|
|
38
|
+
.rp-select--radius-xs[data-v-9838513c] {
|
|
39
|
+
--_rp-select-radius: var(--rp-radius-sm);
|
|
40
|
+
}
|
|
41
|
+
.rp-select--radius-sm[data-v-9838513c] {
|
|
42
|
+
--_rp-select-radius: var(--rp-radius-sm);
|
|
43
|
+
}
|
|
44
|
+
.rp-select--radius-md[data-v-9838513c] {
|
|
45
|
+
--_rp-select-radius: var(--rp-radius-md);
|
|
46
|
+
}
|
|
47
|
+
.rp-select--radius-lg[data-v-9838513c] {
|
|
48
|
+
--_rp-select-radius: var(--rp-radius-lg);
|
|
49
|
+
}
|
|
50
|
+
.rp-select--radius-xl[data-v-9838513c] {
|
|
51
|
+
--_rp-select-radius: var(--rp-radius-xl);
|
|
52
|
+
}
|
|
53
|
+
.rp-select--open .rp-select__trigger[data-v-9838513c] {
|
|
38
54
|
border-color: var(--rp-color-control-border-focus);
|
|
39
55
|
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
40
56
|
}
|
|
41
|
-
.rp-select--invalid .rp-select__trigger[data-v-
|
|
57
|
+
.rp-select--invalid .rp-select__trigger[data-v-9838513c] {
|
|
42
58
|
border-color: var(--rp-color-danger-fg);
|
|
43
59
|
}
|
|
44
|
-
.rp-select__value[data-v-
|
|
60
|
+
.rp-select__value[data-v-9838513c] {
|
|
45
61
|
flex: 1;
|
|
46
62
|
overflow: hidden;
|
|
47
63
|
text-overflow: ellipsis;
|
|
48
64
|
white-space: nowrap;
|
|
49
65
|
color: var(--rp-color-control-fg);
|
|
50
66
|
}
|
|
51
|
-
.rp-select__placeholder[data-v-
|
|
67
|
+
.rp-select__placeholder[data-v-9838513c] {
|
|
52
68
|
color: var(--rp-color-control-placeholder);
|
|
53
69
|
}
|
|
54
|
-
.rp-
|
|
70
|
+
.rp-select__indicator[data-v-9838513c] {
|
|
55
71
|
display: inline-flex;
|
|
56
72
|
align-items: center;
|
|
57
73
|
width: 1em;
|
|
58
74
|
height: 1em;
|
|
59
75
|
flex-shrink: 0;
|
|
60
76
|
}
|
|
61
|
-
.rp-
|
|
77
|
+
.rp-select__indicator svg[data-v-9838513c] {
|
|
62
78
|
width: 100%;
|
|
63
79
|
height: 100%;
|
|
64
80
|
}
|
|
65
|
-
.rp-
|
|
81
|
+
.rp-select__indicator[data-v-9838513c] {
|
|
82
|
+
position: relative;
|
|
66
83
|
color: var(--rp-color-control-icon);
|
|
67
|
-
|
|
84
|
+
transform: translateX(var(--rp-spacing-1));
|
|
85
|
+
}
|
|
86
|
+
.rp-select__arrow[data-v-9838513c] {
|
|
87
|
+
display: inline-flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
width: 1em;
|
|
90
|
+
height: 1em;
|
|
91
|
+
flex-shrink: 0;
|
|
68
92
|
}
|
|
69
|
-
.rp-select__arrow
|
|
70
|
-
|
|
93
|
+
.rp-select__arrow svg[data-v-9838513c] {
|
|
94
|
+
width: 100%;
|
|
95
|
+
height: 100%;
|
|
71
96
|
}
|
|
72
|
-
.rp-
|
|
97
|
+
.rp-select__arrow[data-v-9838513c] {
|
|
98
|
+
transition: opacity var(--rp-transition-fast);
|
|
99
|
+
}
|
|
100
|
+
.rp-select__clear[data-v-9838513c] {
|
|
101
|
+
padding: 0;
|
|
102
|
+
font: inherit;
|
|
103
|
+
background: none;
|
|
104
|
+
border: none;
|
|
105
|
+
cursor: pointer;
|
|
106
|
+
display: inline-flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
width: 1em;
|
|
109
|
+
height: 1em;
|
|
110
|
+
flex-shrink: 0;
|
|
111
|
+
}
|
|
112
|
+
.rp-select__clear svg[data-v-9838513c] {
|
|
113
|
+
width: 100%;
|
|
114
|
+
height: 100%;
|
|
115
|
+
}
|
|
116
|
+
.rp-select__clear[data-v-9838513c] {
|
|
117
|
+
position: absolute;
|
|
118
|
+
inset: 0;
|
|
119
|
+
z-index: 1;
|
|
120
|
+
color: var(--rp-color-control-icon);
|
|
121
|
+
opacity: 0;
|
|
122
|
+
pointer-events: none;
|
|
123
|
+
transition: color var(--rp-transition-fast), opacity var(--rp-transition-fast);
|
|
124
|
+
}
|
|
125
|
+
.rp-select__clear[data-v-9838513c]:hover {
|
|
126
|
+
color: var(--rp-color-control-fg);
|
|
127
|
+
}
|
|
128
|
+
.rp-select__trigger:hover .rp-select__clear[data-v-9838513c] {
|
|
129
|
+
opacity: 1;
|
|
130
|
+
pointer-events: auto;
|
|
131
|
+
}
|
|
132
|
+
.rp-select__trigger:hover .rp-select__clear + .rp-select__arrow[data-v-9838513c] {
|
|
133
|
+
opacity: 0;
|
|
134
|
+
}
|
|
135
|
+
.rp-select__dropdown[data-v-9838513c] {
|
|
73
136
|
position: absolute;
|
|
74
137
|
top: calc(100% + var(--rp-spacing-1));
|
|
75
138
|
left: 0;
|
|
76
139
|
right: 0;
|
|
77
|
-
z-index:
|
|
140
|
+
z-index: 100;
|
|
78
141
|
background-color: var(--rp-color-surface-raised);
|
|
79
142
|
border: var(--rp-border-width-thin) solid var(--rp-color-border);
|
|
80
|
-
border-radius: var(--
|
|
143
|
+
border-radius: var(--_rp-select-radius);
|
|
81
144
|
box-shadow: var(--rp-shadow-md);
|
|
82
145
|
padding: var(--rp-spacing-1) 0;
|
|
83
|
-
max-height:
|
|
146
|
+
max-height: 240px;
|
|
84
147
|
overflow-y: auto;
|
|
148
|
+
padding: var(--rp-spacing-1);
|
|
85
149
|
}
|
|
86
|
-
.rp-select__option[data-v-
|
|
150
|
+
.rp-select__option[data-v-9838513c] {
|
|
87
151
|
display: flex;
|
|
88
152
|
align-items: center;
|
|
89
153
|
padding: var(--rp-spacing-2) var(--rp-spacing-4);
|
|
154
|
+
border-radius: calc(var(--_rp-select-radius) - var(--rp-spacing-1));
|
|
90
155
|
font-size: var(--rp-font-size-base);
|
|
91
156
|
cursor: pointer;
|
|
92
157
|
transition: background-color var(--rp-transition-fast), color var(--rp-transition-fast);
|
|
93
|
-
color: var(--rp-color-
|
|
158
|
+
color: var(--rp-color-control-fg);
|
|
94
159
|
}
|
|
95
|
-
.rp-select__option--focused[data-v-
|
|
160
|
+
.rp-select__option--focused[data-v-9838513c] {
|
|
96
161
|
background-color: var(--rp-color-surface-hover);
|
|
97
162
|
}
|
|
98
|
-
.rp-select__option--selected[data-v-
|
|
163
|
+
.rp-select__option--selected[data-v-9838513c] {
|
|
99
164
|
color: var(--rp-color-primary-fg);
|
|
100
165
|
font-weight: var(--rp-font-weight-medium);
|
|
101
166
|
}
|
|
102
|
-
.rp-select__option--disabled[data-v-
|
|
167
|
+
.rp-select__option--disabled[data-v-9838513c] {
|
|
103
168
|
color: var(--rp-color-text-disabled);
|
|
104
169
|
cursor: not-allowed;
|
|
105
170
|
}
|
|
106
|
-
.rp-select__empty[data-v-
|
|
171
|
+
.rp-select__empty[data-v-9838513c] {
|
|
107
172
|
display: flex;
|
|
108
173
|
align-items: center;
|
|
109
174
|
justify-content: center;
|
|
@@ -111,12 +176,12 @@
|
|
|
111
176
|
color: var(--rp-color-text-secondary);
|
|
112
177
|
font-size: var(--rp-font-size-base);
|
|
113
178
|
}
|
|
114
|
-
.rp-select-dropdown-enter-active[data-v-
|
|
115
|
-
.rp-select-dropdown-leave-active[data-v-
|
|
179
|
+
.rp-select-dropdown-enter-active[data-v-9838513c],
|
|
180
|
+
.rp-select-dropdown-leave-active[data-v-9838513c] {
|
|
116
181
|
transition: opacity var(--rp-transition-fast), transform var(--rp-transition-fast);
|
|
117
182
|
}
|
|
118
|
-
.rp-select-dropdown-enter-from[data-v-
|
|
119
|
-
.rp-select-dropdown-leave-to[data-v-
|
|
183
|
+
.rp-select-dropdown-enter-from[data-v-9838513c],
|
|
184
|
+
.rp-select-dropdown-leave-to[data-v-9838513c] {
|
|
120
185
|
opacity: 0;
|
|
121
186
|
transform: translateY(calc(-1 * var(--rp-spacing-1)));
|
|
122
187
|
}
|
package/dist/select.js
CHANGED
|
@@ -1,30 +1,26 @@
|
|
|
1
1
|
import './select.css';
|
|
2
2
|
import { n as bem, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
3
3
|
import { t as useControlState } from "./useControlState.js";
|
|
4
|
-
import { VaporTransition, child, computed, createComponent, createFor, createIf, createInvoker, createSelector, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, extend, next, nextTick, on, onBeforeUnmount, onMounted, ref, renderEffect, setAttr, setClass, setClassName, setInsertionState, setProp, setText, setValue, template, toDisplayString, txt, unref, useId, watch } from "vue";
|
|
5
|
-
//#region
|
|
6
|
-
var t0$
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var ChevronDownIcon_default = /* @__PURE__ */ defineVaporComponent({
|
|
10
|
-
name: "ChevronDownIcon",
|
|
11
|
-
__name: "ChevronDownIcon",
|
|
12
|
-
setup(__props) {
|
|
13
|
-
return t0$1();
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
//#endregion
|
|
17
|
-
//#region src/components/_internal/optionList.ts
|
|
18
|
-
function hasOptionListValue(value) {
|
|
19
|
-
return value != null && value !== "";
|
|
20
|
-
}
|
|
21
|
-
function getOptionListDisplayLabel(options, value) {
|
|
22
|
-
if (!hasOptionListValue(value)) return "";
|
|
23
|
-
return options?.find((option) => option.value === value)?.label ?? "";
|
|
4
|
+
import { VaporTransition, child, computed, createComponent, createFor, createIf, createInvoker, createSelector, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, extend, markRaw, next, nextTick, on, onBeforeUnmount, onMounted, ref, renderEffect, setAttr, setClass, setClassName, setInsertionState, setProp, setText, setValue, template, toDisplayString, txt, unref, useId, watch, withModifiers, withVaporModifiers } from "vue";
|
|
5
|
+
//#region ~icons/lucide/chevrons-up-down
|
|
6
|
+
var t0$2 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><path fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"m7 15l5 5l5-5M7 9l5-5l5 5\">", 3, 1);
|
|
7
|
+
function render$1(_ctx) {
|
|
8
|
+
return t0$2();
|
|
24
9
|
}
|
|
25
|
-
|
|
26
|
-
|
|
10
|
+
var chevrons_up_down_default = markRaw(defineVaporComponent({
|
|
11
|
+
name: "lucide-chevrons-up-down",
|
|
12
|
+
render: render$1
|
|
13
|
+
}));
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region ~icons/lucide/x
|
|
16
|
+
var t0$1 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><path fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"M18 6L6 18M6 6l12 12\">", 3, 1);
|
|
17
|
+
function render(_ctx) {
|
|
18
|
+
return t0$1();
|
|
27
19
|
}
|
|
20
|
+
var x_default = markRaw(defineVaporComponent({
|
|
21
|
+
name: "lucide-x",
|
|
22
|
+
render
|
|
23
|
+
}));
|
|
28
24
|
//#endregion
|
|
29
25
|
//#region src/composables/useClickOutside.ts
|
|
30
26
|
function useClickOutside(target, active, callback) {
|
|
@@ -66,7 +62,15 @@ function useListNavigation(options) {
|
|
|
66
62
|
localFocusedIndex.value = index;
|
|
67
63
|
return;
|
|
68
64
|
}
|
|
69
|
-
|
|
65
|
+
let next;
|
|
66
|
+
if (direction === 1) next = indexes.find((i) => i > index);
|
|
67
|
+
else for (let i = indexes.length - 1; i >= 0; i -= 1) {
|
|
68
|
+
const candidate = indexes[i];
|
|
69
|
+
if (candidate < index) {
|
|
70
|
+
next = candidate;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
70
74
|
if (next !== void 0) localFocusedIndex.value = next;
|
|
71
75
|
else if (loop) localFocusedIndex.value = direction === 1 ? indexes[0] : indexes[indexes.length - 1];
|
|
72
76
|
}
|
|
@@ -86,7 +90,8 @@ function useListNavigation(options) {
|
|
|
86
90
|
}
|
|
87
91
|
function moveFocus(delta) {
|
|
88
92
|
if (localFocusedIndex.value < 0) {
|
|
89
|
-
delta === 1
|
|
93
|
+
if (delta === 1) focusFirst();
|
|
94
|
+
else focusLast();
|
|
90
95
|
return;
|
|
91
96
|
}
|
|
92
97
|
setNearest(localFocusedIndex.value + delta, delta);
|
|
@@ -102,6 +107,16 @@ function useListNavigation(options) {
|
|
|
102
107
|
}
|
|
103
108
|
//#endregion
|
|
104
109
|
//#region src/components/select/useSelect.ts
|
|
110
|
+
function hasSelectValue(value) {
|
|
111
|
+
return value != null && value !== "";
|
|
112
|
+
}
|
|
113
|
+
function getSelectDisplayLabel(options, value) {
|
|
114
|
+
if (!hasSelectValue(value)) return "";
|
|
115
|
+
return options?.find((option) => option.value === value)?.label ?? "";
|
|
116
|
+
}
|
|
117
|
+
function getSelectActiveDescendantId(baseId, focusedIndex) {
|
|
118
|
+
return focusedIndex < 0 ? void 0 : `${baseId}-option-${focusedIndex}`;
|
|
119
|
+
}
|
|
105
120
|
function useSelect(props, emitUpdate) {
|
|
106
121
|
const selectRef = ref(null);
|
|
107
122
|
const triggerRef = ref(null);
|
|
@@ -115,14 +130,16 @@ function useSelect(props, emitUpdate) {
|
|
|
115
130
|
isSelected: (item) => item.value === props.modelValue
|
|
116
131
|
});
|
|
117
132
|
const focusedIndex = navigation.focusedIndex;
|
|
118
|
-
const activeDescendantId = computed(() =>
|
|
133
|
+
const activeDescendantId = computed(() => getSelectActiveDescendantId(selectId, focusedIndex.value));
|
|
119
134
|
const rootClass = computed(() => bem("rp-select", {
|
|
120
135
|
open: isOpen.value,
|
|
136
|
+
[`radius-${props.radius}`]: Boolean(props.radius),
|
|
121
137
|
disabled: control.disabled,
|
|
122
138
|
invalid: control.invalid
|
|
123
139
|
}));
|
|
124
|
-
const hasValue = computed(() =>
|
|
125
|
-
const displayLabel = computed(() =>
|
|
140
|
+
const hasValue = computed(() => hasSelectValue(props.modelValue));
|
|
141
|
+
const displayLabel = computed(() => getSelectDisplayLabel(props.options, props.modelValue));
|
|
142
|
+
const canClear = computed(() => Boolean(props.clearable && hasValue.value && !control.disabled));
|
|
126
143
|
function focusTrigger() {
|
|
127
144
|
nextTick(() => triggerRef.value?.focus());
|
|
128
145
|
}
|
|
@@ -148,6 +165,12 @@ function useSelect(props, emitUpdate) {
|
|
|
148
165
|
close();
|
|
149
166
|
focusTrigger();
|
|
150
167
|
}
|
|
168
|
+
function clearSelection() {
|
|
169
|
+
if (!canClear.value) return;
|
|
170
|
+
emitUpdate(null);
|
|
171
|
+
close();
|
|
172
|
+
focusTrigger();
|
|
173
|
+
}
|
|
151
174
|
function onOptionMouseenter(option, index) {
|
|
152
175
|
if (!option.disabled) focusedIndex.value = index;
|
|
153
176
|
}
|
|
@@ -213,21 +236,24 @@ function useSelect(props, emitUpdate) {
|
|
|
213
236
|
rootClass,
|
|
214
237
|
hasValue,
|
|
215
238
|
displayLabel,
|
|
239
|
+
canClear,
|
|
216
240
|
toggle,
|
|
217
241
|
selectOption,
|
|
242
|
+
clearSelection,
|
|
218
243
|
onOptionMouseenter,
|
|
219
244
|
onTriggerKeydown
|
|
220
245
|
};
|
|
221
246
|
}
|
|
222
247
|
//#endregion
|
|
223
248
|
//#region src/components/select/select.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
224
|
-
var t0 = template("<input data-v-
|
|
225
|
-
var t1 = template("
|
|
226
|
-
var t2 = template("
|
|
227
|
-
var t3 = template("<div data-v-
|
|
228
|
-
var t4 = template("<div data-v-
|
|
229
|
-
var t5 = template("<div data-v-
|
|
230
|
-
|
|
249
|
+
var t0 = template("<input data-v-9838513c type=hidden>");
|
|
250
|
+
var t1 = template("<button data-v-9838513c type=button class=rp-select__clear aria-label=\"Clear selection\"tabindex=-1></button>");
|
|
251
|
+
var t2 = template("No options", 2);
|
|
252
|
+
var t3 = template("<div data-v-9838513c class=rp-select__empty>");
|
|
253
|
+
var t4 = template("<div data-v-9838513c role=option> ");
|
|
254
|
+
var t5 = template("<div data-v-9838513c class=rp-select__dropdown role=listbox>");
|
|
255
|
+
var t6 = template("<div data-v-9838513c><div data-v-9838513c class=rp-select__trigger role=combobox aria-haspopup=listbox><span data-v-9838513c> </span><span data-v-9838513c class=rp-select__indicator><span data-v-9838513c class=rp-select__arrow aria-hidden=true>", 1);
|
|
256
|
+
delegateEvents("mousedown", "click", "keydown");
|
|
231
257
|
//#endregion
|
|
232
258
|
//#region src/components/select/select.vue
|
|
233
259
|
var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
|
|
@@ -238,7 +264,12 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
238
264
|
name: {},
|
|
239
265
|
modelValue: {},
|
|
240
266
|
options: { default: () => [] },
|
|
267
|
+
radius: {},
|
|
241
268
|
placeholder: { default: "Select..." },
|
|
269
|
+
clearable: {
|
|
270
|
+
type: Boolean,
|
|
271
|
+
default: false
|
|
272
|
+
},
|
|
242
273
|
disabled: {
|
|
243
274
|
type: Boolean,
|
|
244
275
|
default: void 0
|
|
@@ -259,16 +290,17 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
259
290
|
setup(__props, { emit: __emit }) {
|
|
260
291
|
const props = __props;
|
|
261
292
|
const emit = __emit;
|
|
262
|
-
const { selectRef, triggerRef, isOpen, selectId, listboxId, control, visibleOptions, focusedIndex, activeDescendantId, rootClass, hasValue, displayLabel, toggle, selectOption, onOptionMouseenter, onTriggerKeydown } = useSelect(props, (value) => {
|
|
293
|
+
const { selectRef, triggerRef, isOpen, selectId, listboxId, control, visibleOptions, focusedIndex, activeDescendantId, rootClass, hasValue, displayLabel, canClear, toggle, selectOption, clearSelection, onOptionMouseenter, onTriggerKeydown } = useSelect(props, (value) => {
|
|
263
294
|
emit("update:modelValue", value);
|
|
264
295
|
});
|
|
265
296
|
const _setTemplateRef = createTemplateRefSetter();
|
|
266
|
-
const
|
|
267
|
-
const
|
|
268
|
-
const n3 = child(
|
|
269
|
-
const
|
|
270
|
-
|
|
271
|
-
|
|
297
|
+
const n25 = t6();
|
|
298
|
+
const n11 = child(n25, 1);
|
|
299
|
+
const n3 = child(n11);
|
|
300
|
+
const n10 = next(n3, 1);
|
|
301
|
+
const n9 = child(n10, 1);
|
|
302
|
+
renderEffect(() => setClass(n25, unref(rootClass)));
|
|
303
|
+
setInsertionState(n25, 0, 0);
|
|
272
304
|
createIf(() => __props.name, () => {
|
|
273
305
|
const n2 = t0();
|
|
274
306
|
renderEffect(() => {
|
|
@@ -283,49 +315,57 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
283
315
|
const _control = unref(control);
|
|
284
316
|
const _isOpen = unref(isOpen);
|
|
285
317
|
const _control_disabled = _control.disabled;
|
|
286
|
-
setProp(
|
|
287
|
-
setAttr(
|
|
288
|
-
setAttr(
|
|
289
|
-
setAttr(
|
|
290
|
-
setAttr(
|
|
291
|
-
setAttr(
|
|
292
|
-
setAttr(
|
|
293
|
-
setAttr(
|
|
294
|
-
setAttr(
|
|
295
|
-
setAttr(
|
|
296
|
-
setAttr(
|
|
297
|
-
setAttr(
|
|
298
|
-
setProp(
|
|
318
|
+
setProp(n11, "id", _control.id);
|
|
319
|
+
setAttr(n11, "aria-expanded", _isOpen);
|
|
320
|
+
setAttr(n11, "aria-activedescendant", unref(activeDescendantId));
|
|
321
|
+
setAttr(n11, "aria-controls", unref(listboxId));
|
|
322
|
+
setAttr(n11, "aria-disabled", _control_disabled || void 0);
|
|
323
|
+
setAttr(n11, "aria-invalid", _control.invalid || void 0);
|
|
324
|
+
setAttr(n11, "aria-required", _control.required || void 0);
|
|
325
|
+
setAttr(n11, "aria-label", __props.ariaLabel || void 0);
|
|
326
|
+
setAttr(n11, "aria-labelledby", _control.ariaLabelledby);
|
|
327
|
+
setAttr(n11, "aria-describedby", _control.ariaDescribedby);
|
|
328
|
+
setAttr(n11, "data-state", _isOpen ? "open" : "closed");
|
|
329
|
+
setAttr(n11, "data-disabled", _control_disabled || void 0);
|
|
330
|
+
setProp(n11, "tabindex", _control_disabled ? -1 : 0);
|
|
299
331
|
setClassName(n3, !unref(hasValue) ? 1 : 0, " rp-select__placeholder", "rp-select__value");
|
|
300
332
|
setText(x3, toDisplayString(unref(displayLabel) || __props.placeholder));
|
|
301
|
-
setClassName(n5, _isOpen ? 1 : 0, " rp-select__arrow--open", "rp-select__arrow");
|
|
302
333
|
});
|
|
303
|
-
setInsertionState(
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
334
|
+
setInsertionState(n10, 0, 0);
|
|
335
|
+
createIf(() => unref(canClear), () => {
|
|
336
|
+
const n7 = t1();
|
|
337
|
+
setInsertionState(n7, null, 0);
|
|
338
|
+
createComponent(unref(x_default));
|
|
339
|
+
n7.$evtmousedown = withVaporModifiers(() => {}, ["prevent"]);
|
|
340
|
+
on(n7, "click", withModifiers((e) => unref(clearSelection)(e), ["stop"]));
|
|
341
|
+
return n7;
|
|
342
|
+
});
|
|
343
|
+
setInsertionState(n9, null, 0);
|
|
344
|
+
createComponent(unref(chevrons_up_down_default));
|
|
345
|
+
n11.$evtclick = createInvoker((e) => unref(toggle)(e));
|
|
346
|
+
n11.$evtkeydown = createInvoker((e) => unref(onTriggerKeydown)(e));
|
|
347
|
+
_setTemplateRef(n11, triggerRef, null, "triggerRef");
|
|
348
|
+
setInsertionState(n25, null, 2);
|
|
309
349
|
createComponent(VaporTransition, { name: "rp-select-dropdown" }, extend(() => {
|
|
310
350
|
return createIf(() => unref(isOpen), () => {
|
|
311
|
-
const
|
|
312
|
-
renderEffect(() => setProp(
|
|
313
|
-
setInsertionState(
|
|
351
|
+
const n23 = t5();
|
|
352
|
+
renderEffect(() => setProp(n23, "id", unref(listboxId)));
|
|
353
|
+
setInsertionState(n23, null, 0);
|
|
314
354
|
createIf(() => unref(visibleOptions).length === 0, () => {
|
|
315
|
-
const
|
|
316
|
-
setInsertionState(
|
|
355
|
+
const n19 = t3();
|
|
356
|
+
setInsertionState(n19, null, 0);
|
|
317
357
|
createSlot("empty", null, () => {
|
|
318
|
-
return
|
|
358
|
+
return t2();
|
|
319
359
|
}, 1);
|
|
320
|
-
return
|
|
360
|
+
return n19;
|
|
321
361
|
});
|
|
322
|
-
setInsertionState(
|
|
323
|
-
const
|
|
362
|
+
setInsertionState(n23, null, 1);
|
|
363
|
+
const _selector20 = createSelector(() => __props.modelValue);
|
|
324
364
|
createFor(() => unref(visibleOptions), (_for_item0, _for_key0) => {
|
|
325
|
-
const
|
|
326
|
-
const
|
|
327
|
-
|
|
328
|
-
on(
|
|
365
|
+
const n22 = t4();
|
|
366
|
+
const x22 = txt(n22);
|
|
367
|
+
n22.$evtclick = createInvoker(() => unref(selectOption)(_for_item0.value));
|
|
368
|
+
on(n22, "mouseenter", () => unref(onOptionMouseenter)(_for_item0.value, _for_key0.value));
|
|
329
369
|
let _index, _option, _modelValue, _option_disabled, _option_value;
|
|
330
370
|
renderEffect(() => {
|
|
331
371
|
_index = _for_key0.value;
|
|
@@ -333,29 +373,29 @@ var select_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
|
|
|
333
373
|
_modelValue = __props.modelValue;
|
|
334
374
|
_option_disabled = _option.disabled;
|
|
335
375
|
_option_value = _option.value;
|
|
336
|
-
setProp(
|
|
337
|
-
setAttr(
|
|
338
|
-
setAttr(
|
|
339
|
-
setAttr(
|
|
340
|
-
setClass(
|
|
376
|
+
setProp(n22, "id", `${unref(selectId)}-option-${_index}`);
|
|
377
|
+
setAttr(n22, "aria-disabled", _option_disabled || void 0);
|
|
378
|
+
setAttr(n22, "data-selected", _option_value === _modelValue || void 0);
|
|
379
|
+
setAttr(n22, "data-disabled", _option_disabled || void 0);
|
|
380
|
+
setClass(n22, ["rp-select__option", {
|
|
341
381
|
"rp-select__option--selected": _option_value === _modelValue,
|
|
342
382
|
"rp-select__option--focused": _index === unref(focusedIndex),
|
|
343
383
|
"rp-select__option--disabled": _option_disabled
|
|
344
384
|
}]);
|
|
345
|
-
setText(
|
|
385
|
+
setText(x22, toDisplayString(_option.label));
|
|
346
386
|
});
|
|
347
|
-
|
|
348
|
-
setAttr(
|
|
387
|
+
_selector20(_option.value, () => {
|
|
388
|
+
setAttr(n22, "aria-selected", _option.value === _modelValue);
|
|
349
389
|
});
|
|
350
|
-
return
|
|
351
|
-
}, (option, index) => option.value, 8).onReset(
|
|
352
|
-
return
|
|
390
|
+
return n22;
|
|
391
|
+
}, (option, index) => option.value, 8).onReset(_selector20.reset);
|
|
392
|
+
return n23;
|
|
353
393
|
}, null, 129);
|
|
354
394
|
}, { _: 8 }));
|
|
355
|
-
_setTemplateRef(
|
|
356
|
-
return
|
|
395
|
+
_setTemplateRef(n25, selectRef, null, "selectRef");
|
|
396
|
+
return n25;
|
|
357
397
|
}
|
|
358
|
-
}), [["__scopeId", "data-v-
|
|
398
|
+
}), [["__scopeId", "data-v-9838513c"]]);
|
|
359
399
|
//#endregion
|
|
360
400
|
export { select_default as t };
|
|
361
401
|
|