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.
Files changed (74) hide show
  1. package/README.md +32 -3
  2. package/dist/base.css +125 -88
  3. package/dist/button.css +259 -32
  4. package/dist/button.js +51 -19
  5. package/dist/button.js.map +1 -1
  6. package/dist/checkbox.css +125 -21
  7. package/dist/checkbox.js +77 -42
  8. package/dist/checkbox.js.map +1 -1
  9. package/dist/components/button/button.d.ts +2 -2
  10. package/dist/components/button/index.d.ts +1 -1
  11. package/dist/components/button/types.d.ts +8 -1
  12. package/dist/components/checkbox/index.d.ts +1 -1
  13. package/dist/components/checkbox/types.d.ts +8 -0
  14. package/dist/components/input/index.d.ts +1 -1
  15. package/dist/components/input/input.d.ts +5 -1
  16. package/dist/components/input/types.d.ts +5 -0
  17. package/dist/components/radio/index.d.ts +1 -1
  18. package/dist/components/radio/types.d.ts +12 -0
  19. package/dist/components/select/types.d.ts +3 -0
  20. package/dist/components/select/useSelect.d.ts +2 -0
  21. package/dist/components/switch/index.d.ts +1 -1
  22. package/dist/components/switch/types.d.ts +4 -0
  23. package/dist/components/textarea/index.d.ts +1 -1
  24. package/dist/components/textarea/types.d.ts +5 -0
  25. package/dist/components/textarea/useTextarea.d.ts +1 -0
  26. package/dist/index.d.ts +0 -2
  27. package/dist/index.js +2 -4
  28. package/dist/input.css +87 -21
  29. package/dist/input.js +66 -23
  30. package/dist/input.js.map +1 -1
  31. package/dist/radio.css +82 -18
  32. package/dist/radio.js +35 -8
  33. package/dist/radio.js.map +1 -1
  34. package/dist/select.css +104 -39
  35. package/dist/select.js +149 -87
  36. package/dist/select.js.map +1 -1
  37. package/dist/switch.css +75 -20
  38. package/dist/switch.js +8 -4
  39. package/dist/switch.js.map +1 -1
  40. package/dist/textarea.css +80 -20
  41. package/dist/textarea.js +33 -5
  42. package/dist/textarea.js.map +1 -1
  43. package/dist/useControlState.js +4 -0
  44. package/dist/useControlState.js.map +1 -1
  45. package/package.json +9 -9
  46. package/src/styles/_mixins.scss +18 -8
  47. package/src/styles/_tokens.scss +130 -99
  48. package/src/styles/_variables.scss +28 -28
  49. package/dist/components/_internal/icons/CheckIcon.d.ts +0 -18
  50. package/dist/components/_internal/icons/ChevronDownIcon.d.ts +0 -18
  51. package/dist/components/_internal/icons/MinusIcon.d.ts +0 -18
  52. package/dist/components/_internal/icons/index.d.ts +0 -3
  53. package/dist/components/_internal/optionList.d.ts +0 -9
  54. package/dist/components/tabs/index.d.ts +0 -5
  55. package/dist/components/tabs/index.js +0 -2
  56. package/dist/components/tabs/tab-panel.d.ts +0 -21
  57. package/dist/components/tabs/tabs-list.d.ts +0 -20
  58. package/dist/components/tabs/tabs-trigger.d.ts +0 -21
  59. package/dist/components/tabs/tabs.d.ts +0 -23
  60. package/dist/components/tabs/types.d.ts +0 -18
  61. package/dist/components/tabs/useTabs.d.ts +0 -19
  62. package/dist/components/tooltip/index.d.ts +0 -2
  63. package/dist/components/tooltip/index.js +0 -2
  64. package/dist/components/tooltip/tooltip.d.ts +0 -23
  65. package/dist/components/tooltip/types.d.ts +0 -5
  66. package/dist/components/tooltip/useTooltip.d.ts +0 -8
  67. package/dist/tabs.css +0 -45
  68. package/dist/tabs.js +0 -205
  69. package/dist/tabs.js.map +0 -1
  70. package/dist/tooltip.css +0 -78
  71. package/dist/tooltip.js +0 -112
  72. package/dist/tooltip.js.map +0 -1
  73. package/dist/useRequiredInject.js +0 -11
  74. 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 { t as useRequiredInject } from "./useRequiredInject.js";
5
- import { child, computed, createIf, createSlot, defineVaporComponent, on, provide, renderEffect, setAttr, setClass, setInsertionState, setProp, setValue, template, unref, useId } from "vue";
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-67524919 class=rp-radio__label>");
63
- var t1 = template("<label data-v-67524919><input data-v-67524919 type=radio class=rp-radio__native><span data-v-67524919 class=rp-radio__dot></span>", 1);
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-67524919"]]);
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-ba5e60e5 role=radiogroup>", 1);
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-ba5e60e5"]]);
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-692ef421] {
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-692ef421] {
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-692ef421] {
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: var(--rp-component-menu-min-width);
19
+ min-width: 180px;
19
20
  height: var(--rp-size-control-md);
20
- padding: 0 var(--rp-spacing-4);
21
+ padding: 0 var(--rp-spacing-3);
21
22
  font-size: var(--rp-font-size-base);
22
- background-color: var(--rp-color-control-bg);
23
- border: var(--rp-border-width-thin) solid var(--rp-color-control-border);
24
- border-radius: var(--rp-radius-lg);
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-692ef421]:hover {
30
- border-color: var(--rp-color-control-border-hover);
30
+ .rp-select__trigger[data-v-9838513c]:hover {
31
+ border-color: var(--rp-color-border-hover);
31
32
  }
32
- .rp-select__trigger[data-v-692ef421]:focus-visible {
33
+ .rp-select__trigger[data-v-9838513c]:focus-visible {
33
34
  outline: none;
34
- border-color: var(--rp-color-control-border-focus);
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--open .rp-select__trigger[data-v-692ef421] {
38
- border-color: var(--rp-color-control-border-focus);
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-692ef421] {
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-692ef421] {
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-control-fg);
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-select__placeholder[data-v-692ef421] {
52
- color: var(--rp-color-control-placeholder);
93
+ .rp-select__arrow svg[data-v-9838513c] {
94
+ width: 100%;
95
+ height: 100%;
53
96
  }
54
- .rp-select__arrow[data-v-692ef421] {
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-select__arrow svg[data-v-692ef421] {
112
+ .rp-select__clear svg[data-v-9838513c] {
62
113
  width: 100%;
63
114
  height: 100%;
64
115
  }
65
- .rp-select__arrow[data-v-692ef421] {
66
- color: var(--rp-color-control-icon);
67
- transition: transform var(--rp-transition-fast);
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-select__arrow--open[data-v-692ef421] {
70
- transform: rotate(180deg);
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-692ef421] {
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: var(--rp-z-index-dropdown);
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(--rp-radius-lg);
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: var(--rp-component-menu-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-692ef421] {
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-692ef421] {
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-692ef421] {
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-692ef421] {
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-692ef421] {
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-692ef421],
115
- .rp-select-dropdown-leave-active[data-v-692ef421] {
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-692ef421],
119
- .rp-select-dropdown-leave-to[data-v-692ef421] {
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
  }