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
@@ -0,0 +1,442 @@
1
+ import './pagination.css';
2
+ import { t as useControllableValue } from "./useControllableValue.js";
3
+ import { n as useStylesApi, t as presence } from "./styles-api.js";
4
+ import { t as bem } from "./bem.js";
5
+ import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
6
+ import { a as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
7
+ import { t as chevron_right_default } from "./chevron-right.js";
8
+ import { child, computed, createComponent, createFor, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, markRaw, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, unref } from "vue";
9
+ //#region ~icons/lucide/chevron-left
10
+ var t0$4 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><path fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"m15 18l-6-6l6-6\">", 3, 1);
11
+ function render$3(_ctx) {
12
+ return t0$4();
13
+ }
14
+ var chevron_left_default = markRaw(defineVaporComponent({
15
+ name: "lucide-chevron-left",
16
+ render: render$3
17
+ }));
18
+ //#endregion
19
+ //#region ~icons/lucide/chevrons-left
20
+ var t0$3 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><path fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"m11 17l-5-5l5-5m7 10l-5-5l5-5\">", 3, 1);
21
+ function render$2(_ctx) {
22
+ return t0$3();
23
+ }
24
+ var chevrons_left_default = markRaw(defineVaporComponent({
25
+ name: "lucide-chevrons-left",
26
+ render: render$2
27
+ }));
28
+ //#endregion
29
+ //#region ~icons/lucide/chevrons-right
30
+ var t0$2 = template("<svg viewBox=\"0 0 24 24\"width=1.2em height=1.2em><path fill=none stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=2 d=\"m6 17l5-5l-5-5m7 10l5-5l-5-5\">", 3, 1);
31
+ function render$1(_ctx) {
32
+ return t0$2();
33
+ }
34
+ var chevrons_right_default = markRaw(defineVaporComponent({
35
+ name: "lucide-chevrons-right",
36
+ render: render$1
37
+ }));
38
+ //#endregion
39
+ //#region ~icons/lucide/ellipsis
40
+ 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><circle cx=12 cy=12 r=1></circle><circle cx=19 cy=12 r=1></circle><circle cx=5 cy=12 r=1>", 3, 1);
41
+ function render(_ctx) {
42
+ return t0$1();
43
+ }
44
+ var ellipsis_default = markRaw(defineVaporComponent({
45
+ name: "lucide-ellipsis",
46
+ render
47
+ }));
48
+ //#endregion
49
+ //#region src/components/pagination/usePagination.ts
50
+ function normalizeCount(value, fallback) {
51
+ return Number.isFinite(value) ? Math.max(0, Math.floor(value)) : fallback;
52
+ }
53
+ function normalizePaginationTotal(total) {
54
+ return normalizeCount(total, 0);
55
+ }
56
+ function normalizePaginationPage(page, total) {
57
+ const safeTotal = normalizePaginationTotal(total);
58
+ return Math.min(Math.max(Number.isFinite(page) ? Math.floor(page) : 1, 1), Math.max(safeTotal, 1));
59
+ }
60
+ function getRange(start, end) {
61
+ return Array.from({ length: Math.max(end - start + 1, 0) }, (_, index) => start + index);
62
+ }
63
+ function getPaginationItems(total, page, siblings = 1, boundaries = 1) {
64
+ const safeTotal = normalizePaginationTotal(total);
65
+ if (safeTotal === 0) return [];
66
+ const currentPage = normalizePaginationPage(page, safeTotal);
67
+ const siblingCount = normalizeCount(siblings, 1);
68
+ const boundaryCount = normalizeCount(boundaries, 1);
69
+ if (safeTotal <= siblingCount * 2 + boundaryCount * 2 + 3) return getRange(1, safeTotal).map((pageValue) => ({
70
+ type: "page",
71
+ key: `page-${pageValue}`,
72
+ page: pageValue
73
+ }));
74
+ const leftSibling = Math.max(currentPage - siblingCount, boundaryCount);
75
+ const rightSibling = Math.min(currentPage + siblingCount, safeTotal - boundaryCount);
76
+ const showLeftEllipsis = leftSibling > boundaryCount + 2;
77
+ const showRightEllipsis = rightSibling < safeTotal - boundaryCount - 1;
78
+ let pages;
79
+ if (!showLeftEllipsis && showRightEllipsis) pages = [...getRange(1, siblingCount * 2 + boundaryCount + 2), ...getRange(safeTotal - boundaryCount + 1, safeTotal)];
80
+ else if (showLeftEllipsis && !showRightEllipsis) {
81
+ const rightItemCount = siblingCount * 2 + boundaryCount + 2;
82
+ pages = [...getRange(1, boundaryCount), ...getRange(safeTotal - rightItemCount + 1, safeTotal)];
83
+ } else pages = [
84
+ ...getRange(1, boundaryCount),
85
+ ...getRange(leftSibling, rightSibling),
86
+ ...getRange(safeTotal - boundaryCount + 1, safeTotal)
87
+ ];
88
+ const items = [];
89
+ let previous = 0;
90
+ function addGap(next) {
91
+ const missingPages = next - previous - 1;
92
+ if (missingPages === 1) {
93
+ const pageValue = previous + 1;
94
+ items.push({
95
+ type: "page",
96
+ key: `page-${pageValue}`,
97
+ page: pageValue
98
+ });
99
+ } else if (missingPages > 1) items.push({
100
+ type: "ellipsis",
101
+ key: `ellipsis-${previous}-${next}`
102
+ });
103
+ }
104
+ for (const pageValue of pages) {
105
+ addGap(pageValue);
106
+ items.push({
107
+ type: "page",
108
+ key: `page-${pageValue}`,
109
+ page: pageValue
110
+ });
111
+ previous = pageValue;
112
+ }
113
+ addGap(safeTotal + 1);
114
+ return items;
115
+ }
116
+ function getPaginationColorStyle(color, autoContrast, contrastColor) {
117
+ const roles = getComponentVariantColorRoles({
118
+ color: color ?? "primary",
119
+ variant: "solid",
120
+ autoContrast,
121
+ contrastColor
122
+ });
123
+ if (!roles) return void 0;
124
+ return {
125
+ "--_rp-pagination-active-bg": roles.background,
126
+ "--_rp-pagination-active-bg-hover": roles.hover,
127
+ "--_rp-pagination-active-fg": roles.color,
128
+ "--_rp-pagination-active-fg-hover": roles.colorHover
129
+ };
130
+ }
131
+ function usePagination(props, getCurrentValue, onChange) {
132
+ const totalPages = computed(() => normalizePaginationTotal(props.total));
133
+ const currentPage = computed(() => normalizePaginationPage(getCurrentValue(), totalPages.value));
134
+ const items = computed(() => getPaginationItems(totalPages.value, currentPage.value, props.siblings ?? 1, props.boundaries ?? 1));
135
+ const rootClass = computed(() => bem("rp-pagination", {
136
+ [`size-${props.size}`]: Boolean(props.size),
137
+ [`radius-${props.radius}`]: Boolean(props.radius),
138
+ disabled: props.disabled
139
+ }));
140
+ const rootStyle = computed(() => getPaginationColorStyle(props.color, props.autoContrast ?? true, props.contrastColor));
141
+ const firstPage = computed(() => 1);
142
+ const previousPage = computed(() => Math.max(1, currentPage.value - 1));
143
+ const nextPage = computed(() => Math.min(Math.max(totalPages.value, 1), currentPage.value + 1));
144
+ const lastPage = computed(() => Math.max(totalPages.value, 1));
145
+ const isFirstDisabled = computed(() => props.disabled || totalPages.value === 0 || currentPage.value <= 1);
146
+ const isLastDisabled = computed(() => props.disabled || totalPages.value === 0 || currentPage.value >= totalPages.value);
147
+ function selectPage(page) {
148
+ if (props.disabled || totalPages.value === 0) return false;
149
+ const next = normalizePaginationPage(page, totalPages.value);
150
+ if (next === currentPage.value) return false;
151
+ onChange(next);
152
+ return true;
153
+ }
154
+ return {
155
+ totalPages,
156
+ currentPage,
157
+ items,
158
+ rootClass,
159
+ rootStyle,
160
+ firstPage,
161
+ previousPage,
162
+ nextPage,
163
+ lastPage,
164
+ isFirstDisabled,
165
+ isLastDisabled,
166
+ selectPage
167
+ };
168
+ }
169
+ //#endregion
170
+ //#region src/components/pagination/pagination.vue?vue&type=script&setup=true&vapor=true&lang.ts
171
+ var t0 = template("<li data-v-6ae45781 class=rp-pagination__item><button data-v-6ae45781></button>");
172
+ var t1 = template(" ");
173
+ var t2 = template("<button data-v-6ae45781></button>");
174
+ var t3 = template("<span data-v-6ae45781>");
175
+ var t4 = template("<li data-v-6ae45781 class=rp-pagination__item>");
176
+ var t5 = template("<li data-v-6ae45781 class=rp-pagination__item><button data-v-6ae45781>");
177
+ var t6 = template("<nav data-v-6ae45781><ul data-v-6ae45781>", 1);
178
+ delegateEvents("click");
179
+ //#endregion
180
+ //#region src/components/pagination/pagination.vue
181
+ var pagination_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
182
+ name: "RpPagination",
183
+ inheritAttrs: false,
184
+ __name: "pagination",
185
+ props: {
186
+ id: {},
187
+ modelValue: { default: void 0 },
188
+ defaultValue: { default: 1 },
189
+ total: {},
190
+ siblings: { default: 1 },
191
+ boundaries: { default: 1 },
192
+ withControls: {
193
+ type: Boolean,
194
+ default: true
195
+ },
196
+ withEdges: {
197
+ type: Boolean,
198
+ default: false
199
+ },
200
+ disabled: {
201
+ type: Boolean,
202
+ default: false
203
+ },
204
+ color: {},
205
+ autoContrast: {
206
+ type: Boolean,
207
+ default: true
208
+ },
209
+ contrastColor: {},
210
+ size: { default: "md" },
211
+ radius: { default: "sm" },
212
+ ariaLabel: { default: "Pagination" },
213
+ labelledby: {},
214
+ describedby: {},
215
+ firstLabel: { default: "Go to first page" },
216
+ previousLabel: { default: "Go to previous page" },
217
+ nextLabel: { default: "Go to next page" },
218
+ lastLabel: { default: "Go to last page" },
219
+ getPageAriaLabel: {},
220
+ classNames: {},
221
+ styles: {}
222
+ },
223
+ emits: ["update:modelValue", "change"],
224
+ setup(__props, { emit: __emit }) {
225
+ const props = __props;
226
+ const emit = __emit;
227
+ const controllable = useControllableValue({
228
+ modelValue: () => props.modelValue,
229
+ defaultValue: () => props.defaultValue,
230
+ onChange(page) {
231
+ emit("update:modelValue", page);
232
+ emit("change", page);
233
+ }
234
+ });
235
+ const { totalPages, currentPage, items, rootClass, rootStyle, firstPage, previousPage, nextPage, lastPage, isFirstDisabled, isLastDisabled, selectPage } = usePagination(props, () => controllable.value.value, (page) => controllable.setValue(page));
236
+ const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
237
+ const rootAttrs = computed(() => getRootAttrs({
238
+ id: props.id,
239
+ class: rootClass.value,
240
+ style: rootStyle.value,
241
+ "data-page": currentPage.value,
242
+ "data-total": totalPages.value,
243
+ "data-disabled": presence(props.disabled),
244
+ "aria-label": props.ariaLabel || void 0,
245
+ "aria-labelledby": props.labelledby,
246
+ "aria-describedby": props.describedby
247
+ }));
248
+ function getControlAttrs(control, isDisabled) {
249
+ return {
250
+ ...getPartAttrs("control", { class: ["rp-pagination__control", `rp-pagination__control--${control}`] }),
251
+ "data-control": control,
252
+ "data-disabled": presence(isDisabled)
253
+ };
254
+ }
255
+ function getPageAttrs(page) {
256
+ const active = page === currentPage.value;
257
+ return {
258
+ ...getPartAttrs("page", { class: ["rp-pagination__page", { "rp-pagination__page--active": active }] }),
259
+ "data-page": page,
260
+ "data-active": presence(active),
261
+ "data-disabled": presence(props.disabled)
262
+ };
263
+ }
264
+ function getPageLabel(page) {
265
+ const active = page === currentPage.value;
266
+ if (props.getPageAriaLabel) return props.getPageAriaLabel(page, active);
267
+ return active ? `Page ${page}, current page` : `Go to page ${page}`;
268
+ }
269
+ const n43 = t6();
270
+ const n42 = child(n43);
271
+ renderEffect(() => {
272
+ setDynamicProps(n43, [rootAttrs.value]);
273
+ setDynamicProps(n42, [unref(getPartAttrs)("items", { class: "rp-pagination__items" })]);
274
+ });
275
+ setInsertionState(n42, null, 0);
276
+ createIf(() => __props.withEdges, () => {
277
+ const n6 = t0();
278
+ const n5 = child(n6);
279
+ renderEffect(() => {
280
+ const _isFirstDisabled = unref(isFirstDisabled);
281
+ setDynamicProps(n5, [getControlAttrs("first", _isFirstDisabled), {
282
+ type: "button",
283
+ "aria-label": __props.firstLabel,
284
+ disabled: _isFirstDisabled
285
+ }]);
286
+ });
287
+ setInsertionState(n5, null, 0);
288
+ createSlot("first", {
289
+ page: () => unref(firstPage),
290
+ disabled: () => unref(isFirstDisabled)
291
+ }, () => {
292
+ return createComponent(unref(chevrons_left_default), {
293
+ class: "rp-pagination__control-icon",
294
+ "aria-hidden": "true"
295
+ });
296
+ }, 1);
297
+ n5.$evtclick = createInvoker(() => unref(selectPage)(unref(firstPage)));
298
+ return n6;
299
+ });
300
+ setInsertionState(n42, null, 1);
301
+ createIf(() => __props.withControls, () => {
302
+ const n13 = t0();
303
+ const n12 = child(n13);
304
+ renderEffect(() => {
305
+ const _isFirstDisabled = unref(isFirstDisabled);
306
+ setDynamicProps(n12, [getControlAttrs("previous", _isFirstDisabled), {
307
+ type: "button",
308
+ "aria-label": __props.previousLabel,
309
+ disabled: _isFirstDisabled
310
+ }]);
311
+ });
312
+ setInsertionState(n12, null, 0);
313
+ createSlot("previous", {
314
+ page: () => unref(previousPage),
315
+ disabled: () => unref(isFirstDisabled)
316
+ }, () => {
317
+ return createComponent(unref(chevron_left_default), {
318
+ class: "rp-pagination__control-icon",
319
+ "aria-hidden": "true"
320
+ });
321
+ }, 1);
322
+ n12.$evtclick = createInvoker(() => unref(selectPage)(unref(previousPage)));
323
+ return n13;
324
+ });
325
+ setInsertionState(n42, null, 2);
326
+ createFor(() => unref(items), (_for_item0) => {
327
+ const n27 = t4();
328
+ setInsertionState(n27, null, 0);
329
+ createIf(() => _for_item0.value.type === "page", () => {
330
+ const n21 = t2();
331
+ renderEffect(() => {
332
+ const _item = _for_item0.value;
333
+ setDynamicProps(n21, [getPageAttrs(_item.page), {
334
+ type: "button",
335
+ "aria-label": getPageLabel(_item.page),
336
+ "aria-current": _item.page === unref(currentPage) ? "page" : void 0,
337
+ disabled: __props.disabled
338
+ }]);
339
+ });
340
+ setInsertionState(n21, null, 0);
341
+ createSlot("page", {
342
+ page: () => _for_item0.value.page,
343
+ active: () => _for_item0.value.page === unref(currentPage)
344
+ }, () => {
345
+ const n20 = t1();
346
+ renderEffect(() => setText(n20, toDisplayString(_for_item0.value.page)));
347
+ return n20;
348
+ }, 1);
349
+ n21.$evtclick = createInvoker(() => unref(selectPage)(_for_item0.value.page));
350
+ return n21;
351
+ }, () => {
352
+ const n26 = t3();
353
+ renderEffect(() => setDynamicProps(n26, [unref(getPartAttrs)("ellipsis", { class: "rp-pagination__ellipsis" }), { "aria-hidden": "true" }]));
354
+ setInsertionState(n26, null, 0);
355
+ createSlot("ellipsis", null, () => {
356
+ return createComponent(unref(ellipsis_default));
357
+ }, 1);
358
+ return n26;
359
+ }, 773);
360
+ return n27;
361
+ }, (item) => item.key, 8);
362
+ setInsertionState(n42, null, 3);
363
+ createIf(() => __props.withControls, () => {
364
+ const n34 = t0();
365
+ const n33 = child(n34);
366
+ renderEffect(() => {
367
+ const _isLastDisabled = unref(isLastDisabled);
368
+ setDynamicProps(n33, [getControlAttrs("next", _isLastDisabled), {
369
+ type: "button",
370
+ "aria-label": __props.nextLabel,
371
+ disabled: _isLastDisabled
372
+ }]);
373
+ });
374
+ setInsertionState(n33, null, 0);
375
+ createSlot("next", {
376
+ page: () => unref(nextPage),
377
+ disabled: () => unref(isLastDisabled)
378
+ }, () => {
379
+ return createComponent(unref(chevron_right_default), {
380
+ class: "rp-pagination__control-icon",
381
+ "aria-hidden": "true"
382
+ });
383
+ }, 1);
384
+ n33.$evtclick = createInvoker(() => unref(selectPage)(unref(nextPage)));
385
+ return n34;
386
+ });
387
+ setInsertionState(n42, null, 4);
388
+ createIf(() => __props.withEdges, () => {
389
+ const n41 = t5();
390
+ const n40 = child(n41);
391
+ renderEffect(() => {
392
+ const _isLastDisabled = unref(isLastDisabled);
393
+ setDynamicProps(n40, [getControlAttrs("last", _isLastDisabled), {
394
+ type: "button",
395
+ "aria-label": __props.lastLabel,
396
+ disabled: _isLastDisabled
397
+ }]);
398
+ });
399
+ setInsertionState(n40, null, 0);
400
+ createSlot("last", {
401
+ page: () => unref(lastPage),
402
+ disabled: () => unref(isLastDisabled)
403
+ }, () => {
404
+ return createComponent(unref(chevrons_right_default), {
405
+ class: "rp-pagination__control-icon",
406
+ "aria-hidden": "true"
407
+ });
408
+ }, 1);
409
+ n40.$evtclick = createInvoker(() => unref(selectPage)(unref(lastPage)));
410
+ return n41;
411
+ });
412
+ return n43;
413
+ }
414
+ }), [["__scopeId", "data-v-6ae45781"]]);
415
+ //#endregion
416
+ //#region src/components/pagination/types.ts
417
+ var paginationParts = [
418
+ "root",
419
+ "items",
420
+ "control",
421
+ "page",
422
+ "ellipsis"
423
+ ];
424
+ var paginationColors = componentColors;
425
+ var paginationSizes = [
426
+ "xs",
427
+ "sm",
428
+ "md",
429
+ "lg",
430
+ "xl"
431
+ ];
432
+ var paginationRadiuses = [
433
+ "none",
434
+ "xs",
435
+ "sm",
436
+ "md",
437
+ "lg",
438
+ "xl",
439
+ "full"
440
+ ];
441
+ //#endregion
442
+ export { pagination_default as a, normalizePaginationTotal as c, paginationSizes as i, usePagination as l, paginationParts as n, getPaginationItems as o, paginationRadiuses as r, normalizePaginationPage as s, paginationColors as t };
package/dist/popover.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import './popover.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
6
  import { n as useOverlayZIndex, r as useOverlayLayer } from "./useOverlayZIndex.js";
