ropav 0.1.5 → 0.1.6

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 (100) hide show
  1. package/README.md +4 -0
  2. package/dist/accordion.js +11 -8
  3. package/dist/alert.css +18 -18
  4. package/dist/alert.js +18 -17
  5. package/dist/avatar.js +2 -2
  6. package/dist/badge.js +2 -2
  7. package/dist/base.css +18 -13
  8. package/dist/button-group.js +1 -1
  9. package/dist/button-link.js +10 -12
  10. package/dist/button.css +32 -27
  11. package/dist/button.js +10 -12
  12. package/dist/{useButtonColor.js → button.scss_vue_type_style_index_0_src_true_lang.js} +2 -1
  13. package/dist/card.js +1 -1
  14. package/dist/checkbox.css +32 -32
  15. package/dist/checkbox.js +6 -6
  16. package/dist/collapse.css +6 -6
  17. package/dist/collapse.js +4 -4
  18. package/dist/collectionNavigation.js +2 -2
  19. package/dist/color-input.css +19 -19
  20. package/dist/color-input.js +5 -5
  21. package/dist/color-picker.css +7 -7
  22. package/dist/color-picker.js +4 -5
  23. package/dist/color-swatch.js +1 -1
  24. package/dist/componentColors.js +42 -2
  25. package/dist/components/checkbox/useCheckbox.d.ts +1 -1
  26. package/dist/components/color-input/color-input.d.ts +2 -2
  27. package/dist/components/color-input/useColorInput.d.ts +1 -1
  28. package/dist/components/dialog/dialog-core.d.ts +1 -1
  29. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +2 -2
  30. package/dist/components/dropdown-menu/dropdown-menu-primitive-core.d.ts +1 -1
  31. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +2 -2
  32. package/dist/components/dropdown-menu/dropdown-menu.d.ts +3 -3
  33. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +3 -4
  34. package/dist/components/input/useInput.d.ts +1 -1
  35. package/dist/components/number-input/useNumberInput.d.ts +1 -1
  36. package/dist/components/progress/useProgress.d.ts +1 -1
  37. package/dist/components/radio/useRadio.d.ts +2 -2
  38. package/dist/components/scroll-area/scrollAreaCore.d.ts +5 -0
  39. package/dist/components/scroll-area/types.d.ts +4 -0
  40. package/dist/components/scroll-area/useScrollArea.d.ts +1 -0
  41. package/dist/components/scroll-area/useScrollAreaMetrics.d.ts +3 -0
  42. package/dist/components/scroll-area/useScrollAreaPresentation.d.ts +3 -0
  43. package/dist/components/select/useSelect.d.ts +2 -1
  44. package/dist/components/select/useSelectNativeValue.d.ts +1 -7
  45. package/dist/components/slider/sliderCore.d.ts +2 -1
  46. package/dist/components/slider/useRangeSlider.d.ts +1 -1
  47. package/dist/components/slider/useSlider.d.ts +1 -1
  48. package/dist/components/switch/useSwitch.d.ts +1 -1
  49. package/dist/components/textarea/useTextarea.d.ts +1 -1
  50. package/dist/composables/index.d.ts +2 -0
  51. package/dist/composables/index.js +2 -0
  52. package/dist/composables/useControllableValue.d.ts +14 -0
  53. package/dist/dialog.js +8 -5
  54. package/dist/dropdown-menu.js +43 -29
  55. package/dist/field.js +1 -1
  56. package/dist/floating.js +19 -7
  57. package/dist/icon-button.css +12 -173
  58. package/dist/icon-button.js +5 -5
  59. package/dist/index.d.ts +5 -4
  60. package/dist/index.js +7 -5
  61. package/dist/input.css +24 -24
  62. package/dist/input.js +5 -5
  63. package/dist/modal.js +11 -7
  64. package/dist/number-input.css +18 -18
  65. package/dist/number-input.js +7 -7
  66. package/dist/overlay.js +1 -1
  67. package/dist/pagination.js +3 -3
  68. package/dist/popover.js +9 -6
  69. package/dist/progress.css +29 -21
  70. package/dist/progress.js +17 -10
  71. package/dist/radio.js +3 -3
  72. package/dist/scroll-area.css +10 -1
  73. package/dist/scroll-area.js +82 -25
  74. package/dist/select.css +45 -45
  75. package/dist/select.js +48 -26
  76. package/dist/slider.css +142 -142
  77. package/dist/slider.js +32 -38
  78. package/dist/switch.css +17 -17
  79. package/dist/switch.js +6 -6
  80. package/dist/tabs.css +3 -3
  81. package/dist/tabs.js +25 -15
  82. package/dist/textarea.css +26 -26
  83. package/dist/textarea.js +4 -4
  84. package/dist/toast.css +26 -26
  85. package/dist/toast.js +24 -19
  86. package/dist/tooltip.js +11 -8
  87. package/dist/useCollapse.js +12 -7
  88. package/dist/useControlState.js +1 -1
  89. package/dist/useControllableValue.js +8 -2
  90. package/dist/useFloatingPosition.js +4 -1140
  91. package/dist/useFormControl.js +3 -2
  92. package/dist/useOverlayZIndex.js +1 -1
  93. package/dist/useRequiredInject.js +1 -1
  94. package/docs/public-composables-api.md +52 -0
  95. package/package.json +45 -38
  96. package/src/styles/_mixins.scss +4 -0
  97. package/src/styles/_tokens.scss +12 -12
  98. package/src/styles/_variables.scss +1 -1
  99. package/dist/button-link.css +0 -167
  100. /package/dist/{composables → internal/composables}/useOverlayLayer.d.ts +0 -0
