ropav 0.1.4 → 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 (138) hide show
  1. package/README.md +20 -0
  2. package/dist/accordion.js +11 -8
  3. package/dist/alert.css +18 -18
  4. package/dist/alert.js +27 -21
  5. package/dist/avatar.css +19 -19
  6. package/dist/avatar.js +16 -11
  7. package/dist/badge.css +16 -16
  8. package/dist/badge.js +14 -9
  9. package/dist/base.css +214 -69
  10. package/dist/button-group.js +1 -1
  11. package/dist/button-link.js +16 -14
  12. package/dist/button.css +37 -28
  13. package/dist/button.js +16 -14
  14. package/dist/{useButtonColor.js → button.scss_vue_type_style_index_0_src_true_lang.js} +8 -4
  15. package/dist/card.js +1 -1
  16. package/dist/checkbox.css +32 -32
  17. package/dist/checkbox.js +19 -11
  18. package/dist/chevron-right.js +12 -0
  19. package/dist/collapse.css +6 -6
  20. package/dist/collapse.js +4 -4
  21. package/dist/collectionNavigation.js +120 -0
  22. package/dist/color-input.css +19 -19
  23. package/dist/color-input.js +6 -5
  24. package/dist/color-picker.css +7 -7
  25. package/dist/color-picker.js +4 -5
  26. package/dist/color-swatch.js +1 -1
  27. package/dist/componentColors.js +135 -23
  28. package/dist/components/alert/types.d.ts +1 -0
  29. package/dist/components/alert/useAlertColor.d.ts +1 -1
  30. package/dist/components/avatar/types.d.ts +1 -0
  31. package/dist/components/avatar/useAvatarColor.d.ts +1 -1
  32. package/dist/components/badge/types.d.ts +1 -0
  33. package/dist/components/badge/useBadgeColor.d.ts +1 -1
  34. package/dist/components/button/types.d.ts +1 -0
  35. package/dist/components/button/useButtonColor.d.ts +1 -1
  36. package/dist/components/button-link/types.d.ts +1 -0
  37. package/dist/components/checkbox/types.d.ts +1 -0
  38. package/dist/components/checkbox/useCheckbox.d.ts +1 -1
  39. package/dist/components/color-input/color-input.d.ts +2 -2
  40. package/dist/components/color-input/useColorInput.d.ts +1 -1
  41. package/dist/components/dialog/dialog-core.d.ts +1 -1
  42. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +2 -2
  43. package/dist/components/dropdown-menu/dropdown-menu-primitive-core.d.ts +2 -1
  44. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +2 -2
  45. package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +0 -2
  46. package/dist/components/dropdown-menu/dropdown-menu.d.ts +3 -3
  47. package/dist/components/dropdown-menu/index.d.ts +1 -0
  48. package/dist/components/dropdown-menu/types.d.ts +4 -0
  49. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +3 -4
  50. package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +2 -1
  51. package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +1 -0
  52. package/dist/components/icon-button/types.d.ts +1 -0
  53. package/dist/components/input/useInput.d.ts +1 -1
  54. package/dist/components/number-input/useNumberInput.d.ts +1 -1
  55. package/dist/components/pagination/index.d.ts +4 -0
  56. package/dist/components/pagination/index.js +2 -0
  57. package/dist/components/pagination/pagination.d.ts +49 -0
  58. package/dist/components/pagination/types.d.ts +54 -0
  59. package/dist/components/pagination/usePagination.d.ts +19 -0
  60. package/dist/components/progress/useProgress.d.ts +1 -1
  61. package/dist/components/radio/types.d.ts +3 -0
  62. package/dist/components/radio/useRadio.d.ts +2 -2
  63. package/dist/components/scroll-area/scrollAreaCore.d.ts +5 -0
  64. package/dist/components/scroll-area/types.d.ts +4 -0
  65. package/dist/components/scroll-area/useScrollArea.d.ts +1 -0
  66. package/dist/components/scroll-area/useScrollAreaMetrics.d.ts +3 -0
  67. package/dist/components/scroll-area/useScrollAreaPresentation.d.ts +3 -0
  68. package/dist/components/select/useSelect.d.ts +3 -2
  69. package/dist/components/select/useSelectNativeValue.d.ts +1 -7
  70. package/dist/components/slider/range-slider-tooltip.d.ts +2 -0
  71. package/dist/components/slider/sliderCore.d.ts +2 -1
  72. package/dist/components/slider/types.d.ts +1 -1
  73. package/dist/components/slider/useRangeSlider.d.ts +3 -1
  74. package/dist/components/slider/useSlider.d.ts +3 -1
  75. package/dist/components/switch/useSwitch.d.ts +1 -1
  76. package/dist/components/textarea/useTextarea.d.ts +1 -1
  77. package/dist/components/toast/types.d.ts +2 -0
  78. package/dist/components/toast/useToastColor.d.ts +1 -1
  79. package/dist/components/tooltip/types.d.ts +1 -0
  80. package/dist/components/tooltip/useTooltip.d.ts +1 -1
  81. package/dist/composables/index.d.ts +2 -0
  82. package/dist/composables/index.js +2 -0
  83. package/dist/composables/useControllableValue.d.ts +14 -0
  84. package/dist/dialog.js +8 -5
  85. package/dist/dropdown-menu.js +98 -59
  86. package/dist/field.js +1 -1
  87. package/dist/floating.js +19 -7
  88. package/dist/icon-button.css +12 -169
  89. package/dist/icon-button.js +11 -7
  90. package/dist/index.d.ts +6 -4
  91. package/dist/index.js +8 -5
  92. package/dist/input.css +24 -24
  93. package/dist/input.js +6 -5
  94. package/dist/modal.js +11 -7
  95. package/dist/number-input.css +18 -18
  96. package/dist/number-input.js +8 -7
  97. package/dist/overlay.js +1 -1
  98. package/dist/pagination.css +140 -0
  99. package/dist/pagination.js +442 -0
  100. package/dist/popover.js +9 -6
  101. package/dist/progress.css +29 -21
  102. package/dist/progress.js +17 -10
  103. package/dist/radio.js +17 -7
  104. package/dist/scroll-area.css +10 -1
  105. package/dist/scroll-area.js +82 -25
  106. package/dist/select.css +45 -45
  107. package/dist/select.js +111 -70
  108. package/dist/slider.css +191 -191
  109. package/dist/slider.js +58 -46
  110. package/dist/switch.css +17 -17
  111. package/dist/switch.js +7 -6
  112. package/dist/tabs.css +3 -3
  113. package/dist/tabs.js +25 -15
  114. package/dist/textarea.css +26 -26
  115. package/dist/textarea.js +5 -4
  116. package/dist/toast.css +26 -26
  117. package/dist/toast.js +35 -23
  118. package/dist/tooltip.css +12 -12
  119. package/dist/tooltip.js +24 -16
  120. package/dist/unplugin-icons.js +38 -25
  121. package/dist/useCollapse.js +12 -7
  122. package/dist/useControlState.js +1 -1
  123. package/dist/useControllableValue.js +33 -0
  124. package/dist/useFloatingPosition.js +4 -1140
  125. package/dist/useFormControl.js +5 -29
  126. package/dist/useOverlayZIndex.js +1 -1
  127. package/dist/useRequiredInject.js +1 -1
  128. package/dist/utils/componentColors.d.ts +14 -1
  129. package/docs/public-composables-api.md +52 -0
  130. package/docs/public-styles-api.md +1 -1
  131. package/docs/public-tokens.md +648 -508
  132. package/package.json +49 -36
  133. package/src/styles/_mixins.scss +4 -0
  134. package/src/styles/_tokens.scss +460 -320
  135. package/src/styles/_variables.scss +1 -1
  136. package/src/styles/styles-manifest.json +1122 -2
  137. package/dist/button-link.css +0 -163
  138. /package/dist/{composables → internal/composables}/useOverlayLayer.d.ts +0 -0
