design-system-next 2.12.1 → 2.12.3
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/design-system-next.es.js +5986 -6186
- package/dist/design-system-next.es.js.gz +0 -0
- package/dist/design-system-next.umd.js +12 -12
- package/dist/design-system-next.umd.js.gz +0 -0
- package/dist/main.css +1 -1
- package/dist/main.css.gz +0 -0
- package/dist/package.json.d.ts +1 -1
- package/package.json +1 -1
- package/src/App.vue +49 -1
- package/src/assets/scripts/border-radius.ts +15 -15
- package/src/assets/scripts/colors.ts +134 -134
- package/src/assets/scripts/max-width.ts +11 -11
- package/src/assets/scripts/spacing.ts +23 -23
- package/src/assets/scripts/utilities.ts +15 -15
- package/src/components/accordion/accordion.ts +43 -43
- package/src/components/accordion/use-accordion.ts +43 -43
- package/src/components/avatar/avatar.ts +64 -64
- package/src/components/badge/badge.ts +43 -43
- package/src/components/banner/banner.ts +20 -20
- package/src/components/button/button.ts +72 -72
- package/src/components/button/button.vue +15 -15
- package/src/components/card/card.ts +52 -52
- package/src/components/checkbox/checkbox.ts +45 -45
- package/src/components/chips/chips.ts +101 -95
- package/src/components/chips/use-chips.ts +11 -3
- package/src/components/collapsible/collapsible.ts +21 -21
- package/src/components/collapsible/collapsible.vue +27 -27
- package/src/components/date-picker/__tests__/date-picker.test.ts +112 -112
- package/src/components/date-picker/date-picker.ts +157 -157
- package/src/components/dropdown/__tests__/dropdown-fixes.spec.ts +106 -106
- package/src/components/dropdown/__tests__/dropdown-value-types.spec.ts +213 -213
- package/src/components/dropdown/fix-multi-number.ts +92 -92
- package/src/components/dropdown/use-dropdown.ts +488 -488
- package/src/components/empty-state/empty-state.ts +50 -50
- package/src/components/file-upload/file-upload.ts +87 -87
- package/src/components/floating-action/floating-action.ts +12 -12
- package/src/components/input/input-contact-number/input-contact-number.ts +83 -83
- package/src/components/input/input-email/input-email.vue +17 -17
- package/src/components/input/input-password/use-input-password.ts +19 -19
- package/src/components/input/input-search/input-search.vue +13 -13
- package/src/components/input/input-url/input-url.vue +20 -20
- package/src/components/input/input-username/input-username.vue +17 -17
- package/src/components/input/input.vue +72 -72
- package/src/components/list/ladderized-list/ladderized-list.ts +39 -39
- package/src/components/logo/logo.ts +43 -43
- package/src/components/logo/logo.vue +14 -14
- package/src/components/logo/use-logo.ts +41 -41
- package/src/components/modal/modal.ts +45 -45
- package/src/components/progress-bar/progress-bar.ts +39 -39
- package/src/components/radio/radio.ts +42 -42
- package/src/components/select/select.ts +144 -144
- package/src/components/sidepanel/sidepanel.vue +55 -55
- package/src/components/sidepanel/stacking-sidepanel/stacking-sidepanel.ts +16 -16
- package/src/components/sidepanel/stacking-sidepanel/stacking-sidepanel.vue +39 -39
- package/src/components/slider/slider.ts +38 -38
- package/src/components/snackbar/snack/snack.ts +71 -71
- package/src/components/snackbar/use-snackbar.ts +34 -34
- package/src/components/status/status.ts +19 -19
- package/src/components/status/status.vue +13 -13
- package/src/components/stepper/step/step.ts +47 -47
- package/src/components/stepper/stepper.ts +47 -47
- package/src/components/stepper/stepper.vue +34 -34
- package/src/components/switch/switch.ts +42 -42
- package/src/components/table/table-actions/table-actions.ts +42 -42
- package/src/components/table/table-actions/table-actions.vue +40 -40
- package/src/components/table/table-chips-title/table-chips-title.ts +27 -27
- package/src/components/table/table-chips-title/table-chips-title.vue +32 -32
- package/src/components/table/table-chips-title/use-table-chips-title.ts +22 -22
- package/src/components/table/table-lozenge-title/table-lozenge-title.ts +23 -23
- package/src/components/table/table-lozenge-title/table-lozenge-title.vue +26 -26
- package/src/components/table/table-lozenge-title/use-table-lozenge-title.ts +21 -21
- package/src/components/table/table-pagination/table-pagination.ts +63 -63
- package/src/components/table/table-pagination/table-pagination.vue +72 -72
- package/src/components/table/table.ts +174 -173
- package/src/components/table/table.vue +1 -1
- package/src/components/table/use-table.ts +13 -8
- package/src/components/tabs/tabs.ts +43 -43
- package/src/components/textarea/textarea.ts +72 -72
- package/src/components/textarea/textarea.vue +45 -45
- package/src/components/time-picker/time-picker.ts +69 -69
- package/src/components/tooltip/use-tooltip.ts +13 -13
- package/src/examples/dropdown-number-multi-select.vue +76 -76
- package/src/stores/useSnackbarStore.ts +44 -44
- package/src/vite-env.d.ts +0 -6
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import type { PropType, ExtractPropTypes } from 'vue';
|
|
2
|
-
|
|
3
|
-
export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
|
|
4
|
-
|
|
5
|
-
export const radioPropTypes = {
|
|
6
|
-
id: {
|
|
7
|
-
type: String,
|
|
8
|
-
required: true,
|
|
9
|
-
},
|
|
10
|
-
modelValue: {
|
|
11
|
-
type: [String, Number, Boolean],
|
|
12
|
-
},
|
|
13
|
-
disabled: {
|
|
14
|
-
type: Boolean,
|
|
15
|
-
default: false,
|
|
16
|
-
},
|
|
17
|
-
name: {
|
|
18
|
-
type: String,
|
|
19
|
-
required: true,
|
|
20
|
-
},
|
|
21
|
-
value: {
|
|
22
|
-
type: [String, Number, Boolean],
|
|
23
|
-
required: true,
|
|
24
|
-
},
|
|
25
|
-
description: {
|
|
26
|
-
type: String,
|
|
27
|
-
},
|
|
28
|
-
bordered: {
|
|
29
|
-
type: Boolean,
|
|
30
|
-
default: false,
|
|
31
|
-
},
|
|
32
|
-
fullWidth: {
|
|
33
|
-
type: Boolean,
|
|
34
|
-
default: false,
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const radioEmitTypes = ['update:modelValue'];
|
|
39
|
-
|
|
40
|
-
export type RadioPropTypes = ExtractPropTypes<typeof radioPropTypes>;
|
|
41
|
-
|
|
42
|
-
export type RadioEmitTypes = typeof radioEmitTypes;
|
|
1
|
+
import type { PropType, ExtractPropTypes } from 'vue';
|
|
2
|
+
|
|
3
|
+
export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
|
|
4
|
+
|
|
5
|
+
export const radioPropTypes = {
|
|
6
|
+
id: {
|
|
7
|
+
type: String,
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
modelValue: {
|
|
11
|
+
type: [String, Number, Boolean],
|
|
12
|
+
},
|
|
13
|
+
disabled: {
|
|
14
|
+
type: Boolean,
|
|
15
|
+
default: false,
|
|
16
|
+
},
|
|
17
|
+
name: {
|
|
18
|
+
type: String,
|
|
19
|
+
required: true,
|
|
20
|
+
},
|
|
21
|
+
value: {
|
|
22
|
+
type: [String, Number, Boolean],
|
|
23
|
+
required: true,
|
|
24
|
+
},
|
|
25
|
+
description: {
|
|
26
|
+
type: String,
|
|
27
|
+
},
|
|
28
|
+
bordered: {
|
|
29
|
+
type: Boolean,
|
|
30
|
+
default: false,
|
|
31
|
+
},
|
|
32
|
+
fullWidth: {
|
|
33
|
+
type: Boolean,
|
|
34
|
+
default: false,
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const radioEmitTypes = ['update:modelValue'];
|
|
39
|
+
|
|
40
|
+
export type RadioPropTypes = ExtractPropTypes<typeof radioPropTypes>;
|
|
41
|
+
|
|
42
|
+
export type RadioEmitTypes = typeof radioEmitTypes;
|
|
@@ -1,144 +1,144 @@
|
|
|
1
|
-
import type { PropType, ExtractPropTypes } from 'vue';
|
|
2
|
-
import type { MenuListType } from '../list/list';
|
|
3
|
-
|
|
4
|
-
export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
|
|
5
|
-
|
|
6
|
-
const GROUPED_ITEMS_BY_TYPES = ['A-Z', 'Z-A'] as const;
|
|
7
|
-
|
|
8
|
-
const PLACEMENTS_TYPES = [
|
|
9
|
-
'auto',
|
|
10
|
-
'auto-start',
|
|
11
|
-
'auto-end',
|
|
12
|
-
'top',
|
|
13
|
-
'top-start',
|
|
14
|
-
'top-end',
|
|
15
|
-
'right',
|
|
16
|
-
'right-start',
|
|
17
|
-
'right-end',
|
|
18
|
-
'bottom',
|
|
19
|
-
'bottom-start',
|
|
20
|
-
'bottom-end',
|
|
21
|
-
'left',
|
|
22
|
-
'left-start',
|
|
23
|
-
'left-end',
|
|
24
|
-
] as const;
|
|
25
|
-
|
|
26
|
-
const POPPER_STRATEGY_TYPES = ['fixed', 'absolute'] as const;
|
|
27
|
-
|
|
28
|
-
export const selectPropTypes = {
|
|
29
|
-
id: {
|
|
30
|
-
type: String,
|
|
31
|
-
required: true,
|
|
32
|
-
default: 'select',
|
|
33
|
-
},
|
|
34
|
-
modelValue: {
|
|
35
|
-
type: [String, Number, Object, Array] as PropType<
|
|
36
|
-
string | number | Record<string, unknown> | (string | number | Record<string, unknown>)[]
|
|
37
|
-
>,
|
|
38
|
-
default: '',
|
|
39
|
-
},
|
|
40
|
-
options: {
|
|
41
|
-
type: Array as PropType<MenuListType[] | string[] | Record<string, unknown>[]>,
|
|
42
|
-
required: true,
|
|
43
|
-
default: [],
|
|
44
|
-
},
|
|
45
|
-
groupItemsBy: {
|
|
46
|
-
type: String as PropType<(typeof GROUPED_ITEMS_BY_TYPES)[number]>,
|
|
47
|
-
validator: (value: (typeof GROUPED_ITEMS_BY_TYPES)[number] | undefined) => {
|
|
48
|
-
return value === undefined || GROUPED_ITEMS_BY_TYPES.includes(value);
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
textField: {
|
|
52
|
-
type: String,
|
|
53
|
-
default: 'text',
|
|
54
|
-
description: 'Field name to use for display text when using dynamic object arrays',
|
|
55
|
-
},
|
|
56
|
-
valueField: {
|
|
57
|
-
type: String,
|
|
58
|
-
default: 'value',
|
|
59
|
-
description: 'Field name to use for value when using dynamic object arrays',
|
|
60
|
-
},
|
|
61
|
-
placeholder: {
|
|
62
|
-
type: String,
|
|
63
|
-
},
|
|
64
|
-
label: {
|
|
65
|
-
type: String,
|
|
66
|
-
default: '',
|
|
67
|
-
},
|
|
68
|
-
placement: {
|
|
69
|
-
type: String as PropType<(typeof PLACEMENTS_TYPES)[number]>,
|
|
70
|
-
validator: (value: (typeof PLACEMENTS_TYPES)[number]) => PLACEMENTS_TYPES.includes(value),
|
|
71
|
-
default: 'bottom',
|
|
72
|
-
},
|
|
73
|
-
popperStrategy: {
|
|
74
|
-
type: String,
|
|
75
|
-
validator: (value: 'fixed' | 'absolute') => POPPER_STRATEGY_TYPES.includes(value),
|
|
76
|
-
default: 'absolute',
|
|
77
|
-
},
|
|
78
|
-
popperWidth: {
|
|
79
|
-
type: String,
|
|
80
|
-
default: '100%',
|
|
81
|
-
},
|
|
82
|
-
width: {
|
|
83
|
-
type: String,
|
|
84
|
-
default: '100%',
|
|
85
|
-
},
|
|
86
|
-
wrapperPosition: {
|
|
87
|
-
type: String,
|
|
88
|
-
default: 'relative',
|
|
89
|
-
},
|
|
90
|
-
displayText: {
|
|
91
|
-
type: String,
|
|
92
|
-
default: '',
|
|
93
|
-
},
|
|
94
|
-
displayHelper: {
|
|
95
|
-
type: Boolean,
|
|
96
|
-
default: false,
|
|
97
|
-
},
|
|
98
|
-
helperIcon: {
|
|
99
|
-
type: String,
|
|
100
|
-
default: null,
|
|
101
|
-
},
|
|
102
|
-
helperText: {
|
|
103
|
-
type: String,
|
|
104
|
-
default: '',
|
|
105
|
-
},
|
|
106
|
-
active: {
|
|
107
|
-
type: Boolean,
|
|
108
|
-
default: false,
|
|
109
|
-
},
|
|
110
|
-
disabled: {
|
|
111
|
-
type: Boolean,
|
|
112
|
-
default: false,
|
|
113
|
-
},
|
|
114
|
-
error: {
|
|
115
|
-
type: Boolean,
|
|
116
|
-
default: false,
|
|
117
|
-
},
|
|
118
|
-
clearable: {
|
|
119
|
-
type: Boolean,
|
|
120
|
-
default: false,
|
|
121
|
-
},
|
|
122
|
-
searchable: {
|
|
123
|
-
type: Boolean,
|
|
124
|
-
default: false,
|
|
125
|
-
},
|
|
126
|
-
disabledLocalSearch: {
|
|
127
|
-
type: Boolean,
|
|
128
|
-
default: false,
|
|
129
|
-
},
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
export const selectEmitTypes = {
|
|
133
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
134
|
-
'update:modelValue': (_value: unknown) => true,
|
|
135
|
-
|
|
136
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
137
|
-
'infinite-scroll-trigger': (_triggered: boolean) => true,
|
|
138
|
-
|
|
139
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
140
|
-
'search-string': (_search: string | number) => true,
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
export type SelectPropTypes = ExtractPropTypes<typeof selectPropTypes>;
|
|
144
|
-
export type SelectEmitTypes = typeof selectEmitTypes;
|
|
1
|
+
import type { PropType, ExtractPropTypes } from 'vue';
|
|
2
|
+
import type { MenuListType } from '../list/list';
|
|
3
|
+
|
|
4
|
+
export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
|
|
5
|
+
|
|
6
|
+
const GROUPED_ITEMS_BY_TYPES = ['A-Z', 'Z-A'] as const;
|
|
7
|
+
|
|
8
|
+
const PLACEMENTS_TYPES = [
|
|
9
|
+
'auto',
|
|
10
|
+
'auto-start',
|
|
11
|
+
'auto-end',
|
|
12
|
+
'top',
|
|
13
|
+
'top-start',
|
|
14
|
+
'top-end',
|
|
15
|
+
'right',
|
|
16
|
+
'right-start',
|
|
17
|
+
'right-end',
|
|
18
|
+
'bottom',
|
|
19
|
+
'bottom-start',
|
|
20
|
+
'bottom-end',
|
|
21
|
+
'left',
|
|
22
|
+
'left-start',
|
|
23
|
+
'left-end',
|
|
24
|
+
] as const;
|
|
25
|
+
|
|
26
|
+
const POPPER_STRATEGY_TYPES = ['fixed', 'absolute'] as const;
|
|
27
|
+
|
|
28
|
+
export const selectPropTypes = {
|
|
29
|
+
id: {
|
|
30
|
+
type: String,
|
|
31
|
+
required: true,
|
|
32
|
+
default: 'select',
|
|
33
|
+
},
|
|
34
|
+
modelValue: {
|
|
35
|
+
type: [String, Number, Object, Array] as PropType<
|
|
36
|
+
string | number | Record<string, unknown> | (string | number | Record<string, unknown>)[]
|
|
37
|
+
>,
|
|
38
|
+
default: '',
|
|
39
|
+
},
|
|
40
|
+
options: {
|
|
41
|
+
type: Array as PropType<MenuListType[] | string[] | Record<string, unknown>[]>,
|
|
42
|
+
required: true,
|
|
43
|
+
default: [],
|
|
44
|
+
},
|
|
45
|
+
groupItemsBy: {
|
|
46
|
+
type: String as PropType<(typeof GROUPED_ITEMS_BY_TYPES)[number]>,
|
|
47
|
+
validator: (value: (typeof GROUPED_ITEMS_BY_TYPES)[number] | undefined) => {
|
|
48
|
+
return value === undefined || GROUPED_ITEMS_BY_TYPES.includes(value);
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
textField: {
|
|
52
|
+
type: String,
|
|
53
|
+
default: 'text',
|
|
54
|
+
description: 'Field name to use for display text when using dynamic object arrays',
|
|
55
|
+
},
|
|
56
|
+
valueField: {
|
|
57
|
+
type: String,
|
|
58
|
+
default: 'value',
|
|
59
|
+
description: 'Field name to use for value when using dynamic object arrays',
|
|
60
|
+
},
|
|
61
|
+
placeholder: {
|
|
62
|
+
type: String,
|
|
63
|
+
},
|
|
64
|
+
label: {
|
|
65
|
+
type: String,
|
|
66
|
+
default: '',
|
|
67
|
+
},
|
|
68
|
+
placement: {
|
|
69
|
+
type: String as PropType<(typeof PLACEMENTS_TYPES)[number]>,
|
|
70
|
+
validator: (value: (typeof PLACEMENTS_TYPES)[number]) => PLACEMENTS_TYPES.includes(value),
|
|
71
|
+
default: 'bottom',
|
|
72
|
+
},
|
|
73
|
+
popperStrategy: {
|
|
74
|
+
type: String,
|
|
75
|
+
validator: (value: 'fixed' | 'absolute') => POPPER_STRATEGY_TYPES.includes(value),
|
|
76
|
+
default: 'absolute',
|
|
77
|
+
},
|
|
78
|
+
popperWidth: {
|
|
79
|
+
type: String,
|
|
80
|
+
default: '100%',
|
|
81
|
+
},
|
|
82
|
+
width: {
|
|
83
|
+
type: String,
|
|
84
|
+
default: '100%',
|
|
85
|
+
},
|
|
86
|
+
wrapperPosition: {
|
|
87
|
+
type: String,
|
|
88
|
+
default: 'relative',
|
|
89
|
+
},
|
|
90
|
+
displayText: {
|
|
91
|
+
type: String,
|
|
92
|
+
default: '',
|
|
93
|
+
},
|
|
94
|
+
displayHelper: {
|
|
95
|
+
type: Boolean,
|
|
96
|
+
default: false,
|
|
97
|
+
},
|
|
98
|
+
helperIcon: {
|
|
99
|
+
type: String,
|
|
100
|
+
default: null,
|
|
101
|
+
},
|
|
102
|
+
helperText: {
|
|
103
|
+
type: String,
|
|
104
|
+
default: '',
|
|
105
|
+
},
|
|
106
|
+
active: {
|
|
107
|
+
type: Boolean,
|
|
108
|
+
default: false,
|
|
109
|
+
},
|
|
110
|
+
disabled: {
|
|
111
|
+
type: Boolean,
|
|
112
|
+
default: false,
|
|
113
|
+
},
|
|
114
|
+
error: {
|
|
115
|
+
type: Boolean,
|
|
116
|
+
default: false,
|
|
117
|
+
},
|
|
118
|
+
clearable: {
|
|
119
|
+
type: Boolean,
|
|
120
|
+
default: false,
|
|
121
|
+
},
|
|
122
|
+
searchable: {
|
|
123
|
+
type: Boolean,
|
|
124
|
+
default: false,
|
|
125
|
+
},
|
|
126
|
+
disabledLocalSearch: {
|
|
127
|
+
type: Boolean,
|
|
128
|
+
default: false,
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
export const selectEmitTypes = {
|
|
133
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
134
|
+
'update:modelValue': (_value: unknown) => true,
|
|
135
|
+
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
137
|
+
'infinite-scroll-trigger': (_triggered: boolean) => true,
|
|
138
|
+
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
140
|
+
'search-string': (_search: string | number) => true,
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
export type SelectPropTypes = ExtractPropTypes<typeof selectPropTypes>;
|
|
144
|
+
export type SelectEmitTypes = typeof selectEmitTypes;
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div v-if="!props.isStacking && isOpen && hasBackdrop" :class="sidepanelClasses.backdropBaseClasses"></div>
|
|
3
|
-
|
|
4
|
-
<Transition
|
|
5
|
-
:enter-active-class="sidepanelClasses.sidepanelTransitionActiveClasses"
|
|
6
|
-
:leave-active-class="sidepanelClasses.sidepanelTransitionActiveClasses"
|
|
7
|
-
:enter-from-class="sidepanelClasses.sidepanelTransitionHiddenClasses"
|
|
8
|
-
:enter-to-class="sidepanelClasses.sidepanelTransitionVisibleClasses"
|
|
9
|
-
:leave-from-class="sidepanelClasses.sidepanelTransitionVisibleClasses"
|
|
10
|
-
:leave-to-class="sidepanelClasses.sidepanelTransitionHiddenClasses"
|
|
11
|
-
:appear="!props.isStacking"
|
|
12
|
-
>
|
|
13
|
-
<div
|
|
14
|
-
v-if="props.isOpen || props.isStacking"
|
|
15
|
-
ref="sidepanelRef"
|
|
16
|
-
role="dialog"
|
|
17
|
-
aria-labelledby="sidepanel-title"
|
|
18
|
-
aria-describedby="sidepanel-content"
|
|
19
|
-
:class="sidepanelClasses.sidepanelBaseClasses"
|
|
20
|
-
:style="{ height: typeof height === 'number' ? `${height}px` : height }"
|
|
21
|
-
>
|
|
22
|
-
<template v-if="!props.hideHeader">
|
|
23
|
-
<div v-if="!$slots.header" :class="sidepanelClasses.sidepanelHeaderClasses">
|
|
24
|
-
<div id="sidepanel-title" :class="sidepanelClasses.sidepanelHeaderTitleClasses">
|
|
25
|
-
{{ headerTitle }}
|
|
26
|
-
</div>
|
|
27
|
-
<Icon :class="sidepanelClasses.sidepanelHeaderIconClasses" icon="ph:x" @click="handleClose" />
|
|
28
|
-
</div>
|
|
29
|
-
<div v-else>
|
|
30
|
-
<slot name="header"></slot>
|
|
31
|
-
</div>
|
|
32
|
-
</template>
|
|
33
|
-
|
|
34
|
-
<div id="sidepanel-content" :class="sidepanelClasses.sidepanelContentClasses">
|
|
35
|
-
<slot />
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
<div v-if="$slots.footer" :class="sidepanelClasses.sidepanelFooterClasses">
|
|
39
|
-
<slot name="footer"></slot>
|
|
40
|
-
</div>
|
|
41
|
-
</div>
|
|
42
|
-
</Transition>
|
|
43
|
-
</template>
|
|
44
|
-
|
|
45
|
-
<script lang="ts" setup>
|
|
46
|
-
import { Icon } from '@iconify/vue';
|
|
47
|
-
|
|
48
|
-
import { useSidepanel } from './use-sidepanel';
|
|
49
|
-
import { sidepanelPropTypes, sidepanelEmitTypes } from './sidepanel';
|
|
50
|
-
|
|
51
|
-
const props = defineProps(sidepanelPropTypes);
|
|
52
|
-
const emit = defineEmits(sidepanelEmitTypes);
|
|
53
|
-
|
|
54
|
-
const { sidepanelClasses, sidepanelRef, handleClose } = useSidepanel(props, emit);
|
|
55
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<div v-if="!props.isStacking && isOpen && hasBackdrop" :class="sidepanelClasses.backdropBaseClasses"></div>
|
|
3
|
+
|
|
4
|
+
<Transition
|
|
5
|
+
:enter-active-class="sidepanelClasses.sidepanelTransitionActiveClasses"
|
|
6
|
+
:leave-active-class="sidepanelClasses.sidepanelTransitionActiveClasses"
|
|
7
|
+
:enter-from-class="sidepanelClasses.sidepanelTransitionHiddenClasses"
|
|
8
|
+
:enter-to-class="sidepanelClasses.sidepanelTransitionVisibleClasses"
|
|
9
|
+
:leave-from-class="sidepanelClasses.sidepanelTransitionVisibleClasses"
|
|
10
|
+
:leave-to-class="sidepanelClasses.sidepanelTransitionHiddenClasses"
|
|
11
|
+
:appear="!props.isStacking"
|
|
12
|
+
>
|
|
13
|
+
<div
|
|
14
|
+
v-if="props.isOpen || props.isStacking"
|
|
15
|
+
ref="sidepanelRef"
|
|
16
|
+
role="dialog"
|
|
17
|
+
aria-labelledby="sidepanel-title"
|
|
18
|
+
aria-describedby="sidepanel-content"
|
|
19
|
+
:class="sidepanelClasses.sidepanelBaseClasses"
|
|
20
|
+
:style="{ height: typeof height === 'number' ? `${height}px` : height }"
|
|
21
|
+
>
|
|
22
|
+
<template v-if="!props.hideHeader">
|
|
23
|
+
<div v-if="!$slots.header" :class="sidepanelClasses.sidepanelHeaderClasses">
|
|
24
|
+
<div id="sidepanel-title" :class="sidepanelClasses.sidepanelHeaderTitleClasses">
|
|
25
|
+
{{ headerTitle }}
|
|
26
|
+
</div>
|
|
27
|
+
<Icon :class="sidepanelClasses.sidepanelHeaderIconClasses" icon="ph:x" @click="handleClose" />
|
|
28
|
+
</div>
|
|
29
|
+
<div v-else>
|
|
30
|
+
<slot name="header"></slot>
|
|
31
|
+
</div>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<div id="sidepanel-content" :class="sidepanelClasses.sidepanelContentClasses">
|
|
35
|
+
<slot />
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div v-if="$slots.footer" :class="sidepanelClasses.sidepanelFooterClasses">
|
|
39
|
+
<slot name="footer"></slot>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</Transition>
|
|
43
|
+
</template>
|
|
44
|
+
|
|
45
|
+
<script lang="ts" setup>
|
|
46
|
+
import { Icon } from '@iconify/vue';
|
|
47
|
+
|
|
48
|
+
import { useSidepanel } from './use-sidepanel';
|
|
49
|
+
import { sidepanelPropTypes, sidepanelEmitTypes } from './sidepanel';
|
|
50
|
+
|
|
51
|
+
const props = defineProps(sidepanelPropTypes);
|
|
52
|
+
const emit = defineEmits(sidepanelEmitTypes);
|
|
53
|
+
|
|
54
|
+
const { sidepanelClasses, sidepanelRef, handleClose } = useSidepanel(props, emit);
|
|
55
|
+
</script>
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import type { ExtractPropTypes, PropType } from "vue";
|
|
2
|
-
|
|
3
|
-
export const stackingSidePanelProps = {
|
|
4
|
-
stack: {
|
|
5
|
-
type: Array as PropType<string[]>,
|
|
6
|
-
default: [],
|
|
7
|
-
required: true,
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export const stackingSidePanelEmits = {
|
|
12
|
-
'update:stack': (value: string[]) => value,
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export type StackingSidePanelPropTypes = ExtractPropTypes<typeof stackingSidePanelProps>;
|
|
16
|
-
export type StackingSidePanelEmitTypes = typeof stackingSidePanelEmits;
|
|
1
|
+
import type { ExtractPropTypes, PropType } from "vue";
|
|
2
|
+
|
|
3
|
+
export const stackingSidePanelProps = {
|
|
4
|
+
stack: {
|
|
5
|
+
type: Array as PropType<string[]>,
|
|
6
|
+
default: [],
|
|
7
|
+
required: true,
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const stackingSidePanelEmits = {
|
|
12
|
+
'update:stack': (value: string[]) => value,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type StackingSidePanelPropTypes = ExtractPropTypes<typeof stackingSidePanelProps>;
|
|
16
|
+
export type StackingSidePanelEmitTypes = typeof stackingSidePanelEmits;
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div v-if="activePanels.length > 0" :class="stackingSidepanelClasses.sidepanelStackBackdropClasses"></div>
|
|
3
|
-
<div
|
|
4
|
-
ref="stacking-sidepanel-base"
|
|
5
|
-
:class="[stackingSidepanelClasses.sidepanelStackBaseClasses]"
|
|
6
|
-
:style="stackingSidepanelBaseTransform"
|
|
7
|
-
>
|
|
8
|
-
<transition-group
|
|
9
|
-
:enter-active-class="stackingSidepanelClasses.sidepanelStackTransitionEnterActiveClasses"
|
|
10
|
-
:leave-active-class="stackingSidepanelClasses.sidepanelStackTransitionLeaveActiveClasses"
|
|
11
|
-
:move-class="stackingSidepanelClasses.sidepanelStackMoveClasses"
|
|
12
|
-
:enter-from-class="stackingSidepanelClasses.sidepanelStackEnterFromClasses"
|
|
13
|
-
:leave-to-class="stackingSidepanelClasses.sidepanelStackLeaveToClasses"
|
|
14
|
-
appear
|
|
15
|
-
>
|
|
16
|
-
<div v-for="name in activePanels" :key="name">
|
|
17
|
-
<slot :name="name" />
|
|
18
|
-
</div>
|
|
19
|
-
</transition-group>
|
|
20
|
-
</div>
|
|
21
|
-
</template>
|
|
22
|
-
|
|
23
|
-
<script setup lang="ts">
|
|
24
|
-
import { useTemplateRef } from 'vue';
|
|
25
|
-
import { useStackingSidepanel } from './use-stacking-sidepanel';
|
|
26
|
-
import { stackingSidePanelProps, stackingSidePanelEmits } from './stacking-sidepanel';
|
|
27
|
-
|
|
28
|
-
const stackingSidepanelBase = useTemplateRef('stacking-sidepanel-base');
|
|
29
|
-
const props = defineProps(stackingSidePanelProps);
|
|
30
|
-
const emits = defineEmits(stackingSidePanelEmits);
|
|
31
|
-
|
|
32
|
-
const { showPanel, hidePanel, stackingSidepanelClasses, stackingSidepanelBaseTransform, activePanels } =
|
|
33
|
-
useStackingSidepanel(props, emits, stackingSidepanelBase);
|
|
34
|
-
|
|
35
|
-
defineExpose({
|
|
36
|
-
showPanel,
|
|
37
|
-
hidePanel,
|
|
38
|
-
});
|
|
39
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<div v-if="activePanels.length > 0" :class="stackingSidepanelClasses.sidepanelStackBackdropClasses"></div>
|
|
3
|
+
<div
|
|
4
|
+
ref="stacking-sidepanel-base"
|
|
5
|
+
:class="[stackingSidepanelClasses.sidepanelStackBaseClasses]"
|
|
6
|
+
:style="stackingSidepanelBaseTransform"
|
|
7
|
+
>
|
|
8
|
+
<transition-group
|
|
9
|
+
:enter-active-class="stackingSidepanelClasses.sidepanelStackTransitionEnterActiveClasses"
|
|
10
|
+
:leave-active-class="stackingSidepanelClasses.sidepanelStackTransitionLeaveActiveClasses"
|
|
11
|
+
:move-class="stackingSidepanelClasses.sidepanelStackMoveClasses"
|
|
12
|
+
:enter-from-class="stackingSidepanelClasses.sidepanelStackEnterFromClasses"
|
|
13
|
+
:leave-to-class="stackingSidepanelClasses.sidepanelStackLeaveToClasses"
|
|
14
|
+
appear
|
|
15
|
+
>
|
|
16
|
+
<div v-for="name in activePanels" :key="name">
|
|
17
|
+
<slot :name="name" />
|
|
18
|
+
</div>
|
|
19
|
+
</transition-group>
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script setup lang="ts">
|
|
24
|
+
import { useTemplateRef } from 'vue';
|
|
25
|
+
import { useStackingSidepanel } from './use-stacking-sidepanel';
|
|
26
|
+
import { stackingSidePanelProps, stackingSidePanelEmits } from './stacking-sidepanel';
|
|
27
|
+
|
|
28
|
+
const stackingSidepanelBase = useTemplateRef('stacking-sidepanel-base');
|
|
29
|
+
const props = defineProps(stackingSidePanelProps);
|
|
30
|
+
const emits = defineEmits(stackingSidePanelEmits);
|
|
31
|
+
|
|
32
|
+
const { showPanel, hidePanel, stackingSidepanelClasses, stackingSidepanelBaseTransform, activePanels } =
|
|
33
|
+
useStackingSidepanel(props, emits, stackingSidepanelBase);
|
|
34
|
+
|
|
35
|
+
defineExpose({
|
|
36
|
+
showPanel,
|
|
37
|
+
hidePanel,
|
|
38
|
+
});
|
|
39
|
+
</script>
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import type { PropType, ExtractPropTypes } from 'vue';
|
|
2
|
-
const SLIDER_SIZES = ['sm','lg'] as const;
|
|
3
|
-
|
|
4
|
-
export const sliderPropTypes = {
|
|
5
|
-
size: {
|
|
6
|
-
type: String as PropType<(typeof SLIDER_SIZES)[number]>,
|
|
7
|
-
validator: (value: (typeof SLIDER_SIZES)[number]) => SLIDER_SIZES.includes(value),
|
|
8
|
-
default: 'lg',
|
|
9
|
-
},
|
|
10
|
-
min: {
|
|
11
|
-
type: Number,
|
|
12
|
-
default: 0,
|
|
13
|
-
},
|
|
14
|
-
max: {
|
|
15
|
-
type: Number,
|
|
16
|
-
default: 100,
|
|
17
|
-
},
|
|
18
|
-
step: {
|
|
19
|
-
type: Number,
|
|
20
|
-
default: 1,
|
|
21
|
-
},
|
|
22
|
-
modelValue: {
|
|
23
|
-
type: Number,
|
|
24
|
-
default: 0,
|
|
25
|
-
},
|
|
26
|
-
disabled: {
|
|
27
|
-
type: Boolean,
|
|
28
|
-
default: false,
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const sliderEmits = {
|
|
33
|
-
'update:modelValue': (value: number): value is number => typeof value === 'number',
|
|
34
|
-
slideend: (value: number): value is number => typeof value === 'number',
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export type SliderPropTypes = ExtractPropTypes<typeof sliderPropTypes>;
|
|
38
|
-
export type SliderEmitTypes = typeof sliderEmits;
|
|
1
|
+
import type { PropType, ExtractPropTypes } from 'vue';
|
|
2
|
+
const SLIDER_SIZES = ['sm','lg'] as const;
|
|
3
|
+
|
|
4
|
+
export const sliderPropTypes = {
|
|
5
|
+
size: {
|
|
6
|
+
type: String as PropType<(typeof SLIDER_SIZES)[number]>,
|
|
7
|
+
validator: (value: (typeof SLIDER_SIZES)[number]) => SLIDER_SIZES.includes(value),
|
|
8
|
+
default: 'lg',
|
|
9
|
+
},
|
|
10
|
+
min: {
|
|
11
|
+
type: Number,
|
|
12
|
+
default: 0,
|
|
13
|
+
},
|
|
14
|
+
max: {
|
|
15
|
+
type: Number,
|
|
16
|
+
default: 100,
|
|
17
|
+
},
|
|
18
|
+
step: {
|
|
19
|
+
type: Number,
|
|
20
|
+
default: 1,
|
|
21
|
+
},
|
|
22
|
+
modelValue: {
|
|
23
|
+
type: Number,
|
|
24
|
+
default: 0,
|
|
25
|
+
},
|
|
26
|
+
disabled: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
default: false,
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const sliderEmits = {
|
|
33
|
+
'update:modelValue': (value: number): value is number => typeof value === 'number',
|
|
34
|
+
slideend: (value: number): value is number => typeof value === 'number',
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export type SliderPropTypes = ExtractPropTypes<typeof sliderPropTypes>;
|
|
38
|
+
export type SliderEmitTypes = typeof sliderEmits;
|