ropav 0.0.2 → 0.0.3
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 +125 -88
- package/dist/button.css +259 -32
- package/dist/button.js +51 -19
- package/dist/button.js.map +1 -1
- package/dist/checkbox.css +125 -21
- package/dist/checkbox.js +77 -42
- 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 +87 -21
- package/dist/input.js +66 -23
- package/dist/input.js.map +1 -1
- package/dist/radio.css +82 -18
- package/dist/radio.js +35 -8
- package/dist/radio.js.map +1 -1
- package/dist/select.css +104 -39
- package/dist/select.js +149 -87
- 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 +80 -20
- 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 +9 -9
- package/src/styles/_mixins.scss +18 -8
- package/src/styles/_tokens.scss +130 -99
- package/src/styles/_variables.scss +28 -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
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import './radio.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 {
|
|
5
|
-
|
|
4
|
+
import { child, computed, createIf, createSlot, defineVaporComponent, inject, on, provide, renderEffect, setAttr, setClass, setInsertionState, setProp, setValue, template, unref, useId } from "vue";
|
|
5
|
+
//#region src/composables/useRequiredInject.ts
|
|
6
|
+
function useRequiredInject(key, componentName) {
|
|
7
|
+
const value = inject(key);
|
|
8
|
+
if (value == null) throw new Error(`[Ropav] <${componentName}> must be used inside its parent provider component.`);
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
6
12
|
//#region src/components/radio/types.ts
|
|
7
13
|
var radioGroupKey = Symbol("radioGroup");
|
|
8
14
|
//#endregion
|
|
@@ -11,9 +17,15 @@ function useRadio(props) {
|
|
|
11
17
|
const group = useRequiredInject(radioGroupKey, "RpRadio");
|
|
12
18
|
const isChecked = computed(() => group.modelValue === props.value);
|
|
13
19
|
const isDisabled = computed(() => props.disabled || group.disabled);
|
|
20
|
+
const variant = computed(() => props.variant ?? group.variant);
|
|
21
|
+
const color = computed(() => props.color ?? group.color);
|
|
22
|
+
const size = computed(() => props.size ?? group.size);
|
|
14
23
|
const rootClass = computed(() => bem("rp-radio", {
|
|
15
24
|
checked: isChecked.value,
|
|
16
|
-
disabled: isDisabled.value
|
|
25
|
+
disabled: isDisabled.value,
|
|
26
|
+
[variant.value ?? ""]: Boolean(variant.value),
|
|
27
|
+
[`color-${color.value}`]: Boolean(color.value),
|
|
28
|
+
[`size-${size.value}`]: Boolean(size.value)
|
|
17
29
|
}));
|
|
18
30
|
function onSelect() {
|
|
19
31
|
if (isDisabled.value) return;
|
|
@@ -48,6 +60,15 @@ function useRadioGroup(props, emitUpdate) {
|
|
|
48
60
|
get required() {
|
|
49
61
|
return control.required;
|
|
50
62
|
},
|
|
63
|
+
get variant() {
|
|
64
|
+
return props.variant;
|
|
65
|
+
},
|
|
66
|
+
get color() {
|
|
67
|
+
return props.color;
|
|
68
|
+
},
|
|
69
|
+
get size() {
|
|
70
|
+
return props.size;
|
|
71
|
+
},
|
|
51
72
|
select(value) {
|
|
52
73
|
emitUpdate(value);
|
|
53
74
|
}
|
|
@@ -59,8 +80,8 @@ function useRadioGroup(props, emitUpdate) {
|
|
|
59
80
|
}
|
|
60
81
|
//#endregion
|
|
61
82
|
//#region src/components/radio/radio.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
62
|
-
var t0$1 = template("<span data-v-
|
|
63
|
-
var t1 = template("<label data-v-
|
|
83
|
+
var t0$1 = template("<span data-v-ecddd6c8 class=rp-radio__label>");
|
|
84
|
+
var t1 = template("<label data-v-ecddd6c8><input data-v-ecddd6c8 type=radio class=rp-radio__native><span data-v-ecddd6c8 class=rp-radio__dot></span>", 1);
|
|
64
85
|
//#endregion
|
|
65
86
|
//#region src/components/radio/radio.vue
|
|
66
87
|
var radio_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
|
|
@@ -68,6 +89,9 @@ var radio_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
68
89
|
__name: "radio",
|
|
69
90
|
props: {
|
|
70
91
|
value: {},
|
|
92
|
+
variant: { default: void 0 },
|
|
93
|
+
color: { default: void 0 },
|
|
94
|
+
size: { default: void 0 },
|
|
71
95
|
disabled: {
|
|
72
96
|
type: Boolean,
|
|
73
97
|
default: false
|
|
@@ -99,10 +123,10 @@ var radio_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
99
123
|
});
|
|
100
124
|
return n5;
|
|
101
125
|
}
|
|
102
|
-
}), [["__scopeId", "data-v-
|
|
126
|
+
}), [["__scopeId", "data-v-ecddd6c8"]]);
|
|
103
127
|
//#endregion
|
|
104
128
|
//#region src/components/radio/radio-group.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
105
|
-
var t0 = template("<div data-v-
|
|
129
|
+
var t0 = template("<div data-v-a2c46e46 role=radiogroup>", 1);
|
|
106
130
|
//#endregion
|
|
107
131
|
//#region src/components/radio/radio-group.vue
|
|
108
132
|
var radio_group_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
|
|
@@ -112,6 +136,9 @@ var radio_group_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
|
|
|
112
136
|
id: {},
|
|
113
137
|
name: {},
|
|
114
138
|
modelValue: {},
|
|
139
|
+
variant: { default: void 0 },
|
|
140
|
+
color: { default: void 0 },
|
|
141
|
+
size: { default: void 0 },
|
|
115
142
|
disabled: {
|
|
116
143
|
type: Boolean,
|
|
117
144
|
default: void 0
|
|
@@ -153,7 +180,7 @@ var radio_group_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
|
|
|
153
180
|
createSlot("default", null, null, 1);
|
|
154
181
|
return n1;
|
|
155
182
|
}
|
|
156
|
-
}), [["__scopeId", "data-v-
|
|
183
|
+
}), [["__scopeId", "data-v-a2c46e46"]]);
|
|
157
184
|
//#endregion
|
|
158
185
|
export { radio_default as n, radio_group_default as t };
|
|
159
186
|
|
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 = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\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
|
-
background-color: var(--rp-color-
|
|
23
|
-
border: var(--rp-border-width-thin) solid var(--rp-color-
|
|
24
|
-
border-radius: var(--
|
|
23
|
+
background-color: var(--rp-color-button-default-bg);
|
|
24
|
+
border: var(--rp-border-width-thin) solid var(--rp-color-border);
|
|
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
|
-
border-color: var(--rp-color-
|
|
30
|
+
.rp-select__trigger[data-v-9838513c]:hover {
|
|
31
|
+
border-color: var(--rp-color-border-hover);
|
|
31
32
|
}
|
|
32
|
-
.rp-select__trigger[data-v-
|
|
33
|
+
.rp-select__trigger[data-v-9838513c]:focus-visible {
|
|
33
34
|
outline: none;
|
|
34
|
-
border-color: var(--rp-color-
|
|
35
|
+
border-color: var(--rp-color-primary);
|
|
35
36
|
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
36
37
|
}
|
|
37
|
-
.rp-select--
|
|
38
|
-
|
|
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] {
|
|
54
|
+
border-color: var(--rp-color-primary);
|
|
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
|
-
color: var(--rp-color-
|
|
65
|
+
color: var(--rp-color-text);
|
|
66
|
+
}
|
|
67
|
+
.rp-select__placeholder[data-v-9838513c] {
|
|
68
|
+
color: var(--rp-color-text-disabled);
|
|
69
|
+
}
|
|
70
|
+
.rp-select__indicator[data-v-9838513c] {
|
|
71
|
+
display: inline-flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
width: 1em;
|
|
74
|
+
height: 1em;
|
|
75
|
+
flex-shrink: 0;
|
|
76
|
+
}
|
|
77
|
+
.rp-select__indicator svg[data-v-9838513c] {
|
|
78
|
+
width: 100%;
|
|
79
|
+
height: 100%;
|
|
80
|
+
}
|
|
81
|
+
.rp-select__indicator[data-v-9838513c] {
|
|
82
|
+
position: relative;
|
|
83
|
+
color: var(--rp-color-text-disabled);
|
|
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;
|
|
50
92
|
}
|
|
51
|
-
.rp-
|
|
52
|
-
|
|
93
|
+
.rp-select__arrow svg[data-v-9838513c] {
|
|
94
|
+
width: 100%;
|
|
95
|
+
height: 100%;
|
|
53
96
|
}
|
|
54
|
-
.rp-select__arrow[data-v-
|
|
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;
|
|
55
106
|
display: inline-flex;
|
|
56
107
|
align-items: center;
|
|
57
108
|
width: 1em;
|
|
58
109
|
height: 1em;
|
|
59
110
|
flex-shrink: 0;
|
|
60
111
|
}
|
|
61
|
-
.rp-
|
|
112
|
+
.rp-select__clear svg[data-v-9838513c] {
|
|
62
113
|
width: 100%;
|
|
63
114
|
height: 100%;
|
|
64
115
|
}
|
|
65
|
-
.rp-
|
|
66
|
-
|
|
67
|
-
|
|
116
|
+
.rp-select__clear[data-v-9838513c] {
|
|
117
|
+
position: absolute;
|
|
118
|
+
inset: 0;
|
|
119
|
+
z-index: 1;
|
|
120
|
+
color: var(--rp-color-text-secondary);
|
|
121
|
+
opacity: 0;
|
|
122
|
+
pointer-events: none;
|
|
123
|
+
transition: color var(--rp-transition-fast), opacity var(--rp-transition-fast);
|
|
68
124
|
}
|
|
69
|
-
.rp-
|
|
70
|
-
|
|
125
|
+
.rp-select__clear[data-v-9838513c]:hover {
|
|
126
|
+
color: var(--rp-color-text);
|
|
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;
|
|
71
134
|
}
|
|
72
|
-
.rp-select__dropdown[data-v-
|
|
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
158
|
color: var(--rp-color-text);
|
|
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
|
}
|