package/dist/slider.js CHANGED
@@ -1,9 +1,10 @@
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 { i as useFormControl, o as useControllableValue } from "./useFormControl.js";
6
+ import { n as getComponentColorRoles, r as getComponentColorValue, t as componentColors } from "./componentColors.js";
7
+ import { i as useFormControl } from "./useFormControl.js";
7
8
  import { t as useControlState } from "./useControlState.js";
8
9
  import { i as useDelayedOpen, n as resolveTooltipColorStyleWithContrast, r as resolveTooltipOffsetStyle, t as tooltip_default } from "./tooltip.js";
9
10
  import { applyVShow, child, computed, createComponent, createFor, createIf, createInvoker, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, extend, next, nextTick, on, onBeforeUnmount, onMounted, ref, renderEffect, setClass, setDynamicProps, setInsertionState, setProp, setStyle, setText, template, toDisplayString, toRef, txt, unref, useId, useSlots, watch } from "vue";
@@ -66,7 +67,9 @@ function getSliderThumbMode(thumb) {
66
67
  function getSliderMarkStyle(percent, color, properties) {
67
68
  const style = { [properties.position]: `${percent}%` };
68
69
  const colorValue = getComponentColorValue(color);
69
- 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);
70
73
  return style;
71
74
  }
72
75
  function createSliderMarkItems(marks, min, max, isFilled, properties) {
@@ -139,12 +142,8 @@ function useSlider(props, emitUpdate, getValue = () => props.modelValue ?? props
139
142
  const ariaValueText = computed(() => getSliderAriaValueText(normalizedValue.value, props.ariaValueText, props.formatValue));
140
143
  const markItems = computed(() => createSliderMarkItems(props.marks, bounds.value.min, bounds.value.max, (_value, percent) => percent <= valuePercent.value, {
141
144
  position: "--_rp-slider-mark-position",
142
- colors: [
143
- "--_rp-slider-mark-color",
144
- "--_rp-slider-mark-label-color",
145
- "--_rp-slider-mark-filled-label-color",
146
- "--_rp-slider-mark-ring-color"
147
- ]
145
+ decorativeColors: ["--_rp-slider-mark-color", "--_rp-slider-mark-ring-color"],
146
+ foregroundColors: ["--_rp-slider-mark-label-color", "--_rp-slider-mark-filled-label-color"]
148
147
  }));
149
148
  const tooltipOptions = computed(() => getSliderTooltipOptions(props.tooltip));
150
149
  const tooltipAnchor = computed(() => getSliderTooltipAnchor(props.tooltip));
@@ -185,6 +184,8 @@ function useSlider(props, emitUpdate, getValue = () => props.modelValue ?? props
185
184
  const tooltipPlacement = computed(() => tooltipOptions.value.placement ?? (props.orientation === "vertical" ? "left" : "top"));
186
185
  const tooltipId = computed(() => tooltipOptions.value.id);
187
186
  const tooltipColor = computed(() => tooltipOptions.value.color);
187
+ const tooltipAutoContrast = computed(() => tooltipOptions.value.autoContrast);
188
+ const tooltipContrastColor = computed(() => tooltipOptions.value.contrastColor);
188
189
  const tooltipOffset = computed(() => tooltipOptions.value.offset);
189
190
  const tooltipArrow = computed(() => tooltipOptions.value.arrow ?? false);
190
191
  const tooltipValue = computed(() => tooltipAnchor.value === "pointer" && previewAvailable.value ? previewValue.value : normalizedValue.value);
@@ -363,6 +364,8 @@ function useSlider(props, emitUpdate, getValue = () => props.modelValue ?? props
363
364
  tooltipPlacement,
364
365
  tooltipId,
365
366
  tooltipColor,
367
+ tooltipAutoContrast,
368
+ tooltipContrastColor,
366
369
  tooltipOffset,
367
370
  tooltipOpenDelay,
368
371
  tooltipArrow,
@@ -382,17 +385,17 @@ function useSlider(props, emitUpdate, getValue = () => props.modelValue ?? props
382
385
  }
383
386
  //#endregion
384
387
  //#region src/components/slider/slider.vue?vue&type=script&setup=true&vapor=true&lang.ts
385
- var t0$2 = template("<span data-v-3864baf4>");
386
- var t1$2 = template("<span data-v-3864baf4 class=rp-slider__header>");
387
- var t2$2 = template("<span data-v-3864baf4 class=\"rp-slider__track-layer rp-slider__track-underlay\"aria-hidden=true>");
388
- var t3$2 = template("<span data-v-3864baf4 class=\"rp-slider__track-layer rp-slider__track-overlay\"aria-hidden=true>");
389
- var t4$2 = template("<span data-v-3864baf4 class=rp-slider__travel aria-hidden=true>", 2);
390
- var t5$1 = template("<span data-v-3864baf4> ");
391
- var t6$1 = template("<span data-v-3864baf4><span data-v-3864baf4 class=rp-slider__mark-dot></span>");
392
- var t7$1 = template("<span data-v-3864baf4 class=rp-slider__marks aria-hidden=true>");
393
- var t8$1 = template("<span data-v-3864baf4 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);
394
397
  var t9$1 = template(" ");
395
- var t10 = template("<label data-v-3864baf4><span data-v-3864baf4><span data-v-3864baf4 class=rp-slider__rail aria-hidden=true></span><!><span data-v-3864baf4></span><!><input data-v-3864baf4><!><span data-v-3864baf4><span data-v-3864baf4 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);
396
399
  delegateEvents("pointerdown", "pointermove", "focusin", "focusout", "keydown");
397
400
  //#endregion
398
401
  //#region src/components/slider/slider.vue
@@ -462,7 +465,7 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
462
465
  defaultValue: () => props.defaultValue ?? props.min,
463
466
  onChange: (value) => emit("update:modelValue", value)
464
467
  });
465
- const { control, nativeMin, nativeMax, nativeStep, rootClass, normalizedValue, valuePercent, formattedValue, ariaValueText, markItems, thumbMode, trackSlotProps, trackStyle, trackHovered, dragging, tooltipVisible, tooltipOpen, tooltipAnchor, tooltipPlacement, tooltipId, tooltipColor, tooltipOffset, tooltipOpenDelay, tooltipArrow, tooltipValue, tooltipPercent, tooltipFormattedValue, tooltipContent, onInput, onTooltipPointerDown, onTooltipPointerMove, onTooltipTrackEnter, onTooltipTrackLeave, onTooltipFocusIn, onTooltipFocusOut, onTooltipKeydown } = useSlider(props, (value) => controllable.setValue(value), () => controllable.value.value);
468
+ const { control, nativeMin, nativeMax, nativeStep, rootClass, normalizedValue, valuePercent, formattedValue, ariaValueText, markItems, thumbMode, trackSlotProps, trackStyle, trackHovered, dragging, tooltipVisible, tooltipOpen, tooltipAnchor, tooltipPlacement, tooltipId, tooltipColor, tooltipAutoContrast, tooltipContrastColor, tooltipOffset, tooltipOpenDelay, tooltipArrow, tooltipValue, tooltipPercent, tooltipFormattedValue, tooltipContent, onInput, onTooltipPointerDown, onTooltipPointerMove, onTooltipTrackEnter, onTooltipTrackLeave, onTooltipFocusIn, onTooltipFocusOut, onTooltipKeydown } = useSlider(props, (value) => controllable.setValue(value), () => controllable.value.value);
466
469
  useFormControl({
467
470
  elements: () => [inputRef.value],
468
471
  isControlled: () => controllable.isControlled.value,
@@ -643,6 +646,8 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
643
646
  content: () => unref(tooltipContent),
644
647
  placement: () => unref(tooltipPlacement),
645
648
  color: () => unref(tooltipColor),
649
+ "auto-contrast": () => unref(tooltipAutoContrast),
650
+ "contrast-color": () => unref(tooltipContrastColor),
646
651
  offset: () => unref(tooltipOffset),
647
652
  open: () => unref(tooltipOpen),
648
653
  "open-delay": () => unref(tooltipOpenDelay),
@@ -675,7 +680,7 @@ var slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
675
680
  n45.$evtkeydown = createInvoker((e) => unref(onTooltipKeydown)(e));
676
681
  return n48;
677
682
  }
678
- }), [["__scopeId", "data-v-3864baf4"]]);
683
+ }), [["__scopeId", "data-v-c850c027"]]);
679
684
  //#endregion
