ropav 0.0.6 → 0.0.8

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 (123) hide show
  1. package/dist/_plugin-vue_export-helper.js +1 -11
  2. package/dist/accordion.css +112 -0
  3. package/dist/accordion.js +358 -0
  4. package/dist/badge.css +169 -0
  5. package/dist/badge.js +101 -0
  6. package/dist/bem.js +9 -0
  7. package/dist/button-group.css +8 -8
  8. package/dist/button-group.js +2 -3
  9. package/dist/button.js +3 -4
  10. package/dist/card.css +40 -20
  11. package/dist/card.js +71 -39
  12. package/dist/checkbox.js +2 -3
  13. package/dist/collapse.css +32 -0
  14. package/dist/collapse.js +62 -0
  15. package/dist/componentColors.js +0 -2
  16. package/dist/components/accordion/accordion-item.d.ts +40 -0
  17. package/dist/components/accordion/accordion.d.ts +23 -0
  18. package/dist/components/accordion/index.d.ts +4 -0
  19. package/dist/components/accordion/index.js +2 -0
  20. package/dist/components/accordion/types.d.ts +100 -0
  21. package/dist/components/accordion/useAccordion.d.ts +3 -0
  22. package/dist/components/badge/badge.d.ts +25 -0
  23. package/dist/components/badge/index.d.ts +3 -0
  24. package/dist/components/badge/index.js +2 -0
  25. package/dist/components/badge/types.d.ts +16 -0
  26. package/dist/components/badge/useBadgeColor.d.ts +8 -0
  27. package/dist/components/card/card.d.ts +4 -0
  28. package/dist/components/card/types.d.ts +4 -0
  29. package/dist/components/collapse/collapse.d.ts +36 -0
  30. package/dist/components/collapse/index.d.ts +3 -0
  31. package/dist/components/collapse/index.js +3 -0
  32. package/dist/components/collapse/types.d.ts +74 -0
  33. package/dist/components/collapse/useCollapse.d.ts +2 -0
  34. package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +16 -0
  35. package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +23 -0
  36. package/dist/components/dropdown-menu/dropdown-menu.d.ts +26 -0
  37. package/dist/components/dropdown-menu/index.d.ts +3 -0
  38. package/dist/components/dropdown-menu/index.js +2 -0
  39. package/dist/components/dropdown-menu/types.d.ts +104 -0
  40. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +32 -0
  41. package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +30 -0
  42. package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +28 -0
  43. package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +24 -0
  44. package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +51 -0
  45. package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +16 -0
  46. package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +25 -0
  47. package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +18 -0
  48. package/dist/components/field/field.d.ts +2 -2
  49. package/dist/components/field/useField.d.ts +17 -0
  50. package/dist/components/input/useInput.d.ts +8 -0
  51. package/dist/components/modal/index.d.ts +2 -0
  52. package/dist/components/modal/index.js +2 -0
  53. package/dist/components/modal/modal.d.ts +42 -0
  54. package/dist/components/modal/types.d.ts +31 -0
  55. package/dist/components/modal/useModal.d.ts +29 -0
  56. package/dist/components/overlay/index.d.ts +2 -0
  57. package/dist/components/overlay/index.js +2 -0
  58. package/dist/components/overlay/overlay.d.ts +19 -0
  59. package/dist/components/overlay/types.d.ts +12 -0
  60. package/dist/components/overlay/useOverlay.d.ts +7 -0
  61. package/dist/components/popover/index.d.ts +2 -0
  62. package/dist/components/popover/index.js +2 -0
  63. package/dist/components/popover/popover.d.ts +43 -0
  64. package/dist/components/popover/types.d.ts +43 -0
  65. package/dist/components/popover/usePopover.d.ts +23 -0
  66. package/dist/components/tabs/index.d.ts +6 -0
  67. package/dist/components/tabs/index.js +2 -0
  68. package/dist/components/tabs/tabs-content.d.ts +24 -0
  69. package/dist/components/tabs/tabs-list.d.ts +26 -0
  70. package/dist/components/tabs/tabs-trigger.d.ts +29 -0
  71. package/dist/components/tabs/tabs.d.ts +31 -0
  72. package/dist/components/tabs/types.d.ts +160 -0
  73. package/dist/components/tabs/useTabs.d.ts +5 -0
  74. package/dist/dropdown-menu.css +159 -0
  75. package/dist/dropdown-menu.js +901 -0
  76. package/dist/field.css +11 -8
  77. package/dist/field.js +93 -52
  78. package/dist/icon-button.css +1 -1
  79. package/dist/icon-button.js +3 -4
  80. package/dist/index.d.ts +8 -0
  81. package/dist/index.js +12 -1
  82. package/dist/input.css +25 -25
  83. package/dist/input.js +57 -40
  84. package/dist/modal.css +134 -0
  85. package/dist/modal.js +427 -0
  86. package/dist/overlay.css +28 -0
  87. package/dist/overlay.js +82 -0
  88. package/dist/popover.css +75 -0
  89. package/dist/popover.js +377 -0
  90. package/dist/progress.js +2 -3
  91. package/dist/radio.js +4 -11
  92. package/dist/select.js +8 -39
  93. package/dist/slider.js +2 -3
  94. package/dist/switch.js +2 -3
  95. package/dist/tabs.css +279 -0
  96. package/dist/tabs.js +513 -0
  97. package/dist/textarea.js +2 -3
  98. package/dist/tooltip.js +2 -3
  99. package/dist/useButtonColor.js +0 -2
  100. package/dist/useClickOutside.js +24 -0
  101. package/dist/useCollapse.js +92 -0
  102. package/dist/useControlState.js +0 -2
  103. package/dist/useRequiredInject.js +9 -0
  104. package/dist/x.js +12 -0
  105. package/package.json +40 -4
  106. package/dist/_plugin-vue_export-helper.js.map +0 -1
  107. package/dist/button-group.js.map +0 -1
  108. package/dist/button.js.map +0 -1
  109. package/dist/card.js.map +0 -1
  110. package/dist/checkbox.js.map +0 -1
  111. package/dist/componentColors.js.map +0 -1
  112. package/dist/field.js.map +0 -1
  113. package/dist/icon-button.js.map +0 -1
  114. package/dist/input.js.map +0 -1
  115. package/dist/progress.js.map +0 -1
  116. package/dist/radio.js.map +0 -1
  117. package/dist/select.js.map +0 -1
  118. package/dist/slider.js.map +0 -1
  119. package/dist/switch.js.map +0 -1
  120. package/dist/textarea.js.map +0 -1
  121. package/dist/tooltip.js.map +0 -1
  122. package/dist/useButtonColor.js.map +0 -1
  123. package/dist/useControlState.js.map +0 -1
