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/README.md CHANGED
@@ -37,6 +37,26 @@ Import the components you need:
37
37
  import { Button } from 'ropav';
38
38
  ```
39
39
 
40
+ Headless state utilities are available from `ropav/composables`. See the
41
+ [public composables API](./docs/public-composables-api.md) for their controlled and uncontrolled
42
+ state contracts.
43
+
44
+ ## Custom color contrast
45
+
46
+ `autoContrast` selects foreground colors for preset colors and opaque custom color literals. A
47
+ translucent custom color depends on the surface behind the component, so its contrast cannot be
48
+ determined from the color alone. Pass `contrastColor` explicitly whenever a custom background has
49
+ alpha:
50
+
51
+ ```vue
52
+ <Button color="rgba(255, 255, 255, 0.2)" contrast-color="var(--rp-color-white)" variant="solid">
53
+ Continue
54
+ </Button>
55
+ ```
56
+
57
+ In development, Ropav warns when auto contrast receives a translucent custom color without an
58
+ explicit `contrastColor`. The production fallback remains `var(--rp-color-white)`.
59
+
40
60
  ## Progress and interactive ranges
41
61
 
42
62
  Use `Progress` for read-only status and `Slider` when the user can change the value. A media seek
package/dist/accordion.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import './accordion.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
6
  import { t as useCollapse } from "./useCollapse.js";
7
- import { VaporTransition, applyVShow, child, computed, createComponent, createIf, createSlot, defineVaporComponent, extend, markRaw, next, provide, ref, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, unref, useId } from "vue";
7
+ import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
8
+ import { VaporTransition, applyVShow, child, computed, createComponent, createIf, createSlot, defineVaporComponent, extend, markRaw, next, provide, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, unref, useId } from "vue";
8
9
  //#region src/components/accordion/types.ts
9
10
  var accordionParts = ["root"];
10
11
  var accordionItemParts = [
@@ -61,9 +62,12 @@ function useAccordion(props, emitUpdate) {
61
62
  const isMultiple = computed(() => Boolean(props.multiple));
62
63
  const isCollapsible = computed(() => props.collapsible !== false);
63
64
  const isDisabled = computed(() => Boolean(props.disabled));
64
- const isControlled = computed(() => props.modelValue !== void 0);
65
- const uncontrolledValue = ref(props.defaultValue ?? null);
66
- const openValues = computed(() => normalizeValue(isControlled.value ? props.modelValue : uncontrolledValue.value, isMultiple.value));
65
+ const controllable = useControllableValue({
66
+ modelValue: () => props.modelValue,
67
+ defaultValue: () => props.defaultValue ?? null,
68
+ onChange: emitUpdate
69
+ });
70
+ const openValues = computed(() => normalizeValue(controllable.value.value, isMultiple.value));
67
71
  const rootClass = computed(() => bem("rp-accordion", {
68
72
  disabled: isDisabled.value,
69
73
  multiple: isMultiple.value
@@ -79,8 +83,7 @@ function useAccordion(props, emitUpdate) {
79
83
  }));
80
84
  function setValues(nextValues) {
81
85
  const nextModelValue = toModelValue(nextValues, isMultiple.value);
82
- if (!isControlled.value) uncontrolledValue.value = nextModelValue;
83
- emitUpdate(nextModelValue);
86
+ controllable.setValue(nextModelValue);
84
87
  }
85
88
  function setItemOpen(value, open) {
86
89
  if (isDisabled.value) return;
package/dist/alert.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-alert[data-v-8e95a4b4] {
2
+ .rp-alert[data-v-9ae78ff5] {
3
3
  --_rp-alert-bg: var(--rp-color-cyan-light);
4
4
  --_rp-alert-fg: var(--rp-color-text);
5
5
  --_rp-alert-title-fg: var(--rp-color-cyan-light-color);
@@ -22,25 +22,25 @@
22
22
  border-radius: var(--_rp-alert-radius);
23
23
  transition: background-color var(--rp-transition-fast), color var(--rp-transition-fast), border-color var(--rp-transition-fast);
24
24
  }
25
- .rp-alert--radius-none[data-v-8e95a4b4] {
25
+ .rp-alert--radius-none[data-v-9ae78ff5] {
26
26
  --_rp-alert-radius: var(--rp-radius-none);
27
27
  }
28
- .rp-alert--radius-xs[data-v-8e95a4b4] {
28
+ .rp-alert--radius-xs[data-v-9ae78ff5] {
29
29
  --_rp-alert-radius: var(--rp-radius-xs);
30
30
  }
31
- .rp-alert--radius-sm[data-v-8e95a4b4] {
31
+ .rp-alert--radius-sm[data-v-9ae78ff5] {
32
32
  --_rp-alert-radius: var(--rp-radius-sm);
33
33
  }
34
- .rp-alert--radius-md[data-v-8e95a4b4] {
34
+ .rp-alert--radius-md[data-v-9ae78ff5] {
35
35
  --_rp-alert-radius: var(--rp-radius-md);
36
36
  }
37
- .rp-alert--radius-lg[data-v-8e95a4b4] {
37
+ .rp-alert--radius-lg[data-v-9ae78ff5] {
38
38
  --_rp-alert-radius: var(--rp-radius-lg);
39
39
  }
40
- .rp-alert--radius-xl[data-v-8e95a4b4] {
40
+ .rp-alert--radius-xl[data-v-9ae78ff5] {
41
41
  --_rp-alert-radius: var(--rp-radius-xl);
42
42
  }
43
- .rp-alert__icon[data-v-8e95a4b4] {
43
+ .rp-alert__icon[data-v-9ae78ff5] {
44
44
  display: inline-flex;
45
45
  flex: 0 0 auto;
46
46
  align-items: center;
@@ -49,37 +49,37 @@
49
49
  color: var(--_rp-alert-icon-fg);
50
50
  line-height: 0;
51
51
  }
52
- .rp-alert__icon[data-v-8e95a4b4] > svg {
52
+ .rp-alert__icon[data-v-9ae78ff5] > svg {
53
53
  display: block;
54
54
  width: 1rem;
55
55
  height: 1rem;
56
56
  }
57
- .rp-alert__content[data-v-8e95a4b4] {
57
+ .rp-alert__content[data-v-9ae78ff5] {
58
58
  display: grid;
59
59
  flex: 1 1 auto;
60
60
  min-width: 0;
61
61
  gap: var(--rp-spacing-1);
62
62
  }
63
- .rp-alert__title[data-v-8e95a4b4] {
63
+ .rp-alert__title[data-v-9ae78ff5] {
64
64
  color: var(--_rp-alert-title-fg);
65
65
  font-size: var(--rp-font-size-md);
66
66
  font-weight: var(--rp-font-weight-semibold);
67
67
  line-height: var(--rp-line-height-xs);
68
68
  }
69
- .rp-alert__description[data-v-8e95a4b4] {
69
+ .rp-alert__description[data-v-9ae78ff5] {
70
70
  margin: 0;
71
71
  }
72
- .rp-alert__body[data-v-8e95a4b4], .rp-alert__description[data-v-8e95a4b4] {
72
+ .rp-alert__body[data-v-9ae78ff5], .rp-alert__description[data-v-9ae78ff5] {
73
73
  min-width: 0;
74
74
  color: var(--_rp-alert-fg);
75
75
  }
76
- .rp-alert__action[data-v-8e95a4b4] {
76
+ .rp-alert__action[data-v-9ae78ff5] {
77
77
  display: inline-flex;
78
78
  flex: 0 0 auto;
79
79
  align-items: center;
80
80
  margin-left: auto;
81
81
  }
82
- .rp-alert__close[data-v-8e95a4b4] {
82
+ .rp-alert__close[data-v-9ae78ff5] {
83
83
  box-sizing: border-box;
84
84
  display: inline-flex;
85
85
  flex: 0 0 auto;
@@ -96,14 +96,14 @@
96
96
  cursor: pointer;
97
97
  transition: background-color var(--rp-transition-fast), color var(--rp-transition-fast);
98
98
  }
99
- .rp-alert__close[data-v-8e95a4b4]:hover {
99
+ .rp-alert__close[data-v-9ae78ff5]:hover {
100
100
  background-color: color-mix(in srgb, var(--_rp-alert-icon-fg) 12%, transparent);
101
101
  }
102
- .rp-alert__close[data-v-8e95a4b4]:focus-visible {
102
+ .rp-alert__close[data-v-9ae78ff5]:focus-visible {
103
103
  outline: var(--rp-border-width-medium) solid var(--rp-color-focus-ring);
104
104
  outline-offset: 2px;
105
105
  }
106
- .rp-alert__close[data-v-8e95a4b4] > svg {
106
+ .rp-alert__close[data-v-9ae78ff5] > svg {
107
107
  display: block;
108
108
  width: 1rem;
109
109
  height: 1rem;
package/dist/alert.js CHANGED
@@ -1,19 +1,21 @@
1
1
  import './alert.css';
2
- import { t as x_default } from "./x.js";
3
- import { t as bem } from "./bem.js";
2
+ import { t as useControllableValue } from "./useControllableValue.js";
4
3
  import { n as useStylesApi } from "./styles-api.js";
5
- import { i as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
4
+ import { t as bem } from "./bem.js";
6
5
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
7
- import { computed, createComponent, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, ref, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, txt, unref, useSlots, watch } from "vue";
6
+ import { t as x_default } from "./x.js";
7
+ import { a as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
8
+ import { computed, createComponent, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, txt, unref, useSlots } from "vue";
8
9
  //#region src/components/alert/useAlertColor.ts
9
- function getAlertColorStyle(color, variant, autoContrast) {
10
+ function getAlertColorStyle(color, variant, autoContrast, contrastColor) {
10
11
  if (!color && !variant) return void 0;
11
12
  const resolvedVariant = variant ?? "subtle";
12
13
  const roles = getComponentVariantColorRoles({
13
14
  color,
14
15
  variant: resolvedVariant,
15
16
  defaultColor: "cyan",
16
- autoContrast
17
+ autoContrast,
18
+ contrastColor
17
19
  });
18
20
  if (!roles) return void 0;
19
21
  return {
@@ -26,12 +28,12 @@ function getAlertColorStyle(color, variant, autoContrast) {
26
28
  }
27
29
  //#endregion
28
30
  //#region src/components/alert/alert.vue?vue&type=script&setup=true&vapor=true&lang.ts
29
- var t0 = template("<div data-v-8e95a4b4>");
31
+ var t0 = template("<div data-v-9ae78ff5>");
30
32
  var t1 = template(" ");
31
- var t2 = template("<p data-v-8e95a4b4> ");
32
- var t3 = template("<div data-v-8e95a4b4 class=rp-alert__content>");
33
- var t4 = template("<button data-v-8e95a4b4>");
34
- var t5 = template("<div data-v-8e95a4b4>", 1);
33
+ var t2 = template("<p data-v-9ae78ff5> ");
34
+ var t3 = template("<div data-v-9ae78ff5 class=rp-alert__content>");
35
+ var t4 = template("<button data-v-9ae78ff5>");
36
+ var t5 = template("<div data-v-9ae78ff5>", 1);
35
37
  delegateEvents("click");
36
38
  //#endregion
37
39
  //#region src/components/alert/alert.vue
@@ -48,7 +50,11 @@ var alert_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
48
50
  description: { default: "" },
49
51
  variant: {},
50
52
  color: {},
51
- autoContrast: { type: Boolean },
53
+ autoContrast: {
54
+ type: Boolean,
55
+ default: true
56
+ },
57
+ contrastColor: {},
52
58
  radius: {},
53
59
  role: { default: "alert" },
54
60
  closable: {
@@ -64,11 +70,12 @@ var alert_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
64
70
  const props = __props;
65
71
  const emit = __emit;
66
72
  const slots = useSlots();
67
- const localOpen = ref(props.open ?? true);
68
- watch(() => props.open, (open) => {
69
- if (open !== void 0) localOpen.value = open;
73
+ const controllableOpen = useControllableValue({
74
+ modelValue: () => props.open,
75
+ defaultValue: () => true,
76
+ onChange: (open) => emit("update:open", open)
70
77
  });
71
- const isOpen = computed(() => props.open ?? localOpen.value);
78
+ const isOpen = controllableOpen.value;
72
79
  const hasTitle = computed(() => Boolean(props.title || slots.title));
73
80
  const hasDescription = computed(() => Boolean(props.description));
74
81
  const hasContent = computed(() => Boolean(hasTitle.value || hasDescription.value || slots.default));
@@ -78,7 +85,7 @@ var alert_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
78
85
  [props.variant ?? ""]: Boolean(props.variant),
79
86
  [`radius-${props.radius}`]: Boolean(props.radius)
80
87
  }));
81
- const rootStyle = computed(() => getAlertColorStyle(props.color, props.variant, props.autoContrast));
88
+ const rootStyle = computed(() => getAlertColorStyle(props.color, props.variant, props.autoContrast, props.contrastColor));
82
89
  const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
83
90
  const rootAttrs = computed(() => getRootAttrs({
84
91
  class: rootClass.value,
@@ -86,11 +93,10 @@ var alert_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
86
93
  role: resolvedRole.value
87
94
  }));
88
95
  function closeAlert() {
89
- localOpen.value = false;
90
- emit("update:open", false);
96
+ controllableOpen.setValue(false);
91
97
  emit("close");
92
98
  }
93
- return createIf(() => isOpen.value, () => {
99
+ return createIf(() => unref(isOpen), () => {
94
100
  const n30 = t5();
95
101
  renderEffect(() => setDynamicProps(n30, [rootAttrs.value]));
96
102
  setInsertionState(n30, null, 0);
@@ -159,7 +165,7 @@ var alert_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
159
165
  return n30;
160
166
  });
161
167
  }
162
- }), [["__scopeId", "data-v-8e95a4b4"]]);
168
+ }), [["__scopeId", "data-v-9ae78ff5"]]);
163
169
  //#endregion
164
170
  //#region src/components/alert/types.ts
165
171
  var alertParts = [
package/dist/avatar.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-avatar[data-v-0561357f] {
2
+ .rp-avatar[data-v-416c3281] {
3
3
  --_rp-avatar-size: var(--rp-size-control-md);
4
4
  --_rp-avatar-font-size: var(--rp-font-size-md);
5
5
  --_rp-avatar-radius: var(--rp-radius-full);
@@ -27,72 +27,72 @@
27
27
  border-radius: var(--_rp-avatar-radius);
28
28
  user-select: none;
29
29
  }
30
- .rp-avatar--surface[data-v-0561357f], .rp-avatar--outline[data-v-0561357f] {
30
+ .rp-avatar--surface[data-v-416c3281], .rp-avatar--outline[data-v-416c3281] {
31
31
  --_rp-avatar-border-width: var(--rp-border-width-thin);
32
32
  }
33
- .rp-avatar--size-xs[data-v-0561357f] {
33
+ .rp-avatar--size-xs[data-v-416c3281] {
34
34
  --_rp-avatar-size: var(--rp-size-control-xs);
35
35
  --_rp-avatar-font-size: var(--rp-font-size-xs);
36
36
  }
37
- .rp-avatar--size-sm[data-v-0561357f] {
37
+ .rp-avatar--size-sm[data-v-416c3281] {
38
38
  --_rp-avatar-size: var(--rp-size-control-sm);
39
39
  --_rp-avatar-font-size: var(--rp-font-size-sm);
40
40
  }
41
- .rp-avatar--size-md[data-v-0561357f] {
41
+ .rp-avatar--size-md[data-v-416c3281] {
42
42
  --_rp-avatar-size: var(--rp-size-control-md);
43
43
  --_rp-avatar-font-size: var(--rp-font-size-md);
44
44
  }
45
- .rp-avatar--size-lg[data-v-0561357f] {
45
+ .rp-avatar--size-lg[data-v-416c3281] {
46
46
  --_rp-avatar-size: var(--rp-size-control-lg);
47
47
  --_rp-avatar-font-size: var(--rp-font-size-lg);
48
48
  }
49
- .rp-avatar--size-xl[data-v-0561357f] {
49
+ .rp-avatar--size-xl[data-v-416c3281] {
50
50
  --_rp-avatar-size: var(--rp-size-control-xl);
51
51
  --_rp-avatar-font-size: var(--rp-font-size-xl);
52
52
  }
53
- .rp-avatar--radius-none[data-v-0561357f] {
53
+ .rp-avatar--radius-none[data-v-416c3281] {
54
54
  --_rp-avatar-radius: var(--rp-radius-none);
55
55
  }
56
- .rp-avatar--radius-xs[data-v-0561357f] {
56
+ .rp-avatar--radius-xs[data-v-416c3281] {
57
57
  --_rp-avatar-radius: var(--rp-radius-xs);
58
58
  }
59
- .rp-avatar--radius-sm[data-v-0561357f] {
59
+ .rp-avatar--radius-sm[data-v-416c3281] {
60
60
  --_rp-avatar-radius: var(--rp-radius-sm);
61
61
  }
62
- .rp-avatar--radius-md[data-v-0561357f] {
62
+ .rp-avatar--radius-md[data-v-416c3281] {
63
63
  --_rp-avatar-radius: var(--rp-radius-md);
64
64
  }
65
- .rp-avatar--radius-lg[data-v-0561357f] {
65
+ .rp-avatar--radius-lg[data-v-416c3281] {
66
66
  --_rp-avatar-radius: var(--rp-radius-lg);
67
67
  }
68
- .rp-avatar--radius-xl[data-v-0561357f] {
68
+ .rp-avatar--radius-xl[data-v-416c3281] {
69
69
  --_rp-avatar-radius: var(--rp-radius-xl);
70
70
  }
71
- .rp-avatar--radius-full[data-v-0561357f] {
71
+ .rp-avatar--radius-full[data-v-416c3281] {
72
72
  --_rp-avatar-radius: var(--rp-radius-full);
73
73
  }
74
- .rp-avatar__image[data-v-0561357f] {
74
+ .rp-avatar__image[data-v-416c3281] {
75
75
  display: block;
76
76
  width: 100%;
77
77
  height: 100%;
78
78
  object-fit: cover;
79
79
  }
80
- .rp-avatar__fallback[data-v-0561357f] {
80
+ .rp-avatar__fallback[data-v-416c3281] {
81
81
  display: inline-flex;
82
82
  align-items: center;
83
83
  justify-content: center;
84
84
  width: 100%;
85
85
  height: 100%;
86
86
  }
87
- .rp-avatar__fallback[data-v-0561357f] > svg {
87
+ .rp-avatar__fallback[data-v-416c3281] > svg {
88
88
  display: block;
89
89
  width: 50%;
90
90
  height: 50%;
91
91
  }
92
- .rp-avatar__initials[data-v-0561357f] {
92
+ .rp-avatar__initials[data-v-416c3281] {
93
93
  text-transform: uppercase;
94
94
  }
95
- .rp-avatar__icon[data-v-0561357f] {
95
+ .rp-avatar__icon[data-v-416c3281] {
96
96
  width: 50%;
97
97
  height: 50%;
98
98
  }
package/dist/avatar.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import './avatar.css';
2
- import { t as bem } from "./bem.js";
3
2
  import { n as useStylesApi } from "./styles-api.js";
4
- import { i as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
3
+ import { t as bem } from "./bem.js";
5
4
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
+ import { a as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
6
6
  import { computed, createComponent, createIf, createSlot, defineVaporComponent, markRaw, on, ref, renderEffect, setAttr, setClass, setDynamicProps, setInsertionState, setProp, setStyle, setText, template, toDisplayString, txt, unref, watch } from "vue";
7
7
  //#region ~icons/lucide/user
8
8
  var t0$1 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><g fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2><path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"></path><circle cx=12 cy=7 r=4>", 3, 1);
@@ -15,12 +15,13 @@ var user_default = markRaw(defineVaporComponent({
15
15
  }));
16
16
  //#endregion
17
17
  //#region src/components/avatar/useAvatarColor.ts
18
- function getAvatarColorStyle(color, variant, autoContrast) {
18
+ function getAvatarColorStyle(color, variant, autoContrast, contrastColor) {
19
19
  if (!color && !variant) return void 0;
20
20
  const roles = getComponentVariantColorRoles({
21
21
  color,
22
22
  variant: variant ?? "solid",
23
- autoContrast
23
+ autoContrast,
24
+ contrastColor
24
25
  });
25
26
  if (!roles) return void 0;
26
27
  return {
@@ -31,10 +32,10 @@ function getAvatarColorStyle(color, variant, autoContrast) {
31
32
  }
32
33
  //#endregion
33
34
  //#region src/components/avatar/avatar.vue?vue&type=script&setup=true&vapor=true&lang.ts
34
- var t0 = template("<img data-v-0561357f>");
35
- var t1 = template("<span data-v-0561357f class=rp-avatar__initials> ");
36
- var t2 = template("<span data-v-0561357f>");
37
- var t3 = template("<span data-v-0561357f>", 1);
35
+ var t0 = template("<img data-v-416c3281>");
36
+ var t1 = template("<span data-v-416c3281 class=rp-avatar__initials> ");
37
+ var t2 = template("<span data-v-416c3281>");
38
+ var t3 = template("<span data-v-416c3281>", 1);
38
39
  //#endregion
39
40
  //#region src/components/avatar/avatar.vue
40
41
  var avatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -48,7 +49,11 @@ var avatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
48
49
  name: {},
49
50
  variant: {},
50
51
  color: {},
51
- autoContrast: { type: Boolean },
52
+ autoContrast: {
53
+ type: Boolean,
54
+ default: true
55
+ },
56
+ contrastColor: {},
52
57
  size: {},
53
58
  radius: {},
54
59
  classNames: {},
@@ -76,7 +81,7 @@ var avatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
76
81
  [`size-${props.size}`]: Boolean(props.size),
77
82
  [`radius-${props.radius}`]: Boolean(props.radius)
78
83
  }));
79
- const rootStyle = computed(() => getAvatarColorStyle(props.color, props.variant, props.autoContrast));
84
+ const rootStyle = computed(() => getAvatarColorStyle(props.color, props.variant, props.autoContrast, props.contrastColor));
80
85
  const rootAttrs = computed(() => getRootAttrs({
81
86
  class: rootClass.value,
82
87
  style: rootStyle.value,
@@ -137,7 +142,7 @@ var avatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
137
142
  }, 261);
138
143
  return n13;
139
144
  }
140
- }), [["__scopeId", "data-v-0561357f"]]);
145
+ }), [["__scopeId", "data-v-416c3281"]]);
141
146
  //#endregion
142
147
  //#region src/components/avatar/types.ts
143
148
  var avatarParts = [
package/dist/badge.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-badge[data-v-0b9a55a5] {
2
+ .rp-badge[data-v-1bf7c45c] {
3
3
  --_rp-badge-height: 20px;
4
4
  --_rp-badge-padding-x: 10px;
5
5
  --_rp-badge-font-size: 11px;
@@ -28,65 +28,65 @@
28
28
  border-radius: var(--_rp-badge-radius);
29
29
  transition: background-color var(--rp-transition-fast), color var(--rp-transition-fast), border-color var(--rp-transition-fast);
30
30
  }
31
- .rp-badge--size-xs[data-v-0b9a55a5] {
31
+ .rp-badge--size-xs[data-v-1bf7c45c] {
32
32
  --_rp-badge-height: 16px;
33
33
  --_rp-badge-padding-x: 6px;
34
34
  --_rp-badge-font-size: 9px;
35
35
  }
36
- .rp-badge--size-sm[data-v-0b9a55a5] {
36
+ .rp-badge--size-sm[data-v-1bf7c45c] {
37
37
  --_rp-badge-height: 18px;
38
38
  --_rp-badge-padding-x: 8px;
39
39
  --_rp-badge-font-size: 10px;
40
40
  }
41
- .rp-badge--size-md[data-v-0b9a55a5] {
41
+ .rp-badge--size-md[data-v-1bf7c45c] {
42
42
  --_rp-badge-height: 20px;
43
43
  --_rp-badge-padding-x: 10px;
44
44
  --_rp-badge-font-size: 11px;
45
45
  }
46
- .rp-badge--size-lg[data-v-0b9a55a5] {
46
+ .rp-badge--size-lg[data-v-1bf7c45c] {
47
47
  --_rp-badge-height: 26px;
48
48
  --_rp-badge-padding-x: 12px;
49
49
  --_rp-badge-font-size: 13px;
50
50
  }
51
- .rp-badge--size-xl[data-v-0b9a55a5] {
51
+ .rp-badge--size-xl[data-v-1bf7c45c] {
52
52
  --_rp-badge-height: 32px;
53
53
  --_rp-badge-padding-x: 16px;
54
54
  --_rp-badge-font-size: 16px;
55
55
  }
56
- .rp-badge--radius-none[data-v-0b9a55a5] {
56
+ .rp-badge--radius-none[data-v-1bf7c45c] {
57
57
  --_rp-badge-radius: var(--rp-radius-none);
58
58
  }
59
- .rp-badge--radius-xs[data-v-0b9a55a5] {
59
+ .rp-badge--radius-xs[data-v-1bf7c45c] {
60
60
  --_rp-badge-radius: var(--rp-radius-xs);
61
61
  }
62
- .rp-badge--radius-sm[data-v-0b9a55a5] {
62
+ .rp-badge--radius-sm[data-v-1bf7c45c] {
63
63
  --_rp-badge-radius: var(--rp-radius-sm);
64
64
  }
65
- .rp-badge--radius-md[data-v-0b9a55a5] {
65
+ .rp-badge--radius-md[data-v-1bf7c45c] {
66
66
  --_rp-badge-radius: var(--rp-radius-md);
67
67
  }
68
- .rp-badge--radius-lg[data-v-0b9a55a5] {
68
+ .rp-badge--radius-lg[data-v-1bf7c45c] {
69
69
  --_rp-badge-radius: var(--rp-radius-lg);
70
70
  }
71
- .rp-badge--radius-xl[data-v-0b9a55a5] {
71
+ .rp-badge--radius-xl[data-v-1bf7c45c] {
72
72
  --_rp-badge-radius: var(--rp-radius-xl);
73
73
  }
74
- .rp-badge--radius-full[data-v-0b9a55a5] {
74
+ .rp-badge--radius-full[data-v-1bf7c45c] {
75
75
  --_rp-badge-radius: var(--rp-radius-full);
76
76
  }
77
- .rp-badge__left[data-v-0b9a55a5], .rp-badge__right[data-v-0b9a55a5] {
77
+ .rp-badge__left[data-v-1bf7c45c], .rp-badge__right[data-v-1bf7c45c] {
78
78
  display: inline-flex;
79
79
  align-items: center;
80
80
  justify-content: center;
81
81
  flex: 0 0 auto;
82
82
  line-height: 0;
83
83
  }
84
- .rp-badge__left[data-v-0b9a55a5] > svg, .rp-badge__right[data-v-0b9a55a5] > svg {
84
+ .rp-badge__left[data-v-1bf7c45c] > svg, .rp-badge__right[data-v-1bf7c45c] > svg {
85
85
  display: block;
86
86
  width: 1em;
87
87
  height: 1em;
88
88
  }
89
- .rp-badge__label[data-v-0b9a55a5] {
89
+ .rp-badge__label[data-v-1bf7c45c] {
90
90
  display: inline-block;
91
91
  min-width: 0;
92
92
  overflow: hidden;
package/dist/badge.js CHANGED
@@ -1,16 +1,17 @@
1
1
  import './badge.css';
2
- import { t as bem } from "./bem.js";
3
2
  import { n as useStylesApi } from "./styles-api.js";
4
- import { i as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
3
+ import { t as bem } from "./bem.js";
5
4
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
+ import { a as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
6
6
  import { computed, createIf, createSlot, defineVaporComponent, renderEffect, setDynamicProps, setInsertionState, template, unref } from "vue";
7
7
  //#region src/components/badge/useBadgeColor.ts
8
- function getBadgeColorStyle(color, variant, autoContrast) {
8
+ function getBadgeColorStyle(color, variant, autoContrast, contrastColor) {
9
9
  if (!color && !variant) return void 0;
10
10
  const roles = getComponentVariantColorRoles({
11
11
  color,
12
12
  variant: variant ?? "solid",
13
- autoContrast
13
+ autoContrast,
14
+ contrastColor
14
15
  });
15
16
  if (!roles) return void 0;
16
17
  return {
@@ -21,8 +22,8 @@ function getBadgeColorStyle(color, variant, autoContrast) {
21
22
  }
22
23
  //#endregion
23
24
  //#region src/components/badge/badge.vue?vue&type=script&setup=true&vapor=true&lang.ts
24
- var t0 = template("<span data-v-0b9a55a5>");
25
- var t1 = template("<span data-v-0b9a55a5>", 1);
25
+ var t0 = template("<span data-v-1bf7c45c>");
26
+ var t1 = template("<span data-v-1bf7c45c>", 1);
26
27
  //#endregion
27
28
  //#region src/components/badge/badge.vue
28
29
  var badge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -32,7 +33,11 @@ var badge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
32
33
  props: {
33
34
  variant: {},
34
35
  color: {},
35
- autoContrast: { type: Boolean },
36
+ autoContrast: {
37
+ type: Boolean,
38
+ default: true
39
+ },
40
+ contrastColor: {},
36
41
  size: {},
37
42
  radius: {},
38
43
  ariaLabel: {},
@@ -46,7 +51,7 @@ var badge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
46
51
  [`size-${props.size}`]: Boolean(props.size),
47
52
  [`radius-${props.radius}`]: Boolean(props.radius)
48
53
  }));
49
- const rootStyle = computed(() => getBadgeColorStyle(props.color, props.variant, props.autoContrast));
54
+ const rootStyle = computed(() => getBadgeColorStyle(props.color, props.variant, props.autoContrast, props.contrastColor));
50
55
  const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
51
56
  const rootAttrs = computed(() => getRootAttrs({
52
57
  class: rootClass.value,
@@ -81,7 +86,7 @@ var badge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
81
86
  });
82
87
  return n12;
83
88
  }
84
- }), [["__scopeId", "data-v-0b9a55a5"]]);
89
+ }), [["__scopeId", "data-v-1bf7c45c"]]);
85
90
  //#endregion
86
91
  //#region src/components/badge/types.ts
87
92
  var badgeParts = [