680
685
  //#region src/components/slider/useRangeSliderTooltipCollision.ts
681
686
  var TOOLTIP_COLLISION_GAP = 4;
@@ -867,11 +872,11 @@ function useRangeSliderTooltipCollision({ enabled, lower, orientation, placement
867
872
  }
868
873
  //#endregion
869
874
  //#region src/components/slider/range-slider-tooltip.vue?vue&type=script&setup=true&vapor=true&lang.ts
870
- var t0$1 = template("<span data-v-ce70c540 class=rp-range-slider__tooltip-merged-value> </span>");
871
- var t1$1 = template("<span data-v-ce70c540 class=rp-range-slider__tooltip-merged-value> ");
872
- var t2$1 = template("<span data-v-ce70c540 class=rp-range-slider__tooltip-merged-separator>–</span>", 2);
875
+ var t0$1 = template("<span data-v-031ced3e class=rp-range-slider__tooltip-merged-value> </span>");
876
+ var t1$1 = template("<span data-v-031ced3e class=rp-range-slider__tooltip-merged-value> ");
877
+ var t2$1 = template("<span data-v-031ced3e class=rp-range-slider__tooltip-merged-separator>–</span>", 2);
873
878
  var t3$1 = template(" ");
874
- var t4$1 = template("<span data-v-ce70c540 aria-hidden=true><span data-v-ce70c540 data-thumb=lower><span data-v-ce70c540 class=rp-range-slider__tooltip-anchor></span><span data-v-ce70c540 class=rp-tooltip__content aria-hidden=true> </span></span><span data-v-ce70c540 data-thumb=upper><span data-v-ce70c540 class=rp-range-slider__tooltip-anchor></span><span data-v-ce70c540 class=rp-tooltip__content aria-hidden=true> </span></span><span data-v-ce70c540 data-thumb=merged><span data-v-ce70c540 class=rp-range-slider__tooltip-anchor></span><span data-v-ce70c540 class=rp-tooltip__content aria-hidden=true>", 1);
879
+ var t4$1 = template("<span data-v-031ced3e aria-hidden=true><span data-v-031ced3e data-thumb=lower><span data-v-031ced3e class=rp-range-slider__tooltip-anchor></span><span data-v-031ced3e class=rp-tooltip__content aria-hidden=true> </span></span><span data-v-031ced3e data-thumb=upper><span data-v-031ced3e class=rp-range-slider__tooltip-anchor></span><span data-v-031ced3e class=rp-tooltip__content aria-hidden=true> </span></span><span data-v-031ced3e data-thumb=merged><span data-v-031ced3e class=rp-range-slider__tooltip-anchor></span><span data-v-031ced3e class=rp-tooltip__content aria-hidden=true>", 1);
875
880
  //#endregion
876
881
  //#region src/components/slider/range-slider-tooltip.vue
877
882
  var range_slider_tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -883,6 +888,11 @@ var range_slider_tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
883
888
  default: false
884
889
  },
