@weni/unnnic-system 2.0.31 → 2.1.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weni/unnnic-system",
3
- "version": "2.0.31",
3
+ "version": "2.1.0",
4
4
  "type": "commonjs",
5
5
  "files": [
6
6
  "dist",
Binary file
@@ -0,0 +1,286 @@
1
+ <template>
2
+ <section
3
+ v-if="modelValue"
4
+ class="unnnic-modal-dialog"
5
+ >
6
+ <section
7
+ class="unnnic-modal-dialog__overlay"
8
+ @click.stop="!persistent && close()"
9
+ />
10
+ <section
11
+ :class="[
12
+ 'unnnic-modal-dialog__container',
13
+ `unnnic-modal-dialog__container--${size}`,
14
+ ]"
15
+ >
16
+ <header
17
+ v-if="title"
18
+ class="unnnic-modal-dialog__container__header"
19
+ >
20
+ <section class="unnnic-modal-dialog__container__title-container">
21
+ <UnnnicIcon
22
+ v-if="icon || type"
23
+ class="unnnic-modal-dialog__container__title-icon"
24
+ :icon="icon || iconsMapper[type]?.icon"
25
+ :scheme="iconScheme || iconsMapper[type]?.scheme"
26
+ size="md"
27
+ />
28
+ <h1 class="unnnic-modal-dialog__container__title-text">
29
+ {{ title }}
30
+ </h1>
31
+ </section>
32
+ <UnnnicIcon
33
+ v-if="showCloseIcon"
34
+ icon="close"
35
+ clickable
36
+ @click="close()"
37
+ />
38
+ </header>
39
+ <section class="unnnic-modal-dialog__container__content">
40
+ <slot></slot>
41
+ </section>
42
+ <section
43
+ v-if="primaryButtonText"
44
+ :class="[
45
+ 'unnnic-modal-dialog__container__actions',
46
+ {
47
+ 'unnnic-modal-dialog__container__actions--divider':
48
+ showActionsDivider,
49
+ },
50
+ ]"
51
+ >
52
+ <UnnnicButton
53
+ type="tertiary"
54
+ :text="secondaryButtonText || i18n('cancel')"
55
+ @click.stop="
56
+ secondaryButtonText ? $emit('secondaryButtonClick') : close()
57
+ "
58
+ />
59
+ <UnnnicButton
60
+ :type="
61
+ primaryButtonType || primaryButtonTypeMapper[type] || 'primary'
62
+ "
63
+ :text="primaryButtonText"
64
+ @click.stop="$emit('primaryButtonClick')"
65
+ />
66
+ </section>
67
+ </section>
68
+ </section>
69
+ </template>
70
+
71
+ <script>
72
+ import UnnnicIcon from '../Icon.vue';
73
+ import UnnnicButton from '../Button/Button.vue';
74
+ import UnnnicI18n from '../../mixins/i18n';
75
+
76
+ export default {
77
+ name: 'UnnnicModalDialog',
78
+ components: {
79
+ UnnnicIcon,
80
+ UnnnicButton,
81
+ },
82
+ mixins: [UnnnicI18n],
83
+ props: {
84
+ modelValue: {
85
+ type: Boolean,
86
+ required: true,
87
+ },
88
+ persistent: {
89
+ type: Boolean,
90
+ default: false,
91
+ },
92
+ type: {
93
+ type: String,
94
+ default: '',
95
+ validate(type) {
96
+ return ['success', 'warning', 'attention'].includes(type);
97
+ },
98
+ },
99
+ size: {
100
+ type: String,
101
+ default: 'md',
102
+ validate(size) {
103
+ return ['sm', 'md', 'lg'].includes(size);
104
+ },
105
+ },
106
+ title: {
107
+ type: String,
108
+ default: 'title',
109
+ },
110
+ icon: {
111
+ type: String,
112
+ default: '',
113
+ },
114
+ iconScheme: {
115
+ type: String,
116
+ default: '',
117
+ },
118
+ showCloseIcon: {
119
+ type: Boolean,
120
+ default: false,
121
+ },
122
+ primaryButtonText: {
123
+ type: String,
124
+ default: '',
125
+ },
126
+ secondaryButtonText: {
127
+ type: String,
128
+ default: '',
129
+ },
130
+ primaryButtonType: {
131
+ type: String,
132
+ default: '',
133
+ },
134
+ showActionsDivider: {
135
+ type: Boolean,
136
+ default: false,
137
+ },
138
+ },
139
+ emits: ['primaryButtonClick', 'secondaryButtonClick', 'update:modelValue'],
140
+
141
+ data() {
142
+ return {
143
+ defaultTranslations: {
144
+ cancel: {
145
+ 'pt-br': 'Cancelar',
146
+ en: 'Cancel',
147
+ es: 'Cancelar',
148
+ },
149
+ },
150
+ iconsMapper: {
151
+ success: { icon: 'check_circle', scheme: 'aux-green-500' },
152
+ warning: { icon: 'warning', scheme: 'aux-red-500' },
153
+ attention: { icon: 'error', scheme: 'aux-yellow-500' },
154
+ },
155
+ primaryButtonTypeMapper: {
156
+ success: 'primary',
157
+ warning: 'warning',
158
+ attention: 'attention',
159
+ },
160
+ };
161
+ },
162
+ watch: {
163
+ modelValue(value) {
164
+ this.updateBodyOverflow(value);
165
+ },
166
+ },
167
+ methods: {
168
+ close() {
169
+ this.$emit('update:modelValue', false);
170
+ },
171
+ updateBodyOverflow(isHidden) {
172
+ document.body.style.overflow = isHidden ? 'hidden' : '';
173
+ },
174
+ },
175
+ };
176
+ </script>
177
+
178
+ <style lang="scss" scoped>
179
+ @import '../../assets/scss/unnnic.scss';
180
+ * {
181
+ margin: 0;
182
+ padding: 0;
183
+ box-sizing: border-box;
184
+ }
185
+ .unnnic-modal-dialog {
186
+ width: 100vw;
187
+ height: 100vh;
188
+ position: fixed;
189
+ left: 0;
190
+ top: 0;
191
+ display: flex;
192
+ justify-content: center;
193
+ align-items: center;
194
+ z-index: 9999;
195
+
196
+ &__overlay {
197
+ position: absolute;
198
+ width: 100%;
199
+ height: 100%;
200
+ background-color: rgba(0, 0, 0, 0.4);
201
+ }
202
+ }
203
+
204
+ .unnnic-modal-dialog__container {
205
+ display: flex;
206
+ flex-direction: column;
207
+ background: $unnnic-color-neutral-white;
208
+ border-radius: $unnnic-spacing-xs;
209
+ box-shadow: $unnnic-shadow-level-near;
210
+ position: fixed;
211
+ max-height: calc(100vh - $unnnic-spacing-giant);
212
+ overflow: hidden;
213
+
214
+ &--sm {
215
+ width: 400px;
216
+ }
217
+ &--md {
218
+ width: 600px;
219
+ }
220
+ &--lg {
221
+ width: 800px;
222
+ }
223
+
224
+ &__header {
225
+ display: flex;
226
+ justify-content: space-between;
227
+ align-items: center;
228
+ border-bottom: 1px solid $unnnic-color-neutral-soft;
229
+ padding: $unnnic-spacing-md;
230
+ flex-shrink: 0;
231
+ }
232
+
233
+ &__title-container {
234
+ display: flex;
235
+ align-items: center;
236
+ gap: $unnnic-spacing-ant;
237
+ }
238
+
239
+ &__title-icon {
240
+ font-size: 28px;
241
+ }
242
+
243
+ &__title-text {
244
+ font-family: $unnnic-font-family-secondary;
245
+ font-size: $unnnic-font-size-title-sm;
246
+ font-weight: $unnnic-font-weight-black;
247
+ line-height: 28px;
248
+ color: $unnnic-color-neutral-darkest;
249
+ }
250
+
251
+ &__content {
252
+ padding: $unnnic-spacing-md;
253
+ color: $unnnic-color-neutral-cloudy;
254
+ flex-grow: 1;
255
+ overflow-y: auto;
256
+ font-family: $unnnic-font-family-secondary;
257
+
258
+ &::-webkit-scrollbar {
259
+ width: $unnnic-spacing-inline-nano;
260
+ }
261
+
262
+ &::-webkit-scrollbar-thumb {
263
+ background: $unnnic-color-neutral-cleanest;
264
+ border-radius: $unnnic-border-radius-pill;
265
+ }
266
+
267
+ &::-webkit-scrollbar-track {
268
+ background: $unnnic-color-neutral-soft;
269
+ border-radius: $unnnic-border-radius-pill;
270
+ }
271
+ }
272
+
273
+ &__actions {
274
+ display: flex;
275
+ gap: $unnnic-spacing-sm;
276
+ padding: $unnnic-spacing-md;
277
+ flex-shrink: 0;
278
+ > * {
279
+ flex-grow: 1;
280
+ }
281
+ &--divider {
282
+ border-top: 1px solid $unnnic-color-neutral-soft;
283
+ }
284
+ }
285
+ }
286
+ </style>
@@ -81,6 +81,7 @@ import Disclaimer from './Disclaimer/Disclaimer.vue';
81
81
  import Drawer from './Drawer/Drawer.vue';
