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/collapse.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import './collapse.css';
2
2
  import { n as useStylesApi, t as presence } from "./styles-api.js";
3
- import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
4
3
  import { t as useCollapse } from "./useCollapse.js";
4
+ import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
5
  import { VaporTransition, applyVShow, child, computed, createComponent, createIf, createSlot, defineVaporComponent, extend, renderEffect, setDynamicProps, setInsertionState, template, unref } from "vue";
6
6
  //#region src/components/collapse/collapse.vue?vue&type=script&setup=true&vapor=true&lang.ts
7
- var t0 = template("<section data-v-a380be0d><div data-v-a380be0d class=rp-collapse__inner>");
8
- var t1 = template("<div data-v-a380be0d>", 1);
7
+ var t0 = template("<div data-v-06c57838><div data-v-06c57838 class=rp-collapse__inner>");
8
+ var t1 = template("<div data-v-06c57838>", 1);
9
9
  //#endregion
10
10
  //#region src/components/collapse/collapse.vue
11
11
  var collapse_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -81,7 +81,7 @@ var collapse_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
81
81
  }, { _: 8 }));
82
82
  return n7;
83
83
  }
84
- }), [["__scopeId", "data-v-a380be0d"]]);
84
+ }), [["__scopeId", "data-v-06c57838"]]);
85
85
  //#endregion
86
86
  //#region src/components/collapse/types.ts
