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.
- package/dist/_plugin-vue_export-helper.js +1 -11
- package/dist/accordion.css +112 -0
- package/dist/accordion.js +358 -0
- package/dist/badge.css +169 -0
- package/dist/badge.js +101 -0
- package/dist/bem.js +9 -0
- package/dist/button-group.css +8 -8
- package/dist/button-group.js +2 -3
- package/dist/button.js +3 -4
- package/dist/card.css +40 -20
- package/dist/card.js +71 -39
- package/dist/checkbox.js +2 -3
- package/dist/collapse.css +32 -0
- package/dist/collapse.js +62 -0
- package/dist/componentColors.js +0 -2
- package/dist/components/accordion/accordion-item.d.ts +40 -0
- package/dist/components/accordion/accordion.d.ts +23 -0
- package/dist/components/accordion/index.d.ts +4 -0
- package/dist/components/accordion/index.js +2 -0
- package/dist/components/accordion/types.d.ts +100 -0
- package/dist/components/accordion/useAccordion.d.ts +3 -0
- package/dist/components/badge/badge.d.ts +25 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/badge/types.d.ts +16 -0
- package/dist/components/badge/useBadgeColor.d.ts +8 -0
- package/dist/components/card/card.d.ts +4 -0
- package/dist/components/card/types.d.ts +4 -0
- package/dist/components/collapse/collapse.d.ts +36 -0
- package/dist/components/collapse/index.d.ts +3 -0
- package/dist/components/collapse/index.js +3 -0
- package/dist/components/collapse/types.d.ts +74 -0
- package/dist/components/collapse/useCollapse.d.ts +2 -0
- package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +16 -0
- package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +23 -0
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +26 -0
- package/dist/components/dropdown-menu/index.d.ts +3 -0
- package/dist/components/dropdown-menu/index.js +2 -0
- package/dist/components/dropdown-menu/types.d.ts +104 -0
- package/dist/components/dropdown-menu/useDropdownMenu.d.ts +32 -0
- package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +30 -0
- package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +28 -0
- package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +24 -0
- package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +51 -0
- package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +16 -0
- package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +25 -0
- package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +18 -0
- package/dist/components/field/field.d.ts +2 -2
- package/dist/components/field/useField.d.ts +17 -0
- package/dist/components/input/useInput.d.ts +8 -0
- package/dist/components/modal/index.d.ts +2 -0
- package/dist/components/modal/index.js +2 -0
- package/dist/components/modal/modal.d.ts +42 -0
- package/dist/components/modal/types.d.ts +31 -0
- package/dist/components/modal/useModal.d.ts +29 -0
- package/dist/components/overlay/index.d.ts +2 -0
- package/dist/components/overlay/index.js +2 -0
- package/dist/components/overlay/overlay.d.ts +19 -0
- package/dist/components/overlay/types.d.ts +12 -0
- package/dist/components/overlay/useOverlay.d.ts +7 -0
- package/dist/components/popover/index.d.ts +2 -0
- package/dist/components/popover/index.js +2 -0
- package/dist/components/popover/popover.d.ts +43 -0
- package/dist/components/popover/types.d.ts +43 -0
- package/dist/components/popover/usePopover.d.ts +23 -0
- package/dist/components/tabs/index.d.ts +6 -0
- package/dist/components/tabs/index.js +2 -0
- package/dist/components/tabs/tabs-content.d.ts +24 -0
- package/dist/components/tabs/tabs-list.d.ts +26 -0
- package/dist/components/tabs/tabs-trigger.d.ts +29 -0
- package/dist/components/tabs/tabs.d.ts +31 -0
- package/dist/components/tabs/types.d.ts +160 -0
- package/dist/components/tabs/useTabs.d.ts +5 -0
- package/dist/dropdown-menu.css +159 -0
- package/dist/dropdown-menu.js +901 -0
- package/dist/field.css +11 -8
- package/dist/field.js +93 -52
- package/dist/icon-button.css +1 -1
- package/dist/icon-button.js +3 -4
- package/dist/index.d.ts +8 -0
- package/dist/index.js +12 -1
- package/dist/input.css +25 -25
- package/dist/input.js +57 -40
- package/dist/modal.css +134 -0
- package/dist/modal.js +427 -0
- package/dist/overlay.css +28 -0
- package/dist/overlay.js +82 -0
- package/dist/popover.css +75 -0
- package/dist/popover.js +377 -0
- package/dist/progress.js +2 -3
- package/dist/radio.js +4 -11
- package/dist/select.js +8 -39
- package/dist/slider.js +2 -3
- package/dist/switch.js +2 -3
- package/dist/tabs.css +279 -0
- package/dist/tabs.js +513 -0
- package/dist/textarea.js +2 -3
- package/dist/tooltip.js +2 -3
- package/dist/useButtonColor.js +0 -2
- package/dist/useClickOutside.js +24 -0
- package/dist/useCollapse.js +92 -0
- package/dist/useControlState.js +0 -2
- package/dist/useRequiredInject.js +9 -0
- package/dist/x.js +12 -0
- package/package.json +40 -4
- package/dist/_plugin-vue_export-helper.js.map +0 -1
- package/dist/button-group.js.map +0 -1
- package/dist/button.js.map +0 -1
- package/dist/card.js.map +0 -1
- package/dist/checkbox.js.map +0 -1
- package/dist/componentColors.js.map +0 -1
- package/dist/field.js.map +0 -1
- package/dist/icon-button.js.map +0 -1
- package/dist/input.js.map +0 -1
- package/dist/progress.js.map +0 -1
- package/dist/radio.js.map +0 -1
- package/dist/select.js.map +0 -1
- package/dist/slider.js.map +0 -1
- package/dist/switch.js.map +0 -1
- package/dist/textarea.js.map +0 -1
- package/dist/tooltip.js.map +0 -1
- package/dist/useButtonColor.js.map +0 -1
- 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 {
|
|
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
|
package/dist/useButtonColor.js
CHANGED
|
@@ -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 };
|
package/dist/useControlState.js
CHANGED
|
@@ -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 };
|