ropav 0.0.5 → 0.0.7

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 (178) hide show
  1. package/README.md +20 -51
  2. package/dist/_plugin-vue_export-helper.js +1 -11
  3. package/dist/accordion.css +112 -0
  4. package/dist/accordion.js +360 -0
  5. package/dist/accordion.js.map +1 -0
  6. package/dist/badge.css +169 -0
  7. package/dist/badge.js +103 -0
  8. package/dist/badge.js.map +1 -0
  9. package/dist/base.css +21 -0
  10. package/dist/bem.js +11 -0
  11. package/dist/bem.js.map +1 -0
  12. package/dist/button-group.css +50 -0
  13. package/dist/button-group.js +50 -0
  14. package/dist/button-group.js.map +1 -0
  15. package/dist/button.css +72 -42
  16. package/dist/button.js +43 -32
  17. package/dist/button.js.map +1 -1
  18. package/dist/card.js +2 -1
  19. package/dist/card.js.map +1 -1
  20. package/dist/checkbox.css +105 -102
  21. package/dist/checkbox.js +20 -7
  22. package/dist/checkbox.js.map +1 -1
  23. package/dist/collapse.css +32 -0
  24. package/dist/collapse.js +68 -0
  25. package/dist/collapse.js.map +1 -0
  26. package/dist/componentColors.js +22 -0
  27. package/dist/componentColors.js.map +1 -0
  28. package/dist/components/accordion/accordion-item.d.ts +40 -0
  29. package/dist/components/accordion/accordion.d.ts +23 -0
  30. package/dist/components/accordion/index.d.ts +4 -0
  31. package/dist/components/accordion/index.js +2 -0
  32. package/dist/components/accordion/types.d.ts +100 -0
  33. package/dist/components/accordion/useAccordion.d.ts +3 -0
  34. package/dist/components/badge/badge.d.ts +25 -0
  35. package/dist/components/badge/index.d.ts +3 -0
  36. package/dist/components/badge/index.js +2 -0
  37. package/dist/components/badge/types.d.ts +16 -0
  38. package/dist/components/badge/useBadgeColor.d.ts +8 -0
  39. package/dist/components/button/button.d.ts +2 -0
  40. package/dist/components/button/types.d.ts +2 -1
  41. package/dist/components/button/useButtonColor.d.ts +13 -0
  42. package/dist/components/button-group/button-group.d.ts +21 -0
  43. package/dist/components/button-group/index.d.ts +2 -0
  44. package/dist/components/button-group/index.js +2 -0
  45. package/dist/components/button-group/types.d.ts +10 -0
  46. package/dist/components/checkbox/types.d.ts +2 -1
  47. package/dist/components/checkbox/useCheckbox.d.ts +4 -0
  48. package/dist/components/collapse/collapse.d.ts +36 -0
  49. package/dist/components/collapse/index.d.ts +3 -0
  50. package/dist/components/collapse/index.js +3 -0
  51. package/dist/components/collapse/types.d.ts +76 -0
  52. package/dist/components/collapse/useCollapse.d.ts +2 -0
  53. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +16 -0
  54. package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +23 -0
  55. package/dist/components/dropdown-menu/dropdown-menu.d.ts +26 -0
  56. package/dist/components/dropdown-menu/index.d.ts +3 -0
  57. package/dist/components/dropdown-menu/index.js +2 -0
  58. package/dist/components/dropdown-menu/types.d.ts +104 -0
  59. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +32 -0
  60. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +30 -0
  61. package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +28 -0
  62. package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +24 -0
  63. package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +51 -0
  64. package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +16 -0
  65. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +25 -0
  66. package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +18 -0
  67. package/dist/components/field/field.d.ts +2 -2
  68. package/dist/components/field/useField.d.ts +16 -0
  69. package/dist/components/input/useInput.d.ts +8 -0
  70. package/dist/components/modal/index.d.ts +2 -0
  71. package/dist/components/modal/index.js +2 -0
  72. package/dist/components/modal/modal.d.ts +42 -0
  73. package/dist/components/modal/types.d.ts +32 -0
  74. package/dist/components/modal/useModal.d.ts +29 -0
  75. package/dist/components/overlay/index.d.ts +2 -0
  76. package/dist/components/overlay/index.js +2 -0
  77. package/dist/components/overlay/overlay.d.ts +19 -0
  78. package/dist/components/overlay/types.d.ts +12 -0
  79. package/dist/components/overlay/useOverlay.d.ts +7 -0
  80. package/dist/components/popover/index.d.ts +2 -0
  81. package/dist/components/popover/index.js +2 -0
  82. package/dist/components/popover/popover.d.ts +43 -0
  83. package/dist/components/popover/types.d.ts +40 -0
  84. package/dist/components/popover/usePopover.d.ts +20 -0
  85. package/dist/components/progress/index.d.ts +3 -0
  86. package/dist/components/progress/index.js +2 -0
  87. package/dist/components/progress/progress.d.ts +27 -0
  88. package/dist/components/progress/types.d.ts +24 -0
  89. package/dist/components/progress/useProgress.d.ts +28 -0
  90. package/dist/components/radio/types.d.ts +2 -1
  91. package/dist/components/radio/useRadio.d.ts +4 -0
  92. package/dist/components/slider/index.d.ts +3 -0
  93. package/dist/components/slider/index.js +2 -0
  94. package/dist/components/slider/slider.d.ts +35 -0
  95. package/dist/components/slider/types.d.ts +50 -0
  96. package/dist/components/slider/useSlider.d.ts +50 -0
  97. package/dist/components/switch/types.d.ts +2 -1
  98. package/dist/components/switch/useSwitch.d.ts +3 -0
  99. package/dist/components/tabs/index.d.ts +6 -0
  100. package/dist/components/tabs/index.js +2 -0
  101. package/dist/components/tabs/tabs-content.d.ts +24 -0
  102. package/dist/components/tabs/tabs-list.d.ts +26 -0
  103. package/dist/components/tabs/tabs-trigger.d.ts +29 -0
  104. package/dist/components/tabs/tabs.d.ts +31 -0
  105. package/dist/components/tabs/types.d.ts +160 -0
  106. package/dist/components/tabs/useTabs.d.ts +5 -0
  107. package/dist/components/textarea/index.d.ts +1 -1
  108. package/dist/components/textarea/types.d.ts +5 -0
  109. package/dist/components/textarea/useTextarea.d.ts +2 -0
  110. package/dist/components/tooltip/index.d.ts +2 -0
  111. package/dist/components/tooltip/index.js +2 -0
  112. package/dist/components/tooltip/tooltip.d.ts +27 -0
  113. package/dist/components/tooltip/types.d.ts +29 -0
  114. package/dist/components/tooltip/useTooltip.d.ts +17 -0
  115. package/dist/dropdown-menu.css +159 -0
  116. package/dist/dropdown-menu.js +903 -0
  117. package/dist/dropdown-menu.js.map +1 -0
  118. package/dist/field.css +8 -8
  119. package/dist/field.js +68 -50
  120. package/dist/field.js.map +1 -1
  121. package/dist/icon-button.css +82 -49
  122. package/dist/icon-button.js +15 -10
  123. package/dist/icon-button.js.map +1 -1
  124. package/dist/index.d.ts +12 -0
  125. package/dist/index.js +17 -1
  126. package/dist/input.css +25 -25
  127. package/dist/input.js +57 -38
  128. package/dist/input.js.map +1 -1
  129. package/dist/modal.css +134 -0
  130. package/dist/modal.js +433 -0
  131. package/dist/modal.js.map +1 -0
  132. package/dist/overlay.css +28 -0
  133. package/dist/overlay.js +84 -0
  134. package/dist/overlay.js.map +1 -0
  135. package/dist/popover.css +75 -0
  136. package/dist/popover.js +367 -0
  137. package/dist/popover.js.map +1 -0
  138. package/dist/progress.css +125 -0
  139. package/dist/progress.js +178 -0
  140. package/dist/progress.js.map +1 -0
  141. package/dist/radio.css +83 -83
  142. package/dist/radio.js +21 -14
  143. package/dist/radio.js.map +1 -1
  144. package/dist/select.css +3 -1
  145. package/dist/select.js +15 -37
  146. package/dist/select.js.map +1 -1
  147. package/dist/slider.css +438 -0
  148. package/dist/slider.js +413 -0
  149. package/dist/slider.js.map +1 -0
  150. package/dist/switch.css +77 -77
  151. package/dist/switch.js +17 -7
  152. package/dist/switch.js.map +1 -1
  153. package/dist/tabs.css +279 -0
  154. package/dist/tabs.js +515 -0
  155. package/dist/tabs.js.map +1 -0
  156. package/dist/textarea.css +33 -26
  157. package/dist/textarea.js +108 -16
  158. package/dist/textarea.js.map +1 -1
  159. package/dist/tooltip.css +136 -0
  160. package/dist/tooltip.js +385 -0
  161. package/dist/tooltip.js.map +1 -0
  162. package/dist/useButtonColor.js +33 -0
  163. package/dist/useButtonColor.js.map +1 -0
  164. package/dist/useClickOutside.js +26 -0
  165. package/dist/useClickOutside.js.map +1 -0
  166. package/dist/useCollapse.js +94 -0
  167. package/dist/useCollapse.js.map +1 -0
  168. package/dist/useRequiredInject.js +11 -0
  169. package/dist/useRequiredInject.js.map +1 -0
  170. package/dist/x.js +14 -0
  171. package/dist/x.js.map +1 -0
  172. package/package.json +52 -4
  173. package/src/styles/_mixins.scss +17 -0
  174. package/src/styles/_utilities.scss +13 -0
  175. package/src/styles/base.scss +1 -0
  176. package/dist/_plugin-vue_export-helper.js.map +0 -1
  177. package/dist/loader-circle.js +0 -14
  178. package/dist/loader-circle.js.map +0 -1
