ropav 0.0.10 → 0.0.12

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 (276) hide show
  1. package/README.md +9 -0
  2. package/dist/accordion.css +115 -111
  3. package/dist/accordion.js +60 -16
  4. package/dist/alert.css +110 -108
  5. package/dist/alert.js +48 -26
  6. package/dist/aspect-ratio.css +17 -15
  7. package/dist/aspect-ratio.js +20 -6
  8. package/dist/avatar.css +98 -96
  9. package/dist/avatar.js +27 -16
  10. package/dist/badge.css +95 -93
  11. package/dist/badge.js +29 -16
  12. package/dist/base.css +672 -671
  13. package/dist/button-group.css +39 -37
  14. package/dist/button-group.js +23 -12
  15. package/dist/button-link.css +160 -158
  16. package/dist/button-link.js +43 -24
  17. package/dist/button.css +160 -158
  18. package/dist/button.js +37 -19
  19. package/dist/card.css +109 -107
  20. package/dist/card.js +42 -17
  21. package/dist/checkbox.css +139 -137
  22. package/dist/checkbox.js +103 -33
  23. package/dist/collapse.css +29 -27
  24. package/dist/collapse.js +44 -10
  25. package/dist/color-input.css +137 -107
  26. package/dist/color-input.js +117 -30
  27. package/dist/color-picker.css +309 -303
  28. package/dist/color-picker.js +147 -54
  29. package/dist/color-picker2.js +9 -1
  30. package/dist/color-swatch.css +48 -46
  31. package/dist/color-swatch.js +15 -11
  32. package/dist/color-swatch2.js +4 -0
  33. package/dist/components/accordion/accordion-item.d.ts +13 -1
  34. package/dist/components/accordion/index.d.ts +2 -1
  35. package/dist/components/accordion/index.js +2 -2
  36. package/dist/components/accordion/types.d.ts +9 -4
  37. package/dist/components/alert/alert.d.ts +2 -2
  38. package/dist/components/alert/index.d.ts +2 -2
  39. package/dist/components/alert/index.js +2 -2
  40. package/dist/components/alert/types.d.ts +4 -1
  41. package/dist/components/aspect-ratio/index.d.ts +2 -1
  42. package/dist/components/aspect-ratio/index.js +2 -2
  43. package/dist/components/aspect-ratio/types.d.ts +4 -1
  44. package/dist/components/avatar/index.d.ts +2 -2
  45. package/dist/components/avatar/index.js +2 -2
  46. package/dist/components/avatar/types.d.ts +4 -1
  47. package/dist/components/badge/index.d.ts +2 -2
  48. package/dist/components/badge/index.js +2 -2
  49. package/dist/components/badge/types.d.ts +4 -1
  50. package/dist/components/button/index.d.ts +2 -1
  51. package/dist/components/button/index.js +2 -2
  52. package/dist/components/button/types.d.ts +4 -1
  53. package/dist/components/button-group/index.d.ts +2 -1
  54. package/dist/components/button-group/index.js +2 -2
  55. package/dist/components/button-group/types.d.ts +4 -1
  56. package/dist/components/button-link/index.d.ts +2 -1
  57. package/dist/components/button-link/index.js +2 -2
  58. package/dist/components/button-link/types.d.ts +4 -1
  59. package/dist/components/card/index.d.ts +2 -1
  60. package/dist/components/card/index.js +2 -2
  61. package/dist/components/card/types.d.ts +5 -1
  62. package/dist/components/checkbox/checkbox.d.ts +4 -1
  63. package/dist/components/checkbox/index.d.ts +2 -1
  64. package/dist/components/checkbox/index.js +2 -2
  65. package/dist/components/checkbox/types.d.ts +11 -2
  66. package/dist/components/checkbox/useCheckbox.d.ts +3 -1
  67. package/dist/components/collapse/collapse.d.ts +2 -2
  68. package/dist/components/collapse/index.d.ts +2 -1
  69. package/dist/components/collapse/index.js +2 -2
  70. package/dist/components/collapse/types.d.ts +9 -2
  71. package/dist/components/color-input/index.d.ts +2 -1
  72. package/dist/components/color-input/index.js +2 -2
  73. package/dist/components/color-input/types.d.ts +8 -2
  74. package/dist/components/color-input/useColorInput.d.ts +1 -1
  75. package/dist/components/color-input/useColorInputValue.d.ts +1 -1
  76. package/dist/components/color-picker/index.d.ts +2 -2
  77. package/dist/components/color-picker/index.js +2 -2
  78. package/dist/components/color-picker/types.d.ts +13 -1
  79. package/dist/components/color-swatch/index.d.ts +2 -1
  80. package/dist/components/color-swatch/index.js +2 -1
  81. package/dist/components/color-swatch/types.d.ts +4 -1
  82. package/dist/components/dialog/dialog-close.d.ts +21 -0
  83. package/dist/components/dialog/dialog-content.d.ts +32 -0
  84. package/dist/components/dialog/dialog-core.d.ts +27 -0
  85. package/dist/components/dialog/dialog-description.d.ts +21 -0
  86. package/dist/components/dialog/dialog-overlay.d.ts +21 -0
  87. package/dist/components/dialog/dialog-portal.d.ts +21 -0
  88. package/dist/components/dialog/dialog-root.d.ts +28 -0
  89. package/dist/components/dialog/dialog-title.d.ts +21 -0
  90. package/dist/components/dialog/dialog-trigger.d.ts +23 -0
  91. package/dist/components/dialog/index.d.ts +9 -0
  92. package/dist/components/dialog/index.js +2 -0
  93. package/dist/components/dialog/types.d.ts +61 -0
  94. package/dist/components/dropdown-menu/dropdown-menu-checkbox-item.d.ts +24 -0
  95. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +34 -0
  96. package/dist/components/dropdown-menu/dropdown-menu-context-trigger.d.ts +23 -0
  97. package/dist/components/dropdown-menu/dropdown-menu-item-indicator.d.ts +24 -0
  98. package/dist/components/dropdown-menu/dropdown-menu-item-row.d.ts +28 -0
  99. package/dist/components/dropdown-menu/dropdown-menu-item.d.ts +23 -0
  100. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +24 -22
  101. package/dist/components/dropdown-menu/dropdown-menu-label.d.ts +21 -0
  102. package/dist/components/dropdown-menu/dropdown-menu-outside.d.ts +3 -0
  103. package/dist/components/dropdown-menu/dropdown-menu-portal.d.ts +21 -0
  104. package/dist/components/dropdown-menu/dropdown-menu-primitive-core.d.ts +110 -0
  105. package/dist/components/dropdown-menu/dropdown-menu-primitives.d.ts +15 -0
  106. package/dist/components/dropdown-menu/dropdown-menu-radio-group.d.ts +25 -0
  107. package/dist/components/dropdown-menu/dropdown-menu-radio-item.d.ts +23 -0
  108. package/dist/components/dropdown-menu/dropdown-menu-root.d.ts +30 -0
  109. package/dist/components/dropdown-menu/dropdown-menu-separator.d.ts +19 -0
  110. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +34 -0
  111. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +28 -0
  112. package/dist/components/dropdown-menu/dropdown-menu-sub.d.ts +28 -0
  113. package/dist/components/dropdown-menu/dropdown-menu-trigger.d.ts +23 -0
  114. package/dist/components/dropdown-menu/dropdown-menu.d.ts +6 -3
  115. package/dist/components/dropdown-menu/index.d.ts +32 -1
  116. package/dist/components/dropdown-menu/index.js +2 -2
  117. package/dist/components/dropdown-menu/types.d.ts +145 -6
  118. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +15 -3
  119. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +10 -3
  120. package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +2 -1
  121. package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +4 -4
  122. package/dist/components/dropdown-menu/useDropdownMenuPortalPosition.d.ts +19 -0
  123. package/dist/components/dropdown-menu/useDropdownMenuPrimitiveContent.d.ts +27 -0
  124. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +14 -2
  125. package/dist/components/field/index.d.ts +2 -1
  126. package/dist/components/field/index.js +2 -2
  127. package/dist/components/field/types.d.ts +4 -1
  128. package/dist/components/floating/index.d.ts +3 -0
  129. package/dist/components/floating/index.js +3 -0
  130. package/dist/components/floating/types.d.ts +105 -0
  131. package/dist/components/floating/useFloatingPosition.d.ts +15 -0
  132. package/dist/components/floating/useHoverDisclosure.d.ts +2 -0
  133. package/dist/components/focus-trap/focus-trap.d.ts +31 -0
  134. package/dist/components/focus-trap/index.d.ts +4 -0
  135. package/dist/components/focus-trap/index.js +3 -0
  136. package/dist/components/focus-trap/types.d.ts +41 -0
  137. package/dist/components/focus-trap/useFocusTrap.d.ts +2 -0
  138. package/dist/components/icon-button/index.d.ts +2 -1
  139. package/dist/components/icon-button/index.js +2 -1
  140. package/dist/components/icon-button/types.d.ts +4 -1
  141. package/dist/components/input/index.d.ts +2 -1
  142. package/dist/components/input/index.js +2 -1
  143. package/dist/components/input/input.d.ts +4 -1
  144. package/dist/components/input/types.d.ts +7 -2
  145. package/dist/components/modal/index.d.ts +2 -1
  146. package/dist/components/modal/index.js +2 -2
  147. package/dist/components/modal/modal.d.ts +3 -1
  148. package/dist/components/modal/types.d.ts +11 -1
  149. package/dist/components/modal/useModal.d.ts +7 -4
  150. package/dist/components/number-input/index.d.ts +2 -1
  151. package/dist/components/number-input/index.js +2 -2
  152. package/dist/components/number-input/types.d.ts +7 -2
  153. package/dist/components/number-input/useNumberInput.d.ts +2 -1
  154. package/dist/components/overlay/index.d.ts +2 -1
  155. package/dist/components/overlay/index.js +2 -1
  156. package/dist/components/overlay/types.d.ts +4 -1
  157. package/dist/components/popover/index.d.ts +2 -2
  158. package/dist/components/popover/index.js +2 -2
  159. package/dist/components/popover/popover.d.ts +2 -2
  160. package/dist/components/popover/types.d.ts +20 -11
  161. package/dist/components/popover/usePopover.d.ts +9 -1
  162. package/dist/components/progress/index.d.ts +2 -2
  163. package/dist/components/progress/index.js +2 -2
  164. package/dist/components/progress/types.d.ts +4 -1
  165. package/dist/components/radio/index.d.ts +2 -1
  166. package/dist/components/radio/index.js +2 -2
  167. package/dist/components/radio/radio.d.ts +8 -3
  168. package/dist/components/radio/types.d.ts +37 -4
  169. package/dist/components/radio/useRadio.d.ts +12 -4
  170. package/dist/components/select/index.d.ts +2 -1
  171. package/dist/components/select/index.js +2 -2
  172. package/dist/components/select/select.d.ts +4 -1
  173. package/dist/components/select/types.d.ts +10 -2
  174. package/dist/components/select/useSelect.d.ts +3 -1
  175. package/dist/components/slider/index.d.ts +2 -2
  176. package/dist/components/slider/index.js +2 -2
  177. package/dist/components/slider/range-slider-tooltip.d.ts +3 -0
  178. package/dist/components/slider/range-slider.d.ts +7 -4
  179. package/dist/components/slider/slider.d.ts +4 -1
  180. package/dist/components/slider/sliderCore.d.ts +4 -4
  181. package/dist/components/slider/types.d.ts +22 -4
  182. package/dist/components/slider/useRangeSlider.d.ts +2 -2
  183. package/dist/components/slider/useSlider.d.ts +2 -2
  184. package/dist/components/switch/index.d.ts +2 -1
  185. package/dist/components/switch/index.js +2 -2
  186. package/dist/components/switch/switch.d.ts +4 -1
  187. package/dist/components/switch/types.d.ts +11 -2
  188. package/dist/components/switch/useSwitch.d.ts +3 -1
  189. package/dist/components/tabs/index.d.ts +2 -1
  190. package/dist/components/tabs/index.js +2 -2
  191. package/dist/components/tabs/types.d.ts +13 -4
  192. package/dist/components/teleport-provider/index.d.ts +3 -0
  193. package/dist/components/teleport-provider/index.js +3 -0
  194. package/dist/components/teleport-provider/teleport-provider.d.ts +21 -0
  195. package/dist/components/teleport-provider/types.d.ts +4 -0
  196. package/dist/components/teleport-provider/useTeleportTarget.d.ts +6 -0
  197. package/dist/components/textarea/index.d.ts +2 -1
  198. package/dist/components/textarea/index.js +2 -2
  199. package/dist/components/textarea/textarea.d.ts +4 -1
  200. package/dist/components/textarea/types.d.ts +10 -2
  201. package/dist/components/textarea/useTextarea.d.ts +2 -1
  202. package/dist/components/toast/index.d.ts +3 -2
  203. package/dist/components/toast/index.js +2 -2
  204. package/dist/components/toast/toast-store.d.ts +2 -0
  205. package/dist/components/toast/toast.d.ts +2 -2
  206. package/dist/components/toast/types.d.ts +20 -10
  207. package/dist/components/toast/useToast.d.ts +2 -2
  208. package/dist/components/tooltip/index.d.ts +2 -1
  209. package/dist/components/tooltip/index.js +2 -1
  210. package/dist/components/tooltip/tooltip.d.ts +2 -2
  211. package/dist/components/tooltip/types.d.ts +13 -12
  212. package/dist/components/tooltip/useTooltip.d.ts +12 -2
  213. package/dist/composables/useOverlayLayer.d.ts +32 -0
  214. package/dist/dialog.js +510 -0
  215. package/dist/dropdown-menu.css +191 -108
  216. package/dist/dropdown-menu.js +1954 -198
  217. package/dist/field.css +41 -39
  218. package/dist/field.js +40 -16
  219. package/dist/floating.js +403 -0
  220. package/dist/focus-trap.js +80 -0
  221. package/dist/icon-button.css +193 -189
  222. package/dist/icon-button.js +23 -18
  223. package/dist/icon-button2.js +8 -0
  224. package/dist/index.d.ts +5 -0
  225. package/dist/index.js +39 -32
  226. package/dist/input.css +122 -120
  227. package/dist/input.js +63 -40
  228. package/dist/input2.js +9 -0
  229. package/dist/legacy-unlayered.css +5382 -0
  230. package/dist/modal.css +129 -127
  231. package/dist/modal.js +182 -281
  232. package/dist/number-input.css +87 -85
  233. package/dist/number-input.js +98 -26
  234. package/dist/overlay.css +26 -24
  235. package/dist/overlay.js +17 -9
  236. package/dist/overlay2.js +4 -0
  237. package/dist/popover.css +140 -107
  238. package/dist/popover.js +276 -196
  239. package/dist/popover2.js +6 -1
  240. package/dist/progress.css +101 -99
  241. package/dist/progress.js +50 -28
  242. package/dist/radio.css +114 -105
  243. package/dist/radio.js +237 -61
  244. package/dist/select.css +255 -242
  245. package/dist/select.js +257 -94
  246. package/dist/slider.css +1090 -1031
  247. package/dist/slider.js +443 -175
  248. package/dist/styles-api.d.ts +22 -0
  249. package/dist/styles-api.js +49 -0
  250. package/dist/switch.css +120 -108
  251. package/dist/switch.js +112 -38
  252. package/dist/tabs.css +286 -278
  253. package/dist/tabs.js +60 -21
  254. package/dist/teleport-provider.js +15 -0
  255. package/dist/textarea.css +132 -130
  256. package/dist/textarea.js +83 -31
  257. package/dist/toast.css +229 -225
  258. package/dist/toast.js +189 -118
  259. package/dist/tooltip.css +61 -106
  260. package/dist/tooltip.js +184 -228
  261. package/dist/tooltip2.js +8 -0
  262. package/dist/useControlState.js +4 -0
  263. package/dist/useFloatingPosition.js +1317 -0
  264. package/dist/useFocusTrap.js +130 -0
  265. package/dist/useFormControl.js +107 -0
  266. package/dist/useOverlayLayer.js +262 -0
  267. package/dist/useTeleportTarget.js +40 -0
  268. package/docs/public-floating-api.md +148 -0
  269. package/docs/public-styles-api.md +134 -0
  270. package/docs/public-tokens.md +545 -0
  271. package/package.json +37 -9
  272. package/src/styles/_tokens.scss +33 -28
  273. package/src/styles/_utilities.scss +11 -9
  274. package/src/styles/styles-manifest.json +4125 -0
  275. package/dist/rafScheduler.js +0 -34
  276. package/dist/useClickOutside.js +0 -24