package/dist/tabs.js ADDED
@@ -0,0 +1,513 @@
1
+ import './tabs.css';
2
+ import { t as useRequiredInject } from "./useRequiredInject.js";
3
+ import { t as bem } from "./bem.js";
4
+ import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
5
+ import { computed, createIf, createSlot, defineVaporComponent, onBeforeUnmount, onMounted, provide, ref, renderEffect, setDynamicProps, setInsertionState, shallowRef, template, unref, useId, watch } from "vue";
6
+ //#region src/components/tabs/useTabs.ts
7
+ var TABLIST_SELECTOR = ".rp-tabs-list";
8
+ var TRIGGER_SELECTOR = ".rp-tabs-trigger";
9
+ var DEFAULT_SIZE = "md";
10
+ var DEFAULT_VARIANT = "line";
11
+ var DEFAULT_ORIENTATION = "horizontal";
12
+ var DEFAULT_PLACEMENT = "left";
13
+ var DEFAULT_ACTIVATION_MODE = "automatic";
14
+ var tabsKey = Symbol("tabs");
15
+ var ORIENTATION_NAVIGATION_KEYS = {
16
+ horizontal: {
17
+ ArrowRight: 1,
18
+ ArrowLeft: -1
19
+ },
20
+ vertical: {
21
+ ArrowDown: 1,
22
+ ArrowUp: -1
23
+ }
24
+ };
25
+ function optionalAttr(value) {
26
+ return value || void 0;
27
+ }
28
+ function toTabsState(active) {
29
+ return active ? "active" : "inactive";
30
+ }
31
+ function getDefaultAlign(orientation) {
32
+ return orientation === "vertical" ? "left" : "center";
33
+ }
34
+ function getAriaProps(label, labelledby, describedby) {
35
+ return {
36
+ "aria-label": optionalAttr(label),
37
+ "aria-labelledby": optionalAttr(labelledby),
38
+ "aria-describedby": optionalAttr(describedby)
39
+ };
40
+ }
41
+ function getOrientationClasses(disabled, orientation) {
42
+ return {
43
+ disabled,
44
+ [orientation]: true
45
+ };
46
+ }
47
+ function getPlacementClasses(orientation, placement) {
48
+ return { [`placement-${placement}`]: orientation === "vertical" };
49
+ }
50
+ function getStateClasses(active) {
51
+ return {
52
+ active,
53
+ inactive: !active
54
+ };
55
+ }
56
+ function getTriggerClasses(active, disabled, orientation, placement, align) {
57
+ return {
58
+ ...getStateClasses(active),
59
+ ...getOrientationClasses(disabled, orientation),
60
+ ...getPlacementClasses(orientation, placement),
61
+ ...align ? { [`align-${align}`]: true } : {}
62
+ };
63
+ }
64
+ function findRegistration(entries, value) {
65
+ if (value == null) return void 0;
66
+ return entries.find((entry) => entry.value === value);
67
+ }
68
+ function upsertRegistration(entries, entry) {
69
+ const index = entries.findIndex((current) => current.id === entry.id);
70
+ if (index < 0) return [...entries, entry];
71
+ const nextEntries = entries.slice();
72
+ nextEntries[index] = entry;
73
+ return nextEntries;
74
+ }
75
+ function useTabsRegistry() {
76
+ const items = shallowRef([]);
77
+ return {
78
+ items,
79
+ register(entry) {
80
+ items.value = upsertRegistration(items.value, entry);
81
+ },
82
+ unregister(id) {
83
+ items.value = items.value.filter((item) => item.id !== id);
84
+ }
85
+ };
86
+ }
87
+ function useTabsRegistration(getRegistration, register, unregister, watchSource) {
88
+ const registeredId = ref(null);
89
+ function syncRegistration() {
90
+ const registration = getRegistration();
91
+ if (registeredId.value && registeredId.value !== registration.id) unregister(registeredId.value);
92
+ register(registration);
93
+ registeredId.value = registration.id;
94
+ }
95
+ onMounted(syncRegistration);
96
+ watch(watchSource, syncRegistration);
97
+ onBeforeUnmount(() => {
98
+ if (registeredId.value) unregister(registeredId.value);
99
+ });
100
+ }
101
+ function getTabsTrigger(event, list) {
102
+ const target = event.target;
103
+ const trigger = target instanceof Element ? target.closest(TRIGGER_SELECTOR) : void 0;
104
+ return trigger?.closest(TABLIST_SELECTOR) === list ? trigger : void 0;
105
+ }
106
+ function getTabsTriggers(list) {
107
+ return Array.from(list.querySelectorAll(TRIGGER_SELECTOR)).filter((trigger) => trigger.closest(TABLIST_SELECTOR) === list && !trigger.disabled);
108
+ }
109
+ function getNextTrigger(list, currentTrigger, key, orientation) {
110
+ const triggers = getTabsTriggers(list);
111
+ const currentIndex = triggers.indexOf(currentTrigger);
112
+ if (currentIndex === -1 || triggers.length === 0) return void 0;
113
+ if (key === "Home") return triggers[0];
114
+ if (key === "End") return triggers[triggers.length - 1];
115
+ const direction = ORIENTATION_NAVIGATION_KEYS[orientation][key];
116
+ if (!direction) return void 0;
117
+ return triggers[(currentIndex + direction + triggers.length) % triggers.length];
118
+ }
119
+ function useTabsItem(componentName, props, suffix) {
120
+ const group = useRequiredInject(tabsKey, componentName);
121
+ const generatedId = useId();
122
+ const id = computed(() => props.id ?? `${generatedId}-${suffix}`);
123
+ const isSelected = computed(() => group.isSelected(props.value));
124
+ return {
125
+ group,
126
+ id,
127
+ isSelected,
128
+ state: computed(() => toTabsState(isSelected.value))
129
+ };
130
+ }
131
+ function useTabs(props, emitUpdate) {
132
+ const triggerRegistry = useTabsRegistry();
133
+ const contentRegistry = useTabsRegistry();
134
+ const { items: triggers, unregister: unregisterTrigger } = triggerRegistry;
135
+ const { items: contents, register: registerContent, unregister: unregisterContent } = contentRegistry;
136
+ const isControlled = computed(() => props.modelValue !== void 0);
137
+ const uncontrolledValue = ref(props.defaultValue ?? null);
138
+ const isDisabled = computed(() => Boolean(props.disabled));
139
+ const size = computed(() => props.size ?? DEFAULT_SIZE);
140
+ const variant = computed(() => props.variant ?? DEFAULT_VARIANT);
141
+ const orientation = computed(() => props.orientation ?? DEFAULT_ORIENTATION);
142
+ const placement = computed(() => props.placement ?? DEFAULT_PLACEMENT);
143
+ const align = computed(() => props.align);
144
+ const activationMode = computed(() => props.activationMode ?? DEFAULT_ACTIVATION_MODE);
145
+ const selectedValue = computed(() => isControlled.value ? props.modelValue ?? null : uncontrolledValue.value);
146
+ const firstEnabledTrigger = computed(() => triggers.value.find((trigger) => !trigger.disabled));
147
+ const selectedEnabledTrigger = computed(() => {
148
+ const trigger = findRegistration(triggers.value, selectedValue.value);
149
+ return trigger && !trigger.disabled ? trigger : void 0;
150
+ });
151
+ const rootClass = computed(() => bem("rp-tabs", `size-${size.value}`, variant.value, getOrientationClasses(isDisabled.value, orientation.value), getPlacementClasses(orientation.value, placement.value)));
152
+ const rootProps = computed(() => ({
153
+ id: props.id,
154
+ class: rootClass.value,
155
+ "data-disabled": optionalAttr(isDisabled.value),
156
+ "data-size": size.value,
157
+ "data-variant": variant.value,
158
+ "data-orientation": orientation.value,
159
+ "data-placement": optionalAttr(orientation.value === "vertical" ? placement.value : void 0),
160
+ "data-activation-mode": activationMode.value,
161
+ ...getAriaProps(props.ariaLabel, props.labelledby, props.describedby)
162
+ }));
163
+ const slotProps = computed(() => ({
164
+ value: selectedValue.value,
165
+ size: size.value,
166
+ variant: variant.value,
167
+ disabled: isDisabled.value,
168
+ placement: placement.value,
169
+ align: align.value ?? getDefaultAlign(orientation.value),
170
+ select: selectValue
171
+ }));
172
+ function syncUncontrolledValue() {
173
+ if (isControlled.value || isDisabled.value) return;
174
+ const selectedTrigger = findRegistration(triggers.value, selectedValue.value);
175
+ if (selectedValue.value != null && !selectedTrigger?.disabled) return;
176
+ uncontrolledValue.value = firstEnabledTrigger.value?.value ?? null;
177
+ }
178
+ function setValue(value) {
179
+ if (isDisabled.value || value === selectedValue.value) return;
180
+ if (!isControlled.value) uncontrolledValue.value = value;
181
+ emitUpdate(value);
182
+ }
183
+ function selectValue(value) {
184
+ const trigger = findRegistration(triggers.value, value);
185
+ if (isDisabled.value || trigger?.disabled) return;
186
+ setValue(value);
187
+ }
188
+ const getFocusableValue = () => selectedEnabledTrigger.value?.value ?? firstEnabledTrigger.value?.value ?? null;
189
+ const getTriggerId = (value) => findRegistration(triggers.value, value)?.id;
190
+ const getContentId = (value) => findRegistration(contents.value, value)?.id;
191
+ const getTriggerValue = (id) => triggers.value.find((trigger) => trigger.id === id)?.value;
192
+ function registerTrigger(registration) {
193
+ triggerRegistry.register(registration);
194
+ syncUncontrolledValue();
195
+ }
196
+ function onListKeydown(event) {
197
+ const list = event.currentTarget;
198
+ if (!list || isDisabled.value) return;
199
+ const trigger = getTabsTrigger(event, list);
200
+ if (!trigger) return;
201
+ const nextTrigger = getNextTrigger(list, trigger, event.key, orientation.value);
202
+ if (!nextTrigger) return;
203
+ event.preventDefault();
204
+ nextTrigger.focus();
205
+ const nextValue = getTriggerValue(nextTrigger.id);
206
+ if (nextValue !== void 0 && activationMode.value === "automatic") selectValue(nextValue);
207
+ }
208
+ provide(tabsKey, {
209
+ get selectedValue() {
210
+ return selectedValue.value;
211
+ },
212
+ get disabled() {
213
+ return isDisabled.value;
214
+ },
215
+ get size() {
216
+ return size.value;
217
+ },
218
+ get variant() {
219
+ return variant.value;
220
+ },
221
+ get orientation() {
222
+ return orientation.value;
223
+ },
224
+ get placement() {
225
+ return placement.value;
226
+ },
227
+ get align() {
228
+ return align.value;
229
+ },
230
+ get activationMode() {
231
+ return activationMode.value;
232
+ },
233
+ get unmountOnExit() {
234
+ return Boolean(props.unmountOnExit);
235
+ },
236
+ get ariaLabel() {
237
+ return props.ariaLabel;
238
+ },
239
+ get describedby() {
240
+ return props.describedby;
241
+ },
242
+ get labelledby() {
243
+ return props.labelledby;
244
+ },
245
+ isSelected(value) {
246
+ return selectedValue.value === value;
247
+ },
248
+ selectValue,
249
+ getFocusableValue,
250
+ getTriggerId,
251
+ getContentId,
252
+ getTriggerValue,
253
+ registerTrigger,
254
+ unregisterTrigger,
255
+ registerContent,
256
+ unregisterContent,
257
+ onListKeydown
258
+ });
259
+ return {
260
+ rootClass,
261
+ rootProps,
262
+ slotProps,
263
+ selectedValue,
264
+ selectValue
265
+ };
266
+ }
267
+ function useTabsList(props) {
268
+ const group = useRequiredInject(tabsKey, "RpTabsList");
269
+ const rootClass = computed(() => bem("rp-tabs-list", group.variant, getOrientationClasses(group.disabled, group.orientation), getPlacementClasses(group.orientation, group.placement)));
270
+ return {
271
+ rootClass,
272
+ rootProps: computed(() => ({
273
+ id: props.id,
274
+ class: rootClass.value,
275
+ role: "tablist",
276
+ "data-disabled": optionalAttr(group.disabled),
277
+ "data-variant": group.variant,
278
+ "data-orientation": group.orientation,
279
+ "data-placement": optionalAttr(group.orientation === "vertical" ? group.placement : void 0),
280
+ "aria-orientation": group.orientation,
281
+ ...getAriaProps(props.ariaLabel ?? group.ariaLabel, props.ariaLabelledby ?? group.labelledby, props.ariaDescribedby ?? group.describedby),
282
+ onKeydown: group.onListKeydown
283
+ })),
284
+ slotProps: computed(() => ({
285
+ disabled: group.disabled,
286
+ variant: group.variant,
287
+ orientation: group.orientation,
288
+ placement: group.placement
289
+ }))
290
+ };
291
+ }
292
+ function useTabsTrigger(props) {
293
+ const { group, id, isSelected, state } = useTabsItem("RpTabsTrigger", props, "tab");
294
+ const isDisabled = computed(() => Boolean(group.disabled || props.disabled));
295
+ const isFocusable = computed(() => group.getFocusableValue() === props.value && !isDisabled.value);
296
+ const align = computed(() => props.align ?? group.align);
297
+ const effectiveAlign = computed(() => align.value ?? getDefaultAlign(group.orientation));
298
+ const rootClass = computed(() => bem("rp-tabs-trigger", `size-${group.size}`, group.variant, getTriggerClasses(isSelected.value, isDisabled.value, group.orientation, group.placement, align.value)));
299
+ const rootProps = computed(() => ({
300
+ id: id.value,
301
+ class: rootClass.value,
302
+ role: "tab",
303
+ type: "button",
304
+ disabled: optionalAttr(isDisabled.value),
305
+ tabIndex: isFocusable.value ? 0 : -1,
306
+ "data-state": state.value,
307
+ "data-disabled": optionalAttr(isDisabled.value),
308
+ "data-variant": group.variant,
309
+ "data-align": optionalAttr(align.value),
310
+ "aria-selected": isSelected.value,
311
+ "aria-controls": group.getContentId(props.value),
312
+ "aria-disabled": optionalAttr(isDisabled.value),
313
+ onClick: select,
314
+ onFocus,
315
+ onKeydown
316
+ }));
317
+ const slotProps = computed(() => ({
318
+ value: props.value,
319
+ selected: isSelected.value,
320
+ size: group.size,
321
+ variant: group.variant,
322
+ disabled: isDisabled.value,
323
+ align: effectiveAlign.value,
324
+ select
325
+ }));
326
+ useTabsRegistration(() => ({
327
+ id: id.value,
328
+ value: props.value,
329
+ disabled: isDisabled.value
330
+ }), group.registerTrigger, group.unregisterTrigger, () => [
331
+ id.value,
332
+ props.value,
333
+ isDisabled.value
334
+ ]);
335
+ function select() {
336
+ if (!isDisabled.value) group.selectValue(props.value);
337
+ }
338
+ function onFocus() {
339
+ if (group.activationMode === "automatic") select();
340
+ }
341
+ function onKeydown(event) {
342
+ if (event.key !== "Enter" && event.key !== " ") return;
343
+ event.preventDefault();
344
+ select();
345
+ }
346
+ return {
347
+ id,
348
+ state,
349
+ isSelected,
350
+ isDisabled,
351
+ rootClass,
352
+ rootProps,
353
+ slotProps,
354
+ select
355
+ };
356
+ }
357
+ function useTabsContent(props) {
358
+ const { group, id, isSelected, state } = useTabsItem("RpTabsContent", props, "tabpanel");
359
+ const shouldUnmountOnExit = computed(() => props.unmountOnExit ?? group.unmountOnExit);
360
+ const shouldRenderContent = computed(() => !shouldUnmountOnExit.value || isSelected.value);
361
+ const rootClass = computed(() => bem("rp-tabs-content", getStateClasses(isSelected.value), { vertical: group.orientation === "vertical" }));
362
+ const rootProps = computed(() => ({
363
+ id: id.value,
364
+ class: rootClass.value,
365
+ role: "tabpanel",
366
+ tabIndex: 0,
367
+ hidden: optionalAttr(!isSelected.value),
368
+ "data-state": state.value,
369
+ ...getAriaProps(props.ariaLabel, props.ariaLabelledby ?? group.getTriggerId(props.value), props.ariaDescribedby)
370
+ }));
371
+ const slotProps = computed(() => ({
372
+ value: props.value,
373
+ selected: isSelected.value
374
+ }));
375
+ useTabsRegistration(() => ({
376
+ id: id.value,
377
+ value: props.value
378
+ }), group.registerContent, group.unregisterContent, () => [id.value, props.value]);
379
+ return {
380
+ id,
381
+ state,
382
+ isSelected,
383
+ shouldRenderContent,
384
+ rootClass,
385
+ rootProps,
386
+ slotProps
387
+ };
388
+ }
389
+ //#endregion
390
+ //#region src/components/tabs/tabs.vue?vue&type=script&setup=true&vapor=true&lang.ts
391
+ var t0$3 = template("<div data-v-32e41419>", 1);
392
+ //#endregion
393
+ //#region src/components/tabs/tabs.vue
394
+ var tabs_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
395
+ name: "RpTabs",
396
+ __name: "tabs",
397
+ props: {
398
+ id: {},
399
+ modelValue: { default: void 0 },
400
+ defaultValue: { default: void 0 },
401
+ size: { default: "md" },
402
+ variant: { default: "line" },
403
+ orientation: { default: "horizontal" },
404
+ placement: { default: "left" },
405
+ align: {},
406
+ activationMode: { default: "automatic" },
407
+ disabled: {
408
+ type: Boolean,
409
+ default: false
410
+ },
411
+ unmountOnExit: {
412
+ type: Boolean,
413
+ default: false
414
+ },
415
+ ariaLabel: {},
416
+ describedby: {},
417
+ labelledby: {}
418
+ },
419
+ emits: ["update:modelValue"],
420
+ setup(__props, { emit: __emit }) {
421
+ const props = __props;
422
+ const emit = __emit;
423
+ const { rootProps, slotProps } = useTabs(props, (value) => {
424
+ emit("update:modelValue", value);
425
+ });
426
+ const n1 = t0$3();
427
+ renderEffect(() => setDynamicProps(n1, [unref(rootProps)]));
428
+ setInsertionState(n1, null, 0);
429
+ createSlot("default", { $: [() => unref(slotProps)] }, null, 1);
430
+ return n1;
431
+ }
432
+ }), [["__scopeId", "data-v-32e41419"]]);
433
+ //#endregion
434
+ //#region src/components/tabs/tabs-content.vue?vue&type=script&setup=true&vapor=true&lang.ts
435
+ var t0$2 = template("<section data-v-3ff419c3>", 1);
436
+ //#endregion
437
+ //#region src/components/tabs/tabs-content.vue
438
+ var tabs_content_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
439
+ name: "RpTabsContent",
440
+ __name: "tabs-content",
441
+ props: {
442
+ id: {},
443
+ value: {},
444
+ unmountOnExit: {
445
+ type: Boolean,
446
+ default: void 0
447
+ },
448
+ ariaLabel: {},
449
+ ariaDescribedby: {},
450
+ ariaLabelledby: {}
451
+ },
452
+ setup(__props) {
453
+ const { rootProps, slotProps, shouldRenderContent } = useTabsContent(__props);
454
+ return createIf(() => unref(shouldRenderContent), () => {
455
+ const n3 = t0$2();
456
+ renderEffect(() => setDynamicProps(n3, [unref(rootProps)]));
457
+ setInsertionState(n3, null, 0);
458
+ createSlot("default", { $: [() => unref(slotProps)] }, null, 1);
459
+ return n3;
460
+ });
461
+ }
462
+ }), [["__scopeId", "data-v-3ff419c3"]]);
463
+ //#endregion
464
+ //#region src/components/tabs/tabs-list.vue?vue&type=script&setup=true&vapor=true&lang.ts
465
+ var t0$1 = template("<div data-v-7f168d05>", 1);
466
+ //#endregion
467
+ //#region src/components/tabs/tabs-list.vue
468
+ var tabs_list_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
469
+ name: "RpTabsList",
470
+ __name: "tabs-list",
471
+ props: {
472
+ id: {},
473
+ ariaLabel: {},
474
+ ariaDescribedby: {},
475
+ ariaLabelledby: {}
476
+ },
477
+ setup(__props) {
478
+ const { rootProps, slotProps } = useTabsList(__props);
479
+ const n1 = t0$1();
480
+ renderEffect(() => setDynamicProps(n1, [unref(rootProps)]));
481
+ setInsertionState(n1, null, 0);
482
+ createSlot("default", { $: [() => unref(slotProps)] }, null, 1);
483
+ return n1;
484
+ }
485
+ }), [["__scopeId", "data-v-7f168d05"]]);
486
+ //#endregion
487
+ //#region src/components/tabs/tabs-trigger.vue?vue&type=script&setup=true&vapor=true&lang.ts
488
+ var t0 = template("<button data-v-4adec360>", 1);
489
+ //#endregion
490
+ //#region src/components/tabs/tabs-trigger.vue
491
+ var tabs_trigger_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
492
+ name: "RpTabsTrigger",
493
+ __name: "tabs-trigger",
494
+ props: {
495
+ id: {},
496
+ value: {},
497
+ disabled: {
498
+ type: Boolean,
499
+ default: false
500
+ },
501
+ align: {}
502
+ },
503
+ setup(__props) {
504
+ const { rootProps, slotProps } = useTabsTrigger(__props);
505
+ const n1 = t0();
506
+ renderEffect(() => setDynamicProps(n1, [unref(rootProps)]));
507
+ setInsertionState(n1, null, 0);
508
+ createSlot("default", { $: [() => unref(slotProps)] }, null, 1);
509
+ return n1;
510
+ }
511
+ }), [["__scopeId", "data-v-4adec360"]]);
512
+ //#endregion
513
+ export { useTabs as a, useTabsTrigger as c, tabs_default as i, tabs_list_default as n, useTabsContent as o, tabs_content_default as r, useTabsList as s, tabs_trigger_default as t };
package/dist/textarea.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import './textarea.css';
2
- import { n as bem, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
+ import { t as bem } from "./bem.js";
3
+ import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
3
4
  import { t as useControlState } from "./useControlState.js";
4
5
  import { child, computed, createInvoker, createTemplateRefSetter, defineVaporComponent, delegateEvents, nextTick, onMounted, ref, renderEffect, setAttr, setClass, setProp, setValue, template, unref, watch } from "vue";
5
6
  //#region src/components/textarea/useTextarea.ts
@@ -206,5 +207,3 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
206
207
  }), [["__scopeId", "data-v-6c62dc31"]]);