@@ -0,0 +1,385 @@
1
+ import './tooltip.css';
2
+ import { t as bem } from "./bem.js";
3
+ import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
4
+ import { n as getComponentCustomColor, r as isComponentPresetColor } from "./componentColors.js";
5
+ import { VaporTransition, applyVShow, computed, createComponent, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, extend, isRef, on, onBeforeUnmount, onMounted, ref, renderEffect, setAttr, setClass, setInsertionState, setProp, setStyle, setText, template, toDisplayString, unref, useId, useSlots, watch } from "vue";
6
+ //#region src/composables/useDelayedOpen.ts
7
+ function readOption(value, fallback) {
8
+ return typeof value === "function" ? value() ?? fallback : value ?? fallback;
9
+ }
10
+ function readOptional(value) {
11
+ return typeof value === "function" ? value() : value;
12
+ }
13
+ function useDelayedOpen(options = {}) {
14
+ const uncontrolledOpen = ref(false);
15
+ let openTimer = null;
16
+ const isOpen = computed(() => readOptional(options.open) ?? uncontrolledOpen.value);
17
+ function clearTimers() {
18
+ if (openTimer) {
19
+ clearTimeout(openTimer);
20
+ openTimer = null;
21
+ }
22
+ }
23
+ function isDisabled() {
24
+ return readOption(options.disabled, false);
25
+ }
26
+ function setOpen(nextOpen) {
27
+ const previousOpen = isOpen.value;
28
+ if (readOptional(options.open) === void 0) uncontrolledOpen.value = nextOpen;
29
+ if (previousOpen !== nextOpen) options.onOpenChange?.(nextOpen);
30
+ }
31
+ function open() {
32
+ if (isDisabled()) return;
33
+ const delay = readOption(options.openDelay, 0);
34
+ if (delay <= 0) {
35
+ setOpen(true);
36
+ return;
37
+ }
38
+ if (openTimer) clearTimeout(openTimer);
39
+ openTimer = setTimeout(() => {
40
+ setOpen(true);
41
+ openTimer = null;
42
+ }, delay);
43
+ }
44
+ function closeImmediate() {
45
+ clearTimers();
46
+ setOpen(false);
47
+ }
48
+ onBeforeUnmount(clearTimers);
49
+ return {
50
+ isOpen,
51
+ open,
52
+ closeImmediate
53
+ };
54
+ }
55
+ //#endregion
56
+ //#region src/components/tooltip/useTooltip.ts
57
+ function isHTMLElement(value) {
58
+ return typeof HTMLElement !== "undefined" && value instanceof HTMLElement;
59
+ }
60
+ function getTargetPosition(rect, placement) {
61
+ switch (placement) {
62
+ case "right": return {
63
+ x: rect.right,
64
+ y: rect.top + rect.height / 2
65
+ };
66
+ case "bottom": return {
67
+ x: rect.left + rect.width / 2,
68
+ y: rect.bottom
69
+ };
70
+ case "left": return {
71
+ x: rect.left,
72
+ y: rect.top + rect.height / 2
73
+ };
74
+ default: return {
75
+ x: rect.left + rect.width / 2,
76
+ y: rect.top
77
+ };
78
+ }
79
+ }
80
+ function resolveOffsetStyle(offset) {
81
+ if (offset == null) return void 0;
82
+ if (typeof offset === "number") return { "--_rp-tooltip-main-axis-offset": `${offset}px` };
83
+ const style = {};
84
+ if (offset.mainAxis != null) style["--_rp-tooltip-main-axis-offset"] = `${offset.mainAxis}px`;
85
+ if (offset.crossAxis != null) style["--_rp-tooltip-cross-axis-offset"] = `${offset.crossAxis}px`;
86
+ return Object.keys(style).length > 0 ? style : void 0;
87
+ }
88
+ function resolveTooltipColorStyle(color) {
89
+ const customColor = getComponentCustomColor(color);
90
+ if (!customColor) return void 0;
91
+ return {
92
+ "--_rp-tooltip-bg": customColor,
93
+ "--_rp-tooltip-fg": "var(--rp-color-on-primary)"
94
+ };
95
+ }
96
+ function useTooltip(props, emitOpenChange) {
97
+ const slots = useSlots();
98
+ const generatedId = useId();
99
+ const targetElement = ref(null);
100
+ const targetPosition = ref(null);
101
+ let isMounted = false;
102
+ let removeTargetListeners;
103
+ let removePositionListeners;
104
+ let describedTarget = null;
105
+ let previousTargetDescribedby = null;
106
+ const tooltipId = computed(() => props.id ?? `${generatedId}-tooltip`);
107
+ const placement = computed(() => props.placement ?? "top");
108
+ const isTargetMode = computed(() => props.target != null && props.target !== "");
109
+ const hasContent = computed(() => Boolean(props.content || slots.content));
110
+ const isDecorative = computed(() => Boolean(props.decorative));
111
+ const isDisabled = computed(() => Boolean(props.disabled || !hasContent.value));
112
+ const shouldRenderContent = computed(() => !isDisabled.value);
113
+ const shouldDescribeContent = computed(() => shouldRenderContent.value && !isDecorative.value);
114
+ const { isOpen, open, closeImmediate } = useDelayedOpen({
115
+ open: () => props.open,
116
+ openDelay: () => props.openDelay ?? 300,
117
+ disabled: () => isDisabled.value,
118
+ onOpenChange: emitOpenChange
119
+ });
120
+ const isVisible = computed(() => isOpen.value && !isDisabled.value);
121
+ const rootClass = computed(() => bem("rp-tooltip", {
122
+ [`placement-${placement.value}`]: true,
123
+ [`color-${props.color}`]: isComponentPresetColor(props.color),
124
+ arrow: props.arrow,
125
+ target: isTargetMode.value,
126
+ open: isVisible.value,
127
+ disabled: props.disabled
128
+ }));
129
+ const triggerProps = computed(() => ({ "aria-describedby": shouldDescribeContent.value ? tooltipId.value : void 0 }));
130
+ const contentRole = computed(() => isDecorative.value ? void 0 : "tooltip");
131
+ const contentAriaHidden = computed(() => isDecorative.value ? "true" : void 0);
132
+ const contentStyle = computed(() => {
133
+ const style = {
134
+ ...resolveOffsetStyle(props.offset),
135
+ ...resolveTooltipColorStyle(props.color)
136
+ };
137
+ if (!isTargetMode.value || !targetPosition.value) return Object.keys(style).length > 0 ? style : void 0;
138
+ return {
139
+ ...style,
140
+ "--_rp-tooltip-target-x": `${targetPosition.value.x}px`,
141
+ "--_rp-tooltip-target-y": `${targetPosition.value.y}px`
142
+ };
143
+ });
144
+ function openTooltip() {
145
+ open();
146
+ }
147
+ function closeTooltip() {
148
+ closeImmediate();
149
+ }
150
+ function onKeydown(event) {
151
+ if (event.key === "Escape") closeTooltip();
152
+ }
153
+ function readTarget() {
154
+ return isRef(props.target) ? props.target.value : props.target;
155
+ }
156
+ function resolveTarget() {
157
+ const target = readTarget();
158
+ if (!target) return null;
159
+ if (typeof target === "string") {
160
+ if (typeof document === "undefined") return null;
161
+ try {
162
+ const element = document.querySelector(target);
163
+ return isHTMLElement(element) ? element : null;
164
+ } catch {
165
+ return null;
166
+ }
167
+ }
168
+ return isHTMLElement(target) ? target : null;
169
+ }
170
+ function restoreTargetDescription() {
171
+ if (!describedTarget) return;
172
+ if (previousTargetDescribedby) describedTarget.setAttribute("aria-describedby", previousTargetDescribedby);
173
+ else describedTarget.removeAttribute("aria-describedby");
174
+ describedTarget = null;
175
+ previousTargetDescribedby = null;
176
+ }
177
+ function syncTargetDescription() {
178
+ restoreTargetDescription();
179
+ if (!isTargetMode.value || !shouldDescribeContent.value || !targetElement.value) return;
180
+ describedTarget = targetElement.value;
181
+ previousTargetDescribedby = describedTarget.getAttribute("aria-describedby");
182
+ const ids = (previousTargetDescribedby ?? "").split(/\s+/).filter(Boolean);
183
+ if (!ids.includes(tooltipId.value)) ids.push(tooltipId.value);
184
+ describedTarget.setAttribute("aria-describedby", ids.join(" "));
185
+ }
186
+ function updateTargetPosition() {
187
+ if (!isTargetMode.value || !targetElement.value) {
188
+ targetPosition.value = null;
189
+ return;
190
+ }
191
+ targetPosition.value = getTargetPosition(targetElement.value.getBoundingClientRect(), placement.value);
192
+ }
193
+ function onTargetOpen() {
194
+ updateTargetPosition();
195
+ openTooltip();
196
+ }
197
+ function bindTargetListeners(element) {
198
+ removeTargetListeners?.();
199
+ element.addEventListener("mouseenter", onTargetOpen);
200
+ element.addEventListener("mouseleave", closeTooltip);
201
+ element.addEventListener("focusin", onTargetOpen);
202
+ element.addEventListener("focusout", closeTooltip);
203
+ element.addEventListener("keydown", onKeydown);
204
+ removeTargetListeners = () => {
205
+ element.removeEventListener("mouseenter", onTargetOpen);
206
+ element.removeEventListener("mouseleave", closeTooltip);
207
+ element.removeEventListener("focusin", onTargetOpen);
208
+ element.removeEventListener("focusout", closeTooltip);
209
+ element.removeEventListener("keydown", onKeydown);
210
+ removeTargetListeners = void 0;
211
+ };
212
+ }
213
+ function removeViewportListeners() {
214
+ removePositionListeners?.();
215
+ removePositionListeners = void 0;
216
+ }
217
+ function bindViewportListeners() {
218
+ if (typeof window === "undefined" || removePositionListeners) return;
219
+ window.addEventListener("resize", updateTargetPosition);
220
+ window.addEventListener("scroll", updateTargetPosition, true);
221
+ removePositionListeners = () => {
222
+ window.removeEventListener("resize", updateTargetPosition);
223
+ window.removeEventListener("scroll", updateTargetPosition, true);
224
+ };
225
+ }
226
+ function syncTarget() {
227
+ if (!isTargetMode.value) {
228
+ removeTargetListeners?.();
229
+ removeViewportListeners();
230
+ restoreTargetDescription();
231
+ targetElement.value = null;
232
+ targetPosition.value = null;
233
+ return;
234
+ }
235
+ const nextTarget = resolveTarget();
236
+ if (targetElement.value === nextTarget) {
237
+ syncTargetDescription();
238
+ updateTargetPosition();
239
+ return;
240
+ }
241
+ removeTargetListeners?.();
242
+ removeViewportListeners();
243
+ restoreTargetDescription();
244
+ targetElement.value = nextTarget;
245
+ if (!nextTarget) {
246
+ targetPosition.value = null;
247
+ return;
248
+ }
249
+ bindTargetListeners(nextTarget);
250
+ syncTargetDescription();
251
+ updateTargetPosition();
252
+ }
253
+ watch(isDisabled, (disabled) => {
254
+ if (disabled) closeTooltip();
255
+ });
256
+ watch(() => readTarget(), () => {
257
+ if (isMounted) syncTarget();
258
+ }, { flush: "post" });
259
+ watch([
260
+ isTargetMode,
261
+ shouldDescribeContent,
262
+ tooltipId
263
+ ], () => {
264
+ if (isMounted) syncTargetDescription();
265
+ });
266
+ watch([placement, isVisible], () => {
267
+ if (isMounted && isVisible.value) updateTargetPosition();
268
+ });
269
+ watch(isVisible, (visible) => {
270
+ if (!isMounted || !isTargetMode.value) return;
271
+ if (visible) {
272
+ updateTargetPosition();
273
+ bindViewportListeners();
274
+ } else removeViewportListeners();
275
+ });
276
+ onMounted(() => {
277
+ isMounted = true;
278
+ syncTarget();
279
+ });
280
+ onBeforeUnmount(() => {
281
+ isMounted = false;
282
+ removeTargetListeners?.();
283
+ removeViewportListeners();
284
+ restoreTargetDescription();
285
+ });
286
+ return {
287
+ tooltipId,
288
+ isOpen,
289
+ isVisible,
290
+ isTargetMode,
291
+ shouldRenderContent,
292
+ rootClass,
293
+ triggerProps,
294
+ contentRole,
295
+ contentAriaHidden,
296
+ contentStyle,
297
+ openTooltip,
298
+ closeTooltip,
299
+ onKeydown
300
+ };
301
+ }
302
+ //#endregion
303
+ //#region src/components/tooltip/tooltip.vue?vue&type=script&setup=true&vapor=true&lang.ts
304
+ var t0 = template(" ");
305
+ var t1 = template("<span data-v-13c39164 class=rp-tooltip__content>");
306
+ var t2 = template("<span data-v-13c39164>", 1);
307
+ delegateEvents("focusin", "focusout", "keydown");
308
+ //#endregion
309
+ //#region src/components/tooltip/tooltip.vue
310
+ var tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
311
+ name: "RpTooltip",
312
+ __name: "tooltip",
313
+ props: {
314
+ id: {},
315
+ content: { default: "" },
316
+ target: {},
317
+ placement: { default: "top" },
318
+ color: {},
319
+ offset: {},
320
+ open: {
321
+ type: Boolean,
322
+ default: void 0
323
+ },
324
+ openDelay: { default: 300 },
325
+ arrow: {
326
+ type: Boolean,
327
+ default: false
328
+ },
329
+ disabled: {
330
+ type: Boolean,
331
+ default: false
332
+ },
333
+ decorative: {
334
+ type: Boolean,
335
+ default: false
336
+ }
337
+ },
338
+ emits: ["update:open"],
339
+ setup(__props, { emit: __emit }) {
340
+ const props = __props;
341
+ const emit = __emit;
342
+ const { tooltipId, isVisible, isTargetMode, shouldRenderContent, rootClass, triggerProps, contentRole, contentAriaHidden, contentStyle, openTooltip, closeTooltip, onKeydown } = useTooltip(props, (open) => {
343
+ emit("update:open", open);
344
+ });
345
+ const n10 = t2();
346
+ renderEffect(() => setClass(n10, unref(rootClass)));
347
+ setInsertionState(n10, null, 0);
348
+ createIf(() => !unref(isTargetMode), () => {
349
+ return createSlot("default", { triggerProps: () => unref(triggerProps) }, null, 1);
350
+ });
351
+ setInsertionState(n10, null, 1);
352
+ createComponent(VaporTransition, {
353
+ name: "rp-tooltip-content",
354
+ persisted: ""
355
+ }, extend(() => {
356
+ return createIf(() => unref(shouldRenderContent), () => {
357
+ const n8 = t1();
358
+ renderEffect(() => {
359
+ setProp(n8, "id", unref(tooltipId));
360
+ setProp(n8, "role", unref(contentRole));
361
+ setAttr(n8, "aria-hidden", unref(contentAriaHidden));
362
+ setStyle(n8, unref(contentStyle));
363
+ });
364
+ setInsertionState(n8, null, 0);
365
+ createSlot("content", null, () => {
366
+ const n7 = t0();
367
+ renderEffect(() => setText(n7, toDisplayString(__props.content)));
368
+ return n7;
369
+ }, 1);
370
+ applyVShow(n8, () => unref(isVisible));
371
+ return n8;
372
+ }, null, 129);
373
+ }, { _: 8 }));
374
+ on(n10, "mouseenter", (e) => unref(openTooltip)(e));
375
+ on(n10, "mouseleave", (e) => unref(closeTooltip)(e));
376
+ n10.$evtfocusin = createInvoker((e) => unref(openTooltip)(e));
377
+ n10.$evtfocusout = createInvoker((e) => unref(closeTooltip)(e));
378
+ n10.$evtkeydown = createInvoker((e) => unref(onKeydown)(e));
379
+ return n10;
380
+ }
381
+ }), [["__scopeId", "data-v-13c39164"]]);
382
+ //#endregion
383
+ export { useDelayedOpen as n, tooltip_default as t };
384
+
385
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","names":[],"sources":["../src/composables/useDelayedOpen.ts","../src/components/tooltip/useTooltip.ts","../src/components/tooltip/tooltip.vue","../src/components/tooltip/tooltip.vue"],"sourcesContent":["import { computed, onBeforeUnmount, ref } from 'vue';\n\nexport interface UseDelayedOpenOptions {\n open?: boolean | (() => boolean | undefined);\n openDelay?: number | (() => number | undefined);\n disabled?: boolean | (() => boolean | undefined);\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction readOption<T>(value: T | (() => T | undefined) | undefined, fallback: T): T {\n return typeof value === 'function'\n ? ((value as () => T | undefined)() ?? fallback)\n : (value ?? fallback);\n}\n\nfunction readOptional<T>(value: T | (() => T | undefined) | undefined): T | undefined {\n return typeof value === 'function' ? (value as () => T | undefined)() : value;\n}\n\nexport function useDelayedOpen(options: UseDelayedOpenOptions = {}) {\n const uncontrolledOpen = ref(false);\n let openTimer: ReturnType<typeof setTimeout> | null = null;\n\n const isOpen = computed(() => readOptional(options.open) ?? uncontrolledOpen.value);\n\n function clearTimers() {\n if (openTimer) {\n clearTimeout(openTimer);\n openTimer = null;\n }\n }\n\n function isDisabled() {\n return readOption(options.disabled, false);\n }\n\n function setOpen(nextOpen: boolean) {\n const previousOpen = isOpen.value;\n if (readOptional(options.open) === undefined) uncontrolledOpen.value = nextOpen;\n if (previousOpen !== nextOpen) options.onOpenChange?.(nextOpen);\n }\n\n function open() {\n if (isDisabled()) return;\n const delay = readOption(options.openDelay, 0);\n if (delay <= 0) {\n setOpen(true);\n return;\n }\n if (openTimer) clearTimeout(openTimer);\n openTimer = setTimeout(() => {\n setOpen(true);\n openTimer = null;\n }, delay);\n }\n\n function closeImmediate() {\n clearTimers();\n setOpen(false);\n }\n\n onBeforeUnmount(clearTimers);\n\n return {\n isOpen,\n open,\n closeImmediate,\n };\n}\n","import {\n computed,\n isRef,\n onBeforeUnmount,\n onMounted,\n ref,\n useId,\n useSlots,\n watch,\n type CSSProperties,\n} from 'vue';\nimport { useDelayedOpen } from '@/composables/useDelayedOpen';\nimport { getComponentCustomColor, isComponentPresetColor } from '@/utils/componentColors';\nimport { bem } from '@/utils/bem';\nimport type { TooltipOffset, TooltipPlacement, TooltipProps, TooltipTriggerProps } from './types';\n\ninterface TooltipPosition {\n x: number;\n y: number;\n}\n\nfunction isHTMLElement(value: unknown): value is HTMLElement {\n return typeof HTMLElement !== 'undefined' && value instanceof HTMLElement;\n}\n\nfunction getTargetPosition(rect: DOMRect, placement: TooltipPlacement): TooltipPosition {\n switch (placement) {\n case 'right':\n return { x: rect.right, y: rect.top + rect.height / 2 };\n case 'bottom':\n return { x: rect.left + rect.width / 2, y: rect.bottom };\n case 'left':\n return { x: rect.left, y: rect.top + rect.height / 2 };\n case 'top':\n default:\n return { x: rect.left + rect.width / 2, y: rect.top };\n }\n}\n\nfunction resolveOffsetStyle(offset: TooltipOffset | undefined): CSSProperties | undefined {\n if (offset == null) return undefined;\n\n if (typeof offset === 'number') {\n return {\n '--_rp-tooltip-main-axis-offset': `${offset}px`,\n };\n }\n\n const style: CSSProperties = {};\n\n if (offset.mainAxis != null) {\n style['--_rp-tooltip-main-axis-offset'] = `${offset.mainAxis}px`;\n }\n\n if (offset.crossAxis != null) {\n style['--_rp-tooltip-cross-axis-offset'] = `${offset.crossAxis}px`;\n }\n\n return Object.keys(style).length > 0 ? style : undefined;\n}\n\nfunction resolveTooltipColorStyle(color: TooltipProps['color']): CSSProperties | undefined {\n const customColor = getComponentCustomColor(color);\n if (!customColor) return undefined;\n\n return {\n '--_rp-tooltip-bg': customColor,\n '--_rp-tooltip-fg': 'var(--rp-color-on-primary)',\n };\n}\n\nexport function useTooltip(\n props: Readonly<TooltipProps>,\n emitOpenChange?: (open: boolean) => void,\n) {\n const slots = useSlots();\n const generatedId = useId();\n const targetElement = ref<HTMLElement | null>(null);\n const targetPosition = ref<TooltipPosition | null>(null);\n\n let isMounted = false;\n let removeTargetListeners: (() => void) | undefined;\n let removePositionListeners: (() => void) | undefined;\n let describedTarget: HTMLElement | null = null;\n let previousTargetDescribedby: string | null = null;\n\n const tooltipId = computed(() => props.id ?? `${generatedId}-tooltip`);\n const placement = computed(() => props.placement ?? 'top');\n const isTargetMode = computed(() => props.target != null && props.target !== '');\n const hasContent = computed(() => Boolean(props.content || slots.content));\n const isDecorative = computed(() => Boolean(props.decorative));\n const isDisabled = computed(() => Boolean(props.disabled || !hasContent.value));\n const shouldRenderContent = computed(() => !isDisabled.value);\n const shouldDescribeContent = computed(() => shouldRenderContent.value && !isDecorative.value);\n\n const { isOpen, open, closeImmediate } = useDelayedOpen({\n open: () => props.open,\n openDelay: () => props.openDelay ?? 300,\n disabled: () => isDisabled.value,\n onOpenChange: emitOpenChange,\n });\n\n const isVisible = computed(() => isOpen.value && !isDisabled.value);\n\n const rootClass = computed(() =>\n bem('rp-tooltip', {\n [`placement-${placement.value}`]: true,\n [`color-${props.color}`]: isComponentPresetColor(props.color),\n arrow: props.arrow,\n target: isTargetMode.value,\n open: isVisible.value,\n disabled: props.disabled,\n }),\n );\n\n const triggerProps = computed<TooltipTriggerProps>(() => ({\n 'aria-describedby': shouldDescribeContent.value ? tooltipId.value : undefined,\n }));\n\n const contentRole = computed(() => (isDecorative.value ? undefined : 'tooltip'));\n const contentAriaHidden = computed(() => (isDecorative.value ? 'true' : undefined));\n\n const contentStyle = computed<CSSProperties | undefined>(() => {\n const style: CSSProperties = {\n ...resolveOffsetStyle(props.offset),\n ...resolveTooltipColorStyle(props.color),\n };\n\n if (!isTargetMode.value || !targetPosition.value) {\n return Object.keys(style).length > 0 ? style : undefined;\n }\n\n return {\n ...style,\n '--_rp-tooltip-target-x': `${targetPosition.value.x}px`,\n '--_rp-tooltip-target-y': `${targetPosition.value.y}px`,\n };\n });\n\n function openTooltip() {\n open();\n }\n\n function closeTooltip() {\n closeImmediate();\n }\n\n function onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') closeTooltip();\n }\n\n function readTarget() {\n return isRef(props.target) ? props.target.value : props.target;\n }\n\n function resolveTarget() {\n const target = readTarget();\n if (!target) return null;\n\n if (typeof target === 'string') {\n if (typeof document === 'undefined') return null;\n\n try {\n const element = document.querySelector(target);\n return isHTMLElement(element) ? element : null;\n } catch {\n return null;\n }\n }\n\n return isHTMLElement(target) ? target : null;\n }\n\n function restoreTargetDescription() {\n if (!describedTarget) return;\n\n if (previousTargetDescribedby) {\n describedTarget.setAttribute('aria-describedby', previousTargetDescribedby);\n } else {\n describedTarget.removeAttribute('aria-describedby');\n }\n\n describedTarget = null;\n previousTargetDescribedby = null;\n }\n\n function syncTargetDescription() {\n restoreTargetDescription();\n\n if (!isTargetMode.value || !shouldDescribeContent.value || !targetElement.value) return;\n\n describedTarget = targetElement.value;\n previousTargetDescribedby = describedTarget.getAttribute('aria-describedby');\n\n const ids = (previousTargetDescribedby ?? '').split(/\\s+/).filter(Boolean);\n if (!ids.includes(tooltipId.value)) ids.push(tooltipId.value);\n describedTarget.setAttribute('aria-describedby', ids.join(' '));\n }\n\n function updateTargetPosition() {\n if (!isTargetMode.value || !targetElement.value) {\n targetPosition.value = null;\n return;\n }\n\n targetPosition.value = getTargetPosition(\n targetElement.value.getBoundingClientRect(),\n placement.value,\n );\n }\n\n function onTargetOpen() {\n updateTargetPosition();\n openTooltip();\n }\n\n function bindTargetListeners(element: HTMLElement) {\n removeTargetListeners?.();\n\n element.addEventListener('mouseenter', onTargetOpen);\n element.addEventListener('mouseleave', closeTooltip);\n element.addEventListener('focusin', onTargetOpen);\n element.addEventListener('focusout', closeTooltip);\n element.addEventListener('keydown', onKeydown);\n\n removeTargetListeners = () => {\n element.removeEventListener('mouseenter', onTargetOpen);\n element.removeEventListener('mouseleave', closeTooltip);\n element.removeEventListener('focusin', onTargetOpen);\n element.removeEventListener('focusout', closeTooltip);\n element.removeEventListener('keydown', onKeydown);\n removeTargetListeners = undefined;\n };\n }\n\n function removeViewportListeners() {\n removePositionListeners?.();\n removePositionListeners = undefined;\n }\n\n function bindViewportListeners() {\n if (typeof window === 'undefined' || removePositionListeners) return;\n\n window.addEventListener('resize', updateTargetPosition);\n window.addEventListener('scroll', updateTargetPosition, true);\n\n removePositionListeners = () => {\n window.removeEventListener('resize', updateTargetPosition);\n window.removeEventListener('scroll', updateTargetPosition, true);\n };\n }\n\n function syncTarget() {\n if (!isTargetMode.value) {\n removeTargetListeners?.();\n removeViewportListeners();\n restoreTargetDescription();\n targetElement.value = null;\n targetPosition.value = null;\n return;\n }\n\n const nextTarget = resolveTarget();\n if (targetElement.value === nextTarget) {\n syncTargetDescription();\n updateTargetPosition();\n return;\n }\n\n removeTargetListeners?.();\n removeViewportListeners();\n restoreTargetDescription();\n targetElement.value = nextTarget;\n\n if (!nextTarget) {\n targetPosition.value = null;\n return;\n }\n\n bindTargetListeners(nextTarget);\n syncTargetDescription();\n updateTargetPosition();\n }\n\n watch(isDisabled, (disabled) => {\n if (disabled) closeTooltip();\n });\n\n watch(\n () => readTarget(),\n () => {\n if (isMounted) syncTarget();\n },\n { flush: 'post' },\n );\n\n watch([isTargetMode, shouldDescribeContent, tooltipId], () => {\n if (isMounted) syncTargetDescription();\n });\n\n watch([placement, isVisible], () => {\n if (isMounted && isVisible.value) updateTargetPosition();\n });\n\n watch(isVisible, (visible) => {\n if (!isMounted || !isTargetMode.value) return;\n\n if (visible) {\n updateTargetPosition();\n bindViewportListeners();\n } else {\n removeViewportListeners();\n }\n });\n\n onMounted(() => {\n isMounted = true;\n syncTarget();\n });\n\n onBeforeUnmount(() => {\n isMounted = false;\n removeTargetListeners?.();\n removeViewportListeners();\n restoreTargetDescription();\n });\n\n return {\n tooltipId,\n isOpen,\n isVisible,\n isTargetMode,\n shouldRenderContent,\n rootClass,\n triggerProps,\n contentRole,\n contentAriaHidden,\n contentStyle,\n openTooltip,\n closeTooltip,\n onKeydown,\n };\n}\n","<template>\n <span\n :class=\"rootClass\"\n @mouseenter=\"openTooltip\"\n @mouseleave=\"closeTooltip\"\n @focusin=\"openTooltip\"\n @focusout=\"closeTooltip\"\n @keydown=\"onKeydown\"\n >\n <slot v-if=\"!isTargetMode\" :trigger-props=\"triggerProps\" />\n\n <Transition name=\"rp-tooltip-content\">\n <span\n v-if=\"shouldRenderContent\"\n v-show=\"isVisible\"\n :id=\"tooltipId\"\n class=\"rp-tooltip__content\"\n :role=\"contentRole\"\n :aria-hidden=\"contentAriaHidden\"\n :style=\"contentStyle\"\n >\n <slot name=\"content\">{{ content }}</slot>\n </span>\n </Transition>\n </span>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useTooltip } from './useTooltip';\nimport type { TooltipProps } from './types';\n\ndefineOptions({ name: 'RpTooltip' });\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n content: '',\n placement: 'top',\n open: undefined,\n openDelay: 300,\n arrow: false,\n disabled: false,\n decorative: false,\n});\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n}>();\n\nconst {\n tooltipId,\n isVisible,\n isTargetMode,\n shouldRenderContent,\n rootClass,\n triggerProps,\n contentRole,\n contentAriaHidden,\n contentStyle,\n openTooltip,\n closeTooltip,\n onKeydown,\n} = useTooltip(props, (open) => {\n emit('update:open', open);\n});\n</script>\n\n<style src=\"./tooltip.scss\" lang=\"scss\" scoped></style>\n","<template>\n <span\n :class=\"rootClass\"\n @mouseenter=\"openTooltip\"\n @mouseleave=\"closeTooltip\"\n @focusin=\"openTooltip\"\n @focusout=\"closeTooltip\"\n @keydown=\"onKeydown\"\n >\n <slot v-if=\"!isTargetMode\" :trigger-props=\"triggerProps\" />\n\n <Transition name=\"rp-tooltip-content\">\n <span\n v-if=\"shouldRenderContent\"\n v-show=\"isVisible\"\n :id=\"tooltipId\"\n class=\"rp-tooltip__content\"\n :role=\"contentRole\"\n :aria-hidden=\"contentAriaHidden\"\n :style=\"contentStyle\"\n >\n <slot name=\"content\">{{ content }}</slot>\n </span>\n </Transition>\n </span>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useTooltip } from './useTooltip';\nimport type { TooltipProps } from './types';\n\ndefineOptions({ name: 'RpTooltip' });\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n content: '',\n placement: 'top',\n open: undefined,\n openDelay: 300,\n arrow: false,\n disabled: false,\n decorative: false,\n});\n\nconst emit = defineEmits<{\n 'update:open': [value: boolean];\n}>();\n\nconst {\n tooltipId,\n isVisible,\n isTargetMode,\n shouldRenderContent,\n rootClass,\n triggerProps,\n contentRole,\n contentAriaHidden,\n contentStyle,\n openTooltip,\n closeTooltip,\n onKeydown,\n} = useTooltip(props, (open) => {\n emit('update:open', open);\n});\n</script>\n\n<style src=\"./tooltip.scss\" lang=\"scss\" scoped></style>\n"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { n as getComponentCustomColor } from "./componentColors.js";
2
+ import { defineVaporComponent, markRaw, template } from "vue";
3
+ //#region ~icons/lucide/loader-circle
4
+ var t0 = 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=\"M21 12a9 9 0 1 1-6.219-8.56\">", 3, 1);
5
+ function render(_ctx) {
6
+ return t0();
7
+ }
8
+ var loader_circle_default = markRaw(defineVaporComponent({
9
+ name: "lucide-loader-circle",
10
+ render
11
+ }));
12
+ //#endregion
13
+ //#region src/components/button/useButtonColor.ts
14
+ function getButtonColorStyle(color) {
15
+ const customColor = getComponentCustomColor(color);
16
+ if (!customColor) return void 0;
17
+ return {
18
+ "--_rp-button-custom-color": customColor,
19
+ "--_rp-button-custom-hover": `color-mix(in srgb, ${customColor} 90%, #111111)`,
20
+ "--_rp-button-custom-active": `color-mix(in srgb, ${customColor} 80%, #111111)`,
21
+ "--_rp-button-custom-on": "var(--rp-color-on-primary)",
22
+ "--_rp-button-custom-subtle-bg": `color-mix(in srgb, ${customColor} 12%, transparent)`,
23
+ "--_rp-button-custom-subtle-bg-hover": `color-mix(in srgb, ${customColor} 18%, transparent)`,
24
+ "--_rp-button-custom-subtle-bg-active": `color-mix(in srgb, ${customColor} 24%, transparent)`,
25
+ "--_rp-button-custom-border": `color-mix(in srgb, ${customColor} 45%, transparent)`,
26
+ "--_rp-button-custom-border-hover": `color-mix(in srgb, ${customColor} 62%, transparent)`,
27
+ "--_rp-button-custom-fg": customColor
28
+ };
29
+ }
30
+ //#endregion
31
+ export { loader_circle_default as n, getButtonColorStyle as t };
32
+
33
+ //# sourceMappingURL=useButtonColor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useButtonColor.js","names":[],"sources":["../src/components/button/useButtonColor.ts"],"sourcesContent":["import type { CSSProperties } from 'vue';\nimport { getComponentCustomColor } from '@/utils/componentColors';\nimport type { ButtonColor } from './types';\n\nexport function getButtonColorStyle(color: ButtonColor | undefined) {\n const customColor = getComponentCustomColor(color);\n if (!customColor) return undefined;\n\n return {\n '--_rp-button-custom-color': customColor,\n '--_rp-button-custom-hover': `color-mix(in srgb, ${customColor} 90%, #111111)`,\n '--_rp-button-custom-active': `color-mix(in srgb, ${customColor} 80%, #111111)`,\n '--_rp-button-custom-on': 'var(--rp-color-on-primary)',\n '--_rp-button-custom-subtle-bg': `color-mix(in srgb, ${customColor} 12%, transparent)`,\n '--_rp-button-custom-subtle-bg-hover': `color-mix(in srgb, ${customColor} 18%, transparent)`,\n '--_rp-button-custom-subtle-bg-active': `color-mix(in srgb, ${customColor} 24%, transparent)`,\n '--_rp-button-custom-border': `color-mix(in srgb, ${customColor} 45%, transparent)`,\n '--_rp-button-custom-border-hover': `color-mix(in srgb, ${customColor} 62%, transparent)`,\n '--_rp-button-custom-fg': customColor,\n } satisfies CSSProperties;\n}\n"],"mappings":";;;;;;;;;;;;;AAIA,SAAgB,oBAAoB,OAAgC;CAChE,MAAM,cAAc,wBAAwB,KAAK;CACjD,IAAI,CAAC,aAAa,OAAO,KAAA;CAEzB,OAAO;EACH,6BAA6B;EAC7B,6BAA6B,sBAAsB,YAAY;EAC/D,8BAA8B,sBAAsB,YAAY;EAChE,0BAA0B;EAC1B,iCAAiC,sBAAsB,YAAY;EACnE,uCAAuC,sBAAsB,YAAY;EACzE,wCAAwC,sBAAsB,YAAY;EAC1E,8BAA8B,sBAAsB,YAAY;EAChE,oCAAoC,sBAAsB,YAAY;EACtE,0BAA0B;CAC9B;AACJ"}
@@ -0,0 +1,26 @@
1
+ import { onBeforeUnmount, onMounted, watch } from "vue";
2
+ //#region src/composables/useClickOutside.ts
3
+ function useClickOutside(target, active, callback) {
4
+ let isListening = false;
5
+ let stopWatch;
6
+ function handler(e) {
7
+ if (target.value && !target.value.contains(e.target)) callback();
8
+ }
9
+ function setListening(value) {
10
+ if (typeof document === "undefined" || value === isListening) return;
11
+ isListening = value;
12
+ if (value) document.addEventListener("click", handler, true);
13
+ else document.removeEventListener("click", handler, true);
14
+ }
15
+ onMounted(() => {
16
+ stopWatch = watch(active, setListening, { immediate: true });
17
+ });
18
+ onBeforeUnmount(() => {
19
+ stopWatch?.();
20
+ setListening(false);
21
+ });
22
+ }
23
+ //#endregion
24
+ export { useClickOutside as t };
25
+
26
+ //# sourceMappingURL=useClickOutside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClickOutside.js","names":[],"sources":["../src/composables/useClickOutside.ts"],"sourcesContent":["import { watch, onMounted, onBeforeUnmount, type Ref } from 'vue';\n\nexport function useClickOutside(\n target: Ref<HTMLElement | null>,\n active: Readonly<Ref<boolean>>,\n callback: () => void,\n) {\n let isListening = false;\n let stopWatch: (() => void) | undefined;\n\n function handler(e: MouseEvent) {\n if (target.value && !target.value.contains(e.target as Node)) {\n callback();\n }\n }\n\n function setListening(value: boolean) {\n if (typeof document === 'undefined' || value === isListening) return;\n isListening = value;\n\n if (value) {\n document.addEventListener('click', handler, true);\n } else {\n document.removeEventListener('click', handler, true);\n }\n }\n\n onMounted(() => {\n stopWatch = watch(active, setListening, { immediate: true });\n });\n\n onBeforeUnmount(() => {\n stopWatch?.();\n setListening(false);\n });\n}\n"],"mappings":";;AAEA,SAAgB,gBACZ,QACA,QACA,UACF;CACE,IAAI,cAAc;CAClB,IAAI;CAEJ,SAAS,QAAQ,GAAe;EAC5B,IAAI,OAAO,SAAS,CAAC,OAAO,MAAM,SAAS,EAAE,MAAc,GACvD,SAAS;CAEjB;CAEA,SAAS,aAAa,OAAgB;EAClC,IAAI,OAAO,aAAa,eAAe,UAAU,aAAa;EAC9D,cAAc;EAEd,IAAI,OACA,SAAS,iBAAiB,SAAS,SAAS,IAAI;OAEhD,SAAS,oBAAoB,SAAS,SAAS,IAAI;CAE3D;CAEA,gBAAgB;EACZ,YAAY,MAAM,QAAQ,cAAc,EAAE,WAAW,KAAK,CAAC;CAC/D,CAAC;CAED,sBAAsB;EAClB,YAAY;EACZ,aAAa,KAAK;CACtB,CAAC;AACL"}
@@ -0,0 +1,94 @@
1
+ import { t as bem } from "./bem.js";
2
+ import { computed, ref, toValue, useId } from "vue";
3
+ //#region src/components/collapse/useCollapse.ts
4
+ var DEFAULT_ROLE = "region";
5
+ function optionValue(value) {
6
+ return toValue(value);
7
+ }
8
+ function useCollapse(options = {}, emitOpenChange) {
9
+ const generatedId = useId();
10
+ const uncontrolledOpen = ref(Boolean(optionValue(options.defaultOpen)));
11
+ const id = computed(() => optionValue(options.id) ?? `${generatedId}-collapse`);
12
+ const controlledOpen = computed(() => optionValue(options.open));
13
+ const isDisabled = computed(() => Boolean(optionValue(options.disabled)));
14
+ const isOpen = computed(() => Boolean(controlledOpen.value ?? uncontrolledOpen.value));
15
+ const state = computed(() => isOpen.value ? "open" : "closed");
16
+ const shouldRenderContent = computed(() => !optionValue(options.unmountOnExit) || isOpen.value);
17
+ const rootClass = computed(() => bem("rp-collapse", {
18
+ open: isOpen.value,
19
+ closed: !isOpen.value,
20
+ disabled: isDisabled.value
21
+ }));
22
+ const rootProps = computed(() => ({
23
+ class: rootClass.value,
24
+ "data-state": state.value,
25
+ "data-disabled": isDisabled.value || void 0
26
+ }));
27
+ const contentSlotProps = computed(() => ({
28
+ isOpen: isOpen.value,
29
+ open,
30
+ close,
31
+ toggle
32
+ }));
33
+ const triggerProps = computed(() => ({
34
+ type: "button",
35
+ disabled: isDisabled.value || void 0,
36
+ "aria-controls": id.value,
37
+ "aria-expanded": isOpen.value,
38
+ "aria-disabled": isDisabled.value || void 0,
39
+ onClick: onTriggerClick
40
+ }));
41
+ const contentProps = computed(() => ({
42
+ class: "rp-collapse__content",
43
+ id: id.value,
44
+ role: optionValue(options.role) ?? DEFAULT_ROLE,
45
+ "data-state": state.value,
46
+ "aria-hidden": isOpen.value ? void 0 : "true",
47
+ "aria-label": optionValue(options.ariaLabel) || void 0,
48
+ "aria-labelledby": optionValue(options.ariaLabelledby) || void 0,
49
+ "aria-describedby": optionValue(options.ariaDescribedby) || void 0
50
+ }));
51
+ const triggerSlotProps = computed(() => ({
52
+ triggerProps: triggerProps.value,
53
+ ...contentSlotProps.value
54
+ }));
55
+ function setOpen(nextOpen) {
56
+ if (isDisabled.value || nextOpen === isOpen.value) return;
57
+ if (controlledOpen.value === void 0) uncontrolledOpen.value = nextOpen;
58
+ options.onOpenChange?.(nextOpen);
59
+ emitOpenChange?.(nextOpen);
60
+ }
61
+ function open() {
62
+ setOpen(true);
63
+ }
64
+ function close() {
65
+ setOpen(false);
66
+ }
67
+ function toggle() {
68
+ setOpen(!isOpen.value);
69
+ }
70
+ function onTriggerClick() {
71
+ toggle();
72
+ }
73
+ return {
74
+ id,
75
+ state,
76
+ isDisabled,
77
+ isOpen,
78
+ shouldRenderContent,
79
+ rootClass,
80
+ rootProps,
81
+ triggerProps,
82
+ contentProps,
83
+ triggerSlotProps,
84
+ contentSlotProps,
85
+ setOpen,
86
+ open,
87
+ close,
88
+ toggle
89
+ };
90
+ }
91
+ //#endregion
92
+ export { useCollapse as t };
93
+
94
+ //# sourceMappingURL=useCollapse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCollapse.js","names":[],"sources":["../src/components/collapse/useCollapse.ts"],"sourcesContent":["import { computed, ref, toValue, useId } from 'vue';\nimport { bem } from '@/utils/bem';\nimport type {\n CollapseContentProps,\n CollapseContentRole,\n CollapseOption,\n CollapseRootProps,\n CollapseSlotProps,\n CollapseState,\n CollapseTriggerProps,\n CollapseTriggerSlotProps,\n UseCollapseOptions,\n UseCollapseReturn,\n} from './types';\n\nconst DEFAULT_ROLE: CollapseContentRole = 'region';\n\nfunction optionValue<T>(value: CollapseOption<T | undefined> | undefined) {\n return toValue(value);\n}\n\nexport function useCollapse(\n options: Readonly<UseCollapseOptions> = {},\n emitOpenChange?: (open: boolean) => void,\n): UseCollapseReturn {\n const generatedId = useId();\n const uncontrolledOpen = ref(Boolean(optionValue<boolean>(options.defaultOpen)));\n\n const id = computed(() => optionValue<string>(options.id) ?? `${generatedId}-collapse`);\n const controlledOpen = computed(() => optionValue<boolean>(options.open));\n const isDisabled = computed(() => Boolean(optionValue<boolean>(options.disabled)));\n const isOpen = computed(() => Boolean(controlledOpen.value ?? uncontrolledOpen.value));\n const state = computed<CollapseState>(() => (isOpen.value ? 'open' : 'closed'));\n const shouldRenderContent = computed(\n () => !optionValue<boolean>(options.unmountOnExit) || isOpen.value,\n );\n\n const rootClass = computed(() =>\n bem('rp-collapse', {\n open: isOpen.value,\n closed: !isOpen.value,\n disabled: isDisabled.value,\n }),\n );\n\n const rootProps = computed<CollapseRootProps>(() => ({\n class: rootClass.value,\n 'data-state': state.value,\n 'data-disabled': isDisabled.value || undefined,\n }));\n\n const contentSlotProps = computed<CollapseSlotProps>(() => ({\n isOpen: isOpen.value,\n open,\n close,\n toggle,\n }));\n\n const triggerProps = computed<CollapseTriggerProps>(() => ({\n type: 'button',\n disabled: isDisabled.value || undefined,\n 'aria-controls': id.value,\n 'aria-expanded': isOpen.value,\n 'aria-disabled': isDisabled.value || undefined,\n onClick: onTriggerClick,\n }));\n\n const contentProps = computed<CollapseContentProps>(() => ({\n class: 'rp-collapse__content',\n id: id.value,\n role: optionValue<CollapseContentRole>(options.role) ?? DEFAULT_ROLE,\n 'data-state': state.value,\n 'aria-hidden': isOpen.value ? undefined : 'true',\n 'aria-label': optionValue<string>(options.ariaLabel) || undefined,\n 'aria-labelledby': optionValue<string>(options.ariaLabelledby) || undefined,\n 'aria-describedby': optionValue<string>(options.ariaDescribedby) || undefined,\n }));\n\n const triggerSlotProps = computed<CollapseTriggerSlotProps>(() => ({\n triggerProps: triggerProps.value,\n ...contentSlotProps.value,\n }));\n\n function setOpen(nextOpen: boolean) {\n if (isDisabled.value || nextOpen === isOpen.value) return;\n\n if (controlledOpen.value === undefined) uncontrolledOpen.value = nextOpen;\n options.onOpenChange?.(nextOpen);\n emitOpenChange?.(nextOpen);\n }\n\n function open() {\n setOpen(true);\n }\n\n function close() {\n setOpen(false);\n }\n\n function toggle() {\n setOpen(!isOpen.value);\n }\n\n function onTriggerClick() {\n toggle();\n }\n\n return {\n id,\n state,\n isDisabled,\n isOpen,\n shouldRenderContent,\n rootClass,\n rootProps,\n triggerProps,\n contentProps,\n triggerSlotProps,\n contentSlotProps,\n setOpen,\n open,\n close,\n toggle,\n };\n}\n"],"mappings":";;;AAeA,IAAM,eAAoC;AAE1C,SAAS,YAAe,OAAkD;CACtE,OAAO,QAAQ,KAAK;AACxB;AAEA,SAAgB,YACZ,UAAwC,CAAC,GACzC,gBACiB;CACjB,MAAM,cAAc,MAAM;CAC1B,MAAM,mBAAmB,IAAI,QAAQ,YAAqB,QAAQ,WAAW,CAAC,CAAC;CAE/E,MAAM,KAAK,eAAe,YAAoB,QAAQ,EAAE,KAAK,GAAG,YAAY,UAAU;CACtF,MAAM,iBAAiB,eAAe,YAAqB,QAAQ,IAAI,CAAC;CACxE,MAAM,aAAa,eAAe,QAAQ,YAAqB,QAAQ,QAAQ,CAAC,CAAC;CACjF,MAAM,SAAS,eAAe,QAAQ,eAAe,SAAS,iBAAiB,KAAK,CAAC;CACrF,MAAM,QAAQ,eAA+B,OAAO,QAAQ,SAAS,QAAS;CAC9E,MAAM,sBAAsB,eAClB,CAAC,YAAqB,QAAQ,aAAa,KAAK,OAAO,KACjE;CAEA,MAAM,YAAY,eACd,IAAI,eAAe;EACf,MAAM,OAAO;EACb,QAAQ,CAAC,OAAO;EAChB,UAAU,WAAW;CACzB,CAAC,CACL;CAEA,MAAM,YAAY,gBAAmC;EACjD,OAAO,UAAU;EACjB,cAAc,MAAM;EACpB,iBAAiB,WAAW,SAAS,KAAA;CACzC,EAAE;CAEF,MAAM,mBAAmB,gBAAmC;EACxD,QAAQ,OAAO;EACf;EACA;EACA;CACJ,EAAE;CAEF,MAAM,eAAe,gBAAsC;EACvD,MAAM;EACN,UAAU,WAAW,SAAS,KAAA;EAC9B,iBAAiB,GAAG;EACpB,iBAAiB,OAAO;EACxB,iBAAiB,WAAW,SAAS,KAAA;EACrC,SAAS;CACb,EAAE;CAEF,MAAM,eAAe,gBAAsC;EACvD,OAAO;EACP,IAAI,GAAG;EACP,MAAM,YAAiC,QAAQ,IAAI,KAAK;EACxD,cAAc,MAAM;EACpB,eAAe,OAAO,QAAQ,KAAA,IAAY;EAC1C,cAAc,YAAoB,QAAQ,SAAS,KAAK,KAAA;EACxD,mBAAmB,YAAoB,QAAQ,cAAc,KAAK,KAAA;EAClE,oBAAoB,YAAoB,QAAQ,eAAe,KAAK,KAAA;CACxE,EAAE;CAEF,MAAM,mBAAmB,gBAA0C;EAC/D,cAAc,aAAa;EAC3B,GAAG,iBAAiB;CACxB,EAAE;CAEF,SAAS,QAAQ,UAAmB;EAChC,IAAI,WAAW,SAAS,aAAa,OAAO,OAAO;EAEnD,IAAI,eAAe,UAAU,KAAA,GAAW,iBAAiB,QAAQ;EACjE,QAAQ,eAAe,QAAQ;EAC/B,iBAAiB,QAAQ;CAC7B;CAEA,SAAS,OAAO;EACZ,QAAQ,IAAI;CAChB;CAEA,SAAS,QAAQ;EACb,QAAQ,KAAK;CACjB;CAEA,SAAS,SAAS;EACd,QAAQ,CAAC,OAAO,KAAK;CACzB;CAEA,SAAS,iBAAiB;EACtB,OAAO;CACX;CAEA,OAAO;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACJ;AACJ"}
@@ -0,0 +1,11 @@
1
+ import { inject } from "vue";
2
+ //#region src/composables/useRequiredInject.ts
3
+ function useRequiredInject(key, componentName) {
4
+ const value = inject(key);
5
+ if (value == null) throw new Error(`[Ropav] <${componentName}> must be used inside its parent provider component.`);
6
+ return value;
7
+ }
8
+ //#endregion
9
+ export { useRequiredInject as t };
10
+
11
+ //# sourceMappingURL=useRequiredInject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRequiredInject.js","names":[],"sources":["../src/composables/useRequiredInject.ts"],"sourcesContent":["import { inject, type InjectionKey } from 'vue';\n\nexport function useRequiredInject<T>(key: InjectionKey<T>, componentName: string): T {\n const value = inject(key);\n if (value == null) {\n throw new Error(\n `[Ropav] <${componentName}> must be used inside its parent provider component.`,\n );\n }\n return value;\n}\n"],"mappings":";;AAEA,SAAgB,kBAAqB,KAAsB,eAA0B;CACjF,MAAM,QAAQ,OAAO,GAAG;CACxB,IAAI,SAAS,MACT,MAAM,IAAI,MACN,YAAY,cAAc,qDAC9B;CAEJ,OAAO;AACX"}
package/dist/x.js ADDED
@@ -0,0 +1,14 @@
1
+ import { defineVaporComponent, markRaw, template } from "vue";
2
+ //#region ~icons/lucide/x
3
+ var t0 = 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=\"M18 6L6 18M6 6l12 12\">", 3, 1);
4
+ function render(_ctx) {
5
+ return t0();
6
+ }
7
+ var x_default = markRaw(defineVaporComponent({
8
+ name: "lucide-x",
9
+ render
10
+ }));
11
+ //#endregion
12
+ export { x_default as t };
13
+
14
+ //# sourceMappingURL=x.js.map
package/dist/x.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x.js","names":[],"sources":[],"mappings":""}