@destyler/toggle 0.0.1-beta.13
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/component.cjs +14 -0
- package/dist/component.d.cts +4 -0
- package/dist/component.d.mts +4 -0
- package/dist/component.d.ts +4 -0
- package/dist/component.mjs +6 -0
- package/dist/index.cjs +217 -0
- package/dist/index.d.cts +369 -0
- package/dist/index.d.mts +369 -0
- package/dist/index.d.ts +369 -0
- package/dist/index.mjs +213 -0
- package/dist/resolver.cjs +20 -0
- package/dist/resolver.d.cts +6 -0
- package/dist/resolver.d.mts +6 -0
- package/dist/resolver.d.ts +6 -0
- package/dist/resolver.mjs +17 -0
- package/package.json +45 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import * as vue from 'vue';
|
|
2
|
+
import { PropType, Component, Ref } from 'vue';
|
|
3
|
+
import * as _destyler_primitive from '@destyler/primitive';
|
|
4
|
+
import { AsTag } from '@destyler/primitive';
|
|
5
|
+
import { ExtractPublicPropTypes, DataOrientation, Direction } from '@destyler/shared';
|
|
6
|
+
|
|
7
|
+
declare const destylerToggleProps: {
|
|
8
|
+
readonly as: {
|
|
9
|
+
readonly type: PropType<AsTag | Component>;
|
|
10
|
+
readonly required: false;
|
|
11
|
+
readonly default: "button";
|
|
12
|
+
};
|
|
13
|
+
readonly asChild: {
|
|
14
|
+
readonly type: PropType<boolean>;
|
|
15
|
+
readonly required: false;
|
|
16
|
+
readonly default: false;
|
|
17
|
+
};
|
|
18
|
+
readonly defaultValue: {
|
|
19
|
+
readonly type: PropType<boolean>;
|
|
20
|
+
readonly required: false;
|
|
21
|
+
};
|
|
22
|
+
readonly pressed: {
|
|
23
|
+
readonly type: PropType<boolean>;
|
|
24
|
+
readonly required: false;
|
|
25
|
+
readonly default: undefined;
|
|
26
|
+
};
|
|
27
|
+
readonly disabled: {
|
|
28
|
+
readonly type: PropType<boolean>;
|
|
29
|
+
readonly required: false;
|
|
30
|
+
readonly default: false;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
type DestylerToggleProps = ExtractPublicPropTypes<typeof destylerToggleProps>;
|
|
34
|
+
type DataState = 'on' | 'off';
|
|
35
|
+
declare const DestylerToggle: vue.DefineComponent<{
|
|
36
|
+
readonly as: {
|
|
37
|
+
readonly type: PropType<AsTag | Component>;
|
|
38
|
+
readonly required: false;
|
|
39
|
+
readonly default: "button";
|
|
40
|
+
};
|
|
41
|
+
readonly asChild: {
|
|
42
|
+
readonly type: PropType<boolean>;
|
|
43
|
+
readonly required: false;
|
|
44
|
+
readonly default: false;
|
|
45
|
+
};
|
|
46
|
+
readonly defaultValue: {
|
|
47
|
+
readonly type: PropType<boolean>;
|
|
48
|
+
readonly required: false;
|
|
49
|
+
};
|
|
50
|
+
readonly pressed: {
|
|
51
|
+
readonly type: PropType<boolean>;
|
|
52
|
+
readonly required: false;
|
|
53
|
+
readonly default: undefined;
|
|
54
|
+
};
|
|
55
|
+
readonly disabled: {
|
|
56
|
+
readonly type: PropType<boolean>;
|
|
57
|
+
readonly required: false;
|
|
58
|
+
readonly default: false;
|
|
59
|
+
};
|
|
60
|
+
}, {
|
|
61
|
+
pressed: vue.WritableComputedRef<boolean | undefined>;
|
|
62
|
+
togglePressed: () => void;
|
|
63
|
+
dataState: vue.ComputedRef<DataState>;
|
|
64
|
+
}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "update:pressed"[], "update:pressed", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
65
|
+
readonly as: {
|
|
66
|
+
readonly type: PropType<AsTag | Component>;
|
|
67
|
+
readonly required: false;
|
|
68
|
+
readonly default: "button";
|
|
69
|
+
};
|
|
70
|
+
readonly asChild: {
|
|
71
|
+
readonly type: PropType<boolean>;
|
|
72
|
+
readonly required: false;
|
|
73
|
+
readonly default: false;
|
|
74
|
+
};
|
|
75
|
+
readonly defaultValue: {
|
|
76
|
+
readonly type: PropType<boolean>;
|
|
77
|
+
readonly required: false;
|
|
78
|
+
};
|
|
79
|
+
readonly pressed: {
|
|
80
|
+
readonly type: PropType<boolean>;
|
|
81
|
+
readonly required: false;
|
|
82
|
+
readonly default: undefined;
|
|
83
|
+
};
|
|
84
|
+
readonly disabled: {
|
|
85
|
+
readonly type: PropType<boolean>;
|
|
86
|
+
readonly required: false;
|
|
87
|
+
readonly default: false;
|
|
88
|
+
};
|
|
89
|
+
}>> & {
|
|
90
|
+
"onUpdate:pressed"?: ((...args: any[]) => any) | undefined;
|
|
91
|
+
}, {
|
|
92
|
+
readonly as: AsTag | Component;
|
|
93
|
+
readonly asChild: boolean;
|
|
94
|
+
readonly pressed: boolean;
|
|
95
|
+
readonly disabled: boolean;
|
|
96
|
+
}, {}>;
|
|
97
|
+
|
|
98
|
+
type TypeEnum = 'single' | 'multiple';
|
|
99
|
+
declare const destylerToggleGroupRootProps: {
|
|
100
|
+
readonly as: {
|
|
101
|
+
readonly type: PropType<AsTag | Component>;
|
|
102
|
+
readonly required: false;
|
|
103
|
+
readonly default: "div";
|
|
104
|
+
};
|
|
105
|
+
readonly asChild: {
|
|
106
|
+
readonly type: PropType<boolean>;
|
|
107
|
+
readonly required: false;
|
|
108
|
+
readonly default: false;
|
|
109
|
+
};
|
|
110
|
+
readonly type: {
|
|
111
|
+
readonly type: PropType<TypeEnum>;
|
|
112
|
+
readonly required: false;
|
|
113
|
+
readonly default: "single";
|
|
114
|
+
};
|
|
115
|
+
readonly defaultValue: {
|
|
116
|
+
readonly type: PropType<string | string[]>;
|
|
117
|
+
readonly required: false;
|
|
118
|
+
};
|
|
119
|
+
readonly modelValue: {
|
|
120
|
+
readonly type: PropType<string | string[]>;
|
|
121
|
+
readonly required: false;
|
|
122
|
+
};
|
|
123
|
+
readonly rovingFocus: {
|
|
124
|
+
readonly type: PropType<boolean>;
|
|
125
|
+
readonly required: false;
|
|
126
|
+
readonly default: true;
|
|
127
|
+
};
|
|
128
|
+
readonly disabled: {
|
|
129
|
+
readonly type: PropType<boolean>;
|
|
130
|
+
readonly required: false;
|
|
131
|
+
readonly default: false;
|
|
132
|
+
};
|
|
133
|
+
readonly orientation: {
|
|
134
|
+
readonly type: PropType<DataOrientation>;
|
|
135
|
+
readonly required: false;
|
|
136
|
+
};
|
|
137
|
+
readonly dir: {
|
|
138
|
+
readonly type: PropType<Direction>;
|
|
139
|
+
readonly required: false;
|
|
140
|
+
};
|
|
141
|
+
readonly loop: {
|
|
142
|
+
readonly type: PropType<boolean>;
|
|
143
|
+
readonly required: false;
|
|
144
|
+
readonly default: true;
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
type DestylerToggleGroupRootProps = ExtractPublicPropTypes<typeof destylerToggleGroupRootProps>;
|
|
148
|
+
interface ToggleGroupRootContext {
|
|
149
|
+
type: TypeEnum;
|
|
150
|
+
modelValue: Ref<string | string[] | undefined>;
|
|
151
|
+
changeModelValue: (value: string) => void;
|
|
152
|
+
dir?: Ref<Direction>;
|
|
153
|
+
orientation?: DataOrientation;
|
|
154
|
+
loop: Ref<boolean>;
|
|
155
|
+
rovingFocus: Ref<boolean>;
|
|
156
|
+
disabled?: Ref<boolean>;
|
|
157
|
+
}
|
|
158
|
+
declare const DestylerToggleGroupRoot: vue.DefineComponent<{
|
|
159
|
+
readonly as: {
|
|
160
|
+
readonly type: PropType<AsTag | Component>;
|
|
161
|
+
readonly required: false;
|
|
162
|
+
readonly default: "div";
|
|
163
|
+
};
|
|
164
|
+
readonly asChild: {
|
|
165
|
+
readonly type: PropType<boolean>;
|
|
166
|
+
readonly required: false;
|
|
167
|
+
readonly default: false;
|
|
168
|
+
};
|
|
169
|
+
readonly type: {
|
|
170
|
+
readonly type: PropType<TypeEnum>;
|
|
171
|
+
readonly required: false;
|
|
172
|
+
readonly default: "single";
|
|
173
|
+
};
|
|
174
|
+
readonly defaultValue: {
|
|
175
|
+
readonly type: PropType<string | string[]>;
|
|
176
|
+
readonly required: false;
|
|
177
|
+
};
|
|
178
|
+
readonly modelValue: {
|
|
179
|
+
readonly type: PropType<string | string[]>;
|
|
180
|
+
readonly required: false;
|
|
181
|
+
};
|
|
182
|
+
readonly rovingFocus: {
|
|
183
|
+
readonly type: PropType<boolean>;
|
|
184
|
+
readonly required: false;
|
|
185
|
+
readonly default: true;
|
|
186
|
+
};
|
|
187
|
+
readonly disabled: {
|
|
188
|
+
readonly type: PropType<boolean>;
|
|
189
|
+
readonly required: false;
|
|
190
|
+
readonly default: false;
|
|
191
|
+
};
|
|
192
|
+
readonly orientation: {
|
|
193
|
+
readonly type: PropType<DataOrientation>;
|
|
194
|
+
readonly required: false;
|
|
195
|
+
};
|
|
196
|
+
readonly dir: {
|
|
197
|
+
readonly type: PropType<Direction>;
|
|
198
|
+
readonly required: false;
|
|
199
|
+
};
|
|
200
|
+
readonly loop: {
|
|
201
|
+
readonly type: PropType<boolean>;
|
|
202
|
+
readonly required: false;
|
|
203
|
+
readonly default: true;
|
|
204
|
+
};
|
|
205
|
+
}, {
|
|
206
|
+
rovingFocus: Ref<boolean>;
|
|
207
|
+
dir: vue.ComputedRef<Direction>;
|
|
208
|
+
loop: Ref<boolean>;
|
|
209
|
+
forwardRef: (ref: Element | vue.ComponentPublicInstance | null) => void;
|
|
210
|
+
}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
211
|
+
readonly as: {
|
|
212
|
+
readonly type: PropType<AsTag | Component>;
|
|
213
|
+
readonly required: false;
|
|
214
|
+
readonly default: "div";
|
|
215
|
+
};
|
|
216
|
+
readonly asChild: {
|
|
217
|
+
readonly type: PropType<boolean>;
|
|
218
|
+
readonly required: false;
|
|
219
|
+
readonly default: false;
|
|
220
|
+
};
|
|
221
|
+
readonly type: {
|
|
222
|
+
readonly type: PropType<TypeEnum>;
|
|
223
|
+
readonly required: false;
|
|
224
|
+
readonly default: "single";
|
|
225
|
+
};
|
|
226
|
+
readonly defaultValue: {
|
|
227
|
+
readonly type: PropType<string | string[]>;
|
|
228
|
+
readonly required: false;
|
|
229
|
+
};
|
|
230
|
+
readonly modelValue: {
|
|
231
|
+
readonly type: PropType<string | string[]>;
|
|
232
|
+
readonly required: false;
|
|
233
|
+
};
|
|
234
|
+
readonly rovingFocus: {
|
|
235
|
+
readonly type: PropType<boolean>;
|
|
236
|
+
readonly required: false;
|
|
237
|
+
readonly default: true;
|
|
238
|
+
};
|
|
239
|
+
readonly disabled: {
|
|
240
|
+
readonly type: PropType<boolean>;
|
|
241
|
+
readonly required: false;
|
|
242
|
+
readonly default: false;
|
|
243
|
+
};
|
|
244
|
+
readonly orientation: {
|
|
245
|
+
readonly type: PropType<DataOrientation>;
|
|
246
|
+
readonly required: false;
|
|
247
|
+
};
|
|
248
|
+
readonly dir: {
|
|
249
|
+
readonly type: PropType<Direction>;
|
|
250
|
+
readonly required: false;
|
|
251
|
+
};
|
|
252
|
+
readonly loop: {
|
|
253
|
+
readonly type: PropType<boolean>;
|
|
254
|
+
readonly required: false;
|
|
255
|
+
readonly default: true;
|
|
256
|
+
};
|
|
257
|
+
}>> & {
|
|
258
|
+
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
259
|
+
}, {
|
|
260
|
+
readonly as: AsTag | Component;
|
|
261
|
+
readonly asChild: boolean;
|
|
262
|
+
readonly disabled: boolean;
|
|
263
|
+
readonly type: TypeEnum;
|
|
264
|
+
readonly rovingFocus: boolean;
|
|
265
|
+
readonly loop: boolean;
|
|
266
|
+
}, {}>;
|
|
267
|
+
|
|
268
|
+
declare const destylerToggleGroupItemProps: {
|
|
269
|
+
readonly value: {
|
|
270
|
+
readonly type: PropType<string>;
|
|
271
|
+
readonly required: true;
|
|
272
|
+
};
|
|
273
|
+
readonly as: {
|
|
274
|
+
readonly type: PropType<_destyler_primitive.AsTag | vue.Component>;
|
|
275
|
+
readonly required: false;
|
|
276
|
+
readonly default: "button";
|
|
277
|
+
};
|
|
278
|
+
readonly asChild: {
|
|
279
|
+
readonly type: PropType<boolean>;
|
|
280
|
+
readonly required: false;
|
|
281
|
+
readonly default: false;
|
|
282
|
+
};
|
|
283
|
+
readonly defaultValue: {
|
|
284
|
+
readonly type: PropType<boolean>;
|
|
285
|
+
readonly required: false;
|
|
286
|
+
};
|
|
287
|
+
readonly pressed: {
|
|
288
|
+
readonly type: PropType<boolean>;
|
|
289
|
+
readonly required: false;
|
|
290
|
+
readonly default: undefined;
|
|
291
|
+
};
|
|
292
|
+
readonly disabled: {
|
|
293
|
+
readonly type: PropType<boolean>;
|
|
294
|
+
readonly required: false;
|
|
295
|
+
readonly default: false;
|
|
296
|
+
};
|
|
297
|
+
};
|
|
298
|
+
type DestylerToggleGroupItemProps = ExtractPublicPropTypes<typeof destylerToggleGroupItemProps>;
|
|
299
|
+
declare const DestylerToggleGroupItem: vue.DefineComponent<{
|
|
300
|
+
readonly value: {
|
|
301
|
+
readonly type: PropType<string>;
|
|
302
|
+
readonly required: true;
|
|
303
|
+
};
|
|
304
|
+
readonly as: {
|
|
305
|
+
readonly type: PropType<_destyler_primitive.AsTag | vue.Component>;
|
|
306
|
+
readonly required: false;
|
|
307
|
+
readonly default: "button";
|
|
308
|
+
};
|
|
309
|
+
readonly asChild: {
|
|
310
|
+
readonly type: PropType<boolean>;
|
|
311
|
+
readonly required: false;
|
|
312
|
+
readonly default: false;
|
|
313
|
+
};
|
|
314
|
+
readonly defaultValue: {
|
|
315
|
+
readonly type: PropType<boolean>;
|
|
316
|
+
readonly required: false;
|
|
317
|
+
};
|
|
318
|
+
readonly pressed: {
|
|
319
|
+
readonly type: PropType<boolean>;
|
|
320
|
+
readonly required: false;
|
|
321
|
+
readonly default: undefined;
|
|
322
|
+
};
|
|
323
|
+
readonly disabled: {
|
|
324
|
+
readonly type: PropType<boolean>;
|
|
325
|
+
readonly required: false;
|
|
326
|
+
readonly default: false;
|
|
327
|
+
};
|
|
328
|
+
}, {
|
|
329
|
+
rootContext: ToggleGroupRootContext;
|
|
330
|
+
disabled: vue.ComputedRef<boolean>;
|
|
331
|
+
pressed: vue.ComputedRef<boolean | undefined>;
|
|
332
|
+
forwardRef: (ref: Element | vue.ComponentPublicInstance | null) => void;
|
|
333
|
+
}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
334
|
+
readonly value: {
|
|
335
|
+
readonly type: PropType<string>;
|
|
336
|
+
readonly required: true;
|
|
337
|
+
};
|
|
338
|
+
readonly as: {
|
|
339
|
+
readonly type: PropType<_destyler_primitive.AsTag | vue.Component>;
|
|
340
|
+
readonly required: false;
|
|
341
|
+
readonly default: "button";
|
|
342
|
+
};
|
|
343
|
+
readonly asChild: {
|
|
344
|
+
readonly type: PropType<boolean>;
|
|
345
|
+
readonly required: false;
|
|
346
|
+
readonly default: false;
|
|
347
|
+
};
|
|
348
|
+
readonly defaultValue: {
|
|
349
|
+
readonly type: PropType<boolean>;
|
|
350
|
+
readonly required: false;
|
|
351
|
+
};
|
|
352
|
+
readonly pressed: {
|
|
353
|
+
readonly type: PropType<boolean>;
|
|
354
|
+
readonly required: false;
|
|
355
|
+
readonly default: undefined;
|
|
356
|
+
};
|
|
357
|
+
readonly disabled: {
|
|
358
|
+
readonly type: PropType<boolean>;
|
|
359
|
+
readonly required: false;
|
|
360
|
+
readonly default: false;
|
|
361
|
+
};
|
|
362
|
+
}>>, {
|
|
363
|
+
readonly as: _destyler_primitive.AsTag | vue.Component;
|
|
364
|
+
readonly asChild: boolean;
|
|
365
|
+
readonly pressed: boolean;
|
|
366
|
+
readonly disabled: boolean;
|
|
367
|
+
}, {}>;
|
|
368
|
+
|
|
369
|
+
export { DestylerToggle, DestylerToggleGroupItem, type DestylerToggleGroupItemProps, DestylerToggleGroupRoot, type DestylerToggleGroupRootProps, type DestylerToggleProps };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { defineComponent, computed, h, toRefs, mergeProps } from 'vue';
|
|
2
|
+
import { DestylerPrimitive } from '@destyler/primitive';
|
|
3
|
+
import { useForwardExpose, useVModel, useDirection, useSingleOrMultipleValue } from '@destyler/composition';
|
|
4
|
+
import { createContext } from '@destyler/shared';
|
|
5
|
+
import { DestylerRovingFocusGroup, DestylerRovingFocusItem } from '@destyler/roving-focus';
|
|
6
|
+
|
|
7
|
+
const destylerToggleProps = {
|
|
8
|
+
as: {
|
|
9
|
+
type: [String, Object],
|
|
10
|
+
required: false,
|
|
11
|
+
default: "button"
|
|
12
|
+
},
|
|
13
|
+
asChild: {
|
|
14
|
+
type: Boolean,
|
|
15
|
+
required: false,
|
|
16
|
+
default: false
|
|
17
|
+
},
|
|
18
|
+
defaultValue: {
|
|
19
|
+
type: Boolean,
|
|
20
|
+
required: false
|
|
21
|
+
},
|
|
22
|
+
pressed: {
|
|
23
|
+
type: Boolean,
|
|
24
|
+
required: false,
|
|
25
|
+
default: void 0
|
|
26
|
+
},
|
|
27
|
+
disabled: {
|
|
28
|
+
type: Boolean,
|
|
29
|
+
required: false,
|
|
30
|
+
default: false
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const DestylerToggle = defineComponent({
|
|
34
|
+
name: "DestylerToggle",
|
|
35
|
+
props: destylerToggleProps,
|
|
36
|
+
emits: ["update:pressed"],
|
|
37
|
+
setup(props, { emit }) {
|
|
38
|
+
useForwardExpose();
|
|
39
|
+
const pressed = useVModel(props, "pressed", emit, {
|
|
40
|
+
defaultValue: props.defaultValue,
|
|
41
|
+
passive: props.pressed === void 0
|
|
42
|
+
});
|
|
43
|
+
function togglePressed() {
|
|
44
|
+
pressed.value = !pressed.value;
|
|
45
|
+
}
|
|
46
|
+
const dataState = computed(() => {
|
|
47
|
+
return pressed.value ? "on" : "off";
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
pressed,
|
|
51
|
+
togglePressed,
|
|
52
|
+
dataState
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
render() {
|
|
56
|
+
return h(DestylerPrimitive, {
|
|
57
|
+
"as": this.$props.as,
|
|
58
|
+
"asChild": this.$props.asChild,
|
|
59
|
+
"type": this.$props.as === "button" ? "button" : void 0,
|
|
60
|
+
"aria-pressed": this.pressed,
|
|
61
|
+
"data-state": this.dataState,
|
|
62
|
+
"data-disabled": this.$props.disabled ? "" : void 0,
|
|
63
|
+
"disabled": this.$props.disabled,
|
|
64
|
+
"onClick": () => {
|
|
65
|
+
this.togglePressed();
|
|
66
|
+
}
|
|
67
|
+
}, {
|
|
68
|
+
default: () => this.$slots.default?.()
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
const destylerToggleGroupRootProps = {
|
|
74
|
+
as: {
|
|
75
|
+
type: [String, Object],
|
|
76
|
+
required: false,
|
|
77
|
+
default: "div"
|
|
78
|
+
},
|
|
79
|
+
asChild: {
|
|
80
|
+
type: Boolean,
|
|
81
|
+
required: false,
|
|
82
|
+
default: false
|
|
83
|
+
},
|
|
84
|
+
type: {
|
|
85
|
+
type: String,
|
|
86
|
+
required: false,
|
|
87
|
+
default: "single"
|
|
88
|
+
},
|
|
89
|
+
defaultValue: {
|
|
90
|
+
type: [String, Array],
|
|
91
|
+
required: false
|
|
92
|
+
},
|
|
93
|
+
modelValue: {
|
|
94
|
+
type: [String, Array],
|
|
95
|
+
required: false
|
|
96
|
+
},
|
|
97
|
+
rovingFocus: {
|
|
98
|
+
type: Boolean,
|
|
99
|
+
required: false,
|
|
100
|
+
default: true
|
|
101
|
+
},
|
|
102
|
+
disabled: {
|
|
103
|
+
type: Boolean,
|
|
104
|
+
required: false,
|
|
105
|
+
default: false
|
|
106
|
+
},
|
|
107
|
+
orientation: {
|
|
108
|
+
type: String,
|
|
109
|
+
required: false
|
|
110
|
+
},
|
|
111
|
+
dir: {
|
|
112
|
+
type: String,
|
|
113
|
+
required: false
|
|
114
|
+
},
|
|
115
|
+
loop: {
|
|
116
|
+
type: Boolean,
|
|
117
|
+
required: false,
|
|
118
|
+
default: true
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const [injectToggleGroupRootContext, provideToggleGroupRootContext] = createContext("DestylerToggleGroupRoot");
|
|
122
|
+
const DestylerToggleGroupRoot = defineComponent({
|
|
123
|
+
name: "DestylerToggleGroupRoot",
|
|
124
|
+
props: destylerToggleGroupRootProps,
|
|
125
|
+
emits: ["update:modelValue"],
|
|
126
|
+
setup(props, { emit }) {
|
|
127
|
+
const { loop, rovingFocus, disabled, dir: propDir } = toRefs(props);
|
|
128
|
+
const dir = useDirection(propDir);
|
|
129
|
+
const { forwardRef } = useForwardExpose();
|
|
130
|
+
const { modelValue, changeModelValue } = useSingleOrMultipleValue(props, emit);
|
|
131
|
+
provideToggleGroupRootContext({
|
|
132
|
+
type: props.type,
|
|
133
|
+
modelValue,
|
|
134
|
+
changeModelValue,
|
|
135
|
+
dir,
|
|
136
|
+
orientation: props.orientation,
|
|
137
|
+
loop,
|
|
138
|
+
rovingFocus,
|
|
139
|
+
disabled
|
|
140
|
+
});
|
|
141
|
+
return {
|
|
142
|
+
rovingFocus,
|
|
143
|
+
dir,
|
|
144
|
+
loop,
|
|
145
|
+
forwardRef
|
|
146
|
+
};
|
|
147
|
+
},
|
|
148
|
+
render() {
|
|
149
|
+
return h(this.rovingFocus ? DestylerRovingFocusGroup : DestylerPrimitive, {
|
|
150
|
+
asChild: true,
|
|
151
|
+
orientation: this.rovingFocus ? this.$props.orientation : void 0,
|
|
152
|
+
dir: this.dir,
|
|
153
|
+
loop: this.rovingFocus ? this.loop : void 0
|
|
154
|
+
}, {
|
|
155
|
+
default: () => {
|
|
156
|
+
return h(DestylerPrimitive, {
|
|
157
|
+
ref: "forwardRef",
|
|
158
|
+
role: "group",
|
|
159
|
+
as: this.$props.as,
|
|
160
|
+
asChild: this.$props.asChild
|
|
161
|
+
}, {
|
|
162
|
+
default: () => this.$slots.default?.()
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
const destylerToggleGroupItemProps = {
|
|
170
|
+
...destylerToggleProps,
|
|
171
|
+
value: {
|
|
172
|
+
type: String,
|
|
173
|
+
required: true
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
const DestylerToggleGroupItem = defineComponent({
|
|
177
|
+
name: "DestylerToggleGroupItem",
|
|
178
|
+
props: destylerToggleGroupItemProps,
|
|
179
|
+
setup(props) {
|
|
180
|
+
const rootContext = injectToggleGroupRootContext();
|
|
181
|
+
const disabled = computed(() => rootContext.disabled?.value || props.disabled);
|
|
182
|
+
const pressed = computed(() => rootContext.modelValue.value?.includes(props.value));
|
|
183
|
+
const { forwardRef } = useForwardExpose();
|
|
184
|
+
return {
|
|
185
|
+
rootContext,
|
|
186
|
+
disabled,
|
|
187
|
+
pressed,
|
|
188
|
+
forwardRef
|
|
189
|
+
};
|
|
190
|
+
},
|
|
191
|
+
render() {
|
|
192
|
+
return h(this.rootContext.rovingFocus.value ? DestylerRovingFocusItem : DestylerPrimitive, {
|
|
193
|
+
asChild: true,
|
|
194
|
+
focusable: !this.disabled,
|
|
195
|
+
active: this.pressed
|
|
196
|
+
}, {
|
|
197
|
+
default: () => {
|
|
198
|
+
return h(DestylerToggle, mergeProps(this.$props, {
|
|
199
|
+
"ref": "forwardRef",
|
|
200
|
+
"disabled": this.disabled,
|
|
201
|
+
"pressed": this.rootContext.type === "single" ? this.rootContext.modelValue.value === this.$props.value : this.rootContext.modelValue.value?.includes(this.$props.value),
|
|
202
|
+
"onUpdate:pressed": () => {
|
|
203
|
+
this.rootContext.changeModelValue(this.$props.value);
|
|
204
|
+
}
|
|
205
|
+
}), {
|
|
206
|
+
default: () => this.$slots.default?.()
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
export { DestylerToggle, DestylerToggleGroupItem, DestylerToggleGroupRoot };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const name = "@destyler/toggle";
|
|
4
|
+
|
|
5
|
+
const packageName = name;
|
|
6
|
+
const toggleComponentName = [
|
|
7
|
+
"DestylerToggle"
|
|
8
|
+
];
|
|
9
|
+
function DestylerToggleResolver() {
|
|
10
|
+
return {
|
|
11
|
+
type: "component",
|
|
12
|
+
resolve: (name2) => {
|
|
13
|
+
if (toggleComponentName.includes(name2))
|
|
14
|
+
return { name: name2, from: packageName };
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
exports.DestylerToggleResolver = DestylerToggleResolver;
|
|
20
|
+
exports.toggleComponentName = toggleComponentName;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const name = "@destyler/toggle";
|
|
2
|
+
|
|
3
|
+
const packageName = name;
|
|
4
|
+
const toggleComponentName = [
|
|
5
|
+
"DestylerToggle"
|
|
6
|
+
];
|
|
7
|
+
function DestylerToggleResolver() {
|
|
8
|
+
return {
|
|
9
|
+
type: "component",
|
|
10
|
+
resolve: (name2) => {
|
|
11
|
+
if (toggleComponentName.includes(name2))
|
|
12
|
+
return { name: name2, from: packageName };
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { DestylerToggleResolver, toggleComponentName };
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@destyler/toggle",
|
|
3
|
+
"version": "0.0.1-beta.13",
|
|
4
|
+
"description": "unstyled toggle component for vue",
|
|
5
|
+
"author": "Elone Hoo <elonehoo@gmail.com>",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.mjs",
|
|
11
|
+
"require": "./dist/index.cjs"
|
|
12
|
+
},
|
|
13
|
+
"./resolver": {
|
|
14
|
+
"types": "./dist/resolver.d.ts",
|
|
15
|
+
"import": "./dist/resolver.mjs",
|
|
16
|
+
"require": "./dist/resolver.cjs"
|
|
17
|
+
},
|
|
18
|
+
"./component": {
|
|
19
|
+
"types": "./dist/component.d.ts",
|
|
20
|
+
"import": "./dist/component.mjs",
|
|
21
|
+
"require": "./dist/component.cjs"
|
|
22
|
+
},
|
|
23
|
+
"./*": "./*"
|
|
24
|
+
},
|
|
25
|
+
"main": "dist/index.cjs",
|
|
26
|
+
"module": "dist/index.mjs",
|
|
27
|
+
"types": "dist/index.d.ts",
|
|
28
|
+
"files": [
|
|
29
|
+
"*.d.ts",
|
|
30
|
+
"dist"
|
|
31
|
+
],
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"vue": ">=3.3.4"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@destyler/composition": "0.0.1-beta.13",
|
|
37
|
+
"@destyler/roving-focus": "0.0.1-beta.13",
|
|
38
|
+
"@destyler/primitive": "0.0.1-beta.13",
|
|
39
|
+
"@destyler/shared": "0.0.1-beta.13"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"clear": "rimraf ./dist",
|
|
43
|
+
"build": "pnpm run clear && unbuild"
|
|
44
|
+
}
|
|
45
|
+
}
|