package/dist/slider.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import './slider.css';
2
- import { t as bem } from "./bem.js";
2
+ import { t as useControllableValue } from "./useControllableValue.js";
3
3
  import { n as useStylesApi, t as presence } from "./styles-api.js";
4
- import { n as getComponentColorValue, t as componentColors } from "./componentColors.js";
4
+ import { t as bem } from "./bem.js";
5
5
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
6
- import { t as useControllableValue } from "./useControllableValue.js";
6
+ import { n as getComponentColorRoles, r as getComponentColorValue, t as componentColors } from "./componentColors.js";
7
7
  import { i as useFormControl } from "./useFormControl.js";
8
8
  import { t as useControlState } from "./useControlState.js";
9
9
  import { i as useDelayedOpen, n as resolveTooltipColorStyleWithContrast, r as resolveTooltipOffsetStyle, t as tooltip_default } from "./tooltip.js";
@@ -67,7 +67,9 @@ function getSliderThumbMode(thumb) {
67
67
  function getSliderMarkStyle(percent, color, properties) {
68
68
  const style = { [properties.position]: `${percent}%` };
69
69
  const colorValue = getComponentColorValue(color);
70
- for (const property of properties.colors) setSliderStyleValue(style, property, colorValue);
70
+ const foreground = getComponentColorRoles(color)?.foreground;
71
+ for (const property of properties.decorativeColors) setSliderStyleValue(style, property, colorValue);
72
+ for (const property of properties.foregroundColors) setSliderStyleValue(style, property, foreground);
71
73
  return style;
72
74
  }
73
75
  function createSliderMarkItems(marks, min, max, isFilled, properties) {
@@ -140,12 +142,8 @@ function useSlider(props, emitUpdate, getValue = () => props.modelValue ?? props
140
142
  const ariaValueText = computed(() => getSliderAriaValueText(normalizedValue.value, props.ariaValueText, props.formatValue));
141
143
  const markItems = computed(() => createSliderMarkItems(props.marks, bounds.value.min, bounds.value.max, (_value, percent) => percent <= valuePercent.value, {
142
144
  position: "--_rp-slider-mark-position",
143
- colors: [
144
- "--_rp-slider-mark-color",
145
- "--_rp-slider-mark-label-color",
146
- "--_rp-slider-mark-filled-label-color",
147
- "--_rp-slider-mark-ring-color"
148
- ]
145
+ decorativeColors: ["--_rp-slider-mark-color", "--_rp-slider-mark-ring-color"],
146
+ foregroundColors: ["--_rp-slider-mark-label-color", "--_rp-slider-mark-filled-label-color"]
149
147
  }));
150
148
  const tooltipOptions = computed(() => getSliderTooltipOptions(props.tooltip));
151
149
  const tooltipAnchor = computed(() => getSliderTooltipAnchor(props.tooltip));
@@ -387,17 +385,17 @@ function useSlider(props, emitUpdate, getValue = () => props.modelValue ?? props
387
385
  }
388
386
  //#endregion
389
387
  //#region src/components/slider/slider.vue?vue&type=script&setup=true&vapor=true&lang.ts
390
- var t0$2 = template("<span data-v-7833309e>");
391
- var t1$2 = template("<span data-v-7833309e class=rp-slider__header>");
392
- var t2$2 = template("<span data-v-7833309e class=\"rp-slider__track-layer rp-slider__track-underlay\"aria-hidden=true>");
393
- var t3$2 = template("<span data-v-7833309e class=\"rp-slider__track-layer rp-slider__track-overlay\"aria-hidden=true>");
394
- var t4$2 = template("<span data-v-7833309e class=rp-slider__travel aria-hidden=true>", 2);
395
- var t5$1 = template("<span data-v-7833309e> ");
396
- var t6$1 = template("<span data-v-7833309e><span data-v-7833309e class=rp-slider__mark-dot></span>");
397
- var t7$1 = template("<span data-v-7833309e class=rp-slider__marks aria-hidden=true>");
398
- var t8$1 = template("<span data-v-7833309e class=rp-slider__tooltip-anchor aria-hidden=true></span>", 2);
388
+ var t0$2 = template("<span data-v-c850c027>");
389
+ var t1$2 = template("<span data-v-c850c027 class=rp-slider__header>");
390
+ var t2$2 = template("<span data-v-c850c027 class=\"rp-slider__track-layer rp-slider__track-underlay\"aria-hidden=true>");
391
+ var t3$2 = template("<span data-v-c850c027 class=\"rp-slider__track-layer rp-slider__track-overlay\"aria-hidden=true>");
392
+ var t4$2 = template("<span data-v-c850c027 class=rp-slider__travel aria-hidden=true>", 2);
393
+ var t5$1 = template("<span data-v-c850c027> ");
394
+ var t6$1 = template("<span data-v-c850c027><span data-v-c850c027 class=rp-slider__mark-dot></span>");
395
+ var t7$1 = template("<span data-v-c850c027 class=rp-slider__marks aria-hidden=true>");
396
+ var t8$1 = template("<span data-v-c850c027 class=rp-slider__tooltip-anchor aria-hidden=true></span>", 2);
399
397
  var t9$1 = template(" ");
400
- var t10 = template("<label data-v-7833309e><span data-v-7833309e><span data-v-7833309e class=rp-slider__rail aria-hidden=true></span><!><span data-v-7833309e></span><!><input data-v-7833309e><!><span data-v-7833309e><span data-v-7833309e class=rp-slider__thumb-content>", 1);
398
+ var t10 = template("<label data-v-c850c027><span data-v-c850c027><span data-v-c850c027 class=rp-slider__rail aria-hidden=true></span><!><span data-v-c850c027></span><!><input data-v-c850c027><!><span data-v-c850c027><span data-v-c850c027 class=rp-slider__thumb-content>", 1);
401
399
  delegateEvents("pointerdown", "pointermove", "focusin", "focusout", "keydown");
402
400
  //#endregion
403
401
  //#region src/components/slider/slider.vue
@@ -682,7 +680,7 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
682
680
  n45.$evtkeydown = createInvoker((e) => unref(onTooltipKeydown)(e));
683
681
  return n48;
684
682
  }
685
- }), [["__scopeId", "data-v-7833309e"]]);
683
+ }), [["__scopeId", "data-v-c850c027"]]);
686
684
  //#endregion