87
87
  var collapseParts = [
@@ -0,0 +1,120 @@
1
+ import { onBeforeUnmount } from "vue";
2
+ //#region src/internal/composables/useTypeahead.ts
3
+ var DEFAULT_TYPEAHEAD_TIMEOUT = 1e3;
4
+ var COMBINING_MARKS = /\p{M}/gu;
5
+ var WHITESPACE = /\s+/g;
6
+ function normalizeTypeaheadText(value, locales) {
7
+ return value.toLocaleLowerCase(locales).normalize("NFKD").replace(COMBINING_MARKS, "").replace(WHITESPACE, " ").trim();
8
+ }
9
+ function isRepeatedQuery(query) {
10
+ const characters = [...query];
11
+ return characters.length > 1 && characters.every((character) => character === characters[0]);
12
+ }
13
+ function useTypeahead(options) {
14
+ let buffer = "";
15
+ let timer;
16
+ let lastMatch;
17
+ let currentScope = options.scopeKey?.();
18
+ const isDisabled = options.isDisabled ?? (() => false);
19
+ function clearTimer() {
20
+ if (timer !== void 0) clearTimeout(timer);
21
+ timer = void 0;
22
+ }
23
+ function reset() {
24
+ clearTimer();
25
+ buffer = "";
26
+ lastMatch = void 0;
27
+ currentScope = options.scopeKey?.();
28
+ }
29
+ function scheduleReset() {
30
+ clearTimer();
31
+ timer = setTimeout(reset, options.timeout ?? DEFAULT_TYPEAHEAD_TIMEOUT);
32
+ }
33
+ function hasBuffer() {
34
+ return buffer.length > 0;
35
+ }
36
+ function getMatchIndex(query, startIndex, keepCurrent) {
37
+ const items = options.items();
38
+ if (items.length === 0) return -1;
39
+ function matches(index) {
40
+ const item = items[index];
41
+ return Boolean(item && !isDisabled(item) && normalizeTypeaheadText(options.getTextValue(item)).startsWith(query));
42
+ }
43
+ if (keepCurrent && startIndex >= 0 && matches(startIndex)) return startIndex;
44
+ for (let offset = 1; offset <= items.length; offset += 1) {
45
+ const index = (startIndex + offset + items.length) % items.length;
46
+ if (matches(index)) return index;
47
+ }
48
+ return -1;
49
+ }
50
+ function getLastMatchIndex(items) {
51
+ const match = lastMatch;
52
+ if (!match) return -1;
53
+ if (Object.is(items[match.index], match.item)) return match.index;
54
+ const identityIndex = items.findIndex((item) => Object.is(item, match.item));
55
+ if (identityIndex >= 0) return identityIndex;
56
+ let keyIndex = -1;
57
+ for (let index = 0; index < items.length; index += 1) {
58
+ if (!Object.is(options.getKey(items[index]), match.key)) continue;
59
+ if (keyIndex >= 0) return -1;
60
+ keyIndex = index;
61
+ }
62
+ return keyIndex;
63
+ }
64
+ function handleKey(event) {
65
+ const nextScope = options.scopeKey?.();
66
+ if (!Object.is(currentScope, nextScope)) reset();
67
+ currentScope = nextScope;
68
+ if (event.ctrlKey || event.metaKey || event.altKey || event.isComposing || [...event.key].length !== 1 || event.key === " " && !hasBuffer()) return false;
69
+ event.preventDefault();
70
+ buffer += event.key;
71
+ scheduleReset();
72
+ const normalizedBuffer = normalizeTypeaheadText(buffer);
73
+ if (!normalizedBuffer) return true;
74
+ const repeated = isRepeatedQuery(normalizedBuffer);
75
+ const query = repeated ? [...normalizedBuffer][0] : normalizedBuffer;
76
+ const items = options.items();
77
+ const lastMatchIndex = getLastMatchIndex(items);
78
+ const matchIndex = getMatchIndex(query, lastMatchIndex >= 0 ? lastMatchIndex : options.activeIndex(), !repeated && [...query].length > 1);
79
+ if (matchIndex < 0) return true;
80
+ const item = items[matchIndex];
81
+ if (!item) return true;
82
+ lastMatch = {
83
+ item,
84
+ index: matchIndex,
85
+ key: options.getKey(item)
86
+ };
87
+ options.onMatch(item, matchIndex);
88
+ return true;
89
+ }
90
+ onBeforeUnmount(clearTimer);
91
+ return {
92
+ handleKey,
93
+ hasBuffer,
94
+ reset
95
+ };
96
+ }
97
+ //#endregion
98
+ //#region src/internal/composables/collectionNavigation.ts
99
+ function getEnabledIndexes(items, isDisabled) {
100
+ return items.map((item, index) => isDisabled(item) ? -1 : index).filter((index) => index >= 0);
101
+ }
102
+ function getNextEnabledIndex(items, currentIndex, direction, isDisabled, loop = true) {
103
+ const enabledIndexes = getEnabledIndexes(items, isDisabled);
104
+ if (enabledIndexes.length === 0) return void 0;
105
+ const currentPosition = enabledIndexes.indexOf(currentIndex);
106
+ if (currentPosition < 0) {
107
+ if (direction === 1) return enabledIndexes.find((index) => index > currentIndex) ?? (loop ? enabledIndexes[0] : enabledIndexes[enabledIndexes.length - 1]);
108
+ for (let index = enabledIndexes.length - 1; index >= 0; index -= 1) {
109
+ const candidate = enabledIndexes[index];
110
+ if (candidate < currentIndex) return candidate;
111
+ }
112
+ return loop ? enabledIndexes[enabledIndexes.length - 1] : enabledIndexes[0];
113
+ }
114
+ const nextPosition = currentPosition + direction;
115
+ if (nextPosition >= 0 && nextPosition < enabledIndexes.length) return enabledIndexes[nextPosition];
116
+ if (!loop) return enabledIndexes[currentPosition];
117
+ return direction === 1 ? enabledIndexes[0] : enabledIndexes[enabledIndexes.length - 1];
118
+ }
119
+ //#endregion
120
+ export { getNextEnabledIndex as n, useTypeahead as r, getEnabledIndexes as t };
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-color-input[data-v-0c4e1f32] {
2
+ .rp-color-input[data-v-19e2ebe7] {
3
3
  --_rp-color-input-height: var(--rp-size-control-md);
4
4
  --_rp-color-input-preview-size: calc(var(--_rp-color-input-height) / 2);
5
5
  --_rp-color-input-preview-inset: calc(
@@ -18,42 +18,42 @@
18
18
  font-family: var(--rp-font-family);
19
19
  vertical-align: middle;
20
20
  }
21
- .rp-color-input--size-xs[data-v-0c4e1f32] {
21
+ .rp-color-input--size-xs[data-v-19e2ebe7] {
22
22
  --_rp-color-input-height: var(--rp-size-control-xs);
23
23
  }
24
- .rp-color-input--size-sm[data-v-0c4e1f32] {
24
+ .rp-color-input--size-sm[data-v-19e2ebe7] {
25
25
  --_rp-color-input-height: var(--rp-size-control-sm);
26
26
  }
27
- .rp-color-input--size-md[data-v-0c4e1f32] {
27
+ .rp-color-input--size-md[data-v-19e2ebe7] {
28
28
  --_rp-color-input-height: var(--rp-size-control-md);
29
29
  }
30
- .rp-color-input--size-lg[data-v-0c4e1f32] {
30
+ .rp-color-input--size-lg[data-v-19e2ebe7] {
31
31
  --_rp-color-input-height: var(--rp-size-control-lg);
32
32
  }
33
- .rp-color-input--size-xl[data-v-0c4e1f32] {
33
+ .rp-color-input--size-xl[data-v-19e2ebe7] {
34
34
  --_rp-color-input-height: var(--rp-size-control-xl);
35
35
  }
36
- html.dark .rp-color-input[data-v-0c4e1f32], [data-rp-color-scheme=dark] .rp-color-input[data-v-0c4e1f32] {
36
+ html.dark .rp-color-input[data-v-19e2ebe7], [data-rp-color-scheme=dark] .rp-color-input[data-v-19e2ebe7] {
37
37
  --_rp-color-input-empty-tile: var(--rp-color-dark-6);
38
38
  --_rp-color-input-empty-tile-alt: var(--rp-color-dark-4);
39
39
  }
40
- .rp-color-input[data-v-0c4e1f32] .rp-input {
40
+ .rp-color-input[data-v-19e2ebe7] .rp-input {
41
41
  width: 100%;
42
42
  min-width: 180px;
43
43
  padding-inline-start: calc(var(--_rp-color-input-preview-inset) - var(--rp-border-width-thin));
44
44
  }
45
- .rp-color-input[data-v-0c4e1f32] .rp-popover__content {
45
+ .rp-color-input[data-v-19e2ebe7] .rp-popover__content {
46
46
  min-width: auto;
47
47
  padding: var(--rp-spacing-3);
48
48
  padding-inline: calc(var(--_rp-color-input-preview-inset) - var(--rp-border-width-thin));
49
49
  }
50
- .rp-color-input[data-v-0c4e1f32] .rp-color-picker {
50
+ .rp-color-input[data-v-19e2ebe7] .rp-color-picker {
51
51
  --_rp-color-picker-size: min(
52
52
  var(--_rp-color-picker-saturation-width),
53
53
  calc(100vw - var(--rp-spacing-12))
54
54
  );
55
55
  }
56
- .rp-color-input__preview[data-v-0c4e1f32] {
56
+ .rp-color-input__preview[data-v-19e2ebe7] {
57
57
  --_rp-color-swatch-radius: 50%;
58
58
  width: var(--_rp-color-input-preview-size);
59
59
  height: var(--_rp-color-input-preview-size);
@@ -61,14 +61,14 @@ html.dark .rp-color-input[data-v-0c4e1f32], [data-rp-color-scheme=dark] .rp-colo
61
61
  border-radius: 50%;
62
62
  pointer-events: none;
63
63
  }
64
- .rp-color-input__preview--empty[data-v-0c4e1f32] {
64
+ .rp-color-input__preview--empty[data-v-19e2ebe7] {
65
65
  box-sizing: border-box;
66
66
  display: inline-flex;
67
67
  background: var(--_rp-color-input-empty-grid);
68
68
  background-size: calc(var(--_rp-color-input-preview-size) / 2) calc(var(--_rp-color-input-preview-size) / 2);
69
69
  border: var(--rp-border-width-thin) dashed var(--rp-color-control-border);
70
70
  }
71
- .rp-color-input__eye-dropper[data-v-0c4e1f32] {
71
+ .rp-color-input__eye-dropper[data-v-19e2ebe7] {
72
72
  padding: 0;
73
73
  font: inherit;
74
74
  background: none;
@@ -81,29 +81,29 @@ html.dark .rp-color-input[data-v-0c4e1f32], [data-rp-color-scheme=dark] .rp-colo
81
81
  color: var(--rp-color-control-icon);
82
82
  transition: color var(--rp-transition-fast), opacity var(--rp-transition-fast);
83
83
  }
84
- .rp-color-input__eye-dropper[data-v-0c4e1f32]:hover:not(:disabled) {
84
+ .rp-color-input__eye-dropper[data-v-19e2ebe7]:hover:not(:disabled) {
85
85
  color: var(--rp-color-control-fg);
86
86
  }
87
- .rp-color-input__eye-dropper[data-v-0c4e1f32]:focus-visible {
87
+ .rp-color-input__eye-dropper[data-v-19e2ebe7]:focus-visible {
88
88
  outline: var(--rp-border-width-medium) solid var(--rp-color-focus-ring);
89
89
  outline-offset: 2px;
90
90
  }
91
- .rp-color-input__eye-dropper[data-v-0c4e1f32]:disabled {
91
+ .rp-color-input__eye-dropper[data-v-19e2ebe7]:disabled {
92
92
  cursor: not-allowed;
93
93
  opacity: var(--rp-opacity-disabled);
94
94
  }
95
- .rp-color-input__eye-dropper-icon[data-v-0c4e1f32] {
95
+ .rp-color-input__eye-dropper-icon[data-v-19e2ebe7] {
96
96
  display: inline-flex;
97
97
  align-items: center;
98
98
  width: 1em;
99
99
  height: 1em;
100
100
  flex-shrink: 0;
101
101
  }
102
- .rp-color-input__eye-dropper-icon svg[data-v-0c4e1f32] {
102
+ .rp-color-input__eye-dropper-icon svg[data-v-19e2ebe7] {
103
103
  width: 100%;
104
104
  height: 100%;
105
105
  }
106
- .rp-color-input__eye-dropper-icon[data-v-0c4e1f32] > svg {
106
+ .rp-color-input__eye-dropper-icon[data-v-19e2ebe7] > svg {
107
107
  width: 100%;
108
108
  height: 100%;
109
109
  }
@@ -1,8 +1,9 @@
1
1
  import './color-input.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 { a as useTextFormControl, n as provideNestedFormControlOwner, o as useControllableValue } from "./useFormControl.js";
6
+ import { a as useTextFormControl, n as provideNestedFormControlOwner } from "./useFormControl.js";
6
7
  import { t as useControlState } from "./useControlState.js";
7
8
  import { t as color_swatch_default } from "./color-swatch.js";
8
9
  import { n as formatColorPickerValue, r as parseColorPickerValue, t as color_picker_default } from "./color-picker.js";
@@ -182,8 +183,8 @@ function useColorInput(props, emit, getValue = () => props.modelValue ?? "") {
182
183
  }
183
184
  //#endregion
184
185
  //#region src/components/color-input/color-input.vue?vue&type=script&setup=true&vapor=true&lang.ts
185
- var t0 = template("<span data-v-0c4e1f32>");
186
- var t1 = template("<button data-v-0c4e1f32><span data-v-0c4e1f32 class=rp-color-input__eye-dropper-icon aria-hidden=true></button>");
186
+ var t0 = template("<span data-v-19e2ebe7>");
187
+ var t1 = template("<button data-v-19e2ebe7><span data-v-19e2ebe7 class=rp-color-input__eye-dropper-icon aria-hidden=true></button>");
187
188
  //#endregion
188
189
  //#region src/components/color-input/color-input.vue
189
190
  var color_input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -416,7 +417,7 @@ var color_input_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
416
417
  }
417
418
  }, true);
418
419
  }
419
- }), [["__scopeId", "data-v-0c4e1f32"]]);
420
+ }), [["__scopeId", "data-v-19e2ebe7"]]);
420
421
  //#endregion
421
422
  //#region src/components/color-input/types.ts
422
423
  var colorInputParts = [
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-color-picker__saturation[data-v-fbb051b0] {
2
+ .rp-color-picker__saturation[data-v-22669f8e] {
3
3
  position: relative;
4
4
  box-sizing: border-box;
5
5
  width: var(--_rp-color-picker-control-width);
@@ -10,13 +10,13 @@
10
10
  touch-action: none;
11
11
  cursor: crosshair;
12
12
  }
13
- .rp-color-picker__saturation[data-v-fbb051b0]:focus-visible {
13
+ .rp-color-picker__saturation[data-v-22669f8e]:focus-visible {
14
14
  outline: none;
15
15
  }
16
- .rp-color-picker__saturation[data-readonly][data-v-fbb051b0] {
16
+ .rp-color-picker__saturation[data-readonly][data-v-22669f8e] {
17
17
  cursor: default;
18
18
  }
19
- .rp-color-picker__axis-input[data-v-fbb051b0] {
19
+ .rp-color-picker__axis-input[data-v-22669f8e] {
20
20
  position: absolute;
21
21
  width: 1px;
22
22
  height: 1px;
@@ -28,10 +28,10 @@
28
28
  border-width: 0;
29
29
  pointer-events: none;
30
30
  }
31
- .rp-color-picker__axis-input:focus-visible ~ .rp-color-picker__handle[data-v-fbb051b0] {
31
+ .rp-color-picker__axis-input:focus-visible ~ .rp-color-picker__handle[data-v-22669f8e] {
32
32
  box-shadow: 0 0 1px rgba(0, 0, 0, 0.6), 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
33
33
  }
34
- .rp-color-picker__surface[data-v-fbb051b0] {
34
+ .rp-color-picker__surface[data-v-22669f8e] {
35
35
  position: absolute;
36
36
  inset: calc(-1 * var(--_rp-color-picker-thumb-radius));
37
37
  overflow: hidden;
@@ -39,7 +39,7 @@
39
39
  box-shadow: 0 0 1px rgba(0, 0, 0, 0.3);
40
40
  background: linear-gradient(to top, #000 0 var(--_rp-color-picker-thumb-radius), rgba(0, 0, 0, 0) calc(100% - var(--_rp-color-picker-thumb-radius)) 100%), linear-gradient(to right, #fff 0 var(--_rp-color-picker-thumb-radius), rgba(255, 255, 255, 0) calc(100% - var(--_rp-color-picker-thumb-radius)) 100%), hsl(var(--_rp-color-picker-hue), 100%, 50%);
41
41
  }
42
- .rp-color-picker__handle[data-v-fbb051b0] {
42
+ .rp-color-picker__handle[data-v-22669f8e] {
43
43
  position: absolute;
44
44
  top: var(--_rp-color-picker-saturation-y);
45
45
  left: var(--_rp-color-picker-saturation-x);
@@ -1,8 +1,8 @@
1
1
  import './color-picker.css';
2
- import { t as bem } from "./bem.js";
3
2
  import { n as useStylesApi, t as presence } from "./styles-api.js";
4
- import { t as parseCssColor } from "./color.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 { t as parseCssColor } from "./color.js";
6
6
  import { t as check_default } from "./check.js";
7
7
  import { t as color_swatch_default } from "./color-swatch.js";
8
8
  import { child, computed, createComponent, createFor, createIf, createInvoker, createSlot, createTemplateRefSetter, defineVaporComponent, delegateEvents, extend, next, nthChild, on, onBeforeUnmount, ref, renderEffect, setAttr, setClass, setDynamicProps, setInsertionState, setProp, setStyle, setValue, template, unref } from "vue";
@@ -261,7 +261,7 @@ function useColorPickerDrag({ target, focusTarget, readonly, isGeometryValid, up
261
261
  }
262
262
  //#endregion
263
263
  //#region src/components/color-picker/color-picker-saturation.vue?vue&type=script&setup=true&vapor=true&lang.ts
264
- var t0$2 = template("<div data-v-fbb051b0 role=group data-control=saturation><input data-v-fbb051b0 class=\"rp-color-picker__axis-input rp-color-picker__axis-input--saturation\"type=range min=0 max=100 step=1 aria-label=Saturation aria-orientation=horizontal><input data-v-fbb051b0 class=\"rp-color-picker__axis-input rp-color-picker__axis-input--value\"type=range min=0 max=100 step=1 aria-label=Value aria-orientation=vertical><span data-v-fbb051b0 class=rp-color-picker__surface aria-hidden=true></span><span data-v-fbb051b0 data-control=saturation aria-hidden=true>", 1);
264
+ var t0$2 = template("<div data-v-22669f8e role=group data-control=saturation><input data-v-22669f8e class=\"rp-color-picker__axis-input rp-color-picker__axis-input--saturation\"type=range min=0 max=100 step=1 aria-label=Saturation aria-orientation=horizontal><input data-v-22669f8e class=\"rp-color-picker__axis-input rp-color-picker__axis-input--value\"type=range min=0 max=100 step=1 aria-label=Value aria-orientation=vertical><span data-v-22669f8e class=rp-color-picker__surface aria-hidden=true></span><span data-v-22669f8e data-control=saturation aria-hidden=true>", 1);
265
265
  delegateEvents("input", "keydown", "pointerdown");
266
266
  //#endregion
267
267
  //#region src/components/color-picker/color-picker-saturation.vue
@@ -407,7 +407,6 @@ var color_picker_saturation_default = /*#__PURE__*/ _plugin_vue_export_helper_de
407
407
  setAttr(n3, "aria-label", groupAriaLabel.value);
408
408
  setAttr(n3, "aria-labelledby", __props.labelledby);
409
409
  setAttr(n3, "aria-describedby", _describedby);
410
- setAttr(n3, "aria-readonly", _readonly || void 0);
411
410
  setAttr(n3, "data-readonly", unref(presence)(_readonly));
412
411
  setProp(n0, "id", _id);
413
412
  setValue(n0, _saturation);
@@ -426,7 +425,7 @@ var color_picker_saturation_default = /*#__PURE__*/ _plugin_vue_export_helper_de
426
425
  });
427
426
  return n3;
428
427
  }
429
- }), [["__scopeId", "data-v-fbb051b0"]]);
428
+ }), [["__scopeId", "data-v-22669f8e"]]);
430
429
  //#endregion
431
430
  //#region src/components/color-picker/color-picker-slider.vue?vue&type=script&setup=true&vapor=true&lang.ts
432
431
  var t0$1 = template("<div data-v-0299a505 role=slider tabindex=0 aria-orientation=horizontal aria-valuemin=0><span data-v-0299a505 aria-hidden=true></span><span data-v-0299a505 aria-hidden=true>", 1);
@@ -1,7 +1,7 @@
1
1
  import './color-swatch.css';
2
2
  import { n as useStylesApi } from "./styles-api.js";
3
- import { t as parseCssColor } from "./color.js";
4
3
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
4
+ import { t as parseCssColor } from "./color.js";
5
5
  import { child, computed, createSlot, defineVaporComponent, renderEffect, setDynamicProps, setInsertionState, template } from "vue";
6
6
  //#region src/components/color-swatch/useColorSwatchColor.ts
7
7
  function getColorSwatchForeground(color) {
@@ -59,13 +59,20 @@ function getComponentColorValue(color) {
59
59
  if (parsed.kind === "custom") return parsed.value;
60
60
  }
61
61
  function getComponentContrastColor(color, options = {}) {
62
- if (!options.autoContrast) return "var(--rp-color-white)";
62
+ return getComponentContrastColorRoles(color, options).color;
63
+ }
64
+ function getComponentContrastColorRoles(color, options = {}) {
65
+ if (options.contrastColor !== void 0) return createContrastColorRoles(options.contrastColor);
66
+ if (options.autoContrast === false) return createContrastColorRoles("var(--rp-color-white)");
63
67
  const parsed = parseComponentColor(color);
64
- if (parsed.kind === "primary") return "var(--rp-primary-color-contrast)";
65
- if (parsed.kind === "preset") return `var(--rp-color-${parsed.color}-contrast)`;
66
- if (parsed.kind === "shade") return `var(--rp-color-${parsed.color}-${parsed.shade}-contrast)`;
67
- if (parsed.kind === "custom") return getReadableColorVariable(parsed.value);
68
- return "var(--rp-color-white)";
68
+ if (parsed.kind === "custom") return getCustomContrastColorRoles(parsed.value, true);
69
+ const roles = getComponentColorRoles(color);
70
+ if (!roles) return createContrastColorRoles("var(--rp-color-white)");
71
+ return {
72
+ color: roles.contrast,
73
+ hover: roles.contrastHover,
74
+ active: roles.contrastActive
75
+ };
69
76
  }
70
77
  function getComponentColorRoles(color) {
71
78
  const parsed = parseComponentColor(color);
@@ -90,32 +97,50 @@ function getComponentColorRoles(color) {
90
97
  });
91
98
  if (parsed.kind === "shade") {
92
99
  const base = `var(--rp-color-${parsed.color}-${parsed.shade})`;
100
+ const hoverShade = Math.min(Number(parsed.shade) + 1, 9);
93
101
  return createComponentColorRoles(base, {
94
- hover: `var(--rp-color-${parsed.color}-${Math.min(Number(parsed.shade) + 1, 9)})`,
102
+ hover: `var(--rp-color-${parsed.color}-${hoverShade})`,
95
103
  contrast: `var(--rp-color-${parsed.color}-${parsed.shade}-contrast)`,
104
+ contrastHover: `var(--rp-color-${parsed.color}-${hoverShade}-contrast)`,
105
+ contrastActive: `var(--rp-color-${parsed.color}-${parsed.shade}-active-contrast)`,
96
106
  foreground: base
97
107
  });
98
108
  }
99
- return createComponentColorRoles(parsed.value, { contrast: getReadableColorVariable(parsed.value) });
109
+ const contrast = getCustomContrastColorRoles(parsed.value);
110
+ return createComponentColorRoles(parsed.value, {
111
+ contrast: contrast.color,
112
+ contrastHover: contrast.hover,
113
+ contrastActive: contrast.active,
114
+ foreground: getCustomForegroundColor(parsed.value)
115
+ });
100
116
  }
101
- function getComponentVariantColorRoles({ color, variant, defaultColor = "primary", autoContrast }) {
117
+ function getComponentVariantColorRoles({ color, variant, defaultColor = "primary", autoContrast, contrastColor }) {
102
118
  const roles = getComponentColorRoles(color ?? defaultColor);
103
119
  if (!roles) return void 0;
104
- const contrast = getComponentContrastColor(color ?? defaultColor, { autoContrast });
105
- if (variant === "solid") return {
106
- background: roles.filled,
107
- hover: roles.hover,
108
- active: roles.active,
109
- color: contrast,
110
- border: roles.filled,
111
- borderHover: roles.hover,
112
- borderActive: roles.active
113
- };
120
+ if (variant === "solid") {
121
+ const contrast = getComponentContrastColorRoles(color ?? defaultColor, {
122
+ autoContrast,
123
+ contrastColor
124
+ });
125
+ return {
126
+ background: roles.filled,
127
+ hover: roles.hover,
128
+ active: roles.active,
129
+ color: contrast.color,
130
+ colorHover: contrast.hover,
131
+ colorActive: contrast.active,
132
+ border: roles.filled,
133
+ borderHover: roles.hover,
134
+ borderActive: roles.active
135
+ };
136
+ }
114
137
  if (variant === "subtle") return {
115
138
  background: roles.light,
116
139
  hover: roles.lightHover,
117
140
  active: roles.lightActive,
118
141
  color: roles.foreground,
142
+ colorHover: roles.foreground,
143
+ colorActive: roles.foreground,
119
144
  border: "transparent",
120
145
  borderHover: "transparent",
121
146
  borderActive: "transparent"
@@ -125,6 +150,8 @@ function getComponentVariantColorRoles({ color, variant, defaultColor = "primary
125
150
  hover: roles.lightHover,
126
151
  active: roles.lightActive,
127
152
  color: roles.foreground,
153
+ colorHover: roles.foreground,
154
+ colorActive: roles.foreground,
128
155
  border: roles.outline,
129
156
  borderHover: roles.lightHover,
130
157
  borderActive: roles.outlineHover
@@ -134,6 +161,8 @@ function getComponentVariantColorRoles({ color, variant, defaultColor = "primary
134
161
  hover: roles.lightHover,
135
162
  active: roles.lightActive,
136
163
  color: roles.foreground,
164
+ colorHover: roles.foreground,
165
+ colorActive: roles.foreground,
137
166
  border: roles.outline,
138
167
  borderHover: roles.outlineHover,
139
168
  borderActive: roles.outlineHover
@@ -143,6 +172,8 @@ function getComponentVariantColorRoles({ color, variant, defaultColor = "primary
143
172
  hover: roles.lightHover,
144
173
  active: roles.lightActive,
145
174
  color: roles.foreground,
175
+ colorHover: roles.foreground,
176
+ colorActive: roles.foreground,
146
177
  border: "transparent",
147
178
  borderHover: "transparent",
148
179
  borderActive: "transparent"
@@ -152,6 +183,8 @@ function getComponentVariantColorRoles({ color, variant, defaultColor = "primary
152
183
  hover: "transparent",
153
184
  active: "transparent",
154
185
  color: roles.foreground,
186
+ colorHover: roles.foreground,
187
+ colorActive: roles.foreground,
155
188
  border: "transparent",
156
189
  borderHover: "transparent",
157
190
  borderActive: "transparent"
@@ -161,17 +194,21 @@ function getComponentVariantColorRoles({ color, variant, defaultColor = "primary
161
194
  hover: roles.lightHover,
162
195
  active: roles.lightActive,
163
196
  color: roles.foreground,
197
+ colorHover: roles.foreground,
198
+ colorActive: roles.foreground,
164
199
  border: roles.outline,
165
200
  borderHover: roles.outlineHover,
166
201
  borderActive: roles.outlineHover
167
202
  };
168
203
  }
169
204
  function createComponentColorRoles(color, overrides = {}) {
170
- return {
205
+ const roles = {
171
206
  filled: color,
172
207
  hover: `color-mix(in srgb, ${color} 90%, var(--rp-color-black))`,
173
208
  active: `color-mix(in srgb, ${color} 80%, var(--rp-color-black))`,
174
209
  contrast: "var(--rp-color-white)",
210
+ contrastHover: "var(--rp-color-white)",
211
+ contrastActive: "var(--rp-color-white)",
175
212
  light: `color-mix(in srgb, ${color} 12%, transparent)`,
176
213
  lightHover: `color-mix(in srgb, ${color} 18%, transparent)`,
177
214
  lightActive: `color-mix(in srgb, ${color} 24%, transparent)`,
@@ -180,10 +217,70 @@ function createComponentColorRoles(color, overrides = {}) {
180
217
  foreground: color,
181
218
  ...overrides
182
219
  };
220
+ return {
221
+ ...roles,
222
+ contrastHover: overrides.contrastHover ?? roles.contrast,
223
+ contrastActive: overrides.contrastActive ?? roles.contrast
224
+ };
183
225
  }
184
- function getReadableColorVariable(color) {
226
+ var customForegroundBackgroundMixes = [
227
+ 0,
228
+ .12,
229
+ .18,
230
+ .24
231
+ ];
232
+ function getCustomForegroundColor(color) {
185
233
  const parsed = parseCssColor(color);
186
- if (!parsed) return "var(--rp-color-white)";
234
+ if (!parsed || parsed.opacity < 100) return color;
235
+ const black = {
236
+ red: 0,
237
+ green: 0,
238
+ blue: 0
239
+ };
240
+ const white = {
241
+ red: 255,
242
+ green: 255,
243
+ blue: 255
244
+ };
245
+ const darkBody = {
246
+ red: 36,
247
+ green: 36,
248
+ blue: 36
249
+ };
250
+ let colorPercent = 100;
251
+ while (colorPercent > 0) {
252
+ const weight = colorPercent / 100;
253
+ const lightForeground = mixOpaqueColors(parsed, weight, black);
254
+ const darkForeground = mixOpaqueColors(parsed, weight, white);
255
+ if (customForegroundBackgroundMixes.every((backgroundWeight) => {
256
+ const lightBackground = mixOpaqueColors(parsed, backgroundWeight, white);
257
+ const darkBackground = mixOpaqueColors(parsed, backgroundWeight, darkBody);
258
+ return contrastRatio(lightForeground, lightBackground) >= 4.5 && contrastRatio(darkForeground, darkBackground) >= 4.5;
259
+ })) break;
260
+ colorPercent -= 1;
261
+ }
262
+ if (colorPercent === 100) return color;
263
+ return `color-mix(in srgb, ${color} ${colorPercent}%, var(--rp-color-bright))`;
264
+ }
265
+ function getCustomContrastColorRoles(color, warnForTranslucentColor = false) {
266
+ const parsed = parseCssColor(color);
267
+ if (!parsed) return createContrastColorRoles("var(--rp-color-white)");
268
+ if (parsed.opacity < 100) {
269
+ if (warnForTranslucentColor);
270
+ return createContrastColorRoles("var(--rp-color-white)");
271
+ }
272
+ const black = {
273
+ red: 0,
274
+ green: 0,
275
+ blue: 0
276
+ };
277
+ return {
278
+ color: getReadableParsedColorVariable(parsed),
279
+ hover: getReadableParsedColorVariable(mixOpaqueColors(parsed, .9, black)),
280
+ active: getReadableParsedColorVariable(mixOpaqueColors(parsed, .8, black))
281
+ };
282
+ }
283
+ function getReadableParsedColorVariable(parsed) {
187
284
  return contrastRatio({
188
285
  red: 0,
189
286
  green: 0,
@@ -194,6 +291,21 @@ function getReadableColorVariable(color) {
194
291
  blue: 255
195
292
  }, parsed) ? "var(--rp-color-black)" : "var(--rp-color-white)";
196
293
  }
294
+ function createContrastColorRoles(color) {
295
+ return {
296
+ color,
297
+ hover: color,
298
+ active: color
299
+ };
300
+ }
301
+ function mixOpaqueColors(first, firstWeight, second) {
302
+ const secondWeight = 1 - firstWeight;
303
+ return {
304
+ red: first.red * firstWeight + second.red * secondWeight,
305
+ green: first.green * firstWeight + second.green * secondWeight,
306
+ blue: first.blue * firstWeight + second.blue * secondWeight
307
+ };
308
+ }
197
309
  function contrastRatio(foreground, background) {
198
310
  const foregroundLuminance = relativeLuminance(foreground);
199
311
  const backgroundLuminance = relativeLuminance(background);
@@ -210,4 +322,4 @@ function relativeLuminance(color) {
210
322
  return .2126 * red + .7152 * green + .0722 * blue;
211
323
  }
212
324
  //#endregion
213
- export { getComponentVariantColorRoles as i, getComponentColorValue as n, getComponentContrastColor as r, componentColors as t };
325
+ export { getComponentVariantColorRoles as a, getComponentContrastColor as i, getComponentColorRoles as n, getComponentColorValue as r, componentColors as t };
@@ -16,6 +16,7 @@ export interface AlertProps extends StylesApiProps<AlertPart> {
16
16
  variant?: AlertVariant;
17
17
  color?: AlertColor;
18
18
  autoContrast?: boolean;
19
+ contrastColor?: string;
19
20
  radius?: AlertRadius;
20
21
  role?: AlertRole;
21
22
  closable?: boolean;
@@ -1,3 +1,3 @@
1
1
  import { CSSProperties } from 'vue';
2
2
  import { AlertColor, AlertVariant } from './types.js';
3
- export declare function getAlertColorStyle(color: AlertColor | undefined, variant: AlertVariant | undefined, autoContrast: boolean | undefined): CSSProperties | undefined;
3
+ export declare function getAlertColorStyle(color: AlertColor | undefined, variant: AlertVariant | undefined, autoContrast: boolean | undefined, contrastColor?: string): CSSProperties | undefined;
@@ -18,6 +18,7 @@ export interface AvatarProps extends StylesApiProps<AvatarPart> {
18
18
  variant?: AvatarVariant;
19
19
  color?: AvatarColor;
20
20
  autoContrast?: boolean;
21
+ contrastColor?: string;
21
22
  size?: AvatarSize;
22
23
  radius?: AvatarRadius;
23
24
  }
@@ -1,3 +1,3 @@
1
1
  import { CSSProperties } from 'vue';
2
2
  import { AvatarColor, AvatarVariant } from './types.js';
3
- export declare function getAvatarColorStyle(color: AvatarColor | undefined, variant: AvatarVariant | undefined, autoContrast: boolean | undefined): CSSProperties | undefined;
3
+ export declare function getAvatarColorStyle(color: AvatarColor | undefined, variant: AvatarVariant | undefined, autoContrast: boolean | undefined, contrastColor?: string): CSSProperties | undefined;