@@ -0,0 +1,22 @@
1
+ import { HTMLAttributes, StyleValue } from 'vue';
2
+ export type StylesApiClassNames<Part extends string> = Partial<Record<Part, HTMLAttributes['class']>>;
3
+ export type StylesApiStyles<Part extends string> = Partial<Record<Part, StyleValue>>;
4
+ export interface StylesApiProps<Part extends string> {
5
+ classNames?: StylesApiClassNames<Part>;
6
+ styles?: StylesApiStyles<Part>;
7
+ }
8
+ export interface StylesApiPartOptions {
9
+ class?: HTMLAttributes['class'];
10
+ style?: StyleValue;
11
+ compatibilityClass?: HTMLAttributes['class'];
12
+ compatibilityStyle?: StyleValue;
13
+ }
14
+ type StylesApiSource<Part extends string> = Pick<StylesApiProps<Part>, 'classNames' | 'styles'>;
15
+ export declare function presence(value: unknown): '' | undefined;
16
+ export declare function resolveStylesApiPart<Part extends string>(source: Readonly<StylesApiSource<Part>>, part: Part, options?: StylesApiPartOptions): Pick<HTMLAttributes, 'class' | 'style'>;
17
+ export declare function useStylesApi<Part extends string>(source: Readonly<StylesApiSource<Part>>, rootPart: Part): {
18
+ attrs: import('vue').Attrs;
19
+ getPartAttrs: (part: Part, options?: StylesApiPartOptions) => Pick<HTMLAttributes, "class" | "style">;
20
+ getRootAttrs: (internalAttrs?: object, options?: Omit<StylesApiPartOptions, "class" | "style">, excludedAttrs?: readonly string[]) => Record<string, unknown>;
21
+ };
22
+ export {};
@@ -0,0 +1,49 @@
1
+ import { mergeProps, useAttrs } from "vue";
2
+ //#region src/styles-api.ts
3
+ function presence(value) {
4
+ return value ? "" : void 0;
5
+ }
6
+ function resolveStylesApiPart(source, part, options = {}) {
7
+ return {
8
+ class: [
9
+ options.class,
10
+ options.compatibilityClass,
11
+ source.classNames?.[part]
12
+ ],
13
+ style: [
14
+ options.style,
15
+ options.compatibilityStyle,
16
+ source.styles?.[part]
17
+ ]
18
+ };
19
+ }
20
+ function useStylesApi(source, rootPart) {
21
+ const attrs = useAttrs();
22
+ function getPartAttrs(part, options = {}) {
23
+ return resolveStylesApiPart(source, part, options);
24
+ }
25
+ function getRootAttrs(internalAttrs = {}, options = {}, excludedAttrs = []) {
26
+ const internalRecord = internalAttrs;
27
+ const { class: attrClass, style: attrStyle, ...candidateAttrs } = attrs;
28
+ const merged = mergeProps(internalRecord, Object.fromEntries(Object.entries(candidateAttrs).filter(([name]) => !excludedAttrs.includes(name))));
29
+ for (const [name, value] of Object.entries(internalRecord)) {
30
+ if (name === "class" || name === "style" || /^on[A-Z]/.test(name)) continue;
31
+ merged[name] = value;
32
+ }
33
+ const partAttrs = resolveStylesApiPart(source, rootPart, {
34
+ class: internalRecord.class,
35
+ style: internalRecord.style,
36
+ ...options
37
+ });
38
+ merged.class = [partAttrs.class, attrClass];
39
+ merged.style = [partAttrs.style, attrStyle];
40
+ return merged;
41
+ }
42
+ return {
43
+ attrs,
44
+ getPartAttrs,
45
+ getRootAttrs
46
+ };
47
+ }
48
+ //#endregion
49
+ export { useStylesApi as n, presence as t };
package/dist/switch.css CHANGED
@@ -1,109 +1,121 @@
1
- .rp-switch[data-v-e9d95947] {
2
- --_rp-switch-color: var(--rp-color-control-selected-bg);
3
- --_rp-switch-font-size: var(--rp-font-size-md);
4
- --_rp-switch-track-width: 46px;
5
- --_rp-switch-track-height: 24px;
6
- --_rp-switch-thumb-size: 18px;
7
- --_rp-switch-thumb-offset: 2px;
8
- --_rp-switch-track-bg: var(--rp-color-control-track-bg);
9
- --_rp-switch-thumb-bg: var(--rp-color-control-thumb-bg);
10
- --_rp-switch-invalid-border: var(--rp-color-red-filled);
11
- --_rp-switch-invalid-ring: color-mix(in srgb, var(--rp-color-red-filled) 32%, transparent);
12
- display: inline-flex;
13
- align-items: center;
14
- cursor: pointer;
15
- font-family: var(--rp-font-family);
16
- user-select: none;
17
- }
18
- .rp-switch--disabled[data-v-e9d95947] {
19
- opacity: var(--rp-opacity-disabled);
20
- cursor: not-allowed;
21
- }
22
- .rp-switch[data-v-e9d95947] {
23
- gap: var(--rp-spacing-2);
24
- font-size: var(--_rp-switch-font-size);
25
- }
26
- .rp-switch__native[data-v-e9d95947] {
27
- position: absolute;
28
- width: 1px;
29
- height: 1px;
30
- padding: 0;
31
- margin: -1px;
32
- overflow: hidden;
33
- clip: rect(0, 0, 0, 0);
34
- white-space: nowrap;
35
- border-width: 0;
36
- pointer-events: none;
37
- }
38
- .rp-switch__native:focus-visible + .rp-switch__track[data-v-e9d95947] {
39
- border-color: var(--rp-color-control-border-focus);
40
- box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
41
- }
42
- .rp-switch__track[data-v-e9d95947] {
43
- position: relative;
44
- display: inline-flex;
45
- align-items: center;
46
- width: var(--_rp-switch-track-width);
47
- height: var(--_rp-switch-track-height);
48
- flex-shrink: 0;
49
- background-color: var(--_rp-switch-track-bg);
50
- border-radius: var(--rp-radius-full);
51
- transition: background-color var(--rp-transition-fast);
52
- }
53
- .rp-switch--checked .rp-switch__track[data-v-e9d95947] {
54
- background-color: var(--_rp-switch-color);
55
- }
56
- .rp-switch--invalid .rp-switch__track[data-v-e9d95947] {
57
- outline: var(--rp-border-width-thin) solid var(--_rp-switch-invalid-border);
58
- outline-offset: var(--_rp-switch-thumb-offset);
59
- }
60
- .rp-switch--invalid .rp-switch__native:focus-visible + .rp-switch__track[data-v-e9d95947] {
61
- box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-switch-invalid-ring);
62
- }
63
- .rp-switch__thumb[data-v-e9d95947] {
64
- position: absolute;
65
- left: var(--_rp-switch-thumb-offset);
66
- width: var(--_rp-switch-thumb-size);
67
- height: var(--_rp-switch-thumb-size);
68
- background-color: var(--_rp-switch-thumb-bg);
69
- border-radius: var(--rp-radius-full);
70
- box-shadow: var(--rp-shadow-sm);
71
- transition: transform var(--rp-transition-fast);
72
- }
73
- .rp-switch--checked .rp-switch__thumb[data-v-e9d95947] {
74
- transform: translateX(calc(var(--_rp-switch-track-width) - var(--_rp-switch-thumb-size) - var(--_rp-switch-thumb-offset) * 2));
75
- }
76
- .rp-switch__label[data-v-e9d95947] {
77
- line-height: var(--rp-line-height-md);
78
- color: var(--rp-color-text);
79
- }
80
- .rp-switch--size-xs[data-v-e9d95947] {
81
- --_rp-switch-track-width: 32px;
82
- --_rp-switch-track-height: 16px;
83
- --_rp-switch-thumb-size: 12px;
84
- --_rp-switch-font-size: var(--rp-font-size-xs);
85
- }
86
- .rp-switch--size-sm[data-v-e9d95947] {
87
- --_rp-switch-track-width: 38px;
88
- --_rp-switch-track-height: 20px;
89
- --_rp-switch-thumb-size: 14px;
90
- --_rp-switch-font-size: var(--rp-font-size-sm);
91
- }
92
- .rp-switch--size-md[data-v-e9d95947] {
93
- --_rp-switch-track-width: 46px;
94
- --_rp-switch-track-height: 24px;
95
- --_rp-switch-thumb-size: 18px;
96
- --_rp-switch-font-size: var(--rp-font-size-md);
97
- }
98
- .rp-switch--size-lg[data-v-e9d95947] {
99
- --_rp-switch-track-width: 56px;
100
- --_rp-switch-track-height: 30px;
101
- --_rp-switch-thumb-size: 22px;
102
- --_rp-switch-font-size: var(--rp-font-size-lg);
103
- }
104
- .rp-switch--size-xl[data-v-e9d95947] {
105
- --_rp-switch-track-width: 72px;
106
- --_rp-switch-track-height: 36px;
107
- --_rp-switch-thumb-size: 28px;
108
- --_rp-switch-font-size: var(--rp-font-size-xl);
1
+ @layer ropav.components {
2
+ .rp-switch[data-v-d966892e] {
3
+ --_rp-switch-color: var(--rp-color-control-selected-bg);
4
+ --_rp-switch-font-size: var(--rp-font-size-md);
5
+ --_rp-switch-default-track-width: 46px;
6
+ --_rp-switch-default-track-height: 24px;
7
+ --_rp-switch-default-thumb-size: 18px;
8
+ --_rp-switch-default-thumb-offset: 2px;
9
+ --_rp-switch-track-width: var(--rp-switch-track-width, var(--_rp-switch-default-track-width));
10
+ --_rp-switch-track-height: var(
11
+ --rp-switch-track-height,
12
+ var(--_rp-switch-default-track-height)
13
+ );
14
+ --_rp-switch-thumb-size: var(--rp-switch-thumb-size, var(--_rp-switch-default-thumb-size));
15
+ --_rp-switch-thumb-offset: var(
16
+ --rp-switch-thumb-offset,
17
+ var(--_rp-switch-default-thumb-offset)
18
+ );
19
+ --_rp-switch-track-bg: var(--rp-color-control-track-bg);
20
+ --_rp-switch-thumb-bg: var(--rp-color-control-thumb-bg);
21
+ --_rp-switch-invalid-border: var(--rp-color-red-filled);
22
+ --_rp-switch-invalid-ring: color-mix(in srgb, var(--rp-color-red-filled) 32%, transparent);
23
+ display: inline-flex;
24
+ align-items: center;
25
+ cursor: pointer;
26
+ font-family: var(--rp-font-family);
27
+ user-select: none;
28
+ }
29
+ .rp-switch--disabled[data-v-d966892e] {
30
+ opacity: var(--rp-opacity-disabled);
31
+ cursor: not-allowed;
32
+ }
33
+ .rp-switch[data-v-d966892e] {
34
+ gap: var(--rp-spacing-2);
35
+ font-size: var(--_rp-switch-font-size);
36
+ }
37
+ .rp-switch__native[data-v-d966892e] {
38
+ position: absolute;
39
+ width: 1px;
40
+ height: 1px;
41
+ padding: 0;
42
+ margin: -1px;
43
+ overflow: hidden;
44
+ clip: rect(0, 0, 0, 0);
45
+ white-space: nowrap;
46
+ border-width: 0;
47
+ pointer-events: none;
48
+ }
49
+ .rp-switch__native:focus-visible + .rp-switch__track[data-v-d966892e] {
50
+ border-color: var(--rp-color-control-border-focus);
51
+ box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
52
+ }
53
+ .rp-switch__track[data-v-d966892e] {
54
+ position: relative;
55
+ display: inline-flex;
56
+ align-items: center;
57
+ width: var(--_rp-switch-track-width);
58
+ height: var(--_rp-switch-track-height);
59
+ flex-shrink: 0;
60
+ background-color: var(--_rp-switch-track-bg);
61
+ border-radius: var(--rp-radius-full);
62
+ transition: background-color var(--rp-transition-fast);
63
+ }
64
+ .rp-switch--checked .rp-switch__track[data-v-d966892e] {
65
+ background-color: var(--_rp-switch-color);
66
+ }
67
+ .rp-switch--invalid .rp-switch__track[data-v-d966892e] {
68
+ outline: var(--rp-border-width-thin) solid var(--_rp-switch-invalid-border);
69
+ outline-offset: var(--_rp-switch-thumb-offset);
70
+ }
71
+ .rp-switch--invalid .rp-switch__native:focus-visible + .rp-switch__track[data-v-d966892e] {
72
+ box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-switch-invalid-ring);
73
+ }
74
+ .rp-switch__thumb[data-v-d966892e] {
75
+ position: absolute;
76
+ left: var(--_rp-switch-thumb-offset);
77
+ width: var(--_rp-switch-thumb-size);
78
+ height: var(--_rp-switch-thumb-size);
79
+ background-color: var(--_rp-switch-thumb-bg);
80
+ border-radius: var(--rp-radius-full);
81
+ box-shadow: var(--rp-shadow-sm);
82
+ transition: transform var(--rp-transition-fast);
83
+ }
84
+ .rp-switch--checked .rp-switch__thumb[data-v-d966892e] {
85
+ transform: translateX(calc(var(--_rp-switch-track-width) - var(--_rp-switch-thumb-size) - var(--_rp-switch-thumb-offset) * 2));
86
+ }
87
+ .rp-switch__label[data-v-d966892e] {
88
+ line-height: var(--rp-line-height-md);
89
+ color: var(--rp-color-text);
90
+ }
91
+ .rp-switch--size-xs[data-v-d966892e] {
92
+ --_rp-switch-default-track-width: 32px;
93
+ --_rp-switch-default-track-height: 16px;
94
+ --_rp-switch-default-thumb-size: 12px;
95
+ --_rp-switch-font-size: var(--rp-font-size-xs);
96
+ }
97
+ .rp-switch--size-sm[data-v-d966892e] {
98
+ --_rp-switch-default-track-width: 38px;
99
+ --_rp-switch-default-track-height: 20px;
100
+ --_rp-switch-default-thumb-size: 14px;
101
+ --_rp-switch-font-size: var(--rp-font-size-sm);
102
+ }
103
+ .rp-switch--size-md[data-v-d966892e] {
104
+ --_rp-switch-default-track-width: 46px;
105
+ --_rp-switch-default-track-height: 24px;
106
+ --_rp-switch-default-thumb-size: 18px;
107
+ --_rp-switch-font-size: var(--rp-font-size-md);
108
+ }
109
+ .rp-switch--size-lg[data-v-d966892e] {
110
+ --_rp-switch-default-track-width: 56px;
111
+ --_rp-switch-default-track-height: 30px;
112
+ --_rp-switch-default-thumb-size: 22px;
113
+ --_rp-switch-font-size: var(--rp-font-size-lg);
114
+ }
115
+ .rp-switch--size-xl[data-v-d966892e] {
116
+ --_rp-switch-default-track-width: 72px;
117
+ --_rp-switch-default-track-height: 36px;
118
+ --_rp-switch-default-thumb-size: 28px;
119
+ --_rp-switch-font-size: var(--rp-font-size-xl);
120
+ }
109
121
  }