885
890
  color: { default: void 0 },
891
+ autoContrast: {
892
+ type: Boolean,
893
+ default: true
894
+ },
895
+ contrastColor: { default: void 0 },
886
896
  content: {},
887
897
  ids: {},
888
898
  mergedContent: {},
@@ -924,7 +934,7 @@ var range_slider_tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
924
934
  }));
925
935
  const contentStyle = computed(() => ({
926
936
  ...resolveTooltipOffsetStyle(props.offset),
927
- ...resolveTooltipColorStyleWithContrast(props.color, void 0)
937
+ ...resolveTooltipColorStyleWithContrast(props.color, props.autoContrast, props.contrastColor)
928
938
  }));
929
939
  const { tooltipsOverlapping, mergedArrowOffset, mergedMinSize } = useRangeSliderTooltipCollision({
930
940
  enabled: toRef(props, "open"),
@@ -1041,7 +1051,7 @@ var range_slider_tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
1041
1051
  _setTemplateRef(n16, tooltipLayerRef, null, "tooltipLayerRef");
1042
1052
  return n16;
1043
1053
  }
1044
- }), [["__scopeId", "data-v-ce70c540"]]);
1054
+ }), [["__scopeId", "data-v-031ced3e"]]);
1045
1055
  //#endregion
1046
1056
  //#region src/components/slider/useRangeSliderPointer.ts