687
685
  //#region src/components/slider/useRangeSliderTooltipCollision.ts
688
686
  var TOOLTIP_COLLISION_GAP = 4;
@@ -1402,12 +1400,8 @@ function useRangeSlider(props, emitUpdate, getValue = () => props.modelValue ??
1402
1400
  });
1403
1401
  const markItems = computed(() => createSliderMarkItems(props.marks, bounds.value.min, bounds.value.max, (value) => value >= normalizedValue.value[0] && value <= normalizedValue.value[1], {
1404
1402
  position: "--_rp-range-slider-mark-position",
1405
- colors: [
1406
- "--_rp-range-slider-mark-color",
1407
- "--_rp-range-slider-mark-label-color",
1408
- "--_rp-range-slider-mark-filled-label-color",
1409
- "--_rp-range-slider-mark-ring-color"
1410
- ]
1403
+ decorativeColors: ["--_rp-range-slider-mark-color", "--_rp-range-slider-mark-ring-color"],
1404
+ foregroundColors: ["--_rp-range-slider-mark-label-color", "--_rp-range-slider-mark-filled-label-color"]
1411
1405
  }));
1412
1406
  const hasMarkLabels = computed(() => markItems.value.some((mark) => mark.hasLabel));
1413
1407
  const trackSlotProps = computed(() => ({
@@ -1618,16 +1612,16 @@ function useRangeSlider(props, emitUpdate, getValue = () => props.modelValue ??
1618
1612
  }
1619
1613
  //#endregion
1620
1614
  //#region src/components/slider/range-slider.vue?vue&type=script&setup=true&vapor=true&lang.ts
1621
- var t0 = template("<span data-v-458ba46f>");
1622
- var t1 = template("<span data-v-458ba46f class=rp-range-slider__header>");
1623
- var t2 = template("<span data-v-458ba46f class=\"rp-range-slider__track-layer rp-range-slider__track-underlay\"aria-hidden=true>");
1624
- var t3 = template("<span data-v-458ba46f class=\"rp-range-slider__track-layer rp-range-slider__track-overlay\"aria-hidden=true>");
1625
- var t4 = template("<input data-v-458ba46f>");
1626
- var t5 = template("<span data-v-458ba46f> ");
1627
- var t6 = template("<span data-v-458ba46f><span data-v-458ba46f class=rp-range-slider__mark-dot></span>");
1628
- var t7 = template("<span data-v-458ba46f class=rp-range-slider__marks aria-hidden=true>");
1629
- var t8 = template("<span data-v-458ba46f><span data-v-458ba46f class=rp-range-slider__thumb-content>");
1630
- var t9 = template("<div data-v-458ba46f><span data-v-458ba46f><span data-v-458ba46f class=rp-range-slider__rail aria-hidden=true></span><!><span data-v-458ba46f></span><!><span data-v-458ba46f class=rp-range-slider__thumbs aria-hidden=true>", 1);
1615
+ var t0 = template("<span data-v-ec20f482>");
1616
+ var t1 = template("<span data-v-ec20f482 class=rp-range-slider__header>");
1617
+ var t2 = template("<span data-v-ec20f482 class=\"rp-range-slider__track-layer rp-range-slider__track-underlay\"aria-hidden=true>");
1618
+ var t3 = template("<span data-v-ec20f482 class=\"rp-range-slider__track-layer rp-range-slider__track-overlay\"aria-hidden=true>");
1619
+ var t4 = template("<input data-v-ec20f482>");
1620
+ var t5 = template("<span data-v-ec20f482> ");
1621
+ var t6 = template("<span data-v-ec20f482><span data-v-ec20f482 class=rp-range-slider__mark-dot></span>");
1622
+ var t7 = template("<span data-v-ec20f482 class=rp-range-slider__marks aria-hidden=true>");
1623
+ var t8 = template("<span data-v-ec20f482><span data-v-ec20f482 class=rp-range-slider__thumb-content>");
1624
+ var t9 = template("<div data-v-ec20f482><span data-v-ec20f482><span data-v-ec20f482 class=rp-range-slider__rail aria-hidden=true></span><!><span data-v-ec20f482></span><!><span data-v-ec20f482 class=rp-range-slider__thumbs aria-hidden=true>", 1);
1631
1625
  delegateEvents("pointerdown");
1632
1626
  //#endregion
1633
1627
  //#region src/components/slider/range-slider.vue
@@ -1953,7 +1947,7 @@ var range_slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
1953
1947
  on(n42, "mouseleave", (e) => unref(onTooltipTrackMouseLeave)(e));
1954
1948
  return n44;
1955
1949
  }
1956
- }), [["__scopeId", "data-v-458ba46f"]]);
1950
+ }), [["__scopeId", "data-v-ec20f482"]]);
1957
1951
  //#endregion
