@weni/unnnic-system 3.5.3-alpha.1 → 3.5.3-alpha.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/components/ModalDialog/ModalDialog.vue.d.ts +194 -29
- package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
- package/dist/components/index.d.ts +862 -78
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/ui/dialog/Dialog.vue.d.ts +23 -0
- package/dist/components/ui/dialog/Dialog.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogClose.vue.d.ts +19 -0
- package/dist/components/ui/dialog/DialogClose.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +40 -0
- package/dist/components/ui/dialog/DialogContent.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogFooter.vue.d.ts +25 -0
- package/dist/components/ui/dialog/DialogFooter.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogHeader.vue.d.ts +29 -0
- package/dist/components/ui/dialog/DialogHeader.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogTitle.vue.d.ts +23 -0
- package/dist/components/ui/dialog/DialogTitle.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/DialogTrigger.vue.d.ts +19 -0
- package/dist/components/ui/dialog/DialogTrigger.vue.d.ts.map +1 -0
- package/dist/components/ui/dialog/index.d.ts +8 -0
- package/dist/components/ui/dialog/index.d.ts.map +1 -0
- package/dist/{es-1c7253d4.mjs → es-dea507ea.mjs} +1 -1
- package/dist/{index-ff0a404c.mjs → index-25e40316.mjs} +10953 -10270
- package/dist/{pt-br-316f1627.mjs → pt-br-8720ec19.mjs} +1 -1
- package/dist/style.css +1 -1
- package/dist/unnnic.mjs +185 -171
- package/dist/unnnic.umd.js +43 -39
- package/package.json +1 -1
- package/src/assets/scss/tailwind.scss +8 -0
- package/src/components/ModalDialog/ModalDialog.vue +60 -146
- package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -22
- package/src/components/index.ts +28 -0
- package/src/components/ui/dialog/Dialog.vue +15 -0
- package/src/components/ui/dialog/DialogClose.vue +25 -0
- package/src/components/ui/dialog/DialogContent.vue +114 -0
- package/src/components/ui/dialog/DialogFooter.vue +46 -0
- package/src/components/ui/dialog/DialogHeader.vue +78 -0
- package/src/components/ui/dialog/DialogTitle.vue +34 -0
- package/src/components/ui/dialog/DialogTrigger.vue +12 -0
- package/src/components/ui/dialog/index.ts +7 -0
- package/src/stories/Dialog.stories.js +832 -0
- package/src/stories/ModalDialog.mdx +3 -0
- package/src/stories/ModalDialog.stories.js +1 -1
package/package.json
CHANGED
|
@@ -1,64 +1,46 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
class="unnnic-modal-dialog"
|
|
2
|
+
<UnnnicDialog
|
|
3
|
+
:open="modelValue"
|
|
5
4
|
data-testid="modal-dialog"
|
|
5
|
+
@update:open="$emit('update:modelValue', $event)"
|
|
6
6
|
>
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@click.stop="!persistent && close()"
|
|
11
|
-
/>
|
|
12
|
-
<section
|
|
13
|
-
:class="[
|
|
14
|
-
'unnnic-modal-dialog__container',
|
|
15
|
-
`unnnic-modal-dialog__container--${size}`,
|
|
16
|
-
]"
|
|
7
|
+
<UnnnicDialogContent
|
|
8
|
+
:size="size === 'sm' ? 'small' : size === 'lg' ? 'large' : 'medium'"
|
|
9
|
+
class="unnnic-modal-dialog__container"
|
|
17
10
|
data-testid="modal-container"
|
|
11
|
+
@escape-key-down="persistentHandler"
|
|
12
|
+
@pointer-down-outside="persistentHandler"
|
|
18
13
|
>
|
|
19
14
|
<section
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
:class="[
|
|
16
|
+
'unnnic-modal-dialog__container__body',
|
|
17
|
+
{
|
|
18
|
+
'unnnic-modal-dialog__container__body--left-sidebar':
|
|
19
|
+
$slots.leftSidebar,
|
|
20
|
+
},
|
|
21
|
+
]"
|
|
22
22
|
>
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
<section
|
|
24
|
+
v-if="$slots.leftSidebar"
|
|
25
|
+
class="unnnic-modal-dialog__container__left-sidebar"
|
|
26
|
+
>
|
|
27
|
+
<slot name="leftSidebar" />
|
|
28
|
+
</section>
|
|
29
|
+
<UnnnicDialogHeader
|
|
28
30
|
v-if="title"
|
|
29
|
-
|
|
31
|
+
:closeButton="showCloseIcon"
|
|
32
|
+
:type="type"
|
|
30
33
|
>
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class="unnnic-modal-dialog__container__title-icon"
|
|
36
|
-
:icon="icon || iconsMapper[type]?.icon"
|
|
37
|
-
:scheme="iconScheme || iconsMapper[type]?.scheme"
|
|
38
|
-
size="md"
|
|
39
|
-
/>
|
|
40
|
-
<h1
|
|
41
|
-
class="unnnic-modal-dialog__container__title-text"
|
|
42
|
-
data-testid="title-text"
|
|
43
|
-
>
|
|
44
|
-
{{ title }}
|
|
45
|
-
</h1>
|
|
46
|
-
</section>
|
|
47
|
-
<UnnnicIcon
|
|
48
|
-
v-if="showCloseIcon"
|
|
49
|
-
data-testid="close-icon"
|
|
50
|
-
icon="close"
|
|
51
|
-
clickable
|
|
52
|
-
scheme="neutral-cloudy"
|
|
53
|
-
@click="close()"
|
|
54
|
-
/>
|
|
55
|
-
</header>
|
|
34
|
+
<UnnnicDialogTitle>
|
|
35
|
+
{{ title }}
|
|
36
|
+
</UnnnicDialogTitle>
|
|
37
|
+
</UnnnicDialogHeader>
|
|
56
38
|
<section class="unnnic-modal-dialog__container__content">
|
|
57
39
|
<slot></slot>
|
|
58
40
|
</section>
|
|
59
|
-
|
|
41
|
+
|
|
42
|
+
<UnnnicDialogFooter
|
|
60
43
|
v-if="primaryButtonProps.text"
|
|
61
|
-
data-testid="actions-section"
|
|
62
44
|
:class="[
|
|
63
45
|
'unnnic-modal-dialog__container__actions',
|
|
64
46
|
{
|
|
@@ -66,6 +48,8 @@
|
|
|
66
48
|
showActionsDivider,
|
|
67
49
|
},
|
|
68
50
|
]"
|
|
51
|
+
:divider="showActionsDivider"
|
|
52
|
+
data-testid="actions-section"
|
|
69
53
|
>
|
|
70
54
|
<UnnnicButton
|
|
71
55
|
v-if="!hideSecondaryButton"
|
|
@@ -92,22 +76,30 @@
|
|
|
92
76
|
class="unnnic-modal-dialog__container__actions__primary-button"
|
|
93
77
|
@click.stop="$emit('primaryButtonClick')"
|
|
94
78
|
/>
|
|
95
|
-
</
|
|
79
|
+
</UnnnicDialogFooter>
|
|
96
80
|
</section>
|
|
97
|
-
</
|
|
98
|
-
</
|
|
81
|
+
</UnnnicDialogContent>
|
|
82
|
+
</UnnnicDialog>
|
|
99
83
|
</template>
|
|
100
84
|
|
|
101
85
|
<script>
|
|
102
|
-
import UnnnicIcon from '../Icon.vue';
|
|
103
86
|
import UnnnicButton from '../Button/Button.vue';
|
|
104
87
|
import UnnnicI18n from '../../mixins/i18n';
|
|
88
|
+
import UnnnicDialog from '../ui/dialog/Dialog.vue';
|
|
89
|
+
import UnnnicDialogContent from '../ui/dialog/DialogContent.vue';
|
|
90
|
+
import UnnnicDialogHeader from '../ui/dialog/DialogHeader.vue';
|
|
91
|
+
import UnnnicDialogTitle from '../ui/dialog/DialogTitle.vue';
|
|
92
|
+
import UnnnicDialogFooter from '../ui/dialog/DialogFooter.vue';
|
|
105
93
|
|
|
106
94
|
export default {
|
|
107
95
|
name: 'UnnnicModalDialog',
|
|
108
96
|
components: {
|
|
109
|
-
UnnnicIcon,
|
|
110
97
|
UnnnicButton,
|
|
98
|
+
UnnnicDialog,
|
|
99
|
+
UnnnicDialogContent,
|
|
100
|
+
UnnnicDialogHeader,
|
|
101
|
+
UnnnicDialogTitle,
|
|
102
|
+
UnnnicDialogFooter,
|
|
111
103
|
},
|
|
112
104
|
mixins: [UnnnicI18n],
|
|
113
105
|
props: {
|
|
@@ -177,11 +169,6 @@ export default {
|
|
|
177
169
|
es: 'Cancelar',
|
|
178
170
|
},
|
|
179
171
|
},
|
|
180
|
-
iconsMapper: {
|
|
181
|
-
success: { icon: 'check_circle', scheme: 'aux-green-500' },
|
|
182
|
-
warning: { icon: 'warning', scheme: 'aux-red-500' },
|
|
183
|
-
attention: { icon: 'error', scheme: 'aux-yellow-500' },
|
|
184
|
-
},
|
|
185
172
|
primaryButtonTypeMapper: {
|
|
186
173
|
success: 'primary',
|
|
187
174
|
warning: 'warning',
|
|
@@ -201,91 +188,39 @@ export default {
|
|
|
201
188
|
updateBodyOverflow(isHidden) {
|
|
202
189
|
document.body.style.overflow = isHidden ? 'hidden' : '';
|
|
203
190
|
},
|
|
191
|
+
persistentHandler(event) {
|
|
192
|
+
if (this.persistent) {
|
|
193
|
+
event.preventDefault();
|
|
194
|
+
}
|
|
195
|
+
},
|
|
204
196
|
},
|
|
205
197
|
};
|
|
206
198
|
</script>
|
|
207
199
|
|
|
208
200
|
<style lang="scss" scoped>
|
|
209
201
|
@use '@/assets/scss/unnnic' as *;
|
|
210
|
-
* {
|
|
211
|
-
margin: 0;
|
|
212
|
-
padding: 0;
|
|
213
|
-
box-sizing: border-box;
|
|
214
|
-
}
|
|
215
|
-
.unnnic-modal-dialog {
|
|
216
|
-
width: 100vw;
|
|
217
|
-
height: 100vh;
|
|
218
|
-
position: fixed;
|
|
219
|
-
left: 0;
|
|
220
|
-
top: 0;
|
|
221
|
-
display: flex;
|
|
222
|
-
justify-content: center;
|
|
223
|
-
align-items: center;
|
|
224
|
-
z-index: 9999;
|
|
225
|
-
|
|
226
|
-
&__overlay {
|
|
227
|
-
position: absolute;
|
|
228
|
-
width: 100%;
|
|
229
|
-
height: 100%;
|
|
230
|
-
background-color: rgba(0, 0, 0, 0.4);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
202
|
.unnnic-modal-dialog__container {
|
|
235
|
-
display: flex;
|
|
236
|
-
background: $unnnic-color-neutral-white;
|
|
237
|
-
border-radius: $unnnic-spacing-xs;
|
|
238
|
-
box-shadow: $unnnic-shadow-level-near;
|
|
239
|
-
position: fixed;
|
|
240
|
-
max-height: calc(100vh - $unnnic-spacing-giant);
|
|
241
|
-
overflow: hidden;
|
|
242
|
-
|
|
243
|
-
&--sm {
|
|
244
|
-
width: 400px;
|
|
245
|
-
}
|
|
246
|
-
&--md {
|
|
247
|
-
width: 600px;
|
|
248
|
-
}
|
|
249
|
-
&--lg {
|
|
250
|
-
width: 800px;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
203
|
&__left-sidebar {
|
|
254
204
|
background-color: $unnnic-color-neutral-black;
|
|
255
205
|
color: $unnnic-color-neutral-white;
|
|
206
|
+
|
|
207
|
+
grid-area: left-sidebar;
|
|
208
|
+
grid-row: span 3;
|
|
256
209
|
}
|
|
257
210
|
|
|
258
211
|
&__body {
|
|
259
212
|
flex: 1;
|
|
260
213
|
display: flex;
|
|
261
214
|
flex-direction: column;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
&__header {
|
|
265
|
-
display: flex;
|
|
266
|
-
justify-content: space-between;
|
|
267
|
-
align-items: center;
|
|
268
|
-
border-bottom: 1px solid $unnnic-color-neutral-soft;
|
|
269
|
-
padding: $unnnic-spacing-md;
|
|
270
|
-
flex-shrink: 0;
|
|
271
|
-
}
|
|
272
215
|
|
|
273
|
-
|
|
274
|
-
display: flex;
|
|
275
|
-
align-items: center;
|
|
276
|
-
gap: $unnnic-spacing-ant;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
&__title-icon {
|
|
280
|
-
font-size: 28px;
|
|
281
|
-
}
|
|
216
|
+
overflow-y: auto;
|
|
282
217
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
218
|
+
&--left-sidebar {
|
|
219
|
+
border-radius: $unnnic-radius-4 0 0 $unnnic-radius-4;
|
|
220
|
+
display: grid;
|
|
221
|
+
grid-template-columns: auto 1fr;
|
|
222
|
+
grid-template-areas: 'left-sidebar content';
|
|
223
|
+
}
|
|
289
224
|
}
|
|
290
225
|
|
|
291
226
|
&__content {
|
|
@@ -309,26 +244,5 @@ export default {
|
|
|
309
244
|
border-radius: $unnnic-border-radius-pill;
|
|
310
245
|
}
|
|
311
246
|
}
|
|
312
|
-
|
|
313
|
-
&__actions {
|
|
314
|
-
display: grid;
|
|
315
|
-
grid-template-columns: 1fr 1fr;
|
|
316
|
-
grid-template-areas: 'secondary-button primary-button';
|
|
317
|
-
gap: $unnnic-spacing-sm;
|
|
318
|
-
padding: $unnnic-spacing-md;
|
|
319
|
-
flex-shrink: 0;
|
|
320
|
-
|
|
321
|
-
&--divider {
|
|
322
|
-
border-top: 1px solid $unnnic-color-neutral-soft;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
&__secondary-button {
|
|
326
|
-
grid-area: secondary-button;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
&__primary-button {
|
|
330
|
-
grid-area: primary-button;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
247
|
}
|
|
334
248
|
</style>
|
|
@@ -1,24 +1,3 @@
|
|
|
1
1
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
|
-
exports[`ModalDialog.vue > Elements rendering > matches the snapshot 1`] = `
|
|
4
|
-
"<section data-v-68ebadeb="" class="unnnic-modal-dialog" data-testid="modal-dialog">
|
|
5
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__overlay" data-testid="modal-overlay"></section>
|
|
6
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__container unnnic-modal-dialog__container--md" data-testid="modal-container">
|
|
7
|
-
<!--v-if-->
|
|
8
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__container__body">
|
|
9
|
-
<header data-v-68ebadeb="" class="unnnic-modal-dialog__container__header">
|
|
10
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__container__title-container">
|
|
11
|
-
<unnnic-icon-stub data-v-68ebadeb="" filled="false" icon="test-icon" clickable="false" size="md" scheme="neutral-darkest" data-testid="title-icon" class="unnnic-modal-dialog__container__title-icon"></unnnic-icon-stub>
|
|
12
|
-
<h1 data-v-68ebadeb="" class="unnnic-modal-dialog__container__title-text" data-testid="title-text">Test Title</h1>
|
|
13
|
-
</section>
|
|
14
|
-
<unnnic-icon-stub data-v-68ebadeb="" filled="false" icon="close" clickable="true" size="md" scheme="neutral-cloudy" data-testid="close-icon"></unnnic-icon-stub>
|
|
15
|
-
</header>
|
|
16
|
-
<section data-v-68ebadeb="" class="unnnic-modal-dialog__container__content"></section>
|
|
17
|
-
<section data-v-68ebadeb="" data-testid="actions-section" class="unnnic-modal-dialog__container__actions">
|
|
18
|
-
<unnnic-button-stub data-v-68ebadeb="" size="large" text="Cancel" type="tertiary" float="false" iconleft="" iconright="" iconcenter="" iconsfilled="false" disabled="false" loading="false" data-testid="secondary-button" class="unnnic-modal-dialog__container__actions__secondary-button"></unnnic-button-stub>
|
|
19
|
-
<unnnic-button-stub data-v-68ebadeb="" size="large" text="Confirm" type="primary" float="false" iconleft="" iconright="" iconcenter="" iconsfilled="false" disabled="false" loading="false" data-testid="primary-button" class="unnnic-modal-dialog__container__actions__primary-button"></unnnic-button-stub>
|
|
20
|
-
</section>
|
|
21
|
-
</section>
|
|
22
|
-
</section>
|
|
23
|
-
</section>"
|
|
24
|
-
`;
|
|
3
|
+
exports[`ModalDialog.vue > Elements rendering > matches the snapshot 1`] = `"<unnnic-dialog-stub data-v-68ebadeb="" open="true" defaultopen="false" modal="false" data-testid="modal-dialog"></unnnic-dialog-stub>"`;
|
package/src/components/index.ts
CHANGED
|
@@ -98,6 +98,13 @@ import { toast } from './Toast/ToastManager';
|
|
|
98
98
|
import Popover from './ui/popover/Popover.vue';
|
|
99
99
|
import PopoverContent from './ui/popover/PopoverContent.vue';
|
|
100
100
|
import PopoverTrigger from './ui/popover/PopoverTrigger.vue';
|
|
101
|
+
import Dialog from './ui/dialog/Dialog.vue';
|
|
102
|
+
import DialogContent from './ui/dialog/DialogContent.vue';
|
|
103
|
+
import DialogFooter from './ui/dialog/DialogFooter.vue';
|
|
104
|
+
import DialogHeader from './ui/dialog/DialogHeader.vue';
|
|
105
|
+
import DialogTitle from './ui/dialog/DialogTitle.vue';
|
|
106
|
+
import DialogTrigger from './ui/dialog/DialogTrigger.vue';
|
|
107
|
+
import DialogClose from './ui/dialog/DialogClose.vue';
|
|
101
108
|
|
|
102
109
|
type VueComponent = Component;
|
|
103
110
|
|
|
@@ -206,6 +213,13 @@ export const components: ComponentsMap = {
|
|
|
206
213
|
unnnicPopover: Popover,
|
|
207
214
|
unnnicPopoverContent: PopoverContent,
|
|
208
215
|
unnnicPopoverTrigger: PopoverTrigger,
|
|
216
|
+
unnnicDialog: Dialog,
|
|
217
|
+
unnnicDialogContent: DialogContent,
|
|
218
|
+
unnnicDialogFooter: DialogFooter,
|
|
219
|
+
unnnicDialogHeader: DialogHeader,
|
|
220
|
+
unnnicDialogTitle: DialogTitle,
|
|
221
|
+
unnnicDialogTrigger: DialogTrigger,
|
|
222
|
+
unnnicDialogClose: DialogClose,
|
|
209
223
|
};
|
|
210
224
|
|
|
211
225
|
export const unnnicFontSize = fontSize;
|
|
@@ -307,6 +321,13 @@ export const unnnicChip = Chip;
|
|
|
307
321
|
export const unnnicPopover = Popover;
|
|
308
322
|
export const unnnicPopoverContent = PopoverContent;
|
|
309
323
|
export const unnnicPopoverTrigger = PopoverTrigger;
|
|
324
|
+
export const unnnicDialog = Dialog;
|
|
325
|
+
export const unnnicDialogContent = DialogContent;
|
|
326
|
+
export const unnnicDialogFooter = DialogFooter;
|
|
327
|
+
export const unnnicDialogHeader = DialogHeader;
|
|
328
|
+
export const unnnicDialogTitle = DialogTitle;
|
|
329
|
+
export const unnnicDialogTrigger = DialogTrigger;
|
|
330
|
+
export const unnnicDialogClose = DialogClose;
|
|
310
331
|
|
|
311
332
|
export const UnnnicFontSize = fontSize;
|
|
312
333
|
export const UnnnicInput = input;
|
|
@@ -408,3 +429,10 @@ export const UnnnicToastManager = toast;
|
|
|
408
429
|
export const UnnnicPopover = Popover;
|
|
409
430
|
export const UnnnicPopoverContent = PopoverContent;
|
|
410
431
|
export const UnnnicPopoverTrigger = PopoverTrigger;
|
|
432
|
+
export const UnnnicDialog = Dialog;
|
|
433
|
+
export const UnnnicDialogContent = DialogContent;
|
|
434
|
+
export const UnnnicDialogFooter = DialogFooter;
|
|
435
|
+
export const UnnnicDialogHeader = DialogHeader;
|
|
436
|
+
export const UnnnicDialogTitle = DialogTitle;
|
|
437
|
+
export const UnnnicDialogTrigger = DialogTrigger;
|
|
438
|
+
export const UnnnicDialogClose = DialogClose;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { DialogRootEmits, DialogRootProps } from 'reka-ui';
|
|
3
|
+
import { DialogRoot, useForwardPropsEmits } from 'reka-ui';
|
|
4
|
+
|
|
5
|
+
const props = defineProps<DialogRootProps>();
|
|
6
|
+
const emits = defineEmits<DialogRootEmits>();
|
|
7
|
+
|
|
8
|
+
const forwarded = useForwardPropsEmits(props, emits);
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<DialogRoot v-bind="forwarded">
|
|
13
|
+
<slot />
|
|
14
|
+
</DialogRoot>
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { DialogCloseProps } from 'reka-ui';
|
|
3
|
+
import { DialogClose } from 'reka-ui';
|
|
4
|
+
|
|
5
|
+
const props = defineProps<DialogCloseProps>();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<template>
|
|
9
|
+
<DialogClose
|
|
10
|
+
class="unnnic-dialog-close"
|
|
11
|
+
v-bind="props"
|
|
12
|
+
>
|
|
13
|
+
<slot />
|
|
14
|
+
</DialogClose>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<style lang="scss" scoped>
|
|
18
|
+
@use '@/assets/scss/unnnic' as *;
|
|
19
|
+
|
|
20
|
+
.unnnic-dialog-close {
|
|
21
|
+
> * {
|
|
22
|
+
width: 100%;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
</style>
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { DialogContentEmits, DialogContentProps } from 'reka-ui';
|
|
3
|
+
import type { HTMLAttributes } from 'vue';
|
|
4
|
+
import { reactiveOmit } from '@vueuse/core';
|
|
5
|
+
import {
|
|
6
|
+
DialogContent,
|
|
7
|
+
DialogOverlay,
|
|
8
|
+
DialogPortal,
|
|
9
|
+
useForwardPropsEmits,
|
|
10
|
+
} from 'reka-ui';
|
|
11
|
+
import { cn } from '@/lib/utils';
|
|
12
|
+
|
|
13
|
+
const props = withDefaults(
|
|
14
|
+
defineProps<
|
|
15
|
+
DialogContentProps & {
|
|
16
|
+
class?: HTMLAttributes['class'];
|
|
17
|
+
size?: 'small' | 'medium' | 'large';
|
|
18
|
+
}
|
|
19
|
+
>(),
|
|
20
|
+
{
|
|
21
|
+
size: 'medium',
|
|
22
|
+
},
|
|
23
|
+
);
|
|
24
|
+
const emits = defineEmits<DialogContentEmits>();
|
|
25
|
+
|
|
26
|
+
const delegatedProps = reactiveOmit(props, 'class');
|
|
27
|
+
|
|
28
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<template>
|
|
32
|
+
<DialogPortal>
|
|
33
|
+
<DialogOverlay
|
|
34
|
+
class="unnnic-dialog-overlay data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
|
|
35
|
+
/>
|
|
36
|
+
<DialogContent
|
|
37
|
+
v-bind="forwarded"
|
|
38
|
+
:class="
|
|
39
|
+
cn(
|
|
40
|
+
'unnnic-dialog-content',
|
|
41
|
+
`unnnic-dialog-content--size-${props.size}`,
|
|
42
|
+
'duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',
|
|
43
|
+
|
|
44
|
+
props.class,
|
|
45
|
+
)
|
|
46
|
+
"
|
|
47
|
+
>
|
|
48
|
+
<slot />
|
|
49
|
+
</DialogContent>
|
|
50
|
+
</DialogPortal>
|
|
51
|
+
</template>
|
|
52
|
+
|
|
53
|
+
<style lang="scss" scoped>
|
|
54
|
+
@use '@/assets/scss/unnnic' as *;
|
|
55
|
+
|
|
56
|
+
.unnnic-dialog-overlay {
|
|
57
|
+
position: fixed;
|
|
58
|
+
top: 0;
|
|
59
|
+
left: 0;
|
|
60
|
+
z-index: 9999;
|
|
61
|
+
|
|
62
|
+
width: 100vw;
|
|
63
|
+
height: 100vh;
|
|
64
|
+
background: rgba(53, 57, 69, 0.5);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.unnnic-dialog-content {
|
|
68
|
+
z-index: 10000;
|
|
69
|
+
|
|
70
|
+
position: fixed;
|
|
71
|
+
top: 50%;
|
|
72
|
+
left: 50%;
|
|
73
|
+
|
|
74
|
+
transform: translate(-50%, -50%);
|
|
75
|
+
|
|
76
|
+
width: 100%;
|
|
77
|
+
max-height: calc(100% - $unnnic-space-20);
|
|
78
|
+
|
|
79
|
+
display: flex;
|
|
80
|
+
flex-direction: column;
|
|
81
|
+
|
|
82
|
+
box-shadow: $unnnic-shadow-2;
|
|
83
|
+
border-radius: $unnnic-radius-4;
|
|
84
|
+
background-color: $unnnic-color-bg-base;
|
|
85
|
+
|
|
86
|
+
&--size-small {
|
|
87
|
+
max-width: 360px;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
&--size-medium {
|
|
91
|
+
max-width: 560px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
&--size-large {
|
|
95
|
+
max-width: 800px;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
> * {
|
|
99
|
+
&::-webkit-scrollbar {
|
|
100
|
+
width: $unnnic-spacing-inline-nano;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
&::-webkit-scrollbar-thumb {
|
|
104
|
+
background: $unnnic-color-neutral-cleanest;
|
|
105
|
+
border-radius: $unnnic-border-radius-pill;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
&::-webkit-scrollbar-track {
|
|
109
|
+
background: $unnnic-color-neutral-soft;
|
|
110
|
+
border-radius: $unnnic-border-radius-pill;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
</style>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from 'vue';
|
|
3
|
+
import { cn } from '@/lib/utils';
|
|
4
|
+
|
|
5
|
+
const props = withDefaults(
|
|
6
|
+
defineProps<{ class?: HTMLAttributes['class']; divider?: boolean }>(),
|
|
7
|
+
{
|
|
8
|
+
divider: true,
|
|
9
|
+
},
|
|
10
|
+
);
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<footer
|
|
15
|
+
:class="
|
|
16
|
+
cn(
|
|
17
|
+
'unnnic-dialog-footer',
|
|
18
|
+
{ 'unnnic-dialog-footer--with-divider': props.divider },
|
|
19
|
+
props.class,
|
|
20
|
+
)
|
|
21
|
+
"
|
|
22
|
+
>
|
|
23
|
+
<slot />
|
|
24
|
+
</footer>
|
|
25
|
+
</template>
|
|
26
|
+
|
|
27
|
+
<style lang="scss" scoped>
|
|
28
|
+
@use '@/assets/scss/unnnic' as *;
|
|
29
|
+
|
|
30
|
+
.unnnic-dialog-footer {
|
|
31
|
+
display: flex;
|
|
32
|
+
justify-content: center;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: $unnnic-space-2;
|
|
35
|
+
|
|
36
|
+
padding: $unnnic-space-6;
|
|
37
|
+
|
|
38
|
+
&--with-divider {
|
|
39
|
+
border-top: 1px solid $unnnic-color-border-soft;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
> * {
|
|
43
|
+
width: 100%;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
</style>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from 'vue';
|
|
3
|
+
import { cn } from '@/lib/utils';
|
|
4
|
+
import UnnnicButton from '@/components/Button/Button.vue';
|
|
5
|
+
import DialogClose from './DialogClose.vue';
|
|
6
|
+
import UnnnicIcon, { SchemeColor } from '@/components/Icon.vue';
|
|
7
|
+
|
|
8
|
+
const props = withDefaults(
|
|
9
|
+
defineProps<{
|
|
10
|
+
class?: HTMLAttributes['class'];
|
|
11
|
+
divider?: boolean;
|
|
12
|
+
type?: 'default' | 'success' | 'warning' | 'attention';
|
|
13
|
+
closeButton?: boolean;
|
|
14
|
+
}>(),
|
|
15
|
+
{
|
|
16
|
+
divider: true,
|
|
17
|
+
closeButton: true,
|
|
18
|
+
type: 'default',
|
|
19
|
+
},
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const iconsMapper = {
|
|
23
|
+
default: { icon: '', scheme: '' as SchemeColor },
|
|
24
|
+
success: { icon: 'check_circle', scheme: 'aux-green-500' as SchemeColor },
|
|
25
|
+
warning: { icon: 'warning', scheme: 'aux-red-500' as SchemeColor },
|
|
26
|
+
attention: { icon: 'error', scheme: 'aux-yellow-500' as SchemeColor },
|
|
27
|
+
};
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<template>
|
|
31
|
+
<header
|
|
32
|
+
:class="
|
|
33
|
+
cn(
|
|
34
|
+
'unnnic-dialog-header',
|
|
35
|
+
{ 'unnnic-dialog-header--with-divider': props.divider },
|
|
36
|
+
props.class,
|
|
37
|
+
)
|
|
38
|
+
"
|
|
39
|
+
>
|
|
40
|
+
<UnnnicIcon
|
|
41
|
+
v-if="iconsMapper[props.type]?.icon"
|
|
42
|
+
:icon="iconsMapper[props.type]?.icon"
|
|
43
|
+
:scheme="iconsMapper[props.type]?.scheme"
|
|
44
|
+
size="md"
|
|
45
|
+
/>
|
|
46
|
+
<slot />
|
|
47
|
+
|
|
48
|
+
<DialogClose
|
|
49
|
+
v-if="props.closeButton"
|
|
50
|
+
class="unnnic-dialog-header__close"
|
|
51
|
+
>
|
|
52
|
+
<UnnnicButton
|
|
53
|
+
type="tertiary"
|
|
54
|
+
iconCenter="close"
|
|
55
|
+
/>
|
|
56
|
+
</DialogClose>
|
|
57
|
+
</header>
|
|
58
|
+
</template>
|
|
59
|
+
|
|
60
|
+
<style lang="scss" scoped>
|
|
61
|
+
@use '@/assets/scss/unnnic' as *;
|
|
62
|
+
|
|
63
|
+
.unnnic-dialog-header {
|
|
64
|
+
display: flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
gap: $unnnic-space-2;
|
|
67
|
+
|
|
68
|
+
padding: $unnnic-space-6;
|
|
69
|
+
|
|
70
|
+
&--with-divider {
|
|
71
|
+
border-bottom: 1px solid $unnnic-color-border-soft;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&__close {
|
|
75
|
+
margin-left: auto;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
</style>
|