6
7
  import { t as useFocusTrap } from "./useFocusTrap.js";
@@ -55,7 +56,11 @@ function usePopover(props, emitOpenChange) {
55
56
  const rootRef = ref(null);
56
57
  const contentRef = ref(null);
57
58
  const arrowRef = ref(null);
58
- const uncontrolledOpen = ref(false);
59
+ const controllableOpen = useControllableValue({
60
+ modelValue: () => props.open,
61
+ defaultValue: () => false,
62
+ onChange: (open) => emitOpenChange?.(open)
63
+ });
59
64
  const popoverId = computed(() => props.id ?? `${generatedId}-popover`);
60
65
  const placement = computed(() => props.placement ?? DEFAULT_PLACEMENT);
61
66
  const popoverRole = computed(() => props.role ?? DEFAULT_ROLE);
@@ -65,7 +70,7 @@ function usePopover(props, emitOpenChange) {
65
70
  const targetElement = computed(() => isElementReference(resolvedTarget.value) ? resolvedTarget.value : null);
66
71
  const hasContent = computed(() => Boolean(slots.content || isExplicitTarget.value && slots.default));
67
72
  const isDisabled = computed(() => Boolean(props.disabled || !hasContent.value));
68
- const isOpen = computed(() => props.open ?? uncontrolledOpen.value);
73
+ const isOpen = controllableOpen.value;
69
74
  const isVisible = computed(() => isOpen.value && !isDisabled.value);
70
75
  const layer = useOverlayLayer({
71
76
  active: isVisible,
@@ -153,9 +158,7 @@ function usePopover(props, emitOpenChange) {
153
158
  allowOutsideClick: true
154
159
  });
155
160
  function setOpen(nextOpen) {
156
- const previousOpen = isOpen.value;
157
- if (props.open === void 0) uncontrolledOpen.value = nextOpen;
158
- if (previousOpen !== nextOpen) emitOpenChange?.(nextOpen);
161
+ if (isOpen.value !== nextOpen) controllableOpen.setValue(nextOpen);
159
162
  }
160
163
  function openPopover() {
161
164
  if (!isDisabled.value) setOpen(true);
package/dist/progress.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer ropav.components {
2
- .rp-progress[data-v-70bd0dd5] {
2
+ .rp-progress[data-v-4a492ff8] {
3
3
  --_rp-progress-color: var(--rp-color-control-selected-bg);
4
4
  --_rp-progress-track-bg: var(--rp-color-control-track-bg);
5
5
  --_rp-progress-track-height: 8px;
@@ -15,23 +15,23 @@
15
15
  font-size: var(--_rp-progress-font-size);
16
16
  line-height: var(--rp-line-height-md);
17
17
  }
18
- .rp-progress__header[data-v-70bd0dd5] {
18
+ .rp-progress__header[data-v-4a492ff8] {
19
19
  display: flex;
20
20
  align-items: center;
21
21
  justify-content: space-between;
22
22
  min-width: 0;
23
23
  gap: var(--rp-spacing-3);
24
24
  }
25
- .rp-progress__label[data-v-70bd0dd5] {
25
+ .rp-progress__label[data-v-4a492ff8] {
26
26
  min-width: 0;
27
27
  color: var(--rp-color-text);
28
28
  }
29
- .rp-progress__value[data-v-70bd0dd5] {
29
+ .rp-progress__value[data-v-4a492ff8] {
30
30
  flex-shrink: 0;
31
31
  color: var(--rp-color-dimmed);
32
32
  font-variant-numeric: tabular-nums;
33
33
  }
34
- .rp-progress__track[data-v-70bd0dd5] {
34
+ .rp-progress__track[data-v-4a492ff8] {
35
35
  position: relative;
36
36
  display: block;
37
37
  width: 100%;
@@ -40,7 +40,7 @@
40
40
  background: var(--_rp-progress-track-bg);
41
41
  border-radius: var(--_rp-progress-radius);
42
42
  }
43
- .rp-progress__indicator[data-v-70bd0dd5] {
43
+ .rp-progress__indicator[data-v-4a492ff8] {
44
44
  display: block;
45
45
  width: var(--_rp-progress-value);
46
46
  height: 100%;
@@ -48,54 +48,62 @@
48
48
  border-radius: inherit;
49
49
  transition: width var(--rp-transition-base);
50
50
  }
51
- .rp-progress--indeterminate .rp-progress__indicator[data-v-70bd0dd5] {
51
+ .rp-progress--indeterminate .rp-progress__indicator[data-v-4a492ff8] {
52
52
  position: absolute;
53
53
  width: 38%;
54
54
  min-width: 2rem;
55
- animation: rp-progress-indeterminate-70bd0dd5 1200ms ease-in-out infinite;
55
+ animation: rp-progress-indeterminate-4a492ff8 1200ms ease-in-out infinite;
56
56
  }
57
- .rp-progress--size-xs[data-v-70bd0dd5] {
57
+ .rp-progress--size-xs[data-v-4a492ff8] {
58
58
  --_rp-progress-track-height: 3px;
59
59
  --_rp-progress-font-size: var(--rp-font-size-xs);
60
60
  }
61
- .rp-progress--size-sm[data-v-70bd0dd5] {
61
+ .rp-progress--size-sm[data-v-4a492ff8] {
62
62
  --_rp-progress-track-height: 5px;
63
63
  --_rp-progress-font-size: var(--rp-font-size-sm);
64
64
  }
65
- .rp-progress--size-md[data-v-70bd0dd5] {
65
+ .rp-progress--size-md[data-v-4a492ff8] {
66
66
  --_rp-progress-track-height: 8px;
67
67
  --_rp-progress-font-size: var(--rp-font-size-md);
68
68
  }
69
- .rp-progress--size-lg[data-v-70bd0dd5] {
69
+ .rp-progress--size-lg[data-v-4a492ff8] {
70
70
  --_rp-progress-track-height: 12px;
71
71
  --_rp-progress-font-size: var(--rp-font-size-lg);
72
72
  }
73
- .rp-progress--size-xl[data-v-70bd0dd5] {
73
+ .rp-progress--size-xl[data-v-4a492ff8] {
74
74
  --_rp-progress-track-height: 16px;
75
75
  --_rp-progress-font-size: var(--rp-font-size-xl);
76
76
  }
77
- .rp-progress--radius-none[data-v-70bd0dd5] {
77
+ .rp-progress--radius-none[data-v-4a492ff8] {
78
78
  --_rp-progress-radius: var(--rp-radius-none);
79
79
  }
80
- .rp-progress--radius-xs[data-v-70bd0dd5] {
80
+ .rp-progress--radius-xs[data-v-4a492ff8] {
81
81
  --_rp-progress-radius: var(--rp-radius-xs);
82
82
  }
83
- .rp-progress--radius-sm[data-v-70bd0dd5] {
83
+ .rp-progress--radius-sm[data-v-4a492ff8] {
84
84
  --_rp-progress-radius: var(--rp-radius-sm);
85
85
  }
86
- .rp-progress--radius-md[data-v-70bd0dd5] {
86
+ .rp-progress--radius-md[data-v-4a492ff8] {
87
87
  --_rp-progress-radius: var(--rp-radius-md);
88
88
  }
89
- .rp-progress--radius-lg[data-v-70bd0dd5] {
89
+ .rp-progress--radius-lg[data-v-4a492ff8] {
90
90
  --_rp-progress-radius: var(--rp-radius-lg);
91
91
  }
92
- .rp-progress--radius-xl[data-v-70bd0dd5] {
92
+ .rp-progress--radius-xl[data-v-4a492ff8] {
93
93
  --_rp-progress-radius: var(--rp-radius-xl);
94
94
  }
95
- .rp-progress--radius-full[data-v-70bd0dd5] {
95
+ .rp-progress--radius-full[data-v-4a492ff8] {
96
96
  --_rp-progress-radius: var(--rp-radius-full);
97
97
  }
98
- @keyframes rp-progress-indeterminate-70bd0dd5 {
98
+ @media (prefers-reduced-motion: reduce) {
99
+ .rp-progress__indicator[data-v-4a492ff8] {
100
+ transition: none;
101
+ }
102
+ .rp-progress--indeterminate .rp-progress__indicator[data-v-4a492ff8] {
103
+ animation: none;
104
+ }
105
+ }
106
+ @keyframes rp-progress-indeterminate-4a492ff8 {
99
107
  0% {
100
108
  transform: translateX(-110%);
101
109
  }
package/dist/progress.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import './progress.css';
2
- import { t as bem } from "./bem.js";
3
2
  import { n as useStylesApi } from "./styles-api.js";
4
- import { n as getComponentColorValue, 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 { r as getComponentColorValue, t as componentColors } from "./componentColors.js";
6
6
  import { t as useControlState } from "./useControlState.js";
7
- import { child, computed, createIf, createSlot, defineVaporComponent, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, unref } from "vue";
7
+ import { child, computed, createIf, createSlot, defineVaporComponent, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, unref, useId, useSlots } from "vue";
8
8
  //#region src/components/progress/useProgress.ts
9
9
  function normalizeProgressBounds(min, max) {
10
10
  const safeMin = Number.isFinite(min) ? min : 0;
@@ -70,10 +70,10 @@ function useProgress(props) {
70
70
  }
71
71
  //#endregion
72
72
  //#region src/components/progress/progress.vue?vue&type=script&setup=true&vapor=true&lang.ts
73
- var t0 = template("<span data-v-70bd0dd5>");
73
+ var t0 = template("<span data-v-4a492ff8>");
74
74
  var t1 = template(" ");
75
- var t2 = template("<span data-v-70bd0dd5 class=rp-progress__header>");
76
- var t3 = template("<div data-v-70bd0dd5><span data-v-70bd0dd5><span data-v-70bd0dd5>", 1);
75
+ var t2 = template("<span data-v-4a492ff8 class=rp-progress__header>");
76
+ var t3 = template("<div data-v-4a492ff8><span data-v-4a492ff8><span data-v-4a492ff8>", 1);
77
77
  //#endregion
78
78
  //#region src/components/progress/progress.vue
79
79
  var progress_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -106,16 +106,23 @@ var progress_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
106
106
  },
107
107
  setup(__props, { slots: $slots }) {
108
108
  const props = __props;
109
+ const slots = useSlots();
110
+ const labelId = `${useId()}-label`;
109
111
  const { control, rootClass, rootStyle, isIndeterminate, normalizedValue, valuePercent, formattedValue, ariaValueText, ariaValueMin, ariaValueMax, ariaValueNow } = useProgress(props);
110
112
  const { getPartAttrs, getRootAttrs } = useStylesApi(props, "root");
113
+ const ariaLabel = computed(() => props.ariaLabel?.trim() || void 0);
114
+ const ariaLabelledby = computed(() => {
115
+ if (ariaLabel.value) return void 0;
116
+ return control.ariaLabelledby || (slots.default ? labelId : void 0);
117
+ });
111
118
  const rootAttrs = computed(() => getRootAttrs({
112
119
  id: control.id,
113
120
  class: rootClass.value,
114
121
  style: rootStyle.value,
115
122
  role: "progressbar",
116
123
  "data-state": isIndeterminate.value ? "indeterminate" : "determinate",
117
- "aria-label": props.ariaLabel || void 0,
118
- "aria-labelledby": control.ariaLabelledby,
124
+ "aria-label": ariaLabel.value,
125
+ "aria-labelledby": ariaLabelledby.value,
119
126
  "aria-describedby": control.ariaDescribedby,
120
127
  "aria-valuemin": ariaValueMin.value,
121
128
  "aria-valuemax": ariaValueMax.value,
@@ -132,7 +139,7 @@ var progress_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
132
139
  setInsertionState(n14, null, 0);
133
140
  createIf(() => $slots.default, () => {
134
141
  const n5 = t0();
135
- renderEffect(() => setDynamicProps(n5, [unref(getPartAttrs)("label", { class: "rp-progress__label" })]));
142
+ renderEffect(() => setDynamicProps(n5, [{ id: labelId }, unref(getPartAttrs)("label", { class: "rp-progress__label" })]));
136
143
  setInsertionState(n5, null, 0);
137
144
  createSlot("default", null, null, 1);
138
145
  return n5;
@@ -164,7 +171,7 @@ var progress_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
164
171
  });
165
172
  return n17;
166
173
  }
167
- }), [["__scopeId", "data-v-70bd0dd5"]]);
174
+ }), [["__scopeId", "data-v-4a492ff8"]]);
168
175
  //#endregion
169
176
  //#region src/components/progress/types.ts
170
177
  var progressParts = [