1958
1952
  //#region src/components/slider/types.ts
1959
1953
  var sliderParts = [
package/dist/switch.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-switch[data-v-81b33803] {
2
+ .rp-switch[data-v-524fc431] {
3
3
  --_rp-switch-color: var(--rp-color-control-selected-bg);
4
4
  --_rp-switch-font-size: var(--rp-font-size-md);
5
5
  --_rp-switch-default-track-width: 46px;
@@ -26,15 +26,15 @@
26
26
  font-family: var(--rp-font-family);
27
27
  user-select: none;
28
28
  }
29
- .rp-switch--disabled[data-v-81b33803] {
29
+ .rp-switch--disabled[data-v-524fc431] {
30
30
  opacity: var(--rp-opacity-disabled);
31
31
  cursor: not-allowed;
32
32
  }
33
- .rp-switch[data-v-81b33803] {
33
+ .rp-switch[data-v-524fc431] {
34
34
  gap: var(--rp-spacing-2);
35
35
  font-size: var(--_rp-switch-font-size);
36
36
  }
37
- .rp-switch__native[data-v-81b33803] {
37
+ .rp-switch__native[data-v-524fc431] {
38
38
  position: absolute;
39
39
  width: 1px;
40
40
  height: 1px;
@@ -46,11 +46,11 @@
46
46
  border-width: 0;
47
47
  pointer-events: none;
48
48
  }
49
- .rp-switch__native:focus-visible + .rp-switch__track[data-v-81b33803] {
49
+ .rp-switch__native:focus-visible + .rp-switch__track[data-v-524fc431] {
50
50
  border-color: var(--rp-color-control-border-focus);
51
51
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
52
52
  }
53
- .rp-switch__track[data-v-81b33803] {
53
+ .rp-switch__track[data-v-524fc431] {
54
54
  position: relative;
55
55
  display: inline-flex;
56
56
  align-items: center;
@@ -61,17 +61,17 @@
61
61
  border-radius: var(--rp-radius-full);
62
62
  transition: background-color var(--rp-transition-fast);
63
63
  }
64
- .rp-switch--checked .rp-switch__track[data-v-81b33803] {
64
+ .rp-switch--checked .rp-switch__track[data-v-524fc431] {
65
65
  background-color: var(--_rp-switch-color);
66
66
  }
67
- .rp-switch--invalid .rp-switch__track[data-v-81b33803] {
67
+ .rp-switch--invalid .rp-switch__track[data-v-524fc431] {
68
68
  outline: var(--rp-border-width-thin) solid var(--_rp-switch-invalid-border);
69
69
  outline-offset: var(--_rp-switch-thumb-offset);
70
70
  }
71
- .rp-switch--invalid .rp-switch__native:focus-visible + .rp-switch__track[data-v-81b33803] {
71
+ .rp-switch--invalid .rp-switch__native:focus-visible + .rp-switch__track[data-v-524fc431] {
72
72
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-switch-invalid-ring);
73
73
  }
74
- .rp-switch__thumb[data-v-81b33803] {
74
+ .rp-switch__thumb[data-v-524fc431] {
75
75
  position: absolute;
76
76
  left: var(--_rp-switch-thumb-offset);
77
77
  width: var(--_rp-switch-thumb-size);
@@ -81,38 +81,38 @@
81
81
  box-shadow: var(--rp-shadow-sm);
82
82
  transition: transform var(--rp-transition-fast);
83
83
  }
84
- .rp-switch--checked .rp-switch__thumb[data-v-81b33803] {
84
+ .rp-switch--checked .rp-switch__thumb[data-v-524fc431] {
85
85
  transform: translateX(calc(var(--_rp-switch-track-width) - var(--_rp-switch-thumb-size) - var(--_rp-switch-thumb-offset) * 2));
86
86
  }
87
- .rp-switch__label[data-v-81b33803] {
87
+ .rp-switch__label[data-v-524fc431] {
88
88
  line-height: var(--rp-line-height-md);
89
89
  color: var(--rp-color-text);
90
90
  }
91
- .rp-switch--size-xs[data-v-81b33803] {
91
+ .rp-switch--size-xs[data-v-524fc431] {
92
92
  --_rp-switch-default-track-width: 32px;
93
93
  --_rp-switch-default-track-height: 16px;
94
94
  --_rp-switch-default-thumb-size: 12px;
95
95
  --_rp-switch-font-size: var(--rp-font-size-xs);
96
96
  }
97
- .rp-switch--size-sm[data-v-81b33803] {
97
+ .rp-switch--size-sm[data-v-524fc431] {
98
98
  --_rp-switch-default-track-width: 38px;
99
99
  --_rp-switch-default-track-height: 20px;
100
100
  --_rp-switch-default-thumb-size: 14px;
101
101
  --_rp-switch-font-size: var(--rp-font-size-sm);
102
102
  }
103
- .rp-switch--size-md[data-v-81b33803] {
103
+ .rp-switch--size-md[data-v-524fc431] {
104
104
  --_rp-switch-default-track-width: 46px;
105
105
  --_rp-switch-default-track-height: 24px;
106
106
  --_rp-switch-default-thumb-size: 18px;
107
107
  --_rp-switch-font-size: var(--rp-font-size-md);
108
108
  }
109
- .rp-switch--size-lg[data-v-81b33803] {
109
+ .rp-switch--size-lg[data-v-524fc431] {
110
110
  --_rp-switch-default-track-width: 56px;
111
111
  --_rp-switch-default-track-height: 30px;
112
112
  --_rp-switch-default-thumb-size: 22px;
113
113
  --_rp-switch-font-size: var(--rp-font-size-lg);
114
114
  }
115
- .rp-switch--size-xl[data-v-81b33803] {
115
+ .rp-switch--size-xl[data-v-524fc431] {
116
116
  --_rp-switch-default-track-width: 72px;
117
117
  --_rp-switch-default-track-height: 36px;
118
118
  --_rp-switch-default-thumb-size: 28px;
package/dist/switch.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import './switch.css';
2
- import { t as bem } from "./bem.js";
2
+ import { t as useControllableValue } from "./useControllableValue.js";
3
3
  import { n as useStylesApi, t as presence } from "./styles-api.js";
4
- import { n as getComponentColorValue } from "./componentColors.js";
4
+ import { t as bem } from "./bem.js";
5
5
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
6
- import { t as useControllableValue } from "./useControllableValue.js";
6
+ import { r as getComponentColorValue } from "./componentColors.js";
7
7
  import { r as useCheckedFormControl } from "./useFormControl.js";
8
8
  import { t as useControlState } from "./useControlState.js";
9
9
  import { child, computed, createIf, createSlot, defineVaporComponent, next, nextTick, ref, renderEffect, setDynamicProps, setInsertionState, setStaticTemplateRef, template, unref } from "vue";
@@ -44,8 +44,8 @@ function useSwitch(props, emitUpdate, getValue = () => props.modelValue ?? false
44
44
  }
45
45
  //#endregion
46
46
  //#region src/components/switch/switch.vue?vue&type=script&setup=true&vapor=true&lang.ts
47
- var t0 = template("<span data-v-81b33803>");
48
- var t1 = template("<label data-v-81b33803><input data-v-81b33803><span data-v-81b33803><span data-v-81b33803></span></span>", 1);
47
+ var t0 = template("<span data-v-524fc431>");
48
+ var t1 = template("<label data-v-524fc431><input data-v-524fc431><span data-v-524fc431><span data-v-524fc431></span></span>", 1);
49
49
  //#endregion
50
50
  //#region src/components/switch/switch.vue
51
51
  var switch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -171,7 +171,7 @@ var switch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
171
171
  });
172
172
  return n7;
173
173
  }
174
- }), [["__scopeId", "data-v-81b33803"]]);
174
+ }), [["__scopeId", "data-v-524fc431"]]);
175
175
  //#endregion
176
176
  //#region src/components/switch/types.ts
177
177
  var switchParts = [
package/dist/tabs.css CHANGED
@@ -17,7 +17,7 @@
17
17
  gap: var(--rp-spacing-5);
18
18
  }
19
19
  }@layer ropav.components {
20
- .rp-tabs-content[data-v-7206185c] {
20
+ .rp-tabs-content[data-v-741d0283] {
21
21
  box-sizing: border-box;
22
22
  min-width: 0;
23
23
  color: var(--rp-color-text);
@@ -25,12 +25,12 @@
25
25
  font-size: var(--rp-font-size-md);
26
26
  line-height: var(--rp-line-height-md);
27
27
  }
28
- .rp-tabs-content[data-v-7206185c]:focus-visible {
28
+ .rp-tabs-content[data-v-741d0283]:focus-visible {
29
29
  outline: none;
30
30
  border-color: var(--rp-color-control-border-focus);
31
31
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
32
32
  }
33
- .rp-tabs-content--vertical[data-v-7206185c] {
33
+ .rp-tabs-content--vertical[data-v-741d0283] {
34
34
  flex: 1 1 0;
35
35
  }
36
36
  }@layer ropav.components {
package/dist/tabs.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import './tabs.css';
2
- import { t as bem } from "./bem.js";
2
+ import { t as useControllableValue } from "./useControllableValue.js";
3
3
  import { n as useStylesApi, t as presence } from "./styles-api.js";
4
- import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
4
  import { t as useRequiredInject } from "./useRequiredInject.js";
5
+ import { t as bem } from "./bem.js";
6
+ import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
6
7
  import { t as scroll_area_default } from "./scroll-area.js";
7
8
  import { computed, createComponent, createIf, createSlot, defineVaporComponent, extend, mergeProps, onBeforeUnmount, onMounted, provide, ref, renderEffect, setDynamicProps, setInsertionState, shallowRef, template, unref, useId, watch } from "vue";
8
9
  //#region src/components/tabs/useTabs.ts
@@ -116,7 +117,7 @@ function getNextTrigger(list, currentTrigger, key, orientation) {
116
117
  if (key === "End") return triggers[triggers.length - 1];
117
118
  const direction = ORIENTATION_NAVIGATION_KEYS[orientation][key];
118
119
  if (!direction) return void 0;
119
- return triggers[(currentIndex + direction + triggers.length) % triggers.length];
120
+ return triggers[(currentIndex + (orientation === "horizontal" && list.ownerDocument.defaultView?.getComputedStyle(list).direction === "rtl" ? -direction : direction) + triggers.length) % triggers.length];
120
121
  }
121
122
  function useTabsItem(componentName, props, suffix) {
122
123
  const group = useRequiredInject(tabsKey, componentName);
@@ -133,10 +134,15 @@ function useTabsItem(componentName, props, suffix) {
133
134
  function useTabs(props, emitUpdate) {
134
135
  const triggerRegistry = useTabsRegistry();
135
136
  const contentRegistry = useTabsRegistry();
136
- const { items: triggers, unregister: unregisterTrigger } = triggerRegistry;
137
+ const { items: triggers } = triggerRegistry;
137
138
  const { items: contents, register: registerContent, unregister: unregisterContent } = contentRegistry;
138
- const isControlled = computed(() => props.modelValue !== void 0);
139
- const uncontrolledValue = ref(props.defaultValue ?? null);
139
+ const controllable = useControllableValue({
140
+ modelValue: () => props.modelValue,
141
+ defaultValue: () => props.defaultValue ?? null,
142
+ onChange: (value) => {
143
+ if (value !== null) emitUpdate(value);
144
+ }
145
+ });
140
146
  const isDisabled = computed(() => Boolean(props.disabled));
141
147
  const size = computed(() => props.size ?? DEFAULT_SIZE);
142
148
  const variant = computed(() => props.variant ?? DEFAULT_VARIANT);
@@ -144,7 +150,7 @@ function useTabs(props, emitUpdate) {
144
150
  const placement = computed(() => props.placement ?? DEFAULT_PLACEMENT);
145
151
  const align = computed(() => props.align);
146
152
  const activationMode = computed(() => props.activationMode ?? DEFAULT_ACTIVATION_MODE);
147
- const selectedValue = computed(() => isControlled.value ? props.modelValue ?? null : uncontrolledValue.value);
153
+ const selectedValue = controllable.value;
148
154
  const firstEnabledTrigger = computed(() => triggers.value.find((trigger) => !trigger.disabled));
149
155
  const selectedEnabledTrigger = computed(() => {
150
156
  const trigger = findRegistration(triggers.value, selectedValue.value);
@@ -171,16 +177,15 @@ function useTabs(props, emitUpdate) {
171
177
  align: align.value ?? getDefaultAlign(orientation.value),
172
178
  select: selectValue
173
179
  }));
174
- function syncUncontrolledValue() {
175
- if (isControlled.value || isDisabled.value) return;
180
+ function syncUncontrolledValue(reconcileMissing = false) {
181
+ if (controllable.isControlled.value || isDisabled.value) return;
176
182
  const selectedTrigger = findRegistration(triggers.value, selectedValue.value);
177
- if (selectedValue.value != null && !selectedTrigger?.disabled) return;
178
- uncontrolledValue.value = firstEnabledTrigger.value?.value ?? null;
183
+ if (selectedValue.value != null && (selectedTrigger ? !selectedTrigger.disabled : !reconcileMissing)) return;
184
+ controllable.resetValue(firstEnabledTrigger.value?.value ?? null);
179
185
  }
180
186
  function setValue(value) {
181
187
  if (isDisabled.value || value === selectedValue.value) return;
182
- if (!isControlled.value) uncontrolledValue.value = value;
183
- emitUpdate(value);
188
+ controllable.setValue(value);
184
189
  }
185
190
  function selectValue(value) {
186
191
  const trigger = findRegistration(triggers.value, value);
@@ -195,6 +200,11 @@ function useTabs(props, emitUpdate) {
195
200
  triggerRegistry.register(registration);
196
201
  syncUncontrolledValue();
197
202
  }
203
+ function unregisterTrigger(id) {
204
+ const trigger = triggers.value.find((registration) => registration.id === id);
205
+ triggerRegistry.unregister(id);
206
+ syncUncontrolledValue(trigger?.value === selectedValue.value);
207
+ }
198
208
  function onListKeydown(event) {
199
209
  const list = event.currentTarget;
200
210
  if (!list || isDisabled.value) return;
@@ -442,7 +452,7 @@ var tabs_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
442
452
  }), [["__scopeId", "data-v-163486d1"]]);
443
453
  //#endregion
444
454
  //#region src/components/tabs/tabs-content.vue?vue&type=script&setup=true&vapor=true&lang.ts
445
- var t0$1 = template("<section data-v-7206185c>", 1);
455
+ var t0$1 = template("<div data-v-741d0283>", 1);
446
456
  //#endregion
447
457
  //#region src/components/tabs/tabs-content.vue
448
458
  var tabs_content_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -475,7 +485,7 @@ var tabs_content_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
475
485
  return n3;
476
486
  });
477
487
  }
478
- }), [["__scopeId", "data-v-7206185c"]]);
488
+ }), [["__scopeId", "data-v-741d0283"]]);
479
489
  //#endregion
480
490
  //#region src/components/tabs/tabs-list.vue
481
491
  var tabs_list_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
package/dist/textarea.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-textarea[data-v-f2ee1457] {
2
+ .rp-textarea[data-v-b604b69c] {
3
3
  --_rp-textarea-padding-y: 7px;
4
4
  --_rp-textarea-padding-x: calc(var(--rp-size-control-md) / 3);
5
5
  --_rp-textarea-font-size: var(--rp-font-size-md);
@@ -17,58 +17,58 @@
17
17
  cursor: text;
18
18
  transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
19
19
  }
20
- .rp-textarea[data-v-f2ee1457]:hover:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
20
+ .rp-textarea[data-v-b604b69c]:hover:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
21
21
  border-color: var(--rp-color-control-border-hover);
22
22
  }
23
- .rp-textarea[data-v-f2ee1457]:focus-within:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
23
+ .rp-textarea[data-v-b604b69c]:focus-within:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
24
24
  border-color: var(--rp-color-control-border-focus);
25
25
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
26
26
  }
27
- .rp-textarea[data-v-f2ee1457] {
27
+ .rp-textarea[data-v-b604b69c] {
28
28
  font-size: var(--_rp-textarea-font-size);
29
29
  border-radius: var(--_rp-textarea-radius);
30
30
  }
31
- .rp-textarea--size-xs[data-v-f2ee1457] {
31
+ .rp-textarea--size-xs[data-v-b604b69c] {
32
32
  --_rp-textarea-padding-y: 4.5px;
33
33
  --_rp-textarea-padding-x: calc(var(--rp-size-control-xs) / 3);
34
34
  --_rp-textarea-font-size: var(--rp-font-size-xs);
35
35
  }
36
- .rp-textarea--size-sm[data-v-f2ee1457] {
36
+ .rp-textarea--size-sm[data-v-b604b69c] {
37
37
  --_rp-textarea-padding-y: 5.5px;
38
38
  --_rp-textarea-padding-x: calc(var(--rp-size-control-sm) / 3);
39
39
  --_rp-textarea-font-size: var(--rp-font-size-sm);
40
40
  }
41
- .rp-textarea--size-md[data-v-f2ee1457] {
41
+ .rp-textarea--size-md[data-v-b604b69c] {
42
42
  --_rp-textarea-padding-y: 7px;
43
43
  --_rp-textarea-padding-x: calc(var(--rp-size-control-md) / 3);
44
44
  --_rp-textarea-font-size: var(--rp-font-size-md);
45
45
  }
46
- .rp-textarea--size-lg[data-v-f2ee1457] {
46
+ .rp-textarea--size-lg[data-v-b604b69c] {
47
47
  --_rp-textarea-padding-y: 9.5px;
48
48
  --_rp-textarea-padding-x: calc(var(--rp-size-control-lg) / 3);
49
49
  --_rp-textarea-font-size: var(--rp-font-size-lg);
50
50
  }
51
- .rp-textarea--size-xl[data-v-f2ee1457] {
51
+ .rp-textarea--size-xl[data-v-b604b69c] {
52
52
  --_rp-textarea-padding-y: 13px;
53
53
  --_rp-textarea-padding-x: calc(var(--rp-size-control-xl) / 3);
54
54
  --_rp-textarea-font-size: var(--rp-font-size-xl);
55
55
  }
56
- .rp-textarea--radius-xs[data-v-f2ee1457] {
56
+ .rp-textarea--radius-xs[data-v-b604b69c] {
57
57
  --_rp-textarea-radius: var(--rp-radius-xs);
58
58
  }
59
- .rp-textarea--radius-sm[data-v-f2ee1457] {
59
+ .rp-textarea--radius-sm[data-v-b604b69c] {
60
60
  --_rp-textarea-radius: var(--rp-radius-sm);
61
61
  }
62
- .rp-textarea--radius-md[data-v-f2ee1457] {
62
+ .rp-textarea--radius-md[data-v-b604b69c] {
63
63
  --_rp-textarea-radius: var(--rp-radius-md);
64
64
  }
65
- .rp-textarea--radius-lg[data-v-f2ee1457] {
65
+ .rp-textarea--radius-lg[data-v-b604b69c] {
66
66
  --_rp-textarea-radius: var(--rp-radius-lg);
67
67
  }
68
- .rp-textarea--radius-xl[data-v-f2ee1457] {
68
+ .rp-textarea--radius-xl[data-v-b604b69c] {
69
69
  --_rp-textarea-radius: var(--rp-radius-xl);
70
70
  }
71
- html.dark .rp-textarea[data-v-f2ee1457], [data-rp-color-scheme=dark] .rp-textarea[data-v-f2ee1457] {
71
+ html.dark .rp-textarea[data-v-b604b69c], [data-rp-color-scheme=dark] .rp-textarea[data-v-b604b69c] {
72
72
  --_rp-textarea-valid-border: var(--rp-color-green-light-color);
73
73
  --_rp-textarea-valid-ring: color-mix(
74
74
  in srgb,
@@ -82,34 +82,34 @@ html.dark .rp-textarea[data-v-f2ee1457], [data-rp-color-scheme=dark] .rp-textare
82
82
  transparent
83
83
  );
84
84
  }
85
- .rp-textarea--disabled[data-v-f2ee1457] {
85
+ .rp-textarea--disabled[data-v-b604b69c] {
86
86
  opacity: var(--rp-opacity-disabled);
87
87
  cursor: not-allowed;
88
88
  }
89
- .rp-textarea--valid[data-v-f2ee1457] {
89
+ .rp-textarea--valid[data-v-b604b69c] {
90
90
  border-color: var(--_rp-textarea-valid-border);
91
91
  }
92
- .rp-textarea--valid[data-v-f2ee1457]:focus-within:not(.rp-textarea--disabled) {
92
+ .rp-textarea--valid[data-v-b604b69c]:focus-within:not(.rp-textarea--disabled) {
93
93
  border-color: var(--_rp-textarea-valid-border);
94
94
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-textarea-valid-ring);
95
95
  }
96
- .rp-textarea--invalid[data-v-f2ee1457] {
96
+ .rp-textarea--invalid[data-v-b604b69c] {
97
97
  border-color: var(--_rp-textarea-invalid-border);
98
98
  }
99
- .rp-textarea--invalid[data-v-f2ee1457]:focus-within:not(.rp-textarea--disabled) {
99
+ .rp-textarea--invalid[data-v-b604b69c]:focus-within:not(.rp-textarea--disabled) {
100
100
  border-color: var(--_rp-textarea-invalid-border);
101
101
  box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-textarea-invalid-ring);
102
102
  }
103
- .rp-textarea--readonly[data-v-f2ee1457] {
103
+ .rp-textarea--readonly[data-v-b604b69c] {
104
104
  background-color: var(--rp-color-control-readonly-bg);
105
105
  }
106
- .rp-textarea--resize-vertical .rp-textarea__native[data-v-f2ee1457] {
106
+ .rp-textarea--resize-vertical .rp-textarea__native[data-v-b604b69c] {
107
107
  resize: vertical;
108
108
  }
109
- .rp-textarea--resize-both .rp-textarea__native[data-v-f2ee1457] {
109
+ .rp-textarea--resize-both .rp-textarea__native[data-v-b604b69c] {
110
110
  resize: both;
111
111
  }
112
- .rp-textarea__native[data-v-f2ee1457] {
112
+ .rp-textarea__native[data-v-b604b69c] {
113
113
  box-sizing: border-box;
114
114
  flex: 1;
115
115
  width: 100%;
@@ -124,10 +124,10 @@ html.dark .rp-textarea[data-v-f2ee1457], [data-rp-color-scheme=dark] .rp-textare
124
124
  color: var(--rp-color-control-fg);
125
125
  line-height: var(--rp-line-height-md);
126
126
  }
127
- .rp-textarea__native[data-v-f2ee1457]::placeholder {
127
+ .rp-textarea__native[data-v-b604b69c]::placeholder {
128
128
  color: var(--rp-color-control-placeholder);
129
129
  }
130
- .rp-textarea__native[data-v-f2ee1457]:disabled {
130
+ .rp-textarea__native[data-v-b604b69c]:disabled {
131
131
  cursor: not-allowed;
132
132
  }
133
133
  }
package/dist/textarea.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import './textarea.css';
2
- import { t as bem } from "./bem.js";
2
+ import { t as useControllableValue } from "./useControllableValue.js";
3
3
  import { n as useStylesApi, t as presence } from "./styles-api.js";
4
+ import { t as bem } from "./bem.js";
4
5
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
- import { t as useControllableValue } from "./useControllableValue.js";
6
6
  import { a as useTextFormControl } from "./useFormControl.js";
7
7
  import { t as useControlState } from "./useControlState.js";
8
8
  import { child, computed, defineVaporComponent, nextTick, onMounted, ref, renderEffect, setDynamicProps, setStaticTemplateRef, template, unref, watch } from "vue";
@@ -138,7 +138,7 @@ function useTextarea(props, emitUpdate, getValue = () => props.modelValue ?? "")
138
138
  }
139
139
  //#endregion
140
140
  //#region src/components/textarea/textarea.vue?vue&type=script&setup=true&vapor=true&lang.ts
141
- var t0 = template("<div data-v-f2ee1457><textarea data-v-f2ee1457>", 1);
141
+ var t0 = template("<div data-v-b604b69c><textarea data-v-b604b69c>", 1);
142
142
  //#endregion
143
143
  //#region src/components/textarea/textarea.vue
144
144
  var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -260,7 +260,7 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
260
260
  });
261
261
  return n1;
262
262
  }
263
- }), [["__scopeId", "data-v-f2ee1457"]]);
263
+ }), [["__scopeId", "data-v-b604b69c"]]);
264
264
  //#endregion
265
265
  //#region src/components/textarea/types.ts
266
266
  var textareaParts = ["root", "input"];