1047
1057
  function useRangeSliderPointer(options) {
@@ -1390,12 +1400,8 @@ function useRangeSlider(props, emitUpdate, getValue = () => props.modelValue ??
1390
1400
  });
1391
1401
  const markItems = computed(() => createSliderMarkItems(props.marks, bounds.value.min, bounds.value.max, (value) => value >= normalizedValue.value[0] && value <= normalizedValue.value[1], {
1392
1402
  position: "--_rp-range-slider-mark-position",
1393
- colors: [
1394
- "--_rp-range-slider-mark-color",
1395
- "--_rp-range-slider-mark-label-color",
1396
- "--_rp-range-slider-mark-filled-label-color",
1397
- "--_rp-range-slider-mark-ring-color"
1398
- ]
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"]
1399
1405
  }));
1400
1406
  const hasMarkLabels = computed(() => markItems.value.some((mark) => mark.hasLabel));
1401
1407
  const trackSlotProps = computed(() => ({
@@ -1434,6 +1440,8 @@ function useRangeSlider(props, emitUpdate, getValue = () => props.modelValue ??
1434
1440
  return baseId ? `${baseId}-merged` : void 0;
1435
1441
  });
1436
1442
  const tooltipColor = computed(() => tooltipOptions.value.color);
1443
+ const tooltipAutoContrast = computed(() => tooltipOptions.value.autoContrast);
1444
+ const tooltipContrastColor = computed(() => tooltipOptions.value.contrastColor);
1437
1445
  const tooltipOffset = computed(() => tooltipOptions.value.offset);
1438
1446
  const tooltipArrow = computed(() => tooltipOptions.value.arrow ?? false);
1439
1447
  const tooltipContent = computed(() => [String(formattedValue.value[0]), String(formattedValue.value[1])]);
@@ -1586,6 +1594,8 @@ function useRangeSlider(props, emitUpdate, getValue = () => props.modelValue ??
1586
1594
  tooltipIds,
1587
1595
  mergedTooltipId,
1588
1596
  tooltipColor,
1597
+ tooltipAutoContrast,
1598
+ tooltipContrastColor,
1589
1599
  tooltipOffset,
1590
1600
  tooltipOpenDelay,
1591
1601
  tooltipArrow,
@@ -1602,16 +1612,16 @@ function useRangeSlider(props, emitUpdate, getValue = () => props.modelValue ??
1602
1612
  }
1603
1613
  //#endregion
1604
1614
  //#region src/components/slider/range-slider.vue?vue&type=script&setup=true&vapor=true&lang.ts
1605
- var t0 = template("<span data-v-6bfae0e8>");
1606
- var t1 = template("<span data-v-6bfae0e8 class=rp-range-slider__header>");
1607
- var t2 = template("<span data-v-6bfae0e8 class=\"rp-range-slider__track-layer rp-range-slider__track-underlay\"aria-hidden=true>");
1608
- var t3 = template("<span data-v-6bfae0e8 class=\"rp-range-slider__track-layer rp-range-slider__track-overlay\"aria-hidden=true>");
1609
- var t4 = template("<input data-v-6bfae0e8>");
1610
- var t5 = template("<span data-v-6bfae0e8> ");
1611
- var t6 = template("<span data-v-6bfae0e8><span data-v-6bfae0e8 class=rp-range-slider__mark-dot></span>");
1612
- var t7 = template("<span data-v-6bfae0e8 class=rp-range-slider__marks aria-hidden=true>");
1613
- var t8 = template("<span data-v-6bfae0e8><span data-v-6bfae0e8 class=rp-range-slider__thumb-content>");
1614
- var t9 = template("<div data-v-6bfae0e8><span data-v-6bfae0e8><span data-v-6bfae0e8 class=rp-range-slider__rail aria-hidden=true></span><!><span data-v-6bfae0e8></span><!><span data-v-6bfae0e8 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);
1615
1625
  delegateEvents("pointerdown");
1616
1626
  //#endregion
1617
1627
  //#region src/components/slider/range-slider.vue
@@ -1680,7 +1690,7 @@ var range_slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
1680
1690
  defaultValue: () => props.defaultValue ?? [props.min, props.max],
1681
1691
  onChange: (value) => emit("update:modelValue", value)
1682
1692
  });
1683
- const { control, nativeMin, nativeMax, nativeStep, nativeNames, nativeIds, rootClass, normalizedValue, valuePercent, formattedValue, ariaLabels, ariaValueText, markItems, trackSlotProps, trackStyle, activeThumb, tooltipVisible, tooltipOpen, tooltipPlacement, tooltipIds, mergedTooltipId, tooltipColor, tooltipOffset, tooltipArrow, tooltipContent, mergedTooltipContent, onInput, onTrackPointerDown, onTooltipFocus, onTooltipBlur, onTooltipTrackMouseEnter, onTooltipTrackMouseLeave, onTooltipKeydown } = useRangeSlider(props, (value) => controllable.setValue(value), () => controllable.value.value);
1693
+ const { control, nativeMin, nativeMax, nativeStep, nativeNames, nativeIds, rootClass, normalizedValue, valuePercent, formattedValue, ariaLabels, ariaValueText, markItems, trackSlotProps, trackStyle, activeThumb, tooltipVisible, tooltipOpen, tooltipPlacement, tooltipIds, mergedTooltipId, tooltipColor, tooltipAutoContrast, tooltipContrastColor, tooltipOffset, tooltipArrow, tooltipContent, mergedTooltipContent, onInput, onTrackPointerDown, onTooltipFocus, onTooltipBlur, onTooltipTrackMouseEnter, onTooltipTrackMouseLeave, onTooltipKeydown } = useRangeSlider(props, (value) => controllable.setValue(value), () => controllable.value.value);
1684
1694
  const validationMessages = computed(() => Array.isArray(props.validationMessage) ? props.validationMessage : [props.validationMessage, props.validationMessage]);
1685
1695
  function normalizeInitialValue(value = controllable.initialValue) {
1686
1696
  return normalizeRangeSliderValue(value, props.min, props.max, props.step, props.minRange);
@@ -1916,6 +1926,8 @@ var range_slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
1916
1926
  return createComponent(range_slider_tooltip_default, {
1917
1927
  arrow: () => unref(tooltipArrow),
1918
1928
  color: () => unref(tooltipColor),
1929
+ "auto-contrast": () => unref(tooltipAutoContrast),
1930
+ "contrast-color": () => unref(tooltipContrastColor),
1919
1931
  content: () => unref(tooltipContent),
1920
1932
  ids: () => unref(tooltipIds),
1921
1933
  "merged-content": () => unref(mergedTooltipContent),
@@ -1935,7 +1947,7 @@ var range_slider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
1935
1947
  on(n42, "mouseleave", (e) => unref(onTooltipTrackMouseLeave)(e));
1936
1948
  return n44;
1937
1949
  }
1938
- }), [["__scopeId", "data-v-6bfae0e8"]]);
1950
+ }), [["__scopeId", "data-v-ec20f482"]]);
1939
1951
  //#endregion