207
208
  //#endregion
208
209
  export { textarea_default as t };
209
-
210
- //# sourceMappingURL=textarea.js.map
package/dist/tooltip.js CHANGED
@@ -1,6 +1,7 @@
1
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";
2
4
  import { n as getComponentCustomColor, r as isComponentPresetColor } from "./componentColors.js";
3
- import { n as bem, t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
4
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";
5
6
  //#region src/composables/useDelayedOpen.ts
6
7
  function readOption(value, fallback) {
@@ -380,5 +381,3 @@ var tooltip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
380
381
  }), [["__scopeId", "data-v-13c39164"]]);
381
382
  //#endregion
382
383
  export { useDelayedOpen as n, tooltip_default as t };
383
-
384
- //# sourceMappingURL=tooltip.js.map
@@ -29,5 +29,3 @@ function getButtonColorStyle(color) {
29
29
  }
30
30
  //#endregion
31
31
  export { loader_circle_default as n, getButtonColorStyle as t };
32
-
33
- //# sourceMappingURL=useButtonColor.js.map
@@ -0,0 +1,24 @@
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 };
@@ -0,0 +1,92 @@
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(false);
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 };
@@ -38,5 +38,3 @@ function useControlState(options = {}) {
38
38
  }
39
39
  //#endregion
40
40
  export { useControlState as t };
41
-
42
- //# sourceMappingURL=useControlState.js.map
@@ -0,0 +1,9 @@
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 };
package/dist/x.js ADDED
@@ -0,0 +1,12 @@
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 };