ropav 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/accordion.js +11 -8
- package/dist/alert.css +18 -18
- package/dist/alert.js +18 -17
- package/dist/avatar.js +2 -2
- package/dist/badge.js +2 -2
- package/dist/base.css +18 -13
- package/dist/button-group.js +1 -1
- package/dist/button-link.js +10 -12
- package/dist/button.css +32 -27
- package/dist/button.js +10 -12
- package/dist/{useButtonColor.js → button.scss_vue_type_style_index_0_src_true_lang.js} +2 -1
- package/dist/card.js +1 -1
- package/dist/checkbox.css +32 -32
- package/dist/checkbox.js +6 -6
- package/dist/collapse.css +6 -6
- package/dist/collapse.js +4 -4
- package/dist/collectionNavigation.js +2 -2
- package/dist/color-input.css +19 -19
- package/dist/color-input.js +5 -5
- package/dist/color-picker.css +7 -7
- package/dist/color-picker.js +4 -5
- package/dist/color-swatch.js +1 -1
- package/dist/componentColors.js +42 -2
- package/dist/components/checkbox/useCheckbox.d.ts +1 -1
- package/dist/components/color-input/color-input.d.ts +2 -2
- package/dist/components/color-input/useColorInput.d.ts +1 -1
- package/dist/components/dialog/dialog-core.d.ts +1 -1
- package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +2 -2
- package/dist/components/dropdown-menu/dropdown-menu-primitive-core.d.ts +1 -1
- package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +2 -2
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +3 -3
- package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +3 -4
- package/dist/components/input/useInput.d.ts +1 -1
- package/dist/components/number-input/useNumberInput.d.ts +1 -1
- package/dist/components/progress/useProgress.d.ts +1 -1
- package/dist/components/radio/useRadio.d.ts +2 -2
- package/dist/components/scroll-area/scrollAreaCore.d.ts +5 -0
- package/dist/components/scroll-area/types.d.ts +4 -0
- package/dist/components/scroll-area/useScrollArea.d.ts +1 -0
- package/dist/components/scroll-area/useScrollAreaMetrics.d.ts +3 -0
- package/dist/components/scroll-area/useScrollAreaPresentation.d.ts +3 -0
- package/dist/components/select/useSelect.d.ts +2 -1
- package/dist/components/select/useSelectNativeValue.d.ts +1 -7
- package/dist/components/slider/sliderCore.d.ts +2 -1
- package/dist/components/slider/useRangeSlider.d.ts +1 -1
- package/dist/components/slider/useSlider.d.ts +1 -1
- package/dist/components/switch/useSwitch.d.ts +1 -1
- package/dist/components/textarea/useTextarea.d.ts +1 -1
- package/dist/composables/index.d.ts +2 -0
- package/dist/composables/index.js +2 -0
- package/dist/composables/useControllableValue.d.ts +14 -0
- package/dist/dialog.js +8 -5
- package/dist/dropdown-menu.js +43 -29
- package/dist/field.js +1 -1
- package/dist/floating.js +19 -7
- package/dist/icon-button.css +12 -173
- package/dist/icon-button.js +5 -5
- package/dist/index.d.ts +5 -4
- package/dist/index.js +7 -5
- package/dist/input.css +24 -24
- package/dist/input.js +5 -5
- package/dist/modal.js +11 -7
- package/dist/number-input.css +18 -18
- package/dist/number-input.js +7 -7
- package/dist/overlay.js +1 -1
- package/dist/pagination.js +3 -3
- package/dist/popover.js +9 -6
- package/dist/progress.css +29 -21
- package/dist/progress.js +17 -10
- package/dist/radio.js +3 -3
- package/dist/scroll-area.css +10 -1
- package/dist/scroll-area.js +82 -25
- package/dist/select.css +45 -45
- package/dist/select.js +48 -26
- package/dist/slider.css +142 -142
- package/dist/slider.js +32 -38
- package/dist/switch.css +17 -17
- package/dist/switch.js +6 -6
- package/dist/tabs.css +3 -3
- package/dist/tabs.js +25 -15
- package/dist/textarea.css +26 -26
- package/dist/textarea.js +4 -4
- package/dist/toast.css +26 -26
- package/dist/toast.js +24 -19
- package/dist/tooltip.js +11 -8
- package/dist/useCollapse.js +12 -7
- package/dist/useControlState.js +1 -1
- package/dist/useControllableValue.js +8 -2
- package/dist/useFloatingPosition.js +4 -1140
- package/dist/useFormControl.js +3 -2
- package/dist/useOverlayZIndex.js +1 -1
- package/dist/useRequiredInject.js +1 -1
- package/docs/public-composables-api.md +52 -0
- package/package.json +45 -38
- package/src/styles/_mixins.scss +4 -0
- package/src/styles/_tokens.scss +12 -12
- package/src/styles/_variables.scss +1 -1
- package/dist/button-link.css +0 -167
- /package/dist/{composables → internal/composables}/useOverlayLayer.d.ts +0 -0
package/dist/toast.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@layer ropav.components {
|
|
2
|
-
.rp-toast[data-v-
|
|
2
|
+
.rp-toast[data-v-782b93e5] {
|
|
3
3
|
--_rp-toast-bg: var(--rp-color-default);
|
|
4
4
|
--_rp-toast-fg: var(--rp-color-text);
|
|
5
5
|
--_rp-toast-title-fg: var(--rp-color-text);
|
|
@@ -24,25 +24,25 @@
|
|
|
24
24
|
box-shadow: var(--rp-shadow-md);
|
|
25
25
|
transition: background-color var(--rp-transition-fast), color var(--rp-transition-fast), border-color var(--rp-transition-fast);
|
|
26
26
|
}
|
|
27
|
-
.rp-toast--radius-none[data-v-
|
|
27
|
+
.rp-toast--radius-none[data-v-782b93e5] {
|
|
28
28
|
--_rp-toast-radius: var(--rp-radius-none);
|
|
29
29
|
}
|
|
30
|
-
.rp-toast--radius-xs[data-v-
|
|
30
|
+
.rp-toast--radius-xs[data-v-782b93e5] {
|
|
31
31
|
--_rp-toast-radius: var(--rp-radius-xs);
|
|
32
32
|
}
|
|
33
|
-
.rp-toast--radius-sm[data-v-
|
|
33
|
+
.rp-toast--radius-sm[data-v-782b93e5] {
|
|
34
34
|
--_rp-toast-radius: var(--rp-radius-sm);
|
|
35
35
|
}
|
|
36
|
-
.rp-toast--radius-md[data-v-
|
|
36
|
+
.rp-toast--radius-md[data-v-782b93e5] {
|
|
37
37
|
--_rp-toast-radius: var(--rp-radius-md);
|
|
38
38
|
}
|
|
39
|
-
.rp-toast--radius-lg[data-v-
|
|
39
|
+
.rp-toast--radius-lg[data-v-782b93e5] {
|
|
40
40
|
--_rp-toast-radius: var(--rp-radius-lg);
|
|
41
41
|
}
|
|
42
|
-
.rp-toast--radius-xl[data-v-
|
|
42
|
+
.rp-toast--radius-xl[data-v-782b93e5] {
|
|
43
43
|
--_rp-toast-radius: var(--rp-radius-xl);
|
|
44
44
|
}
|
|
45
|
-
.rp-toast__icon[data-v-
|
|
45
|
+
.rp-toast__icon[data-v-782b93e5] {
|
|
46
46
|
display: inline-flex;
|
|
47
47
|
flex: 0 0 auto;
|
|
48
48
|
align-items: center;
|
|
@@ -51,37 +51,37 @@
|
|
|
51
51
|
color: var(--_rp-toast-icon-fg);
|
|
52
52
|
line-height: 0;
|
|
53
53
|
}
|
|
54
|
-
.rp-toast__icon[data-v-
|
|
54
|
+
.rp-toast__icon[data-v-782b93e5] > svg {
|
|
55
55
|
display: block;
|
|
56
56
|
width: 1rem;
|
|
57
57
|
height: 1rem;
|
|
58
58
|
}
|
|
59
|
-
.rp-toast__content[data-v-
|
|
59
|
+
.rp-toast__content[data-v-782b93e5] {
|
|
60
60
|
display: grid;
|
|
61
61
|
flex: 1 1 auto;
|
|
62
62
|
min-width: 0;
|
|
63
63
|
gap: var(--rp-spacing-1);
|
|
64
64
|
}
|
|
65
|
-
.rp-toast__title[data-v-
|
|
65
|
+
.rp-toast__title[data-v-782b93e5] {
|
|
66
66
|
color: var(--_rp-toast-title-fg);
|
|
67
67
|
font-size: var(--rp-font-size-md);
|
|
68
68
|
font-weight: var(--rp-font-weight-semibold);
|
|
69
69
|
line-height: var(--rp-line-height-xs);
|
|
70
70
|
}
|
|
71
|
-
.rp-toast__description[data-v-
|
|
71
|
+
.rp-toast__description[data-v-782b93e5] {
|
|
72
72
|
margin: 0;
|
|
73
73
|
}
|
|
74
|
-
.rp-toast__body[data-v-
|
|
74
|
+
.rp-toast__body[data-v-782b93e5], .rp-toast__description[data-v-782b93e5] {
|
|
75
75
|
min-width: 0;
|
|
76
76
|
color: var(--_rp-toast-fg);
|
|
77
77
|
}
|
|
78
|
-
.rp-toast__action[data-v-
|
|
78
|
+
.rp-toast__action[data-v-782b93e5] {
|
|
79
79
|
display: inline-flex;
|
|
80
80
|
flex: 0 0 auto;
|
|
81
81
|
align-items: center;
|
|
82
82
|
margin-left: auto;
|
|
83
83
|
}
|
|
84
|
-
.rp-toast__close[data-v-
|
|
84
|
+
.rp-toast__close[data-v-782b93e5] {
|
|
85
85
|
box-sizing: border-box;
|
|
86
86
|
display: inline-flex;
|
|
87
87
|
flex: 0 0 auto;
|
|
@@ -98,36 +98,36 @@
|
|
|
98
98
|
cursor: pointer;
|
|
99
99
|
transition: background-color var(--rp-transition-fast), color var(--rp-transition-fast);
|
|
100
100
|
}
|
|
101
|
-
.rp-toast__close[data-v-
|
|
101
|
+
.rp-toast__close[data-v-782b93e5]:hover {
|
|
102
102
|
background-color: color-mix(in srgb, var(--_rp-toast-icon-fg) 12%, transparent);
|
|
103
103
|
}
|
|
104
|
-
.rp-toast__close[data-v-
|
|
104
|
+
.rp-toast__close[data-v-782b93e5]:focus-visible {
|
|
105
105
|
outline: var(--rp-border-width-medium) solid var(--rp-color-focus-ring);
|
|
106
106
|
outline-offset: 2px;
|
|
107
107
|
}
|
|
108
|
-
.rp-toast__close[data-v-
|
|
108
|
+
.rp-toast__close[data-v-782b93e5] > svg {
|
|
109
109
|
display: block;
|
|
110
110
|
width: 1rem;
|
|
111
111
|
height: 1rem;
|
|
112
112
|
}
|
|
113
|
-
.rp-toast-enter-active[data-v-
|
|
114
|
-
.rp-toast-leave-active[data-v-
|
|
113
|
+
.rp-toast-enter-active[data-v-782b93e5],
|
|
114
|
+
.rp-toast-leave-active[data-v-782b93e5] {
|
|
115
115
|
will-change: opacity, transform;
|
|
116
116
|
}
|
|
117
|
-
.rp-toast-enter-active[data-v-
|
|
117
|
+
.rp-toast-enter-active[data-v-782b93e5] {
|
|
118
118
|
transition: opacity 180ms ease-out, transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
119
119
|
}
|
|
120
|
-
.rp-toast-leave-active[data-v-
|
|
120
|
+
.rp-toast-leave-active[data-v-782b93e5] {
|
|
121
121
|
transition: opacity 120ms ease-in, transform 180ms cubic-bezier(0.4, 0, 1, 1);
|
|
122
122
|
}
|
|
123
|
-
.rp-toast-enter-from[data-v-
|
|
124
|
-
.rp-toast-leave-to[data-v-
|
|
123
|
+
.rp-toast-enter-from[data-v-782b93e5],
|
|
124
|
+
.rp-toast-leave-to[data-v-782b93e5] {
|
|
125
125
|
opacity: 0;
|
|
126
126
|
transform: translate3d(0, calc(var(--rp-spacing-2) * -1), 0) scale(0.98);
|
|
127
127
|
}
|
|
128
128
|
@media (prefers-reduced-motion: reduce) {
|
|
129
|
-
.rp-toast-enter-active[data-v-
|
|
130
|
-
.rp-toast-leave-active[data-v-
|
|
129
|
+
.rp-toast-enter-active[data-v-782b93e5],
|
|
130
|
+
.rp-toast-leave-active[data-v-782b93e5] {
|
|
131
131
|
transition: none;
|
|
132
132
|
}
|
|
133
133
|
}
|
package/dist/toast.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import './toast.css';
|
|
2
|
-
import { t as
|
|
3
|
-
import { t as bem } from "./bem.js";
|
|
2
|
+
import { t as useControllableValue } from "./useControllableValue.js";
|
|
4
3
|
import { n as useStylesApi } from "./styles-api.js";
|
|
5
|
-
import {
|
|
4
|
+
import { t as bem } from "./bem.js";
|
|
6
5
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
6
|
+
import { t as x_default } from "./x.js";
|
|
7
|
+
import { a as getComponentVariantColorRoles, t as componentColors } from "./componentColors.js";
|
|
7
8
|
import { n as useOverlayZIndex } from "./useOverlayZIndex.js";
|
|
8
9
|
import { r as useTeleportTarget } from "./useTeleportTarget.js";
|
|
9
10
|
import { VaporTeleport, VaporTransition, VaporTransitionGroup, computed, createComponent, createFor, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, extend, inject, nextTick, onBeforeUnmount, onMounted, provide, ref, renderEffect, setDynamicProps, setInsertionState, setText, template, toDisplayString, toValue, txt, unref, useSlots, watch } from "vue";
|
|
@@ -34,11 +35,11 @@ function getToastColorStyle(color, variant, autoContrast, contrastColor) {
|
|
|
34
35
|
}
|
|
35
36
|
//#endregion
|
|
36
37
|
//#region src/components/toast/toast.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
37
|
-
var t0$1 = template("<div data-v-
|
|
38
|
+
var t0$1 = template("<div data-v-782b93e5>");
|
|
38
39
|
var t1 = template(" ");
|
|
39
|
-
var t2 = template("<p data-v-
|
|
40
|
-
var t3 = template("<div data-v-
|
|
41
|
-
var t4 = template("<button data-v-
|
|
40
|
+
var t2 = template("<p data-v-782b93e5> ");
|
|
41
|
+
var t3 = template("<div data-v-782b93e5 class=rp-toast__content>");
|
|
42
|
+
var t4 = template("<button data-v-782b93e5>");
|
|
42
43
|
delegateEvents("click");
|
|
43
44
|
//#endregion
|
|
44
45
|
//#region src/components/toast/toast.vue
|
|
@@ -88,7 +89,12 @@ var toast_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
88
89
|
const props = __props;
|
|
89
90
|
const emit = __emit;
|
|
90
91
|
const slots = useSlots();
|
|
91
|
-
const
|
|
92
|
+
const controllableOpen = useControllableValue({
|
|
93
|
+
modelValue: () => props.open,
|
|
94
|
+
defaultValue: () => true,
|
|
95
|
+
onChange: (open) => emit("update:open", open)
|
|
96
|
+
});
|
|
97
|
+
const isOpen = controllableOpen.value;
|
|
92
98
|
const isMounted = ref(false);
|
|
93
99
|
const pausedByHover = ref(false);
|
|
94
100
|
const pausedByFocus = ref(false);
|
|
@@ -97,7 +103,6 @@ var toast_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
97
103
|
let timerStartedAt = 0;
|
|
98
104
|
let remainingDuration = 0;
|
|
99
105
|
watch(() => props.open, (open) => {
|
|
100
|
-
if (open !== void 0) localOpen.value = open;
|
|
101
106
|
if (open) closePending = false;
|
|
102
107
|
});
|
|
103
108
|
watch(() => props.pauseOnHover, (pauseOnHover) => {
|
|
@@ -110,7 +115,6 @@ var toast_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
110
115
|
pausedByFocus.value = false;
|
|
111
116
|
resumeTimer();
|
|
112
117
|
});
|
|
113
|
-
const isOpen = computed(() => props.open ?? localOpen.value);
|
|
114
118
|
const hasTitle = computed(() => Boolean(props.title || slots.title));
|
|
115
119
|
const hasDescription = computed(() => Boolean(props.description));
|
|
116
120
|
const hasContent = computed(() => Boolean(hasTitle.value || hasDescription.value || slots.default));
|
|
@@ -202,8 +206,7 @@ var toast_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
202
206
|
if (closePending) return;
|
|
203
207
|
closePending = true;
|
|
204
208
|
clearTimer();
|
|
205
|
-
|
|
206
|
-
emit("update:open", false);
|
|
209
|
+
controllableOpen.setValue(false);
|
|
207
210
|
emit("close", reason);
|
|
208
211
|
if (isOpen.value) {
|
|
209
212
|
resetTimer();
|
|
@@ -217,7 +220,7 @@ var toast_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
217
220
|
name: "rp-toast",
|
|
218
221
|
onAfterLeave: () => _on_after_leave
|
|
219
222
|
}, extend(() => {
|
|
220
|
-
return createIf(() => isOpen
|
|
223
|
+
return createIf(() => unref(isOpen), () => {
|
|
221
224
|
const n30 = t0$1();
|
|
222
225
|
renderEffect(() => setDynamicProps(n30, [rootAttrs.value]));
|
|
223
226
|
setInsertionState(n30, null, 0);
|
|
@@ -287,7 +290,7 @@ var toast_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
|
|
|
287
290
|
}, null, 129);
|
|
288
291
|
}, { _: 8 }), true);
|
|
289
292
|
}
|
|
290
|
-
}), [["__scopeId", "data-v-
|
|
293
|
+
}), [["__scopeId", "data-v-782b93e5"]]);
|
|
291
294
|
//#endregion
|
|
292
295
|
//#region src/components/toast/toast-store.ts
|
|
293
296
|
var TYPE_DEFAULTS = {
|
|
@@ -711,14 +714,17 @@ function optionValue(value) {
|
|
|
711
714
|
return toValue(value);
|
|
712
715
|
}
|
|
713
716
|
function useToastState(options = {}) {
|
|
714
|
-
const uncontrolledOpen = ref(options.defaultOpen ?? false);
|
|
715
717
|
const closeReason = ref(null);
|
|
716
718
|
const controlledOpen = computed(() => optionValue(options.open));
|
|
717
|
-
const
|
|
719
|
+
const controllableOpen = useControllableValue({
|
|
720
|
+
modelValue: () => controlledOpen.value,
|
|
721
|
+
defaultValue: () => options.defaultOpen ?? false,
|
|
722
|
+
onChange: (nextOpen) => options.onOpenChange?.(nextOpen)
|
|
723
|
+
});
|
|
724
|
+
const isOpen = controllableOpen.value;
|
|
718
725
|
const lastCloseReason = computed(() => closeReason.value);
|
|
719
726
|
watch(controlledOpen, (nextOpen) => {
|
|
720
727
|
if (nextOpen === void 0) return;
|
|
721
|
-
uncontrolledOpen.value = nextOpen;
|
|
722
728
|
if (nextOpen) closeReason.value = null;
|
|
723
729
|
}, {
|
|
724
730
|
flush: "sync",
|
|
@@ -731,9 +737,8 @@ function useToastState(options = {}) {
|
|
|
731
737
|
}));
|
|
732
738
|
function setOpen(nextOpen) {
|
|
733
739
|
if (nextOpen === isOpen.value) return;
|
|
734
|
-
if (controlledOpen.value === void 0) uncontrolledOpen.value = nextOpen;
|
|
735
740
|
if (nextOpen) closeReason.value = null;
|
|
736
|
-
|
|
741
|
+
controllableOpen.setValue(nextOpen);
|
|
737
742
|
}
|
|
738
743
|
function open() {
|
|
739
744
|
setOpen(true);
|
package/dist/tooltip.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import './tooltip.css';
|
|
2
|
-
import { t as
|
|
2
|
+
import { t as useControllableValue } from "./useControllableValue.js";
|
|
3
3
|
import { n as useStylesApi, t as presence } from "./styles-api.js";
|
|
4
|
-
import {
|
|
4
|
+
import { t as bem } from "./bem.js";
|
|
5
5
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
6
|
+
import { a as getComponentVariantColorRoles } from "./componentColors.js";
|
|
6
7
|
import { n as useOverlayZIndex } from "./useOverlayZIndex.js";
|
|
7
8
|
import { n as useFloatingPosition, r as useFloatingTarget, t as isElementReference } from "./useFloatingPosition.js";
|
|
8
9
|
import { n as useTeleportPositioningKey, r as useTeleportTarget } from "./useTeleportTarget.js";
|
|
9
10
|
import { VaporTeleport, VaporTransition, applyVShow, computed, createComponent, createIf, createSlot, createTemplateRefSetter, defineVaporComponent, extend, onBeforeUnmount, ref, renderEffect, setAttr, setDynamicProps, setInsertionState, setStaticTemplateRef, setStyle, setText, template, toDisplayString, unref, useId, useSlots, watch } from "vue";
|
|
10
|
-
//#region src/composables/useDelayedOpen.ts
|
|
11
|
+
//#region src/internal/composables/useDelayedOpen.ts
|
|
11
12
|
function readOption(value, fallback) {
|
|
12
13
|
return typeof value === "function" ? value() ?? fallback : value ?? fallback;
|
|
13
14
|
}
|
|
@@ -15,9 +16,13 @@ function readOptional(value) {
|
|
|
15
16
|
return typeof value === "function" ? value() : value;
|
|
16
17
|
}
|
|
17
18
|
function useDelayedOpen(options = {}) {
|
|
18
|
-
const
|
|
19
|
+
const controllableOpen = useControllableValue({
|
|
20
|
+
modelValue: () => readOptional(options.open),
|
|
21
|
+
defaultValue: () => false,
|
|
22
|
+
onChange: (nextOpen) => options.onOpenChange?.(nextOpen)
|
|
23
|
+
});
|
|
19
24
|
let openTimer = null;
|
|
20
|
-
const isOpen =
|
|
25
|
+
const isOpen = controllableOpen.value;
|
|
21
26
|
function clearTimers() {
|
|
22
27
|
if (openTimer) {
|
|
23
28
|
clearTimeout(openTimer);
|
|
@@ -28,9 +33,7 @@ function useDelayedOpen(options = {}) {
|
|
|
28
33
|
return readOption(options.disabled, false);
|
|
29
34
|
}
|
|
30
35
|
function setOpen(nextOpen) {
|
|
31
|
-
|
|
32
|
-
if (readOptional(options.open) === void 0) uncontrolledOpen.value = nextOpen;
|
|
33
|
-
if (previousOpen !== nextOpen) options.onOpenChange?.(nextOpen);
|
|
36
|
+
if (isOpen.value !== nextOpen) controllableOpen.setValue(nextOpen);
|
|
34
37
|
}
|
|
35
38
|
function open() {
|
|
36
39
|
if (isDisabled()) return;
|
package/dist/useCollapse.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { t as useControllableValue } from "./useControllableValue.js";
|
|
1
2
|
import { t as bem } from "./bem.js";
|
|
2
|
-
import { computed,
|
|
3
|
+
import { computed, toValue, useId } from "vue";
|
|
3
4
|
//#region src/components/collapse/useCollapse.ts
|
|
4
5
|
var DEFAULT_ROLE = "region";
|
|
5
6
|
function optionValue(value) {
|
|
@@ -7,11 +8,17 @@ function optionValue(value) {
|
|
|
7
8
|
}
|
|
8
9
|
function useCollapse(options = {}, emitOpenChange) {
|
|
9
10
|
const generatedId = useId();
|
|
10
|
-
const uncontrolledOpen = ref(false);
|
|
11
11
|
const id = computed(() => optionValue(options.id) ?? `${generatedId}-collapse`);
|
|
12
|
-
const controlledOpen = computed(() => optionValue(options.open));
|
|
13
12
|
const isDisabled = computed(() => Boolean(optionValue(options.disabled)));
|
|
14
|
-
const
|
|
13
|
+
const controllableOpen = useControllableValue({
|
|
14
|
+
modelValue: () => optionValue(options.open),
|
|
15
|
+
defaultValue: () => false,
|
|
16
|
+
onChange: (nextOpen) => {
|
|
17
|
+
options.onOpenChange?.(nextOpen);
|
|
18
|
+
emitOpenChange?.(nextOpen);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
const isOpen = controllableOpen.value;
|
|
15
22
|
const state = computed(() => isOpen.value ? "open" : "closed");
|
|
16
23
|
const shouldRenderContent = computed(() => !optionValue(options.unmountOnExit) || isOpen.value);
|
|
17
24
|
const rootClass = computed(() => bem("rp-collapse", {
|
|
@@ -54,9 +61,7 @@ function useCollapse(options = {}, emitOpenChange) {
|
|
|
54
61
|
}));
|
|
55
62
|
function setOpen(nextOpen) {
|
|
56
63
|
if (isDisabled.value || nextOpen === isOpen.value) return;
|
|
57
|
-
|
|
58
|
-
options.onOpenChange?.(nextOpen);
|
|
59
|
-
emitOpenChange?.(nextOpen);
|
|
64
|
+
controllableOpen.setValue(nextOpen);
|
|
60
65
|
}
|
|
61
66
|
function open() {
|
|
62
67
|
setOpen(true);
|
package/dist/useControlState.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { computed } from "vue";
|
|
2
|
-
//#region src/composables/useControlState.ts
|
|
2
|
+
//#region src/internal/composables/useControlState.ts
|
|
3
3
|
function mergeIds(...values) {
|
|
4
4
|
const ids = values.flatMap((value) => value?.split(/\s+/) ?? []).filter(Boolean);
|
|
5
5
|
return ids.length > 0 ? Array.from(new Set(ids)).join(" ") : void 0;
|
|
@@ -6,8 +6,14 @@ function useControllableValue(options) {
|
|
|
6
6
|
const isControlled = computed(() => options.modelValue() !== void 0);
|
|
7
7
|
watch(options.modelValue, (value) => {
|
|
8
8
|
if (value !== void 0) uncontrolledValue.value = value;
|
|
9
|
-
}, {
|
|
10
|
-
|
|
9
|
+
}, {
|
|
10
|
+
flush: "sync",
|
|
11
|
+
immediate: true
|
|
12
|
+
});
|
|
13
|
+
const value = computed(() => {
|
|
14
|
+
const modelValue = options.modelValue();
|
|
15
|
+
return modelValue === void 0 ? uncontrolledValue.value : modelValue;
|
|
16
|
+
});
|
|
11
17
|
function setValue(nextValue) {
|
|
12
18
|
if (!isControlled.value) uncontrolledValue.value = nextValue;
|
|
13
19
|
options.onChange(nextValue);
|