design-system-next 1.2.25 → 1.3.2
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.js +2937 -2937
- package/dist/design-system-next.js.gz +0 -0
- package/dist/main.css +1 -1
- package/dist/main.css.gz +0 -0
- package/dist/main.d.ts +1 -6
- package/package.json +1 -1
- package/src/App.vue +8 -8
- package/src/assets/styles/tailwind.css +366 -367
- package/src/components/avatar/avatar.vue +1 -1
- package/src/components/avatar/use-avatar.ts +40 -34
- package/src/components/badge/badge.vue +2 -2
- package/src/components/badge/use-badge.ts +16 -16
- package/src/components/button/use-button.ts +39 -34
- package/src/components/checkbox/checkbox.vue +2 -2
- package/src/components/checkbox/use-checkbox.ts +23 -20
- package/src/components/dropdown/dropdown.vue +6 -6
- package/src/components/dropdown/use-dropdown.ts +6 -5
- package/src/components/empty-state/empty-state.vue +6 -5
- package/src/components/empty-state/use-empty-state.ts +8 -6
- package/src/components/input/input.ts +6 -1
- package/src/components/input/input.vue +7 -4
- package/src/components/input/use-input.ts +49 -47
- package/src/components/lozenge/lozenge.vue +7 -5
- package/src/components/lozenge/use-lozenge.ts +23 -15
- package/src/components/modal/modal.vue +8 -8
- package/src/components/modal/use-modal.ts +8 -8
- package/src/components/radio/radio.vue +1 -1
- package/src/components/radio/use-radio.ts +15 -13
- package/src/components/sidenav/sidenav.vue +158 -138
- package/src/components/sidepanel/sidepanel.vue +29 -21
- package/src/components/sidepanel/use-sidepanel.ts +17 -15
- package/src/components/snackbar/snack/snack.vue +13 -40
- package/src/components/snackbar/snack/use-snack.ts +12 -11
- package/src/components/snackbar/snackbar.vue +11 -13
- package/src/components/switch/switch.vue +14 -8
- package/src/components/switch/use-switch.ts +16 -15
- package/src/components/table/table.ts +5 -0
- package/src/components/table/table.vue +51 -24
- package/src/components/table/use-table.ts +1 -0
- package/src/components/tabs/tabs.vue +23 -19
- package/src/components/tabs/use-tabs.ts +5 -4
- package/src/components/timePicker/timePicker.vue +10 -9
- package/src/components/timePicker/use-timePicker.ts +31 -45
- package/src/components/tooltip/tooltip.vue +1 -1
- package/src/main.ts +3 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<label v-if="props.label" :for="id" :class="labelClasses">
|
|
4
4
|
{{ props.label }}
|
|
5
5
|
</label>
|
|
6
|
-
<div class="relative">
|
|
6
|
+
<div class="spr-relative">
|
|
7
7
|
<div v-if="$slots.prefix" :class="prefixSlotClasses">
|
|
8
8
|
<slot name="prefix" />
|
|
9
9
|
</div>
|
|
@@ -18,8 +18,10 @@
|
|
|
18
18
|
<div v-if="$slots.trailing" :class="trailingSlotClasses">
|
|
19
19
|
<slot name="trailing" />
|
|
20
20
|
</div>
|
|
21
|
-
<div v-if="$slots.icon" :class="iconSlotClasses">
|
|
22
|
-
<slot name="icon"
|
|
21
|
+
<div v-if="$slots.icon || TYPE_HAS_TRAILING_ICONS.includes(props.type)" :class="iconSlotClasses">
|
|
22
|
+
<slot name="icon" >
|
|
23
|
+
<Icon v-if="props.type === 'search'" icon="ph:magnifying-glass" />
|
|
24
|
+
</slot>
|
|
23
25
|
</div>
|
|
24
26
|
</div>
|
|
25
27
|
</div>
|
|
@@ -28,8 +30,9 @@
|
|
|
28
30
|
<script setup lang="ts">
|
|
29
31
|
import { useSlots } from 'vue';
|
|
30
32
|
|
|
31
|
-
import { inputPropTypes, inputEmitTypes } from './input';
|
|
33
|
+
import { inputPropTypes, inputEmitTypes, TYPE_HAS_TRAILING_ICONS} from './input';
|
|
32
34
|
import { useInput } from './use-input';
|
|
35
|
+
import { Icon } from '@iconify/vue';
|
|
33
36
|
|
|
34
37
|
const emit = defineEmits(inputEmitTypes);
|
|
35
38
|
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { computed, toRefs } from 'vue';
|
|
2
|
-
import type { InputPropTypes, InputEmitTypes } from './input';
|
|
3
|
-
import classNames from 'classnames';
|
|
4
2
|
import { useVModel } from '@vueuse/core';
|
|
3
|
+
|
|
4
|
+
import classNames from 'classnames';
|
|
5
|
+
|
|
5
6
|
import type { SetupContext } from 'vue';
|
|
7
|
+
import type { InputPropTypes, InputEmitTypes } from './input';
|
|
6
8
|
|
|
7
9
|
export const useInput = (
|
|
8
10
|
props: InputPropTypes,
|
|
@@ -13,71 +15,71 @@ export const useInput = (
|
|
|
13
15
|
const modelValue = useVModel(props, 'modelValue', emit);
|
|
14
16
|
|
|
15
17
|
const wrapperClasses = computed(() => {
|
|
16
|
-
return classNames('flex flex-col gap-size-spacing-4xs');
|
|
18
|
+
return classNames('spr-flex spr-flex-col spr-gap-size-spacing-4xs');
|
|
17
19
|
});
|
|
18
20
|
|
|
19
21
|
const labelClasses = computed(() => {
|
|
20
|
-
return classNames('body-sm-regular text-color-strong block', {
|
|
21
|
-
'text-color-on-fill-disabled': disabled.value,
|
|
22
|
+
return classNames('spr-body-sm-regular spr-text-color-strong spr-block', {
|
|
23
|
+
'spr-text-color-on-fill-disabled': disabled.value,
|
|
22
24
|
});
|
|
23
25
|
});
|
|
24
26
|
|
|
25
27
|
const inputClasses = computed(() => {
|
|
26
28
|
return classNames(
|
|
27
|
-
'block',
|
|
28
|
-
'
|
|
29
|
-
'
|
|
30
|
-
'
|
|
31
|
-
'rounded-border-radius-md',
|
|
32
|
-
'placeholder:text-mushroom-300',
|
|
33
|
-
'text-color-strong',
|
|
34
|
-
'font-size-200',
|
|
35
|
-
'focus:!border-kangkong-700',
|
|
36
|
-
'focus:text-color-strong',
|
|
37
|
-
'focus:!border-[1.5px]',
|
|
38
|
-
'outline-none',
|
|
39
|
-
'ring-0',
|
|
29
|
+
'spr-block spr-w-full spr-px-size-spacing-2xs spr-py-size-spacing-4xs spr-rounded-border-radius-md spr-outline-none spr-ring-0',
|
|
30
|
+
'spr-text-color-strong spr-font-size-200',
|
|
31
|
+
'focus:!spr-border-kangkong-700 focus:spr-text-color-strong focus:!spr-border-[1.5px]',
|
|
32
|
+
'placeholder:spr-text-mushroom-300',
|
|
40
33
|
{
|
|
41
|
-
'border border-solid border-mushroom-200': !error.value || !disabled.value,
|
|
42
|
-
'!border-[1.5px]': error.value,
|
|
43
|
-
'!border-tomato-600': error.value,
|
|
44
|
-
'focus:!border-tomato-600': error.value,
|
|
45
|
-
'!border-white-100': disabled.value,
|
|
46
|
-
'background-color-disabled': disabled.value,
|
|
47
|
-
'cursor-not-allowed': disabled.value,
|
|
48
|
-
'text-color-on-fill-disabled': disabled.value,
|
|
49
|
-
'pr-[5%]': slots.icon,
|
|
50
|
-
'pl-size-spacing-lg': slots.prefix,
|
|
51
|
-
'pr-[93%] sm:pr-[85%]': offsetSize.value === 'xs' && slots.trailing,
|
|
52
|
-
'pr-[90%] sm:pr-[80%]': offsetSize.value === 'sm' && slots.trailing,
|
|
53
|
-
'pr-[50%]': offsetSize.value === 'md' && slots.trailing,
|
|
54
|
-
'cursor-pointer': readonly.value,
|
|
55
|
-
'border-kangkong-700': active.value,
|
|
56
|
-
'text-color-strong': active.value,
|
|
57
|
-
'border-[1.5px]': active.value,
|
|
34
|
+
'spr-border spr-border-solid spr-border-mushroom-200': !error.value || !disabled.value,
|
|
35
|
+
'!spr-border-[1.5px]': error.value,
|
|
36
|
+
'!spr-border-tomato-600': error.value,
|
|
37
|
+
'focus:!spr-border-tomato-600': error.value,
|
|
38
|
+
'!spr-border-white-100': disabled.value,
|
|
39
|
+
'spr-background-color-disabled': disabled.value,
|
|
40
|
+
'spr-cursor-not-allowed': disabled.value,
|
|
41
|
+
'spr-text-color-on-fill-disabled': disabled.value,
|
|
42
|
+
'spr-pr-[5%]': slots.icon,
|
|
43
|
+
'spr-pl-size-spacing-lg': slots.prefix,
|
|
44
|
+
'spr-pr-[93%] sm:spr-pr-[85%]': offsetSize.value === 'xs' && slots.trailing,
|
|
45
|
+
'spr-pr-[90%] sm:spr-pr-[80%]': offsetSize.value === 'sm' && slots.trailing,
|
|
46
|
+
'spr-pr-[50%]': offsetSize.value === 'md' && slots.trailing,
|
|
47
|
+
'spr-cursor-pointer': readonly.value,
|
|
48
|
+
'spr-border-kangkong-700': active.value,
|
|
49
|
+
'spr-text-color-strong': active.value,
|
|
50
|
+
'spr-border-[1.5px]': active.value,
|
|
58
51
|
},
|
|
59
52
|
);
|
|
60
53
|
});
|
|
61
54
|
|
|
62
55
|
const iconSlotClasses = computed(() => {
|
|
63
|
-
return classNames(
|
|
64
|
-
'
|
|
65
|
-
|
|
56
|
+
return classNames(
|
|
57
|
+
'spr-absolute spr-right-3 spr-top-1/2 spr-h-5 spr-w-5 -spr-translate-y-1/2 spr-transform spr-text-mushroom-300',
|
|
58
|
+
{
|
|
59
|
+
'!spr-text-tomato-600': error.value,
|
|
60
|
+
},
|
|
61
|
+
);
|
|
66
62
|
});
|
|
67
63
|
|
|
68
64
|
const prefixSlotClasses = computed(() => {
|
|
69
|
-
return classNames(
|
|
70
|
-
'
|
|
71
|
-
|
|
65
|
+
return classNames(
|
|
66
|
+
'spr-absolute spr-left-3 spr-top-1/2 spr-h-5 spr-w-5 -spr-translate-y-1/2 spr-transform spr-text-mushroom-300',
|
|
67
|
+
{
|
|
68
|
+
'!spr-text-tomato-600': error.value,
|
|
69
|
+
},
|
|
70
|
+
);
|
|
72
71
|
});
|
|
73
72
|
|
|
74
73
|
const trailingSlotClasses = computed(() => {
|
|
75
|
-
return classNames(
|
|
76
|
-
'
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
return classNames(
|
|
75
|
+
'spr-absolute spr-left-[55%] spr-top-1/2 -spr-translate-y-1/2 spr-transform spr-text-mushroom-300',
|
|
76
|
+
{
|
|
77
|
+
'!spr-text-tomato-600': error.value,
|
|
78
|
+
'spr-left-[7%] sm:spr-left-[16%]': offsetSize.value === 'xs' && slots.trailing,
|
|
79
|
+
'spr-left-[12%] sm:spr-left-[24%]': offsetSize.value === 'sm' && slots.trailing,
|
|
80
|
+
'spr-left-[52%]': offsetSize.value === 'md' && slots.trailing,
|
|
81
|
+
},
|
|
82
|
+
);
|
|
81
83
|
});
|
|
82
84
|
|
|
83
85
|
const onInput = (event: Event) => {
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
<div v-if="visible" :class="lozengeClasses">
|
|
3
3
|
<div
|
|
4
4
|
:class="[
|
|
5
|
-
'label-xs-medium inline-flex items-center gap-size-spacing-6xs rounded-md border border-solid p-size-spacing-5xs text-xs uppercase',
|
|
5
|
+
'spr-label-xs-medium spr-inline-flex spr-items-center spr-gap-size-spacing-6xs spr-rounded-md spr-border spr-border-solid spr-p-size-spacing-5xs spr-text-xs spr-uppercase',
|
|
6
6
|
lozengeToneClasses,
|
|
7
7
|
]"
|
|
8
8
|
>
|
|
9
|
-
<div v-if="$slots.icon" class="flex h-3 w-3 items-center overflow-hidden">
|
|
9
|
+
<div v-if="$slots.icon" class="spr-flex spr-h-3 spr-w-3 spr-items-center spr-overflow-hidden">
|
|
10
10
|
<slot name="icon" />
|
|
11
11
|
</div>
|
|
12
12
|
|
|
13
|
-
<div v-if="$slots.avatar" class="flex items-center">
|
|
13
|
+
<div v-if="$slots.avatar" class="spr-flex spr-items-center">
|
|
14
14
|
<slot name="avatar" />
|
|
15
15
|
</div>
|
|
16
16
|
|
|
17
|
-
<div v-if="url && !$slots.avatar" class="h-4 w-4 overflow-hidden">
|
|
18
|
-
<img class="h-full w-full rounded-full object-cover" :src="url" alt="avatar" />
|
|
17
|
+
<div v-if="url && !$slots.avatar" class="spr-h-4 spr-w-4 spr-overflow-hidden">
|
|
18
|
+
<img class="spr-h-full spr-w-full spr-rounded-full spr-object-cover" :src="url" alt="avatar" />
|
|
19
19
|
</div>
|
|
20
20
|
|
|
21
21
|
<div>{{ label }}</div>
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
<script setup lang="ts">
|
|
27
27
|
import { lozengePropTypes } from './lozenge';
|
|
28
28
|
import { useLozenge } from './use-lozenge';
|
|
29
|
+
|
|
29
30
|
const props = defineProps(lozengePropTypes);
|
|
31
|
+
|
|
30
32
|
const { lozengeClasses, lozengeToneClasses } = useLozenge(props);
|
|
31
33
|
</script>
|
|
@@ -1,36 +1,44 @@
|
|
|
1
1
|
import { computed, toRefs } from 'vue';
|
|
2
|
+
|
|
2
3
|
import classNames from 'classnames';
|
|
4
|
+
|
|
3
5
|
import type { LozengePropTypes } from './lozenge';
|
|
4
6
|
|
|
5
7
|
export const useLozenge = (props: LozengePropTypes) => {
|
|
6
8
|
const { tone, fill } = toRefs(props);
|
|
9
|
+
|
|
7
10
|
const lozengeClasses = computed(() => {
|
|
8
|
-
return classNames(
|
|
11
|
+
return classNames(
|
|
12
|
+
{ 'spr-flex spr-flex-wrap spr-rounded-md !spr-border': !fill.value },
|
|
13
|
+
{ 'spr-flex spr-flex-wrap': fill.value },
|
|
14
|
+
);
|
|
9
15
|
});
|
|
10
16
|
|
|
11
17
|
const lozengeToneClasses = computed(() => {
|
|
12
18
|
return classNames({
|
|
13
|
-
'text-color-pending-base background-color-pending-weak !border-color-pending-base':
|
|
19
|
+
'spr-text-color-pending-base spr-background-color-pending-weak !spr-border-color-pending-base':
|
|
14
20
|
tone.value === 'pending' && !fill.value,
|
|
15
|
-
'text-color-information-base background-color-information-weak !border-color-information-base':
|
|
21
|
+
'spr-text-color-information-base spr-background-color-information-weak !spr-border-color-information-base':
|
|
16
22
|
tone.value === 'information' && !fill.value,
|
|
17
|
-
'text-color-success-base background-color-success-weak !border-color-success-base':
|
|
23
|
+
'spr-text-color-success-base spr-background-color-success-weak !spr-border-color-success-base':
|
|
18
24
|
tone.value === 'success' && !fill.value,
|
|
19
|
-
'text-color-base background-color-base !border-color-base': tone.value === 'neutral' && !fill.value,
|
|
20
|
-
'text-color-danger-base background-color-danger-weak !border-color-danger-base':
|
|
25
|
+
'spr-text-color-base spr-background-color-base !spr-border-color-base': tone.value === 'neutral' && !fill.value,
|
|
26
|
+
'spr-text-color-danger-base spr-background-color-danger-weak !spr-border-color-danger-base':
|
|
21
27
|
tone.value === 'danger' && !fill.value,
|
|
22
|
-
'text-color-caution-base background-color-caution-weak !border-color-caution-base':
|
|
28
|
+
'spr-text-color-caution-base spr-background-color-caution-weak !spr-border-color-caution-base':
|
|
23
29
|
tone.value === 'caution' && !fill.value,
|
|
24
|
-
'text-color-strong !border-color-base background-color': tone.value === 'plain' && !fill.value,
|
|
30
|
+
'spr-text-color-strong !spr-border-color-base spr-background-color': tone.value === 'plain' && !fill.value,
|
|
25
31
|
|
|
26
|
-
'background-color-pending-base text-color-strong !border-0': tone.value === 'pending' && fill.value,
|
|
27
|
-
'background-color-information-base text-color-inverted-strong !border-0':
|
|
32
|
+
'spr-background-color-pending-base spr-text-color-strong !spr-border-0': tone.value === 'pending' && fill.value,
|
|
33
|
+
'spr-background-color-information-base spr-text-color-inverted-strong !spr-border-0':
|
|
28
34
|
tone.value === 'information' && fill.value,
|
|
29
|
-
'background-color-success-base text-color-inverted-strong !border-0':
|
|
30
|
-
|
|
31
|
-
'background-color-
|
|
32
|
-
'background-color-
|
|
33
|
-
|
|
35
|
+
'spr-background-color-success-base spr-text-color-inverted-strong !spr-border-0':
|
|
36
|
+
tone.value === 'success' && fill.value,
|
|
37
|
+
'spr-background-color-base spr-text-color-strong !spr-border-0': tone.value === 'neutral' && fill.value,
|
|
38
|
+
'spr-background-color-danger-base spr-text-color-inverted-strong !spr-border-0':
|
|
39
|
+
tone.value === 'danger' && fill.value,
|
|
40
|
+
'spr-background-color-caution-base spr-text-color-strong !spr-border-0': tone.value === 'caution' && fill.value,
|
|
41
|
+
'spr-text-color-strong spr-background-color !spr-border-0': tone.value === 'plain' && fill.value,
|
|
34
42
|
});
|
|
35
43
|
});
|
|
36
44
|
|
|
@@ -2,35 +2,35 @@
|
|
|
2
2
|
<dialog
|
|
3
3
|
ref="dialog"
|
|
4
4
|
:class="[
|
|
5
|
-
'spr-modal border-color-weak background-color rounded-border-radius-xl border p-0 drop-shadow-[0_2px_8px_-2px_rgba(38,43,43,0.20)]',
|
|
5
|
+
'spr-modal spr-border-color-weak spr-background-color spr-rounded-border-radius-xl spr-border spr-p-0 spr-drop-shadow-[0_2px_8px_-2px_rgba(38,43,43,0.20)]',
|
|
6
6
|
modalSizesClasses,
|
|
7
7
|
]"
|
|
8
8
|
>
|
|
9
9
|
<header
|
|
10
10
|
v-if="hasHeader"
|
|
11
11
|
:class="[
|
|
12
|
-
'border-color-weak background-color flex items-center justify-between gap-size-spacing-3xs border-x-0 border-b border-t-0 border-solid px-size-spacing-xs py-size-spacing-2xs',
|
|
13
|
-
'text-color-strong subheading-xs',
|
|
12
|
+
'spr-border-color-weak spr-background-color spr-flex spr-items-center spr-justify-between spr-gap-size-spacing-3xs spr-border-x-0 spr-border-b spr-border-t-0 spr-border-solid spr-px-size-spacing-xs spr-py-size-spacing-2xs',
|
|
13
|
+
'spr-text-color-strong spr-subheading-xs',
|
|
14
14
|
]"
|
|
15
15
|
>
|
|
16
16
|
<slot name="header" />
|
|
17
17
|
|
|
18
18
|
<div v-if="!$slots.header">{{ title }}</div>
|
|
19
19
|
|
|
20
|
-
<span v-if="hasClose" class="text-color-weak subheading-xs" @click="closeModal">
|
|
20
|
+
<span v-if="hasClose" class="spr-text-color-weak spr-subheading-xs" @click="closeModal">
|
|
21
21
|
<Icon icon="ph:x" />
|
|
22
22
|
</span>
|
|
23
23
|
</header>
|
|
24
24
|
|
|
25
|
-
<div class="body-sm-regular">
|
|
25
|
+
<div class="spr-body-sm-regular">
|
|
26
26
|
<slot />
|
|
27
27
|
</div>
|
|
28
28
|
|
|
29
29
|
<footer
|
|
30
30
|
v-if="hasFooter"
|
|
31
31
|
:class="[
|
|
32
|
-
'border-color-weak background-color flex w-full items-center border-x-0 border-b-0 border-t border-solid px-size-spacing-xs py-size-spacing-2xs',
|
|
33
|
-
'text-color-strong subheading-xs',
|
|
32
|
+
'spr-border-color-weak spr-background-color spr-flex spr-w-full spr-items-center spr-border-x-0 spr-border-b-0 spr-border-t spr-border-solid spr-px-size-spacing-xs spr-py-size-spacing-2xs',
|
|
33
|
+
'spr-text-color-strong spr-subheading-xs',
|
|
34
34
|
]"
|
|
35
35
|
>
|
|
36
36
|
<slot name="footer" />
|
|
@@ -53,6 +53,6 @@ const { dialog, closeModal, modalSizesClasses } = useModal(props, emit);
|
|
|
53
53
|
<style scoped>
|
|
54
54
|
/* Tailwind CSS does not directly support the ::backdrop pseudo-element, need to add this */
|
|
55
55
|
.spr-modal::backdrop {
|
|
56
|
-
@apply bg-overlay;
|
|
56
|
+
@apply spr-bg-overlay;
|
|
57
57
|
}
|
|
58
58
|
</style>
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { ref, watch, computed, toRefs } from 'vue';
|
|
2
|
-
import type { SetupContext } from 'vue';
|
|
3
|
-
import type { ModalEmitTypes } from './modal';
|
|
4
|
-
import type { ModalPropTypes } from './modal';
|
|
5
2
|
|
|
6
3
|
import classNames from 'classnames';
|
|
4
|
+
|
|
5
|
+
import type { SetupContext } from 'vue';
|
|
6
|
+
import type { ModalEmitTypes, ModalPropTypes } from './modal';
|
|
7
|
+
|
|
7
8
|
export const useModal = (props: ModalPropTypes, emit: SetupContext<ModalEmitTypes>['emit']) => {
|
|
8
9
|
const dialog = ref<HTMLDialogElement | null>(null);
|
|
9
10
|
const { size } = toRefs(props);
|
|
10
11
|
|
|
11
12
|
const modalSizesClasses = computed(() => {
|
|
12
13
|
return classNames({
|
|
13
|
-
'min-w-[360px] max-w-[800px] ': size.value === 'sm',
|
|
14
|
-
'min-w-[480px] max-w-[800px] ': size.value === 'md',
|
|
15
|
-
'w-[720px]': size.value === 'lg',
|
|
16
|
-
'w-[1280px]': size.value === 'xl',
|
|
14
|
+
'spr-min-w-[360px] spr-max-w-[800px] ': size.value === 'sm',
|
|
15
|
+
'spr-min-w-[480px] spr-max-w-[800px] ': size.value === 'md',
|
|
16
|
+
'spr-w-[720px]': size.value === 'lg',
|
|
17
|
+
'spr-w-[1280px]': size.value === 'xl',
|
|
17
18
|
});
|
|
18
19
|
});
|
|
19
20
|
|
|
@@ -44,7 +45,6 @@ export const useModal = (props: ModalPropTypes, emit: SetupContext<ModalEmitType
|
|
|
44
45
|
return {
|
|
45
46
|
dialog,
|
|
46
47
|
modalSizesClasses,
|
|
47
|
-
|
|
48
48
|
openModal,
|
|
49
49
|
closeModal,
|
|
50
50
|
};
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
ref="radioRef"
|
|
14
14
|
:for="props.id"
|
|
15
15
|
:disabled="props.disabled"
|
|
16
|
-
:class="['group m-0 inline-flex w-auto items-center space-x-2 p-0', radioLabelClasses]"
|
|
16
|
+
:class="['spr-group spr-m-0 spr-inline-flex spr-w-auto spr-items-center spr-space-x-2 spr-p-0', radioLabelClasses]"
|
|
17
17
|
>
|
|
18
18
|
<span :class="indicatorClasses"></span>
|
|
19
19
|
<slot />
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { computed, ref, ComputedRef } from 'vue';
|
|
2
2
|
import { useElementHover } from '@vueuse/core';
|
|
3
|
+
|
|
3
4
|
import classNames from 'classnames';
|
|
5
|
+
|
|
4
6
|
import type { RadioPropTypes } from './radio';
|
|
5
7
|
|
|
6
8
|
export const useRadioButton = (props: RadioPropTypes) => {
|
|
@@ -8,10 +10,10 @@ export const useRadioButton = (props: RadioPropTypes) => {
|
|
|
8
10
|
const isHovered = useElementHover(radioRef);
|
|
9
11
|
|
|
10
12
|
const radioClasses: ComputedRef<string> = computed(() => {
|
|
11
|
-
const baseClasses = 'sr-only peer inline-block';
|
|
13
|
+
const baseClasses = 'spr-sr-only spr-peer spr-inline-block';
|
|
12
14
|
|
|
13
15
|
if (props.disabled) {
|
|
14
|
-
return classNames(baseClasses, 'cursor-not-allowed');
|
|
16
|
+
return classNames(baseClasses, 'spr-cursor-not-allowed');
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
return baseClasses;
|
|
@@ -19,17 +21,17 @@ export const useRadioButton = (props: RadioPropTypes) => {
|
|
|
19
21
|
|
|
20
22
|
const indicatorClasses: ComputedRef<string> = computed(() => {
|
|
21
23
|
const baseClasses = [
|
|
22
|
-
'inline-block w-4 h-4 rounded-full border-2 border-solid mr-2 shrink-0',
|
|
23
|
-
'transition duration-150 ease-in-out',
|
|
24
|
-
'group-active:scale-90',
|
|
24
|
+
'spr-inline-block spr-w-4 spr-h-4 spr-rounded-full spr-border-2 spr-border-solid spr-mr-2 spr-shrink-0',
|
|
25
|
+
'spr-transition spr-duration-150 spr-ease-in-out',
|
|
26
|
+
'group-active:spr-scale-90',
|
|
25
27
|
];
|
|
26
28
|
|
|
27
29
|
if (props.disabled) {
|
|
28
30
|
return classNames(
|
|
29
31
|
baseClasses,
|
|
30
32
|
props.modelValue === props.value
|
|
31
|
-
? 'border-color-disabled background-color-disabled shadow-[inset_0px_0px_0px_2.5px_#fff] cursor-not-allowed'
|
|
32
|
-
: 'border-color-disabled background-color cursor-not-allowed',
|
|
33
|
+
? 'spr-border-color-disabled spr-background-color-disabled spr-shadow-[inset_0px_0px_0px_2.5px_#fff] spr-cursor-not-allowed'
|
|
34
|
+
: 'spr-border-color-disabled spr-background-color spr-cursor-not-allowed',
|
|
33
35
|
);
|
|
34
36
|
}
|
|
35
37
|
|
|
@@ -37,27 +39,27 @@ export const useRadioButton = (props: RadioPropTypes) => {
|
|
|
37
39
|
return classNames(
|
|
38
40
|
baseClasses,
|
|
39
41
|
props.modelValue === props.value
|
|
40
|
-
? 'background-color-brand-hover border-2 border-color-brand-hover shadow-[inset_0px_0px_0px_2.5px_#fff] animate-shadow-grow'
|
|
41
|
-
: 'background-color-base border-2 border-color-supporting shadow-[inset_0px_0px_0px_2.5px_#fff]',
|
|
42
|
+
? 'spr-background-color-brand-hover spr-border-2 spr-border-color-brand-hover spr-shadow-[inset_0px_0px_0px_2.5px_#fff] animate-shadow-grow'
|
|
43
|
+
: 'spr-background-color-base spr-border-2 spr-border-color-supporting spr-shadow-[inset_0px_0px_0px_2.5px_#fff]',
|
|
42
44
|
);
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
if (props.modelValue === props.value) {
|
|
46
48
|
return classNames(
|
|
47
49
|
baseClasses,
|
|
48
|
-
'border-color-brand-base background-color-brand-base shadow-[inset_0px_0px_0px_2.5px_#fff] animate-shadow-grow',
|
|
50
|
+
'spr-border-color-brand-base spr-background-color-brand-base spr-shadow-[inset_0px_0px_0px_2.5px_#fff] animate-shadow-grow',
|
|
49
51
|
);
|
|
50
52
|
}
|
|
51
53
|
|
|
52
|
-
return classNames(baseClasses, 'border-color-supporting shadow-[inset_0px_0px_0px_2.5px_#fff]');
|
|
54
|
+
return classNames(baseClasses, 'spr-border-color-supporting spr-shadow-[inset_0px_0px_0px_2.5px_#fff]');
|
|
53
55
|
});
|
|
54
56
|
|
|
55
57
|
const radioLabelClasses: ComputedRef<string> = computed(() => {
|
|
56
58
|
if (props.disabled) {
|
|
57
|
-
return 'text-color-disabled cursor-not-allowed';
|
|
59
|
+
return 'spr-text-color-disabled spr-cursor-not-allowed';
|
|
58
60
|
}
|
|
59
61
|
|
|
60
|
-
return 'text-color-strong cursor-pointer inline-flex items-center p-0';
|
|
62
|
+
return 'spr-text-color-strong spr-cursor-pointer spr-inline-flex spr-items-center spr-p-0';
|
|
61
63
|
});
|
|
62
64
|
|
|
63
65
|
return {
|