1940
1952
  //#region src/components/slider/types.ts
1941
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,10 @@
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 { o as useControllableValue, r as useCheckedFormControl } from "./useFormControl.js";
6
+ import { r as getComponentColorValue } from "./componentColors.js";
7
+ import { r as useCheckedFormControl } from "./useFormControl.js";
7
8
  import { t as useControlState } from "./useControlState.js";
8
9
  import { child, computed, createIf, createSlot, defineVaporComponent, next, nextTick, ref, renderEffect, setDynamicProps, setInsertionState, setStaticTemplateRef, template, unref } from "vue";
9
10
  //#region src/components/switch/useSwitch.ts
@@ -43,8 +44,8 @@ function useSwitch(props, emitUpdate, getValue = () => props.modelValue ?? false
43
44
  }
44
45
  //#endregion
45
46
  //#region src/components/switch/switch.vue?vue&type=script&setup=true&vapor=true&lang.ts
46
- var t0 = template("<span data-v-81b33803>");
47
- 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);
48
49
  //#endregion
49
50
  //#region src/components/switch/switch.vue
50
51
  var switch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -170,7 +171,7 @@ var switch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
170
171
  });
171
172
  return n7;
172
173
  }
173
- }), [["__scopeId", "data-v-81b33803"]]);
174
+ }), [["__scopeId", "data-v-524fc431"]]);
174
175
  //#endregion
175
176
  //#region src/components/switch/types.ts
176
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({