sprintify-ui 0.2.25 → 0.2.27
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/sprintify-ui.es.js +3986 -3992
- package/dist/style.css +1 -1
- package/dist/types/src/components/BaseStatistic.vue.d.ts +0 -1
- package/dist/types/src/components/BaseToast.vue.d.ts +20 -0
- package/dist/types/src/types/TimelineItem.d.ts +1 -2
- package/package.json +1 -1
- package/src/assets/form.css +1 -1
- package/src/components/BaseActionItemButton.vue +3 -1
- package/src/components/BaseAlert.vue +20 -20
- package/src/components/BaseAppDialogs.vue +6 -7
- package/src/components/BaseAppNotifications.vue +11 -47
- package/src/components/BaseAvatar.vue +1 -1
- package/src/components/BaseBreadcrumbs.vue +3 -3
- package/src/components/BaseDataIterator.vue +2 -2
- package/src/components/BaseDataIteratorSectionModal.vue +2 -2
- package/src/components/BaseDataTable.stories.js +2 -144
- package/src/components/BaseDataTable.vue +1 -1
- package/src/components/BaseDialog.vue +9 -9
- package/src/components/BaseGantt.vue +1 -1
- package/src/components/BaseHeader.vue +13 -19
- package/src/components/BaseIconPicker.vue +1 -1
- package/src/components/BaseInputLabel.vue +2 -2
- package/src/components/BaseModalCenter.vue +11 -17
- package/src/components/BaseModalSide.vue +11 -17
- package/src/components/BaseNavbarSideItem.vue +1 -1
- package/src/components/BasePanel.vue +1 -1
- package/src/components/BaseRichText.vue +17 -1
- package/src/components/BaseShortcut.vue +1 -1
- package/src/components/BaseSideNavigation.stories.js +6 -1
- package/src/components/BaseSideNavigationItem.vue +1 -1
- package/src/components/BaseStatistic.vue +11 -14
- package/src/components/BaseTabItem.vue +18 -17
- package/src/components/BaseTable.vue +15 -19
- package/src/components/BaseTextareaAutoresize.vue +1 -1
- package/src/components/BaseTimeline.vue +1 -1
- package/src/components/BaseTimelineItem.vue +20 -30
- package/src/components/BaseToast.stories.js +50 -0
- package/src/components/BaseToast.vue +44 -0
- package/src/stories/List.stories.js +132 -0
- package/src/stories/Show.stories.js +324 -0
- package/src/types/TimelineItem.ts +1 -2
- package/src/utils/colors.ts +10 -0
|
@@ -3,61 +3,24 @@
|
|
|
3
3
|
<div
|
|
4
4
|
class="pointer-events-none fixed inset-0 z-notifications flex items-end justify-end p-6 md:p-8"
|
|
5
5
|
>
|
|
6
|
-
<div class="w-full
|
|
6
|
+
<div class="w-full">
|
|
7
7
|
<TransitionGroup
|
|
8
8
|
enter-active-class="transition duration-300 ease-out transform"
|
|
9
|
-
enter-from-class="
|
|
10
|
-
enter-to-class="
|
|
9
|
+
enter-from-class="translate-y-2 opacity-0"
|
|
10
|
+
enter-to-class="translate-y-0 opacity-100"
|
|
11
11
|
leave-active-class="transition duration-100 ease-in"
|
|
12
|
-
leave-from-class="
|
|
13
|
-
leave-to-class="
|
|
12
|
+
leave-from-class="translate-y-0 opacity-100"
|
|
13
|
+
leave-to-class="translate-y-2 opacity-0"
|
|
14
14
|
>
|
|
15
15
|
<div
|
|
16
16
|
v-for="notification in notifications"
|
|
17
17
|
:key="notification.id"
|
|
18
18
|
>
|
|
19
|
-
<
|
|
20
|
-
class="
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
:class="{
|
|
25
|
-
'bg-blue-500': notification.color == 'info',
|
|
26
|
-
'bg-red-500': notification.color == 'danger',
|
|
27
|
-
'bg-yellow-500': notification.color == 'warning',
|
|
28
|
-
'bg-green-500': notification.color == 'success',
|
|
29
|
-
}"
|
|
30
|
-
>
|
|
31
|
-
<svg
|
|
32
|
-
class="h-6 w-6 fill-current text-white"
|
|
33
|
-
viewBox="0 0 40 40"
|
|
34
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
35
|
-
>
|
|
36
|
-
<path
|
|
37
|
-
d="M20 3.33331C10.8 3.33331 3.33337 10.8 3.33337 20C3.33337 29.2 10.8 36.6666 20 36.6666C29.2 36.6666 36.6667 29.2 36.6667 20C36.6667 10.8 29.2 3.33331 20 3.33331ZM21.6667 28.3333H18.3334V25H21.6667V28.3333ZM21.6667 21.6666H18.3334V11.6666H21.6667V21.6666Z"
|
|
38
|
-
/>
|
|
39
|
-
</svg>
|
|
40
|
-
</div>
|
|
41
|
-
|
|
42
|
-
<div class="-mx-3 px-4 pt-2 pb-3">
|
|
43
|
-
<div class="mx-3">
|
|
44
|
-
<h3
|
|
45
|
-
class="mb-1 font-semibold leading-tight"
|
|
46
|
-
:class="{
|
|
47
|
-
'text-blue-500': notification.color == 'info',
|
|
48
|
-
'text-red-500': notification.color == 'danger',
|
|
49
|
-
'text-yellow-500': notification.color == 'warning',
|
|
50
|
-
'text-green-500': notification.color == 'success',
|
|
51
|
-
}"
|
|
52
|
-
>
|
|
53
|
-
{{ notification.title }}
|
|
54
|
-
</h3>
|
|
55
|
-
<p class="text-sm leading-tight text-slate-600">
|
|
56
|
-
{{ notification.text }}
|
|
57
|
-
</p>
|
|
58
|
-
</div>
|
|
59
|
-
</div>
|
|
60
|
-
</div>
|
|
19
|
+
<BaseToast
|
|
20
|
+
class="mt-4"
|
|
21
|
+
:text="notification.text"
|
|
22
|
+
:color="notification.color"
|
|
23
|
+
/>
|
|
61
24
|
</div>
|
|
62
25
|
</TransitionGroup>
|
|
63
26
|
</div>
|
|
@@ -67,6 +30,7 @@
|
|
|
67
30
|
|
|
68
31
|
<script lang="ts" setup>
|
|
69
32
|
import { useNotificationsStore } from '@/index';
|
|
33
|
+
import BaseToast from './BaseToast.vue';
|
|
70
34
|
|
|
71
35
|
const notificationsStore = useNotificationsStore();
|
|
72
36
|
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
{ 'ml-2': index > 0 },
|
|
35
35
|
isExactActive
|
|
36
36
|
? 'text-primary-600'
|
|
37
|
-
: 'text-slate-
|
|
37
|
+
: 'text-slate-600 hover:text-slate-700',
|
|
38
38
|
]"
|
|
39
39
|
@click.prevent="navigate()"
|
|
40
40
|
>
|
|
@@ -60,11 +60,11 @@
|
|
|
60
60
|
<RouterLink
|
|
61
61
|
v-if="mobileBreadcrumb"
|
|
62
62
|
:to="mobileBreadcrumb.to"
|
|
63
|
-
class="block text-slate-
|
|
63
|
+
class="block text-slate-600 sm:hidden"
|
|
64
64
|
>
|
|
65
65
|
<div class="flex items-center">
|
|
66
66
|
<svg
|
|
67
|
-
class="-ml-1 mr-1 h-5 w-5 flex-shrink-0 text-
|
|
67
|
+
class="-ml-1 mr-1 h-5 w-5 flex-shrink-0 text-slate-500"
|
|
68
68
|
viewBox="0 0 20 20"
|
|
69
69
|
fill="currentColor"
|
|
70
70
|
aria-hidden="true"
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
ref="searchInput"
|
|
47
47
|
v-model="searchQuery"
|
|
48
48
|
type="text"
|
|
49
|
-
class="w-full h-full py-0 overflow-hidden rounded-md border border-slate-300 bg-white shadow-sm"
|
|
49
|
+
class="w-full h-full py-0 overflow-hidden rounded-md border border-slate-300 bg-white shadow-sm placeholder:font-light placeholder:text-sm focus:ring-blue-300 focus:ring-4"
|
|
50
50
|
:class="{
|
|
51
51
|
'pl-9 pr-8': size == 'sm',
|
|
52
52
|
'pl-10 pr-9': size == 'md',
|
|
@@ -793,7 +793,7 @@ const sectionsInternal = computed<DataIteratorSection[]>(() => {
|
|
|
793
793
|
name: 'filters',
|
|
794
794
|
title: t('sui.filters'),
|
|
795
795
|
closeText: t('sui.apply_filters'),
|
|
796
|
-
icon: 'heroicons:
|
|
796
|
+
icon: 'heroicons:funnel',
|
|
797
797
|
opened: true,
|
|
798
798
|
},
|
|
799
799
|
...sections,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
@update:model-value="emit('update:modelValue', $event)"
|
|
5
5
|
>
|
|
6
6
|
<div>
|
|
7
|
-
<div class="border-b border-slate-
|
|
7
|
+
<div class="border-b border-slate-200 p-4">
|
|
8
8
|
<h2 class="text-base font-semibold">
|
|
9
9
|
{{ section.title }}
|
|
10
10
|
</h2>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<slot />
|
|
15
15
|
</div>
|
|
16
16
|
|
|
17
|
-
<div class="border-t border-slate-
|
|
17
|
+
<div class="border-t border-slate-200 p-4">
|
|
18
18
|
<button
|
|
19
19
|
class="btn btn-primary w-full sm:w-auto"
|
|
20
20
|
@click="emit('update:modelValue', false)"
|
|
@@ -7,6 +7,7 @@ import BaseAppNotifications from './BaseAppNotifications.vue';
|
|
|
7
7
|
import BaseAppDialogs from './BaseAppDialogs.vue';
|
|
8
8
|
import { onBeforeUnmount } from 'vue';
|
|
9
9
|
import { DateTime } from 'luxon';
|
|
10
|
+
import { templateDataTable } from '../../.storybook/utils';
|
|
10
11
|
|
|
11
12
|
export default {
|
|
12
13
|
title: 'Data/BaseDataTable',
|
|
@@ -43,150 +44,7 @@ const templateComponents = {
|
|
|
43
44
|
const template = `
|
|
44
45
|
<div class="font-mono text-sm bg-black px-2 py-1 rounded text-white">Last fetch: {{ lastFetch?.getTime() }} (should update on each fetch)</div>
|
|
45
46
|
<br/>
|
|
46
|
-
|
|
47
|
-
<BaseTableColumn
|
|
48
|
-
v-slot="{ row }"
|
|
49
|
-
label="Titre"
|
|
50
|
-
sortable
|
|
51
|
-
field="title->en"
|
|
52
|
-
:toggle="false"
|
|
53
|
-
>
|
|
54
|
-
<div class="font-medium text-slate-900 leading-tight truncate">
|
|
55
|
-
{{ row.title.slice(0, 30) }}...
|
|
56
|
-
</div>
|
|
57
|
-
</BaseTableColumn>
|
|
58
|
-
|
|
59
|
-
<BaseTableColumn
|
|
60
|
-
v-slot="{ row }"
|
|
61
|
-
label="URL"
|
|
62
|
-
field="website_url"
|
|
63
|
-
sortable
|
|
64
|
-
>
|
|
65
|
-
<a :href="row.website_url" target="_blank" class="btn btn-xs whitespace-pre space-x-1.5 shadow-sm">
|
|
66
|
-
<span class="whitespace-pre">Open website</span>
|
|
67
|
-
<BaseIcon icon="heroicons:arrow-top-right-on-square-20-solid" class="w-4 h-4 inline-block" />
|
|
68
|
-
</a>
|
|
69
|
-
</BaseTableColumn>
|
|
70
|
-
|
|
71
|
-
<BaseTableColumn
|
|
72
|
-
v-slot="{ row }"
|
|
73
|
-
label="Access Level"
|
|
74
|
-
field="access_level"
|
|
75
|
-
sortable
|
|
76
|
-
>
|
|
77
|
-
<BaseBadge
|
|
78
|
-
contrast="low"
|
|
79
|
-
:color="row.access_level == 'public' ? 'green' : 'gray'"
|
|
80
|
-
bordered
|
|
81
|
-
>
|
|
82
|
-
{{ row.access_level }}
|
|
83
|
-
</BaseBadge>
|
|
84
|
-
</BaseTableColumn>
|
|
85
|
-
|
|
86
|
-
<BaseTableColumn
|
|
87
|
-
v-slot="{ row }"
|
|
88
|
-
label="Vote"
|
|
89
|
-
field="votes_avg_score"
|
|
90
|
-
sortable
|
|
91
|
-
custom-key="votes_avg_score"
|
|
92
|
-
:toggle="true"
|
|
93
|
-
:toggle-default="false"
|
|
94
|
-
>
|
|
95
|
-
<BaseBadge color="blue" contrast="low" bordered>
|
|
96
|
-
{{ Math.round(row.votes_avg_score) }} / 5
|
|
97
|
-
</BaseBadge>
|
|
98
|
-
</BaseTableColumn>
|
|
99
|
-
|
|
100
|
-
<BaseTableColumn
|
|
101
|
-
v-slot="{ row }"
|
|
102
|
-
v-if="ownerIsVisible"
|
|
103
|
-
label="Owner"
|
|
104
|
-
custom-key="owner"
|
|
105
|
-
field="owner_id"
|
|
106
|
-
:toggle="true"
|
|
107
|
-
sortable
|
|
108
|
-
>
|
|
109
|
-
<span class="text-slate-600 whitespace-pre">{{ row.owner?.name }}</span>
|
|
110
|
-
</BaseTableColumn>
|
|
111
|
-
|
|
112
|
-
<BaseTableColumn
|
|
113
|
-
v-slot="{ row }"
|
|
114
|
-
label="Created at"
|
|
115
|
-
field="created_at"
|
|
116
|
-
sortable
|
|
117
|
-
>
|
|
118
|
-
<p class="text-slate-600 text-sm">{{ DateTime.fromISO(row.created_at).toLocaleString() }}</p>
|
|
119
|
-
</BaseTableColumn>
|
|
120
|
-
|
|
121
|
-
<BaseTableColumn
|
|
122
|
-
v-slot="{ row }"
|
|
123
|
-
label="Select"
|
|
124
|
-
:clickable="false"
|
|
125
|
-
padding="0px"
|
|
126
|
-
>
|
|
127
|
-
<select class="select border-none text-sm rounded text-slate-600 focus:z-10 focus:ring-2 bg-transparent">
|
|
128
|
-
<option>Option 1</option>
|
|
129
|
-
<option>Option 2</option>
|
|
130
|
-
</select>
|
|
131
|
-
</BaseTableColumn>
|
|
132
|
-
|
|
133
|
-
<template #detail="{ row }">
|
|
134
|
-
<div class="p-4 text-xs">
|
|
135
|
-
<p>ID : <span class="font-mono">{{ row.id }}</span></p>
|
|
136
|
-
<p>Created at : <span class="font-mono">{{ row.created_at }}</span></p>
|
|
137
|
-
</div>
|
|
138
|
-
</template>
|
|
139
|
-
|
|
140
|
-
<template #test>
|
|
141
|
-
<div>
|
|
142
|
-
Section Test
|
|
143
|
-
</div>
|
|
144
|
-
</template>
|
|
145
|
-
|
|
146
|
-
<template #filters="{ query, updateQueryValue }">
|
|
147
|
-
<div class="space-y-3">
|
|
148
|
-
<div>
|
|
149
|
-
<p class="mb-1 text-sm">
|
|
150
|
-
Type
|
|
151
|
-
</p>
|
|
152
|
-
<BaseSelect
|
|
153
|
-
:model-value="query.type ?? null"
|
|
154
|
-
class="w-full rounded border-slate-300 text-base sm:text-sm"
|
|
155
|
-
placeholder="-"
|
|
156
|
-
@update:model-value="updateQueryValue('type', $event)"
|
|
157
|
-
>
|
|
158
|
-
<option value="video">
|
|
159
|
-
Video
|
|
160
|
-
</option>
|
|
161
|
-
<option value="article">
|
|
162
|
-
Article
|
|
163
|
-
</option>
|
|
164
|
-
</BaseSelect>
|
|
165
|
-
</div>
|
|
166
|
-
<div>
|
|
167
|
-
<p class="mb-1 text-sm">
|
|
168
|
-
Access Level
|
|
169
|
-
</p>
|
|
170
|
-
<BaseSelect
|
|
171
|
-
:model-value="query.access_level ?? null"
|
|
172
|
-
class="w-full rounded border-slate-300 text-base sm:text-sm"
|
|
173
|
-
placeholder="-"
|
|
174
|
-
@update:model-value="updateQueryValue('access_level', $event)"
|
|
175
|
-
>
|
|
176
|
-
<option value="public">
|
|
177
|
-
Public
|
|
178
|
-
</option>
|
|
179
|
-
<option value="member">
|
|
180
|
-
Member
|
|
181
|
-
</option>
|
|
182
|
-
<option value="vip">
|
|
183
|
-
VIP
|
|
184
|
-
</option>
|
|
185
|
-
</BaseSelect>
|
|
186
|
-
</div>
|
|
187
|
-
</div>
|
|
188
|
-
</template>
|
|
189
|
-
</BaseDataTable>
|
|
47
|
+
${templateDataTable}
|
|
190
48
|
<BaseAppNotifications></BaseAppNotifications>
|
|
191
49
|
<BaseAppDialogs></BaseAppDialogs>
|
|
192
50
|
`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
|
-
class="relative transform overflow-hidden rounded-lg bg-white
|
|
3
|
+
class="relative transform overflow-hidden rounded-lg bg-white border border-slate-200 p-4 text-left shadow-xl transition-all sm:my-8 sm:w-full sm:max-w-lg"
|
|
4
4
|
>
|
|
5
5
|
<div class="sm:flex sm:items-start">
|
|
6
6
|
<div
|
|
@@ -14,22 +14,22 @@
|
|
|
14
14
|
>
|
|
15
15
|
<BaseIcon
|
|
16
16
|
v-if="color == 'danger'"
|
|
17
|
-
class="h-
|
|
17
|
+
class="h-5 w-5 text-red-600"
|
|
18
18
|
icon="heroicons:exclamation-triangle-20-solid"
|
|
19
19
|
/>
|
|
20
20
|
<BaseIcon
|
|
21
21
|
v-else-if="color == 'warning'"
|
|
22
|
-
class="h-
|
|
22
|
+
class="h-5 w-5 text-yellow-600"
|
|
23
23
|
icon="heroicons:exclamation-triangle-20-solid"
|
|
24
24
|
/>
|
|
25
25
|
<BaseIcon
|
|
26
26
|
v-else-if="color == 'success'"
|
|
27
|
-
class="h-
|
|
27
|
+
class="h-5 w-5 text-green-600"
|
|
28
28
|
icon="heroicons:check-circle-20-solid"
|
|
29
29
|
/>
|
|
30
30
|
<BaseIcon
|
|
31
31
|
v-else
|
|
32
|
-
class="h-
|
|
32
|
+
class="h-5 w-5 text-primary-600"
|
|
33
33
|
icon="heroicons:information-circle-20-solid"
|
|
34
34
|
/>
|
|
35
35
|
</div>
|
|
@@ -37,12 +37,12 @@
|
|
|
37
37
|
<slot>
|
|
38
38
|
<h3
|
|
39
39
|
id="modal-title"
|
|
40
|
-
class="text-
|
|
40
|
+
class="text-base font-medium leading-6 text-slate-900"
|
|
41
41
|
>
|
|
42
42
|
{{ title }}
|
|
43
43
|
</h3>
|
|
44
44
|
<div class="mt-2">
|
|
45
|
-
<p class="text-
|
|
45
|
+
<p class="text-sm font-light text-slate-600">
|
|
46
46
|
{{ message }}
|
|
47
47
|
</p>
|
|
48
48
|
</div>
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
<button
|
|
54
54
|
ref="confirm"
|
|
55
55
|
type="button"
|
|
56
|
-
class="btn mb-2 w-full sm:mb-0 sm:w-auto"
|
|
56
|
+
class="btn btn-sm mb-2 w-full sm:mb-0 sm:w-auto"
|
|
57
57
|
:class="{
|
|
58
58
|
'btn-primary': color == 'info',
|
|
59
59
|
'btn-danger': color == 'danger',
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
</button>
|
|
67
67
|
<button
|
|
68
68
|
type="button"
|
|
69
|
-
class="btn w-full sm:mr-2 sm:w-auto"
|
|
69
|
+
class="btn btn-sm w-full sm:mr-2 sm:w-auto"
|
|
70
70
|
@click="$emit('cancel')"
|
|
71
71
|
>
|
|
72
72
|
{{ cancelText ?? t('sui.cancel') }}
|
|
@@ -3,23 +3,15 @@
|
|
|
3
3
|
<BaseBreadcrumbs
|
|
4
4
|
v-if="breadcrumbs"
|
|
5
5
|
:breadcrumbs="breadcrumbs"
|
|
6
|
-
|
|
7
|
-
class="lg:mb-1 mb-2"
|
|
6
|
+
class="mb-1"
|
|
8
7
|
/>
|
|
9
8
|
|
|
10
9
|
<div class="lg:flex lg:items-top lg:justify-between">
|
|
11
10
|
<div class="min-w-0 flex-1">
|
|
12
11
|
<div class="flex flex-col xs:flex-row xs:flex-wrap xs:items-center">
|
|
13
|
-
<
|
|
14
|
-
class="order-2 font-bold text-slate-900 xs:order-1"
|
|
15
|
-
:class="[
|
|
16
|
-
compactLayout
|
|
17
|
-
? 'mr-2 text-2xl leading-7'
|
|
18
|
-
: 'mr-3 truncate text-3xl tracking-tight',
|
|
19
|
-
]"
|
|
20
|
-
>
|
|
12
|
+
<h1 class="order-2 font-bold text-slate-900 xs:order-1 mr-3 truncate text-3xl tracking-tight">
|
|
21
13
|
{{ title }}
|
|
22
|
-
</
|
|
14
|
+
</h1>
|
|
23
15
|
|
|
24
16
|
<div
|
|
25
17
|
v-if="badge"
|
|
@@ -34,13 +26,13 @@
|
|
|
34
26
|
</BaseBadge>
|
|
35
27
|
</div>
|
|
36
28
|
</div>
|
|
37
|
-
<
|
|
29
|
+
<h2
|
|
38
30
|
v-if="subtitle"
|
|
39
|
-
class="mt-1 leading-tight text-slate-
|
|
40
|
-
:class="[compactLayout ? '' : 'truncate
|
|
31
|
+
class="mt-1 leading-tight font-light text-slate-600 text-xs"
|
|
32
|
+
:class="[compactLayout ? '' : 'truncate']"
|
|
41
33
|
>
|
|
42
34
|
{{ subtitle }}
|
|
43
|
-
</
|
|
35
|
+
</h2>
|
|
44
36
|
<div
|
|
45
37
|
v-if="attributes"
|
|
46
38
|
class="flex"
|
|
@@ -53,20 +45,22 @@
|
|
|
53
45
|
<div
|
|
54
46
|
v-for="attribute in attributes"
|
|
55
47
|
:key="attribute.label"
|
|
56
|
-
class="flex items-center
|
|
48
|
+
class="flex items-center"
|
|
57
49
|
>
|
|
58
50
|
<BaseIcon
|
|
59
51
|
:icon="attribute.icon"
|
|
60
|
-
class="mr-1.5 h-4 w-4
|
|
52
|
+
class="mr-1.5 h-4 w-4 shrink-0 text-slate-600"
|
|
61
53
|
aria-hidden="true"
|
|
62
54
|
/>
|
|
63
|
-
|
|
55
|
+
<span class="text-sm text-slate-600">
|
|
56
|
+
{{ attribute.label }}
|
|
57
|
+
</span>
|
|
64
58
|
</div>
|
|
65
59
|
</div>
|
|
66
60
|
</div>
|
|
67
61
|
|
|
68
62
|
<div
|
|
69
|
-
class="mt-
|
|
63
|
+
class="mt-3 lg:mt-0 mb-2 lg:mb-0"
|
|
70
64
|
>
|
|
71
65
|
<div
|
|
72
66
|
class="flex gap-2"
|
|
@@ -23,35 +23,29 @@
|
|
|
23
23
|
<div class="pt-safe grow">
|
|
24
24
|
<transition
|
|
25
25
|
appear
|
|
26
|
-
enter-active-class="duration-
|
|
26
|
+
enter-active-class="duration-100 ease-out"
|
|
27
27
|
enter-from-class="opacity-0"
|
|
28
28
|
enter-to-class="opacity-100"
|
|
29
|
-
leave-active-class="duration-
|
|
29
|
+
leave-active-class="duration-100 ease-in"
|
|
30
30
|
leave-from-class="opacity-100"
|
|
31
31
|
leave-to-class="opacity-0"
|
|
32
32
|
>
|
|
33
33
|
<div
|
|
34
34
|
v-if="modelValue"
|
|
35
|
-
:class="
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
@click="
|
|
42
|
-
closeOnOutsideClick
|
|
43
|
-
? modal.close()
|
|
44
|
-
: modal.refuseAnimation()
|
|
45
|
-
"
|
|
35
|
+
:class="twMerge(
|
|
36
|
+
'fixed inset-0 bg-slate-300 bg-opacity-60 transition-opacity',
|
|
37
|
+
twBackdrop
|
|
38
|
+
)"
|
|
39
|
+
@click="closeOnOutsideClick ? modal.close() : modal.refuseAnimation()"
|
|
46
40
|
/>
|
|
47
41
|
</transition>
|
|
48
42
|
|
|
49
43
|
<transition
|
|
50
44
|
appear
|
|
51
|
-
enter-active-class="duration-
|
|
45
|
+
enter-active-class="duration-100 ease-out"
|
|
52
46
|
enter-from-class="translate-y-20 opacity-0"
|
|
53
47
|
enter-to-class="translate-y-0 opacity-100"
|
|
54
|
-
leave-active-class="duration-
|
|
48
|
+
leave-active-class="duration-100 ease-in"
|
|
55
49
|
leave-from-class="translate-y-0 opacity-100"
|
|
56
50
|
leave-to-class="translate-y-20 opacity-0"
|
|
57
51
|
>
|
|
@@ -74,12 +68,12 @@
|
|
|
74
68
|
|
|
75
69
|
<button
|
|
76
70
|
v-if="showCloseButton"
|
|
77
|
-
class="right fixed right-2 top-2 flex h-
|
|
71
|
+
class="right fixed shadow hover:shadow-lg duration-300 transition-shadow right-2 top-2 flex h-10 w-10 bg-white items-center justify-center rounded-full"
|
|
78
72
|
type="button"
|
|
79
73
|
@click="modal.close()"
|
|
80
74
|
>
|
|
81
75
|
<BaseIcon
|
|
82
|
-
class="h-
|
|
76
|
+
class="h-5 w-5 text-black"
|
|
83
77
|
icon="heroicons:x-mark"
|
|
84
78
|
/>
|
|
85
79
|
</button>
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<div class="min-h-full grow">
|
|
15
15
|
<transition
|
|
16
16
|
appear
|
|
17
|
-
enter-active-class="duration-
|
|
17
|
+
enter-active-class="duration-200 ease-out"
|
|
18
18
|
enter-from-class="opacity-0"
|
|
19
19
|
enter-to-class="opacity-100"
|
|
20
20
|
leave-active-class="duration-200 ease-in"
|
|
@@ -23,26 +23,20 @@
|
|
|
23
23
|
>
|
|
24
24
|
<div
|
|
25
25
|
v-show="modelValue"
|
|
26
|
-
:class="
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
@click="
|
|
33
|
-
closeOnOutsideClick
|
|
34
|
-
? modal.close()
|
|
35
|
-
: modal.refuseAnimation()
|
|
36
|
-
"
|
|
26
|
+
:class="twMerge(
|
|
27
|
+
'fixed inset-0 bg-slate-300 bg-opacity-60 transition-opacity',
|
|
28
|
+
twBackdrop
|
|
29
|
+
)"
|
|
30
|
+
@click="closeOnOutsideClick ? modal.close() : modal.refuseAnimation()"
|
|
37
31
|
/>
|
|
38
32
|
</transition>
|
|
39
33
|
|
|
40
34
|
<transition
|
|
41
35
|
appear
|
|
42
|
-
enter-active-class="duration-
|
|
36
|
+
enter-active-class="duration-200 ease-out"
|
|
43
37
|
enter-from-class="translate-x-20 opacity-0"
|
|
44
38
|
enter-to-class="translate-x-0 opacity-100"
|
|
45
|
-
leave-active-class="duration-
|
|
39
|
+
leave-active-class="duration-100 ease-in"
|
|
46
40
|
leave-from-class="translate-x-0 opacity-100"
|
|
47
41
|
leave-to-class="translate-x-20 opacity-0"
|
|
48
42
|
>
|
|
@@ -51,19 +45,19 @@
|
|
|
51
45
|
:style="{
|
|
52
46
|
maxWidth: realMaxWidth,
|
|
53
47
|
}"
|
|
54
|
-
class="pb-safe py-safe relative z-[1] ml-auto mr-0 flex h-full w-full flex-col rounded-t-lg bg-white text-left shadow-
|
|
48
|
+
class="pb-safe py-safe relative z-[1] ml-auto mr-0 flex h-full w-full flex-col rounded-t-lg bg-white text-left shadow-2xl sm:rounded-t-none"
|
|
55
49
|
:class="[
|
|
56
50
|
modal.animationClasses.value,
|
|
57
51
|
clipped ? 'overflow-hidden' : '',
|
|
58
52
|
]"
|
|
59
53
|
>
|
|
60
54
|
<button
|
|
61
|
-
class="absolute -top-[4.5rem] right-2 flex h-
|
|
55
|
+
class="absolute -top-[4.5rem] right-2 flex h-10 w-10 items-center justify-center rounded-full bg-white shadow hover:shadow-lg sm:-left-[3rem] sm:top-2 duration-300 transition-shadow"
|
|
62
56
|
type="button"
|
|
63
57
|
@click="modal.close()"
|
|
64
58
|
>
|
|
65
59
|
<BaseIcon
|
|
66
|
-
class="h-
|
|
60
|
+
class="h-5 w-5 text-black"
|
|
67
61
|
icon="heroicons:x-mark"
|
|
68
62
|
/>
|
|
69
63
|
</button>
|
|
@@ -93,7 +93,7 @@ const showSubActions = computed((): boolean => {
|
|
|
93
93
|
});
|
|
94
94
|
|
|
95
95
|
const subItemClasses = computed((): string[] => {
|
|
96
|
-
const classList = ['flex w-full font-
|
|
96
|
+
const classList = ['flex w-full font-light'];
|
|
97
97
|
|
|
98
98
|
if (props.dark) {
|
|
99
99
|
classList.push('text-slate-300 hover:text-white');
|