package/dist/switch.js CHANGED
@@ -1,19 +1,22 @@
1
1
  import './switch.css';
2
2
  import { t as bem } from "./bem.js";
3
+ import { n as useStylesApi, t as presence } from "./styles-api.js";
3
4
  import { n as getComponentColorValue } from "./componentColors.js";
4
5
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
6
+ import { o as useControllableValue, r as useCheckedFormControl } from "./useFormControl.js";
5
7
  import { t as useControlState } from "./useControlState.js";
6
- import { child, computed, createIf, createSlot, defineVaporComponent, on, renderEffect, setAttr, setClass, setInsertionState, setProp, setStyle, template, unref } from "vue";
8
+ import { child, computed, createIf, createSlot, defineVaporComponent, next, ref, renderEffect, setDynamicProps, setInsertionState, setStaticTemplateRef, template, unref } from "vue";
7
9
  //#region src/components/switch/useSwitch.ts
8
10
  function getSwitchColorStyle(color) {
9
11
  const colorValue = getComponentColorValue(color);
10
12
  if (!colorValue) return void 0;
11
13
  return { "--_rp-switch-color": colorValue };
12
14
  }
13
- function useSwitch(props, emitUpdate) {
15
+ function useSwitch(props, emitUpdate, getValue = () => props.modelValue ?? false) {
16
+ const inputRef = ref(null);
14
17
  const control = useControlState(props);
15
18
  const rootClass = computed(() => bem("rp-switch", {
16
- checked: props.modelValue,
19
+ checked: getValue(),
17
20
  disabled: control.disabled,
18
21
  invalid: control.invalid,
19
22
  [`size-${props.size}`]: Boolean(props.size)
@@ -22,26 +25,41 @@ function useSwitch(props, emitUpdate) {
22
25
  function onChange(e) {
23
26
  emitUpdate(e.target.checked);
24
27
  }
28
+ function focus(options) {
29
+ inputRef.value?.focus(options);
30
+ }
25
31
  return {
32
+ inputRef,
26
33
  control,
27
34
  rootClass,
28
35
  rootStyle,
29
- onChange
36
+ onChange,
37
+ focus
30
38
  };
31
39
  }
32
40
  //#endregion
33
41
  //#region src/components/switch/switch.vue?vue&type=script&setup=true&vapor=true&lang.ts
34
- var t0 = template("<span data-v-e9d95947 class=rp-switch__label>");
35
- var t1 = template("<label data-v-e9d95947><input data-v-e9d95947 type=checkbox class=rp-switch__native role=switch><span data-v-e9d95947 class=rp-switch__track><span data-v-e9d95947 class=rp-switch__thumb></span></span>", 1);
42
+ var t0 = template("<span data-v-d966892e>");
43
+ var t1 = template("<label data-v-d966892e><input data-v-d966892e><span data-v-d966892e><span data-v-d966892e></span></span>", 1);
36
44
  //#endregion
37
45
  //#region src/components/switch/switch.vue
38
46
  var switch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
39
47
  name: "RpSwitch",
48
+ inheritAttrs: false,
40
49
  __name: "switch",
41
50
  props: {
42
51
  id: {},
43
52
  name: {},
44
- modelValue: { type: Boolean },
53
+ form: {},
54
+ modelValue: {
55
+ type: Boolean,
56
+ default: void 0
57
+ },
58
+ defaultValue: {
59
+ type: Boolean,
60
+ default: false
61
+ },
62
+ value: { default: "on" },
45
63
  color: {},
46
64
  size: {},
47
65
  disabled: {
@@ -58,48 +76,104 @@ var switch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
58
76
  },
59
77
  ariaLabel: {},
60
78
  describedby: {},
61
- labelledby: {}
79
+ labelledby: {},
80
+ inputAttrs: {},
81
+ validationMessage: {},
82
+ classNames: {},
83
+ styles: {}
62
84
  },
63
85
  emits: ["update:modelValue"],
64
- setup(__props, { emit: __emit, slots: $slots }) {
86
+ setup(__props, { expose: __expose, emit: __emit, slots: $slots }) {
65
87
  const props = __props;
66
88
  const emit = __emit;
67
- const { control, rootClass, rootStyle, onChange } = useSwitch(props, (value) => {
68
- emit("update:modelValue", value);
89
+ const controllable = useControllableValue({
90
+ modelValue: () => props.modelValue,
91
+ defaultValue: () => props.defaultValue,
92
+ onChange: (value) => emit("update:modelValue", value)
93
+ });
94
+ const { inputRef, control, rootClass, rootStyle, onChange, focus } = useSwitch(props, (value) => controllable.setValue(value), () => controllable.value.value);
95
+ useCheckedFormControl(() => inputRef.value, controllable, () => props.validationMessage);
96
+ const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
97
+ const rootAttrs = computed(() => getRootAttrs({
98
+ class: rootClass.value,
99
+ style: rootStyle.value,
100
+ "data-disabled": presence(control.disabled),
101
+ "data-invalid": presence(control.invalid),
102
+ "data-state": controllable.value.value ? "checked" : "unchecked"
103
+ }));
104
+ const nativeInputAttrs = computed(() => {
105
+ const attrs = props.inputAttrs ?? {};
106
+ const { class: compatibilityClass, style: compatibilityStyle, ...forwardedAttrs } = attrs;
107
+ return {
108
+ ...forwardedAttrs,
109
+ ...getPartAttrs("input", {
110
+ class: "rp-switch__native",
111
+ compatibilityClass,
112
+ compatibilityStyle
113
+ }),
114
+ "data-disabled": presence(control.disabled),
115
+ "data-invalid": presence(control.invalid),
116
+ onChange(event) {
117
+ onChange(event);
118
+ attrs.onChange?.(event);
119
+ }
120
+ };
69
121
  });
70
- const n5 = t1();
71
- const n0 = child(n5);
72
- on(n0, "change", (e) => unref(onChange)(e));
122
+ __expose({
123
+ nativeElement: inputRef,
124
+ focus
125
+ });
126
+ const n7 = t1();
127
+ const n0 = child(n7);
128
+ const n2 = next(n0, 1);
129
+ const n1 = child(n2);
130
+ setStaticTemplateRef(n0, inputRef, null, "inputRef");
73
131
  renderEffect(() => {
132
+ const _nativeInputAttrs = nativeInputAttrs.value;
74
133
  const _control = unref(control);
75
- const _modelValue = __props.modelValue;
76
- const _control_disabled = _control.disabled;
134
+ const _getPartAttrs = unref(getPartAttrs);
77
135
  const _control_required = _control.required;
78
- setClass(n5, unref(rootClass));
79
- setStyle(n5, unref(rootStyle));
80
- setAttr(n5, "data-disabled", _control_disabled || void 0);
81
- setAttr(n5, "data-state", _modelValue ? "checked" : "unchecked");
82
- setProp(n0, "id", _control.id);
83
- setProp(n0, "name", __props.name);
84
- setProp(n0, "checked", _modelValue);
85
- setProp(n0, "disabled", _control_disabled || void 0);
86
- setProp(n0, "required", _control_required || void 0);
87
- setAttr(n0, "aria-checked", _modelValue);
88
- setAttr(n0, "aria-label", __props.ariaLabel || void 0);
89
- setAttr(n0, "aria-labelledby", _control.ariaLabelledby);
90
- setAttr(n0, "aria-describedby", _control.ariaDescribedby);
91
- setAttr(n0, "aria-invalid", _control.invalid || void 0);
92
- setAttr(n0, "aria-required", _control_required || void 0);
136
+ const _controllable_value_value = unref(controllable).value.value;
137
+ setDynamicProps(n7, [rootAttrs.value]);
138
+ setDynamicProps(n0, [_nativeInputAttrs, {
139
+ id: _control.id,
140
+ name: __props.name,
141
+ form: _control.form ?? _nativeInputAttrs.form,
142
+ type: "checkbox",
143
+ role: "switch",
144
+ value: __props.value,
145
+ checked: _controllable_value_value,
146
+ disabled: _control.disabled || void 0,
147
+ required: _control_required || void 0,
148
+ "aria-checked": _controllable_value_value,
149
+ "aria-label": __props.ariaLabel || void 0,
150
+ "aria-labelledby": _control.ariaLabelledby,
151
+ "aria-describedby": _control.ariaDescribedby,
152
+ "aria-invalid": _control.invalid || void 0,
153
+ "aria-required": _control_required || void 0
154
+ }]);
155
+ setDynamicProps(n2, [_getPartAttrs("track", { class: "rp-switch__track" })]);
156
+ setDynamicProps(n1, [_getPartAttrs("thumb", { class: "rp-switch__thumb" })]);
93
157
  });
94
- setInsertionState(n5, null, 2);
158
+ setInsertionState(n7, null, 2);
95
159
  createIf(() => $slots.default, () => {
96
- const n4 = t0();
97
- setInsertionState(n4, null, 0);
160
+ const n6 = t0();
161
+ renderEffect(() => setDynamicProps(n6, [unref(getPartAttrs)("label", { class: "rp-switch__label" })]));
162
+ setInsertionState(n6, null, 0);
98
163
  createSlot("default", null, null, 1);
99
- return n4;
164
+ return n6;
100
165
  });
101
- return n5;
166
+ return n7;
102
167
  }
103
- }), [["__scopeId", "data-v-e9d95947"]]);
168
+ }), [["__scopeId", "data-v-d966892e"]]);
169
+ //#endregion
170
+ //#region src/components/switch/types.ts
171
+ var switchParts = [
172
+ "root",
173
+ "input",
174
+ "track",
175
+ "thumb",
176
+ "label"
177
+ ];
104
178
  //#endregion
105
- export { switch_default as t };
179
+ export { switch_default as n, switchParts as t };