82
82
  import TableNext from './TableNext/TableNext.vue';
83
83
  import ModalNext from './ModalNext/ModalNext.vue';
84
+ import ModalDialog from './ModalDialog/ModalDialog.vue';
84
85
 
85
86
  export const components = {
86
87
  unnnicFormElement: formElement,
@@ -114,6 +115,7 @@ export const components = {
114
115
  unnnicLanguageSelect: languageSelect,
115
116
  unnnicModal: modal,
116
117
  unnnicModalNext: ModalNext,
118
+ unnnicModalDialog: ModalDialog,
117
119
  unnnicModalUpload: modalUpload,
118
120
  unnnicSelectSmart: selectSmart,
119
121
  // unnnicSelect: select,
@@ -200,6 +202,7 @@ export const unnnicCollapse = collapse;
200
202
  export const unnnicRadio = radio;
201
203
  export const unnniclanguageSelect = languageSelect;
202
204
  export const unnnicModal = modal;
205
+ export const unnnicModalDialog = ModalDialog;
203
206
  export const unnnicModalNext = ModalNext;
204
207
  export const unnnicModalUpload = modalUpload;
205
208
  export const unnnicSelectSmart = selectSmart;
@@ -0,0 +1,64 @@
1
+ import { Meta, Source, Story } from '@storybook/blocks';
2
+
3
+ import * as ModalDialogStories from './ModalDialog.stories';
4
+
5
+ <Meta of={ModalDialogStories}/>
6
+
7
+ # ModalDialog
8
+
9
+ The ModalDialog was designed to inform the user about a specific task, request information, or involve other tasks.
10
+
11
+ <Source
12
+ language='html'
13
+ dark
14
+ code={`
15
+ <UnnnicModalDialog v-model="showModal">
16
+ <p>Modal Content</p>
17
+ </UnnnicModalDialog>
18
+ `}
19
+ />
20
+
21
+ ---
22
+
23
+ #### **Props Options:**
24
+
25
+ | Key | Description | Values | Default |
26
+ |---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------|---------|
27
+ | type | Modal type predefinition | 'success' \| 'warning' \| 'attention' | '' |
28
+ | persistent | Clicking outside of the element will not deactive it | true \| false | false |
29
+ | size | Modal width size (sm = 400px; md = 600px; lg = 800px) | 'sm' \| 'md' \| 'lg' | 'md' |
30
+ | title | Modal card title (if not provided, the title section will not be displayed) | string | '' |
31
+ | icon | Custom title section icon (if not provided, the preset icons will be considered according to the chosen modal type) | string | '' |
32
+ | iconScheme | Custom scheme color to icon in title section (if not provided, the preset scheme color will be considered according to the chosen modal type) | string | '' |
33
+ | showCloseIcon | Show close icon in title section | boolean | false |
34
+ | primaryButtonText | Button primary action text (if not provided, the actions section will not be displayed) | string | '' |
35
+ | secondaryButtonText | Button secondary action text (if not provided and there is primaryButtonText, this button will take 'Cancel' action | string | '' |
36
+ | primaryButtonType | Button primary type (if not provided, defaults to the specified type) | string | '' |
37
+ | showActionsDivider | Show divider in between actions and dialog content | boolean | false |
38
+
39
+ ## Examples
40
+ Some examples of uses of the modal
41
+
42
+ ### Default
43
+
44
+ <Story of={ModalDialogStories.Default} />
45
+
46
+ ### Warning
47
+
48
+ <Story of={ModalDialogStories.Warning} />
49
+
50
+ ### Attention
51
+
52
+ <Story of={ModalDialogStories.Attention} />
53
+
54
+ ### Overflowed Content
55
+
56
+ <Story of={ModalDialogStories.Overflowed} />
57
+
58
+ ### Form Content
59
+
60
+ <Story of={ModalDialogStories.Form} />
61
+
62
+ ### Image Content
63
+
64
+ <Story of={ModalDialogStories.Image} />
@@ -0,0 +1,208 @@
1
+ import UnnnicModalDialog from '../components/ModalDialog/ModalDialog.vue';
2
+ import UnnnicInput from '../components/Input/Input.vue';
3
+ import UnnnicLabel from '../components/Label/Label.vue';
4
+ import { action } from '@storybook/addon-actions';
5
+ import iconsList from '../utils/iconList';
6
+ import colorsList from '../utils/colorsList';
7
+
8
+ export default {
9
+ title: 'Example/ModalDialog',
10
+ component: UnnnicModalDialog,
11
+ argTypes: {
12
+ type: {
13
+ control: {
14
+ type: 'select',
15
+ },
16
+ options: ['', 'success', 'warning', 'attention'],
17
+ },
18
+ size: {
19
+ control: { type: 'select' },
20
+ options: ['sm', 'md', 'lg'],
21
+ },
22
+ icon: { options: ['', ...iconsList], control: { type: 'select' } },
23
+ iconScheme: { control: { type: 'select' }, options: ['', ...colorsList] },
24
+ title: { control: 'text' },
25
+ showCloseIcon: { control: 'boolean' },
26
+ primaryButtonText: { control: 'text' },
27
+ secondaryButtonText: { control: 'text' },
28
+ primaryButtonType: {
29
+ control: { type: 'select' },
30
+ options: [
31
+ '',
32
+ 'primary',
33
+ 'secondary',
34
+ 'tertiary',
35
+ 'alternative',
36
+ 'warning',
37
+ 'attention',
38
+ ],
39
+ },
40
+ showActionsDivider: { control: 'boolean' },
41
+ persistent: { control: 'boolean' },
42
+ },
43
+ args: {
44
+ modelValue: false,
45
+ title: 'Default Modal',
46
+ type: '',
47
+ size: 'md',
48
+ showCloseIcon: true,
49
+ primaryButtonText: 'OK',
50
+ },
51
+ };
52
+
53
+ const Template = (args) => ({
54
+ components: { UnnnicModalDialog },
55
+ setup() {
56
+ const updateModelValue = (value) => {
57
+ action('update:modelValue')(value);
58
+ args.modelValue = value;
59
+ };
60
+ return { args, updateModelValue };
61
+ },
62
+ template: `
63
+ <div>
64
+ <button @click="updateModelValue(true)">Open Modal</button>
65
+ <unnnic-modal-dialog v-bind="args" @primaryButtonClick="primaryButtonClick" @secondaryButtonClick="secondaryButtonClick" @update:modelValue="updateModelValue">
66
+ <template v-slot>Slot content here</template>
67
+ </unnnic-modal-dialog>
68
+ </div>
69
+ `,
70
+ methods: {
71
+ primaryButtonClick: action('primaryButtonClick'),
72
+ secondaryButtonClick: action('secondaryButtonClick'),
73
+ },
74
+ });
75
+
76
+ const TemplateOverflowed = (args) => ({
77
+ components: { UnnnicModalDialog },
78
+ setup() {
79
+ const updateModelValue = (value) => {
80
+ action('update:modelValue')(value);
81
+ args.modelValue = value;
82
+ };
83
+ return { args, updateModelValue };
84
+ },
85
+ template: `
86
+ <div>
87
+ <button @click="updateModelValue(true)">Open Modal</button>
88
+ <unnnic-modal-dialog v-bind="args" @primaryButtonClick="primaryButtonClick" @secondaryButtonClick="secondaryButtonClick" @update:modelValue="updateModelValue">
89
+ <p style="margin: 0;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non gravida velit. Mauris feugiat bibendum elit, ac semper tortor tempor quis. Maecenas ullamcorper condimentum ligula. Proin a rutrum enim. Nulla egestas porttitor congue. Suspendisse maximus, ante finibus aliquet hendrerit, metus nulla eleifend justo, et venenatis augue justo id ligula. Aenean convallis massa ligula, at scelerisque metus elementum at. Nulla facilisi. Integer imperdiet bibendum hendrerit. Etiam lobortis congue commodo. In dapibus odio sapien, ac volutpat lorem porta at.</p>
90
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non gravida velit. Mauris feugiat bibendum elit, ac semper tortor tempor quis. Maecenas ullamcorper condimentum ligula. Proin a rutrum enim. Nulla egestas porttitor congue. Suspendisse maximus, ante finibus aliquet hendrerit, metus nulla eleifend justo, et venenatis augue justo id ligula. Aenean convallis massa ligula, at scelerisque metus elementum at. Nulla facilisi. Integer imperdiet bibendum hendrerit. Etiam lobortis congue commodo. In dapibus odio sapien, ac volutpat lorem porta at.</p>
91
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non gravida velit. Mauris feugiat bibendum elit, ac semper tortor tempor quis. Maecenas ullamcorper condimentum ligula. Proin a rutrum enim. Nulla egestas porttitor congue. Suspendisse maximus, ante finibus aliquet hendrerit, metus nulla eleifend justo, et venenatis augue justo id ligula. Aenean convallis massa ligula, at scelerisque metus elementum at. Nulla facilisi. Integer imperdiet bibendum hendrerit. Etiam lobortis congue commodo. In dapibus odio sapien, ac volutpat lorem porta at.</p>
92
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non gravida velit. Mauris feugiat bibendum elit, ac semper tortor tempor quis. Maecenas ullamcorper condimentum ligula. Proin a rutrum enim. Nulla egestas porttitor congue. Suspendisse maximus, ante finibus aliquet hendrerit, metus nulla eleifend justo, et venenatis augue justo id ligula. Aenean convallis massa ligula, at scelerisque metus elementum at. Nulla facilisi. Integer imperdiet bibendum hendrerit. Etiam lobortis congue commodo. In dapibus odio sapien, ac volutpat lorem porta at.</p>
93
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non gravida velit. Mauris feugiat bibendum elit, ac semper tortor tempor quis. Maecenas ullamcorper condimentum ligula. Proin a rutrum enim. Nulla egestas porttitor congue. Suspendisse maximus, ante finibus aliquet hendrerit, metus nulla eleifend justo, et venenatis augue justo id ligula. Aenean convallis massa ligula, at scelerisque metus elementum at. Nulla facilisi. Integer imperdiet bibendum hendrerit. Etiam lobortis congue commodo. In dapibus odio sapien, ac volutpat lorem porta at.</p>
94
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non gravida velit. Mauris feugiat bibendum elit, ac semper tortor tempor quis. Maecenas ullamcorper condimentum ligula. Proin a rutrum enim. Nulla egestas porttitor congue. Suspendisse maximus, ante finibus aliquet hendrerit, metus nulla eleifend justo, et venenatis augue justo id ligula. Aenean convallis massa ligula, at scelerisque metus elementum at. Nulla facilisi. Integer imperdiet bibendum hendrerit. Etiam lobortis congue commodo. In dapibus odio sapien, ac volutpat lorem porta at.</p>
95
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non gravida velit. Mauris feugiat bibendum elit, ac semper tortor tempor quis. Maecenas ullamcorper condimentum ligula. Proin a rutrum enim. Nulla egestas porttitor congue. Suspendisse maximus, ante finibus aliquet hendrerit, metus nulla eleifend justo, et venenatis augue justo id ligula. Aenean convallis massa ligula, at scelerisque metus elementum at. Nulla facilisi. Integer imperdiet bibendum hendrerit. Etiam lobortis congue commodo. In dapibus odio sapien, ac volutpat lorem porta at.</p>
96
+ </unnnic-modal-dialog>
97
+ </div>
98
+ `,
99
+ methods: {
100
+ primaryButtonClick: action('primaryButtonClick'),
101
+ secondaryButtonClick: action('secondaryButtonClick'),
102
+ },
103
+ });
104
+
105
+ const TemplateForm = (args) => ({
106
+ components: { UnnnicModalDialog, UnnnicLabel, UnnnicInput },
107
+ setup() {
108
+ const updateModelValue = (value) => {
109
+ action('update:modelValue')(value);
110
+ args.modelValue = value;
111
+ };
112
+ return { args, updateModelValue };
113
+ },
114
+ template: `
115
+ <div>
116
+ <button @click="updateModelValue(true)">Open Modal</button>
117
+ <unnnic-modal-dialog v-bind="args" @primaryButtonClick="primaryButtonClick" @secondaryButtonClick="secondaryButtonClick" @update:modelValue="updateModelValue">
118
+ <p style="margin-top: 0;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris non gravida velit. Mauris feugiat bibendum elit, ac semper tortor tempor quis.</p>
119
+ <form>
120
+ <UnnnicLabel label="Label"></UnnnicLabel>
121
+ <UnnnicInput placeholder="Placeholder"></UnnnicInput>
122
+ <UnnnicLabel label="Label"></UnnnicLabel>
123
+ <UnnnicInput placeholder="Placeholder"></UnnnicInput>
124
+ <UnnnicLabel label="Label"></UnnnicLabel>
125
+ <UnnnicInput placeholder="Placeholder"></UnnnicInput>
126
+ </form>
127
+ </unnnic-modal-dialog>
128
+ </div>
129
+ `,
130
+ methods: {
131
+ primaryButtonClick: action('primaryButtonClick'),
132
+ secondaryButtonClick: action('secondaryButtonClick'),
133
+ },
134
+ });
135
+
136
+ const TemplateImage = (args) => ({
137
+ components: { UnnnicModalDialog },
138
+ setup() {
139
+ const updateModelValue = (value) => {
140
+ action('update:modelValue')(value);
141
+ args.modelValue = value;
142
+ };
143
+ return { args, updateModelValue };
144
+ },
145
+ template: `
146
+ <div>
147
+ <button @click="updateModelValue(true)">Open Modal</button>
148
+ <unnnic-modal-dialog v-bind="args" @primaryButtonClick="primaryButtonClick" @secondaryButtonClick="secondaryButtonClick" @update:modelValue="updateModelValue">
149
+ <section style="display: flex; flex-direction: column; align-items: center; gap: 24px">
150
+ <img height='120' width='120' src="./doris.png"/>
151
+ <section style="display: flex; flex-direction: column; justify-content: center; align-items: center">
152
+ <h1 style="font-family: 'Lato'; font-size: 20px; font-weight: 900; line-height: 28px; padding: 0; margin: 0; color:#3B414D">Title</h1>
153
+ <p style="text-align: center;">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod</p>
154
+ </section>
155
+ </section>
156
+ </unnnic-modal-dialog>
157
+ </div>
158
+ `,
159
+ methods: {
160
+ primaryButtonClick: action('primaryButtonClick'),
161
+ secondaryButtonClick: action('secondaryButtonClick'),
162
+ },
163
+ });
164
+
165
+ export const Default = Template.bind({});
166
+ Default.args = {
167
+ title: 'Default Modal',
168
+ type: '',
169
+ };
170
+
171
+ export const Warning = Template.bind({});
172
+ Warning.args = {
173
+ title: 'Warning Modal',
174
+ type: 'warning',
175
+ };
176
+
177
+ export const Success = Template.bind({});
178
+ Success.args = {
179
+ title: 'Success Modal',
180
+ type: 'success',
181
+ };
182
+
183
+ export const Attention = Template.bind({});
184
+ Attention.args = {
185
+ title: 'Attention Modal',
186
+ type: 'attention',
187
+ };
188
+
189
+ export const Overflowed = TemplateOverflowed.bind({});
190
+ Overflowed.args = {
191
+ title: 'Overflowed Modal',
192
+ type: '',
193
+ };
194
+
195
+ export const Form = TemplateForm.bind({});
196
+ Form.args = {
197
+ title: 'Form Modal',
198
+ type: '',
199
+ showActionsDivider: true,
200
+ persistent: true,
201
+ };
202
+
203
+ export const Image = TemplateImage.bind({});
204
+ Image.args = {
205
+ title: '',
206
+ type: '',
207
+ showActionsDivider: true,
208
+ };