@sula-tech/webcomponents 0.8.0 → 0.9.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.
Files changed (97) hide show
  1. package/dist/cjs/{index-Bbryl0vg.js → index-LR6yFDX7.js} +16 -2
  2. package/dist/cjs/index-LR6yFDX7.js.map +1 -0
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/{sula-avatar_18.cjs.entry.js → sula-avatar_19.cjs.entry.js} +368 -45
  5. package/dist/cjs/sula-avatar_19.cjs.entry.js.map +1 -0
  6. package/dist/cjs/webcomponents.cjs.js +2 -2
  7. package/dist/collection/collection-manifest.json +1 -0
  8. package/dist/collection/components/sula-button/sula-button.css +1 -1
  9. package/dist/collection/components/sula-chip/sula-chip.css +1 -1
  10. package/dist/collection/components/sula-dropdown/sula-dropdown.css +1 -1
  11. package/dist/collection/components/sula-dropdown/sula-dropdown.js +74 -9
  12. package/dist/collection/components/sula-dropdown/sula-dropdown.js.map +1 -1
  13. package/dist/collection/components/sula-dropdown/sula-dropdown.stories.js +53 -0
  14. package/dist/collection/components/sula-dropdown/sula-dropdown.stories.js.map +1 -1
  15. package/dist/collection/components/sula-icon/sula-icon.css +1 -1
  16. package/dist/collection/components/sula-icon/sula-icon.js +1 -1
  17. package/dist/collection/components/sula-loader/sula-loader.css +1 -1
  18. package/dist/collection/components/sula-loader/sula-loader.js +1 -1
  19. package/dist/collection/components/sula-menu-select-list/sula-menu-select-list.css +1 -1
  20. package/dist/collection/components/sula-menu-select-list/sula-menu-select-list.js +33 -2
  21. package/dist/collection/components/sula-menu-select-list/sula-menu-select-list.js.map +1 -1
  22. package/dist/collection/components/sula-modal/model/sula-modal.model.js +16 -0
  23. package/dist/collection/components/sula-modal/model/sula-modal.model.js.map +1 -0
  24. package/dist/collection/components/sula-modal/sula-modal.css +1 -0
  25. package/dist/collection/components/sula-modal/sula-modal.js +558 -0
  26. package/dist/collection/components/sula-modal/sula-modal.js.map +1 -0
  27. package/dist/collection/components/sula-modal/sula-modal.stories.js +193 -0
  28. package/dist/collection/components/sula-modal/sula-modal.stories.js.map +1 -0
  29. package/dist/collection/components/sula-progress-bar/sula-progress-bar.js +2 -2
  30. package/dist/collection/components/sula-radio-button/sula-radio-button.js +2 -2
  31. package/dist/collection/components/sula-search-bar/sula-search-bar.js +2 -2
  32. package/dist/collection/components/sula-switch/sula-switch.js +4 -4
  33. package/dist/collection/components/sula-tag/sula-tag.js +3 -3
  34. package/dist/collection/components/sula-textarea/sula-textarea.js +6 -6
  35. package/dist/collection/components/sula-textfield/sula-textfield.js +2 -2
  36. package/dist/collection/components/sula-tiles/sula-tiles.js +1 -1
  37. package/dist/collection/components/sula-timeline-list/sula-timeline-list.js +1 -1
  38. package/dist/components/index.js +19 -0
  39. package/dist/components/index.js.map +1 -1
  40. package/dist/components/p-BhxK9El6.js +231 -0
  41. package/dist/components/p-BhxK9El6.js.map +1 -0
  42. package/dist/components/{p-DrUsgtsv.js → p-CyIObO0v.js} +4 -4
  43. package/dist/components/{p-DrUsgtsv.js.map → p-CyIObO0v.js.map} +1 -1
  44. package/dist/components/{p-BNtk_d_S.js → p-DvWN7hVP.js} +14 -6
  45. package/dist/components/p-DvWN7hVP.js.map +1 -0
  46. package/dist/components/{p-BrY8WoEl.js → p-ff6chV3i.js} +4 -4
  47. package/dist/components/{p-BrY8WoEl.js.map → p-ff6chV3i.js.map} +1 -1
  48. package/dist/components/sula-avatar.js +1 -1
  49. package/dist/components/sula-badge.js +1 -1
  50. package/dist/components/sula-button.js +1 -226
  51. package/dist/components/sula-button.js.map +1 -1
  52. package/dist/components/sula-checkbox.js +1 -1
  53. package/dist/components/sula-chip.js +3 -3
  54. package/dist/components/sula-chip.js.map +1 -1
  55. package/dist/components/sula-dropdown.js +60 -14
  56. package/dist/components/sula-dropdown.js.map +1 -1
  57. package/dist/components/sula-icon.js +1 -1
  58. package/dist/components/sula-loader.js +1 -1
  59. package/dist/components/sula-menu-select-list.js +1 -1
  60. package/dist/components/sula-modal.d.ts +11 -0
  61. package/dist/components/sula-modal.js +332 -0
  62. package/dist/components/sula-modal.js.map +1 -0
  63. package/dist/components/sula-progress-bar.js +3 -3
  64. package/dist/components/sula-radio-button.js +2 -2
  65. package/dist/components/sula-search-bar.js +3 -3
  66. package/dist/components/sula-switch.js +4 -4
  67. package/dist/components/sula-tag.js +4 -4
  68. package/dist/components/sula-textarea.js +6 -6
  69. package/dist/components/sula-textfield.js +3 -3
  70. package/dist/components/sula-tiles.js +2 -2
  71. package/dist/components/sula-timeline-list.js +2 -2
  72. package/dist/esm/{index-or7qTZgT.js → index-CrFclBiX.js} +16 -2
  73. package/dist/esm/index-CrFclBiX.js.map +1 -0
  74. package/dist/esm/loader.js +3 -3
  75. package/dist/esm/{sula-avatar_18.entry.js → sula-avatar_19.entry.js} +368 -46
  76. package/dist/esm/sula-avatar_19.entry.js.map +1 -0
  77. package/dist/esm/webcomponents.js +3 -3
  78. package/dist/types/components/sula-dropdown/sula-dropdown.d.ts +11 -0
  79. package/dist/types/components/sula-dropdown/sula-dropdown.stories.d.ts +10 -0
  80. package/dist/types/components/sula-menu-select-list/sula-menu-select-list.d.ts +4 -0
  81. package/dist/types/components/sula-modal/model/sula-modal.model.d.ts +13 -0
  82. package/dist/types/components/sula-modal/sula-modal.d.ts +94 -0
  83. package/dist/types/components/sula-modal/sula-modal.stories.d.ts +83 -0
  84. package/dist/types/components.d.ts +170 -0
  85. package/dist/webcomponents/{p-or7qTZgT.js → p-CrFclBiX.js} +28 -16
  86. package/dist/webcomponents/p-CrFclBiX.js.map +1 -0
  87. package/dist/webcomponents/{p-bc1f174c.entry.js → p-e4fa59d5.entry.js} +658 -285
  88. package/dist/webcomponents/p-e4fa59d5.entry.js.map +1 -0
  89. package/dist/webcomponents/webcomponents.esm.js +41 -20
  90. package/package.json +2 -3
  91. package/dist/cjs/index-Bbryl0vg.js.map +0 -1
  92. package/dist/cjs/sula-avatar_18.cjs.entry.js.map +0 -1
  93. package/dist/components/p-BNtk_d_S.js.map +0 -1
  94. package/dist/esm/index-or7qTZgT.js.map +0 -1
  95. package/dist/esm/sula-avatar_18.entry.js.map +0 -1
  96. package/dist/webcomponents/p-bc1f174c.entry.js.map +0 -1
  97. package/dist/webcomponents/p-or7qTZgT.js.map +0 -1
@@ -0,0 +1,558 @@
1
+ import { Host, h } from "@stencil/core";
2
+ import { SulaModalSlotOverflow, SulaModalType } from "./model/sula-modal.model";
3
+ import { SulaButtonAppearance } from "../sula-button/model/sula-button.model";
4
+ export class SulaModal {
5
+ constructor() {
6
+ /**
7
+ * Is modal opened
8
+ */
9
+ this.opened = false;
10
+ /**
11
+ * Block body scroll when modal is opened
12
+ */
13
+ this.blockBodyScroll = true;
14
+ /**
15
+ * Close modal when clicking outside
16
+ */
17
+ this.closeOnClickOutside = true;
18
+ /**
19
+ * Type of the modal
20
+ */
21
+ this.type = SulaModalType.Custom;
22
+ /**
23
+ * Icon of the modal header
24
+ */
25
+ this.headerIcon = '';
26
+ /**
27
+ * Title of the modal
28
+ */
29
+ this.modalTitle = '';
30
+ /**
31
+ * Promotional image URL for promo type modal
32
+ */
33
+ this.promoImage = '';
34
+ /**
35
+ * Subtitle of the modal
36
+ */
37
+ this.subTitle = '';
38
+ /**
39
+ * Primary button text
40
+ */
41
+ this.primaryButtonText = '';
42
+ /**
43
+ * Secondary button text
44
+ */
45
+ this.secondaryButtonText = '';
46
+ /**
47
+ * Slot overflow behavior
48
+ */
49
+ this.slotOverflow = SulaModalSlotOverflow.Auto;
50
+ this.isAnimating = false;
51
+ this.shouldRender = false;
52
+ }
53
+ handleOpenedChange(newValue) {
54
+ if (newValue) {
55
+ this.shouldRender = true;
56
+ requestAnimationFrame(() => {
57
+ requestAnimationFrame(() => {
58
+ this.isAnimating = true;
59
+ });
60
+ });
61
+ }
62
+ else {
63
+ this.isAnimating = false;
64
+ this.closeTimeout = setTimeout(() => {
65
+ this.shouldRender = false;
66
+ }, 300);
67
+ }
68
+ this.handleParentOverflow();
69
+ }
70
+ componentWillLoad() {
71
+ if (this.opened) {
72
+ this.shouldRender = true;
73
+ this.isAnimating = true;
74
+ }
75
+ this.handleParentOverflow();
76
+ }
77
+ disconnectedCallback() {
78
+ if (this.closeTimeout) {
79
+ clearTimeout(this.closeTimeout);
80
+ }
81
+ }
82
+ handleParentOverflow() {
83
+ var _a;
84
+ const overflow = this.opened && this.blockBodyScroll ? 'hidden' : 'inherit';
85
+ if ((_a = this.hostElement) === null || _a === void 0 ? void 0 : _a.parentElement) {
86
+ this.hostElement.parentElement.style.overflow = overflow;
87
+ }
88
+ }
89
+ closeModal() {
90
+ this.opened = false;
91
+ this.modalClosed.emit();
92
+ }
93
+ handleClickOutside(event) {
94
+ if (this.closeOnClickOutside && event.target === event.currentTarget) {
95
+ this.closeModal();
96
+ }
97
+ }
98
+ handlePrimaryButtonClick() {
99
+ this.primaryButtonClicked.emit();
100
+ }
101
+ handleSecondaryButtonClick() {
102
+ this.secondaryButtonClicked.emit();
103
+ }
104
+ isAlertOrCustomOrPromo() {
105
+ return this.type === SulaModalType.Alert || this.type === SulaModalType.Custom || this.type === SulaModalType.Promo;
106
+ }
107
+ isListOrCustomFull() {
108
+ return this.type === SulaModalType.List || this.type === SulaModalType.CustomFull;
109
+ }
110
+ isSideModal() {
111
+ return this.type === SulaModalType.Side || this.type === SulaModalType.SpecialSide;
112
+ }
113
+ isPromoOrSpecialSide() {
114
+ return this.type === SulaModalType.Promo || this.type === SulaModalType.SpecialSide;
115
+ }
116
+ hasSlotContent() {
117
+ return (this.type === SulaModalType.Custom || this.type === SulaModalType.Promo || this.type === SulaModalType.List || this.type === SulaModalType.CustomFull || this.isSideModal());
118
+ }
119
+ hasButtons() {
120
+ return this.type === SulaModalType.Alert || this.type === SulaModalType.Custom;
121
+ }
122
+ getOverlayClasses() {
123
+ return {
124
+ 'modal-overlay absolute inset-0 bg-opacity-overlay flex z-[999] transition-opacity duration-300': true,
125
+ 'opacity-100': this.isAnimating,
126
+ 'opacity-0': !this.isAnimating,
127
+ 'items-end justify-center md:items-center': this.isAlertOrCustomOrPromo(),
128
+ 'items-end justify-center': this.isListOrCustomFull(),
129
+ 'justify-end': this.isSideModal(),
130
+ };
131
+ }
132
+ getWrapperClasses() {
133
+ return {
134
+ 'modal-wrapper transition-all duration-300 ease-out': true,
135
+ 'w-full md:w-[852px] flex md:flex-row flex-col h-[70vh] md:h-auto relative': this.type === SulaModalType.Promo,
136
+ 'w-full flex justify-center items-center': !this.isPromoOrSpecialSide() && !this.isSideModal(),
137
+ 'w-full flex justify-end': this.isSideModal(),
138
+ 'modal-slide-up': (this.isAlertOrCustomOrPromo() || this.isListOrCustomFull()) && !this.isSideModal(),
139
+ 'modal-slide-right': this.isSideModal(),
140
+ 'modal-active': this.isAnimating,
141
+ };
142
+ }
143
+ getContentClasses() {
144
+ return {
145
+ 'bg-box-shadow-body rounded-b-none border border-line-hair px-14 py-24 md:px-32 md:py-48': true,
146
+ 'md:rounded-b-lg rounded-lg': !this.isSideModal(),
147
+ 'w-full md:w-[448px]': this.type === SulaModalType.Alert,
148
+ 'w-full md:w-[768px] pb-32': this.type === SulaModalType.Custom,
149
+ 'w-full md:w-1/2 h-[50vh] md:h-auto pb-0 md:pb-96 rounded-none md:rounded-lg md:rounded-l-none': this.type === SulaModalType.Promo,
150
+ 'w-full md:w-[80vw] max-h-[90vh] rounded-b-none relative': this.isListOrCustomFull(),
151
+ 'rounded-none w-[440px]': this.type === SulaModalType.Side,
152
+ 'rounded-none w-1/2': this.type === SulaModalType.SpecialSide,
153
+ };
154
+ }
155
+ getHeaderClasses() {
156
+ return {
157
+ 'flex w-full': true,
158
+ 'relative': !this.isListOrCustomFull() && this.type !== SulaModalType.Promo && this.type !== SulaModalType.Side,
159
+ 'pb-24': this.type !== SulaModalType.Promo && this.type !== SulaModalType.Side,
160
+ 'pb-0 md:pb-24 md:relative': this.type === SulaModalType.Promo,
161
+ 'pb-40': this.type === SulaModalType.Side,
162
+ };
163
+ }
164
+ getCloseButtonClasses() {
165
+ return {
166
+ 'w-40 h-40 rounded-full absolute right-0 flex justify-center items-center cursor-pointer': true,
167
+ '-top-8 md:-top-16': !this.isListOrCustomFull() && this.type !== SulaModalType.Promo && this.type !== SulaModalType.Side,
168
+ 'bg-surface-on-body hover:bg-states-empty-bg-hover text-icon-primary': !this.isListOrCustomFull() && this.type !== SulaModalType.Promo,
169
+ 'top-20 right-20 bg-opacity-overlay text-negative-negative-1 md:bg-surface-on-body hover:bg-states-empty-bg-hover md:-top-16 md:text-icon-primary': this.type === SulaModalType.Promo,
170
+ '-top-64 right-12 md:right-0 bg-opacity-on-overlay text-negative-negative-1': this.isListOrCustomFull(),
171
+ 'top-32 right-32': this.type === SulaModalType.Side,
172
+ };
173
+ }
174
+ getTitleContainerClasses() {
175
+ return {
176
+ 'flex flex-col space-y-12': true,
177
+ 'items-center justify-center': this.type === SulaModalType.List,
178
+ };
179
+ }
180
+ getTitleClasses() {
181
+ return {
182
+ 'text-heading-small text-text-primary pr-16': true,
183
+ 'text-paragraph-large-bold': this.type === SulaModalType.List,
184
+ 'text-heading-medium': this.type === SulaModalType.List,
185
+ };
186
+ }
187
+ getSlotClasses() {
188
+ return {
189
+ 'mt-12 w-full max-h-[40vh]': true,
190
+ 'max-h-[80vh]': this.type === SulaModalType.List,
191
+ 'max-h-[67.6vh]': this.type === SulaModalType.CustomFull,
192
+ 'max-h-[72.7vh]': this.type === SulaModalType.Side,
193
+ 'max-h-[87%]': this.type === SulaModalType.SpecialSide,
194
+ 'overflow-auto': this.slotOverflow === SulaModalSlotOverflow.Auto,
195
+ 'overflow-hidden': this.slotOverflow === SulaModalSlotOverflow.Hidden,
196
+ };
197
+ }
198
+ getButtonContainerClasses() {
199
+ return {
200
+ 'w-full mt-48 flex': true,
201
+ 'flex-col space-y-12': this.type === SulaModalType.Alert,
202
+ 'flex-row-reverse space-x-reverse space-x-12': this.type === SulaModalType.Custom,
203
+ };
204
+ }
205
+ renderPromoImage() {
206
+ if (!this.isPromoOrSpecialSide()) {
207
+ return null;
208
+ }
209
+ const imageClasses = {
210
+ 'w-full md:w-1/2 h-[20vh] md:h-auto overflow-hidden flex': true,
211
+ 'rounded-b-none md:rounded-b-lg md:rounded-r-none rounded-lg': this.type === SulaModalType.Promo,
212
+ };
213
+ return (h("div", { class: imageClasses }, h("img", { src: this.promoImage, alt: "Promotional Image", class: "w-full h-full object-cover" })));
214
+ }
215
+ renderHeaderIcon() {
216
+ if ((this.type === SulaModalType.Alert || this.type === SulaModalType.Custom) && this.headerIcon) {
217
+ return (h("div", { class: "w-64 h-64 border border-line-general flex justify-center items-center rounded-full" }, h("sula-icon", { icon: this.headerIcon, customClass: "text-5xl text-icon-primary", class: "flex" })));
218
+ }
219
+ return null;
220
+ }
221
+ renderCloseButton() {
222
+ return (h("div", { class: this.getCloseButtonClasses(), onClick: () => this.closeModal() }, h("sula-icon", { icon: "ph ph-x", customClass: "text-2xl", class: "flex" })));
223
+ }
224
+ renderTitleSection() {
225
+ if (!this.modalTitle && !this.subTitle) {
226
+ return null;
227
+ }
228
+ return (h("div", { class: this.getTitleContainerClasses() }, this.modalTitle && h("h1", { class: this.getTitleClasses() }, this.modalTitle), this.subTitle && h("p", { class: "text-paragraph-medium-regular text-text-secondary" }, this.subTitle)));
229
+ }
230
+ renderSlot() {
231
+ if (!this.hasSlotContent()) {
232
+ return null;
233
+ }
234
+ return (h("div", { class: this.getSlotClasses() }, h("slot", null)));
235
+ }
236
+ renderButtons() {
237
+ if (!this.hasButtons()) {
238
+ return null;
239
+ }
240
+ return (h("div", { class: this.getButtonContainerClasses() }, this.primaryButtonText && h("sula-button", { text: this.primaryButtonText, fullWidth: true, onButtonClicked: () => this.handlePrimaryButtonClick() }), this.secondaryButtonText && (h("sula-button", { onButtonClicked: () => this.handleSecondaryButtonClick(), appearance: SulaButtonAppearance.Secondary, text: this.secondaryButtonText, fullWidth: true }))));
241
+ }
242
+ render() {
243
+ if (!this.shouldRender) {
244
+ return h(Host, null);
245
+ }
246
+ return (h(Host, null, h("div", { class: this.getOverlayClasses(), onClick: event => this.handleClickOutside(event) }, h("div", { class: this.getWrapperClasses() }, this.renderPromoImage(), h("div", { class: this.getContentClasses() }, h("div", { class: this.getHeaderClasses() }, this.renderHeaderIcon(), this.renderCloseButton()), this.renderTitleSection(), this.renderSlot(), this.renderButtons())))));
247
+ }
248
+ static get is() { return "sula-modal"; }
249
+ static get encapsulation() { return "shadow"; }
250
+ static get originalStyleUrls() {
251
+ return {
252
+ "$": ["sula-modal.scss"]
253
+ };
254
+ }
255
+ static get styleUrls() {
256
+ return {
257
+ "$": ["sula-modal.css"]
258
+ };
259
+ }
260
+ static get properties() {
261
+ return {
262
+ "opened": {
263
+ "type": "boolean",
264
+ "attribute": "opened",
265
+ "mutable": true,
266
+ "complexType": {
267
+ "original": "boolean",
268
+ "resolved": "boolean",
269
+ "references": {}
270
+ },
271
+ "required": false,
272
+ "optional": false,
273
+ "docs": {
274
+ "tags": [],
275
+ "text": "Is modal opened"
276
+ },
277
+ "getter": false,
278
+ "setter": false,
279
+ "reflect": false,
280
+ "defaultValue": "false"
281
+ },
282
+ "blockBodyScroll": {
283
+ "type": "boolean",
284
+ "attribute": "block-body-scroll",
285
+ "mutable": true,
286
+ "complexType": {
287
+ "original": "boolean",
288
+ "resolved": "boolean",
289
+ "references": {}
290
+ },
291
+ "required": false,
292
+ "optional": false,
293
+ "docs": {
294
+ "tags": [],
295
+ "text": "Block body scroll when modal is opened"
296
+ },
297
+ "getter": false,
298
+ "setter": false,
299
+ "reflect": false,
300
+ "defaultValue": "true"
301
+ },
302
+ "closeOnClickOutside": {
303
+ "type": "boolean",
304
+ "attribute": "close-on-click-outside",
305
+ "mutable": true,
306
+ "complexType": {
307
+ "original": "boolean",
308
+ "resolved": "boolean",
309
+ "references": {}
310
+ },
311
+ "required": false,
312
+ "optional": false,
313
+ "docs": {
314
+ "tags": [],
315
+ "text": "Close modal when clicking outside"
316
+ },
317
+ "getter": false,
318
+ "setter": false,
319
+ "reflect": false,
320
+ "defaultValue": "true"
321
+ },
322
+ "type": {
323
+ "type": "string",
324
+ "attribute": "type",
325
+ "mutable": false,
326
+ "complexType": {
327
+ "original": "SulaModalType",
328
+ "resolved": "SulaModalType.Alert | SulaModalType.Custom | SulaModalType.CustomFull | SulaModalType.List | SulaModalType.Promo | SulaModalType.Side | SulaModalType.SpecialSide",
329
+ "references": {
330
+ "SulaModalType": {
331
+ "location": "import",
332
+ "path": "./model/sula-modal.model",
333
+ "id": "src/components/sula-modal/model/sula-modal.model.ts::SulaModalType"
334
+ }
335
+ }
336
+ },
337
+ "required": false,
338
+ "optional": false,
339
+ "docs": {
340
+ "tags": [],
341
+ "text": "Type of the modal"
342
+ },
343
+ "getter": false,
344
+ "setter": false,
345
+ "reflect": false,
346
+ "defaultValue": "SulaModalType.Custom"
347
+ },
348
+ "headerIcon": {
349
+ "type": "string",
350
+ "attribute": "header-icon",
351
+ "mutable": false,
352
+ "complexType": {
353
+ "original": "string",
354
+ "resolved": "string",
355
+ "references": {}
356
+ },
357
+ "required": false,
358
+ "optional": false,
359
+ "docs": {
360
+ "tags": [],
361
+ "text": "Icon of the modal header"
362
+ },
363
+ "getter": false,
364
+ "setter": false,
365
+ "reflect": false,
366
+ "defaultValue": "''"
367
+ },
368
+ "modalTitle": {
369
+ "type": "string",
370
+ "attribute": "modal-title",
371
+ "mutable": false,
372
+ "complexType": {
373
+ "original": "string",
374
+ "resolved": "string",
375
+ "references": {}
376
+ },
377
+ "required": false,
378
+ "optional": false,
379
+ "docs": {
380
+ "tags": [],
381
+ "text": "Title of the modal"
382
+ },
383
+ "getter": false,
384
+ "setter": false,
385
+ "reflect": false,
386
+ "defaultValue": "''"
387
+ },
388
+ "promoImage": {
389
+ "type": "string",
390
+ "attribute": "promo-image",
391
+ "mutable": false,
392
+ "complexType": {
393
+ "original": "string",
394
+ "resolved": "string",
395
+ "references": {}
396
+ },
397
+ "required": false,
398
+ "optional": false,
399
+ "docs": {
400
+ "tags": [],
401
+ "text": "Promotional image URL for promo type modal"
402
+ },
403
+ "getter": false,
404
+ "setter": false,
405
+ "reflect": false,
406
+ "defaultValue": "''"
407
+ },
408
+ "subTitle": {
409
+ "type": "string",
410
+ "attribute": "sub-title",
411
+ "mutable": false,
412
+ "complexType": {
413
+ "original": "string",
414
+ "resolved": "string",
415
+ "references": {}
416
+ },
417
+ "required": false,
418
+ "optional": false,
419
+ "docs": {
420
+ "tags": [],
421
+ "text": "Subtitle of the modal"
422
+ },
423
+ "getter": false,
424
+ "setter": false,
425
+ "reflect": false,
426
+ "defaultValue": "''"
427
+ },
428
+ "primaryButtonText": {
429
+ "type": "string",
430
+ "attribute": "primary-button-text",
431
+ "mutable": false,
432
+ "complexType": {
433
+ "original": "string",
434
+ "resolved": "string",
435
+ "references": {}
436
+ },
437
+ "required": false,
438
+ "optional": false,
439
+ "docs": {
440
+ "tags": [],
441
+ "text": "Primary button text"
442
+ },
443
+ "getter": false,
444
+ "setter": false,
445
+ "reflect": false,
446
+ "defaultValue": "''"
447
+ },
448
+ "secondaryButtonText": {
449
+ "type": "string",
450
+ "attribute": "secondary-button-text",
451
+ "mutable": false,
452
+ "complexType": {
453
+ "original": "string",
454
+ "resolved": "string",
455
+ "references": {}
456
+ },
457
+ "required": false,
458
+ "optional": false,
459
+ "docs": {
460
+ "tags": [],
461
+ "text": "Secondary button text"
462
+ },
463
+ "getter": false,
464
+ "setter": false,
465
+ "reflect": false,
466
+ "defaultValue": "''"
467
+ },
468
+ "slotOverflow": {
469
+ "type": "string",
470
+ "attribute": "slot-overflow",
471
+ "mutable": false,
472
+ "complexType": {
473
+ "original": "SulaModalSlotOverflow",
474
+ "resolved": "SulaModalSlotOverflow.Auto | SulaModalSlotOverflow.Hidden",
475
+ "references": {
476
+ "SulaModalSlotOverflow": {
477
+ "location": "import",
478
+ "path": "./model/sula-modal.model",
479
+ "id": "src/components/sula-modal/model/sula-modal.model.ts::SulaModalSlotOverflow"
480
+ }
481
+ }
482
+ },
483
+ "required": false,
484
+ "optional": false,
485
+ "docs": {
486
+ "tags": [],
487
+ "text": "Slot overflow behavior"
488
+ },
489
+ "getter": false,
490
+ "setter": false,
491
+ "reflect": false,
492
+ "defaultValue": "SulaModalSlotOverflow.Auto"
493
+ }
494
+ };
495
+ }
496
+ static get states() {
497
+ return {
498
+ "isAnimating": {},
499
+ "shouldRender": {}
500
+ };
501
+ }
502
+ static get events() {
503
+ return [{
504
+ "method": "modalClosed",
505
+ "name": "modalClosed",
506
+ "bubbles": true,
507
+ "cancelable": true,
508
+ "composed": true,
509
+ "docs": {
510
+ "tags": [],
511
+ "text": "Event emitted when the modal is closed"
512
+ },
513
+ "complexType": {
514
+ "original": "void",
515
+ "resolved": "void",
516
+ "references": {}
517
+ }
518
+ }, {
519
+ "method": "primaryButtonClicked",
520
+ "name": "primaryButtonClicked",
521
+ "bubbles": true,
522
+ "cancelable": true,
523
+ "composed": true,
524
+ "docs": {
525
+ "tags": [],
526
+ "text": "Event emitted when the primary button is clicked"
527
+ },
528
+ "complexType": {
529
+ "original": "void",
530
+ "resolved": "void",
531
+ "references": {}
532
+ }
533
+ }, {
534
+ "method": "secondaryButtonClicked",
535
+ "name": "secondaryButtonClicked",
536
+ "bubbles": true,
537
+ "cancelable": true,
538
+ "composed": true,
539
+ "docs": {
540
+ "tags": [],
541
+ "text": "Event emitted when the secondary button is clicked"
542
+ },
543
+ "complexType": {
544
+ "original": "void",
545
+ "resolved": "void",
546
+ "references": {}
547
+ }
548
+ }];
549
+ }
550
+ static get elementRef() { return "hostElement"; }
551
+ static get watchers() {
552
+ return [{
553
+ "propName": "opened",
554
+ "methodName": "handleOpenedChange"
555
+ }];
556
+ }
557
+ }
558
+ //# sourceMappingURL=sula-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sula-modal.js","sourceRoot":"","sources":["../../../src/components/sula-modal/sula-modal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAgB,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAO9E,MAAM,OAAO,SAAS;IALtB;QAME;;WAEG;QACsB,WAAM,GAAY,KAAK,CAAC;QAEjD;;WAEG;QACsB,oBAAe,GAAY,IAAI,CAAC;QAEzD;;WAEG;QACsB,wBAAmB,GAAY,IAAI,CAAC;QAE7D;;WAEG;QACK,SAAI,GAAkB,aAAa,CAAC,MAAM,CAAC;QAEnD;;WAEG;QACK,eAAU,GAAW,EAAE,CAAC;QAEhC;;WAEG;QACK,eAAU,GAAW,EAAE,CAAC;QAEhC;;WAEG;QACK,eAAU,GAAW,EAAE,CAAC;QAEhC;;WAEG;QACK,aAAQ,GAAW,EAAE,CAAC;QAE9B;;WAEG;QACK,sBAAiB,GAAW,EAAE,CAAC;QAEvC;;WAEG;QACK,wBAAmB,GAAW,EAAE,CAAC;QAEzC;;WAEG;QACK,iBAAY,GAA0B,qBAAqB,CAAC,IAAI,CAAC;QAsBhE,gBAAW,GAAY,KAAK,CAAC;QAC7B,iBAAY,GAAY,KAAK,CAAC;KA6RxC;IAxRC,kBAAkB,CAAC,QAAiB;QAClC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAEzB,qBAAqB,CAAC,GAAG,EAAE;gBACzB,qBAAqB,CAAC,GAAG,EAAE;oBACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC1B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAEzB,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBAClC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC5B,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED,iBAAiB;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAED,oBAAoB;QAClB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,oBAAoB;;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5E,IAAI,MAAA,IAAI,CAAC,WAAW,0CAAE,aAAa,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,UAAU;QACR,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,kBAAkB,CAAC,KAAiB;QAClC,IAAI,IAAI,CAAC,mBAAmB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,EAAE,CAAC;YACrE,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,wBAAwB;QACtB,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,0BAA0B;QACxB,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC;IACtH,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU,CAAC;IACpF,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,WAAW,CAAC;IACrF,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,WAAW,CAAC;IACtF,CAAC;IAED,cAAc;QACZ,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAC5K,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM,CAAC;IACjF,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,gGAAgG,EAAE,IAAI;YACtG,aAAa,EAAE,IAAI,CAAC,WAAW;YAC/B,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW;YAC9B,0CAA0C,EAAE,IAAI,CAAC,sBAAsB,EAAE;YACzE,0BAA0B,EAAE,IAAI,CAAC,kBAAkB,EAAE;YACrD,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE;SAClC,CAAC;IACJ,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,oDAAoD,EAAE,IAAI;YAC1D,2EAA2E,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;YAC9G,yCAAyC,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC9F,yBAAyB,EAAE,IAAI,CAAC,WAAW,EAAE;YAE7C,gBAAgB,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrG,mBAAmB,EAAE,IAAI,CAAC,WAAW,EAAE;YACvC,cAAc,EAAE,IAAI,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC;IAED,iBAAiB;QACf,OAAO;YACL,yFAAyF,EAAE,IAAI;YAC/F,4BAA4B,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;YACjD,qBAAqB,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;YACxD,2BAA2B,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM;YAC/D,+FAA+F,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;YAClI,yDAAyD,EAAE,IAAI,CAAC,kBAAkB,EAAE;YACpF,wBAAwB,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;YAC1D,oBAAoB,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,WAAW;SAC9D,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,UAAU,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;YAC/G,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;YAC9E,2BAA2B,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;YAC9D,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;SAC1C,CAAC;IACJ,CAAC;IAED,qBAAqB;QACnB,OAAO;YACL,yFAAyF,EAAE,IAAI;YAC/F,mBAAmB,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;YACxH,qEAAqE,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;YACtI,kJAAkJ,EAChJ,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;YACnC,4EAA4E,EAAE,IAAI,CAAC,kBAAkB,EAAE;YACvG,iBAAiB,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;SACpD,CAAC;IACJ,CAAC;IAED,wBAAwB;QACtB,OAAO;YACL,0BAA0B,EAAE,IAAI;YAChC,6BAA6B,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;SAChE,CAAC;IACJ,CAAC;IAED,eAAe;QACb,OAAO;YACL,4CAA4C,EAAE,IAAI;YAClD,2BAA2B,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;YAC7D,qBAAqB,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;SACxD,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,OAAO;YACL,2BAA2B,EAAE,IAAI;YACjC,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;YAChD,gBAAgB,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU;YACxD,gBAAgB,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;YAClD,aAAa,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,WAAW;YACtD,eAAe,EAAE,IAAI,CAAC,YAAY,KAAK,qBAAqB,CAAC,IAAI;YACjE,iBAAiB,EAAE,IAAI,CAAC,YAAY,KAAK,qBAAqB,CAAC,MAAM;SACtE,CAAC;IACJ,CAAC;IAED,yBAAyB;QACvB,OAAO;YACL,mBAAmB,EAAE,IAAI;YACzB,qBAAqB,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;YACxD,6CAA6C,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM;SAClF,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG;YACnB,yDAAyD,EAAE,IAAI;YAC/D,6DAA6D,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;SACjG,CAAC;QAEF,OAAO,CACL,WAAK,KAAK,EAAE,YAAY;YACtB,WAAK,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAC,mBAAmB,EAAC,KAAK,EAAC,4BAA4B,GAAG,CACpF,CACP,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACjG,OAAO,CACL,WAAK,KAAK,EAAC,oFAAoF;gBAC7F,iBAAW,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAC,4BAA4B,EAAC,KAAK,EAAC,MAAM,GAAG,CACtF,CACP,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB;QACf,OAAO,CACL,WAAK,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;YACxE,iBAAW,IAAI,EAAC,SAAS,EAAC,WAAW,EAAC,UAAU,EAAC,KAAK,EAAC,MAAM,GAAG,CAC5D,CACP,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,WAAK,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE;YACxC,IAAI,CAAC,UAAU,IAAI,UAAI,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,IAAG,IAAI,CAAC,UAAU,CAAM;YAC5E,IAAI,CAAC,QAAQ,IAAI,SAAG,KAAK,EAAC,mDAAmD,IAAE,IAAI,CAAC,QAAQ,CAAK,CAC9F,CACP,CAAC;IACJ,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,WAAK,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE;YAC/B,eAAa,CACT,CACP,CAAC;IACJ,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,CACL,WAAK,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE;YACzC,IAAI,CAAC,iBAAiB,IAAI,mBAAa,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAI;YAChJ,IAAI,CAAC,mBAAmB,IAAI,CAC3B,mBAAa,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,UAAU,EAAE,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,EAAE,IAAI,GAAI,CACvK,CACG,CACP,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,EAAC,IAAI,OAAG,CAAC;QAClB,CAAC;QAED,OAAO,CACL,EAAC,IAAI;YACH,WAAK,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBACpF,WAAK,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE;oBACjC,IAAI,CAAC,gBAAgB,EAAE;oBACxB,WAAK,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE;wBAClC,WAAK,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE;4BAChC,IAAI,CAAC,gBAAgB,EAAE;4BACvB,IAAI,CAAC,iBAAiB,EAAE,CACrB;wBACL,IAAI,CAAC,kBAAkB,EAAE;wBACzB,IAAI,CAAC,UAAU,EAAE;wBACjB,IAAI,CAAC,aAAa,EAAE,CACjB,CACF,CACF,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, Prop, State, Watch, h } from '@stencil/core';\nimport { SulaModalSlotOverflow, SulaModalType } from './model/sula-modal.model';\nimport { SulaButtonAppearance } from '../sula-button/model/sula-button.model';\n\n@Component({\n tag: 'sula-modal',\n styleUrl: 'sula-modal.scss',\n shadow: true,\n})\nexport class SulaModal {\n /**\n * Is modal opened\n */\n @Prop({ mutable: true }) opened: boolean = false;\n\n /**\n * Block body scroll when modal is opened\n */\n @Prop({ mutable: true }) blockBodyScroll: boolean = true;\n\n /**\n * Close modal when clicking outside\n */\n @Prop({ mutable: true }) closeOnClickOutside: boolean = true;\n\n /**\n * Type of the modal\n */\n @Prop() type: SulaModalType = SulaModalType.Custom;\n\n /**\n * Icon of the modal header\n */\n @Prop() headerIcon: string = '';\n\n /**\n * Title of the modal\n */\n @Prop() modalTitle: string = '';\n\n /**\n * Promotional image URL for promo type modal\n */\n @Prop() promoImage: string = '';\n\n /**\n * Subtitle of the modal\n */\n @Prop() subTitle: string = '';\n\n /**\n * Primary button text\n */\n @Prop() primaryButtonText: string = '';\n\n /**\n * Secondary button text\n */\n @Prop() secondaryButtonText: string = '';\n\n /**\n * Slot overflow behavior\n */\n @Prop() slotOverflow: SulaModalSlotOverflow = SulaModalSlotOverflow.Auto;\n\n /**\n * Event emitted when the modal is closed\n */\n @Event()\n modalClosed: EventEmitter<void>;\n\n /**\n * Event emitted when the primary button is clicked\n */\n @Event()\n primaryButtonClicked: EventEmitter<void>;\n\n /**\n * Event emitted when the secondary button is clicked\n */\n @Event()\n secondaryButtonClicked: EventEmitter<void>;\n\n @Element() hostElement: HTMLElement;\n\n @State() isAnimating: boolean = false;\n @State() shouldRender: boolean = false;\n\n private closeTimeout: NodeJS.Timeout;\n\n @Watch('opened')\n handleOpenedChange(newValue: boolean) {\n if (newValue) {\n this.shouldRender = true;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.isAnimating = true;\n });\n });\n } else {\n this.isAnimating = false;\n\n this.closeTimeout = setTimeout(() => {\n this.shouldRender = false;\n }, 300);\n }\n this.handleParentOverflow();\n }\n\n componentWillLoad() {\n if (this.opened) {\n this.shouldRender = true;\n this.isAnimating = true;\n }\n this.handleParentOverflow();\n }\n\n disconnectedCallback() {\n if (this.closeTimeout) {\n clearTimeout(this.closeTimeout);\n }\n }\n\n handleParentOverflow(): void {\n const overflow = this.opened && this.blockBodyScroll ? 'hidden' : 'inherit';\n\n if (this.hostElement?.parentElement) {\n this.hostElement.parentElement.style.overflow = overflow;\n }\n }\n\n closeModal(): void {\n this.opened = false;\n this.modalClosed.emit();\n }\n\n handleClickOutside(event: MouseEvent): void {\n if (this.closeOnClickOutside && event.target === event.currentTarget) {\n this.closeModal();\n }\n }\n\n handlePrimaryButtonClick(): void {\n this.primaryButtonClicked.emit();\n }\n\n handleSecondaryButtonClick(): void {\n this.secondaryButtonClicked.emit();\n }\n\n isAlertOrCustomOrPromo(): boolean {\n return this.type === SulaModalType.Alert || this.type === SulaModalType.Custom || this.type === SulaModalType.Promo;\n }\n\n isListOrCustomFull(): boolean {\n return this.type === SulaModalType.List || this.type === SulaModalType.CustomFull;\n }\n\n isSideModal(): boolean {\n return this.type === SulaModalType.Side || this.type === SulaModalType.SpecialSide;\n }\n\n isPromoOrSpecialSide(): boolean {\n return this.type === SulaModalType.Promo || this.type === SulaModalType.SpecialSide;\n }\n\n hasSlotContent(): boolean {\n return (\n this.type === SulaModalType.Custom || this.type === SulaModalType.Promo || this.type === SulaModalType.List || this.type === SulaModalType.CustomFull || this.isSideModal()\n );\n }\n\n hasButtons(): boolean {\n return this.type === SulaModalType.Alert || this.type === SulaModalType.Custom;\n }\n\n getOverlayClasses(): Record<string, boolean> {\n return {\n 'modal-overlay absolute inset-0 bg-opacity-overlay flex z-[999] transition-opacity duration-300': true,\n 'opacity-100': this.isAnimating,\n 'opacity-0': !this.isAnimating,\n 'items-end justify-center md:items-center': this.isAlertOrCustomOrPromo(),\n 'items-end justify-center': this.isListOrCustomFull(),\n 'justify-end': this.isSideModal(),\n };\n }\n\n getWrapperClasses(): Record<string, boolean> {\n return {\n 'modal-wrapper transition-all duration-300 ease-out': true,\n 'w-full md:w-[852px] flex md:flex-row flex-col h-[70vh] md:h-auto relative': this.type === SulaModalType.Promo,\n 'w-full flex justify-center items-center': !this.isPromoOrSpecialSide() && !this.isSideModal(),\n 'w-full flex justify-end': this.isSideModal(),\n\n 'modal-slide-up': (this.isAlertOrCustomOrPromo() || this.isListOrCustomFull()) && !this.isSideModal(),\n 'modal-slide-right': this.isSideModal(),\n 'modal-active': this.isAnimating,\n };\n }\n\n getContentClasses(): Record<string, boolean> {\n return {\n 'bg-box-shadow-body rounded-b-none border border-line-hair px-14 py-24 md:px-32 md:py-48': true,\n 'md:rounded-b-lg rounded-lg': !this.isSideModal(),\n 'w-full md:w-[448px]': this.type === SulaModalType.Alert,\n 'w-full md:w-[768px] pb-32': this.type === SulaModalType.Custom,\n 'w-full md:w-1/2 h-[50vh] md:h-auto pb-0 md:pb-96 rounded-none md:rounded-lg md:rounded-l-none': this.type === SulaModalType.Promo,\n 'w-full md:w-[80vw] max-h-[90vh] rounded-b-none relative': this.isListOrCustomFull(),\n 'rounded-none w-[440px]': this.type === SulaModalType.Side,\n 'rounded-none w-1/2': this.type === SulaModalType.SpecialSide,\n };\n }\n\n getHeaderClasses(): Record<string, boolean> {\n return {\n 'flex w-full': true,\n 'relative': !this.isListOrCustomFull() && this.type !== SulaModalType.Promo && this.type !== SulaModalType.Side,\n 'pb-24': this.type !== SulaModalType.Promo && this.type !== SulaModalType.Side,\n 'pb-0 md:pb-24 md:relative': this.type === SulaModalType.Promo,\n 'pb-40': this.type === SulaModalType.Side,\n };\n }\n\n getCloseButtonClasses(): Record<string, boolean> {\n return {\n 'w-40 h-40 rounded-full absolute right-0 flex justify-center items-center cursor-pointer': true,\n '-top-8 md:-top-16': !this.isListOrCustomFull() && this.type !== SulaModalType.Promo && this.type !== SulaModalType.Side,\n 'bg-surface-on-body hover:bg-states-empty-bg-hover text-icon-primary': !this.isListOrCustomFull() && this.type !== SulaModalType.Promo,\n 'top-20 right-20 bg-opacity-overlay text-negative-negative-1 md:bg-surface-on-body hover:bg-states-empty-bg-hover md:-top-16 md:text-icon-primary':\n this.type === SulaModalType.Promo,\n '-top-64 right-12 md:right-0 bg-opacity-on-overlay text-negative-negative-1': this.isListOrCustomFull(),\n 'top-32 right-32': this.type === SulaModalType.Side,\n };\n }\n\n getTitleContainerClasses(): Record<string, boolean> {\n return {\n 'flex flex-col space-y-12': true,\n 'items-center justify-center': this.type === SulaModalType.List,\n };\n }\n\n getTitleClasses(): Record<string, boolean> {\n return {\n 'text-heading-small text-text-primary pr-16': true,\n 'text-paragraph-large-bold': this.type === SulaModalType.List,\n 'text-heading-medium': this.type === SulaModalType.List,\n };\n }\n\n getSlotClasses(): Record<string, boolean> {\n return {\n 'mt-12 w-full max-h-[40vh]': true,\n 'max-h-[80vh]': this.type === SulaModalType.List,\n 'max-h-[67.6vh]': this.type === SulaModalType.CustomFull,\n 'max-h-[72.7vh]': this.type === SulaModalType.Side,\n 'max-h-[87%]': this.type === SulaModalType.SpecialSide,\n 'overflow-auto': this.slotOverflow === SulaModalSlotOverflow.Auto,\n 'overflow-hidden': this.slotOverflow === SulaModalSlotOverflow.Hidden,\n };\n }\n\n getButtonContainerClasses(): Record<string, boolean> {\n return {\n 'w-full mt-48 flex': true,\n 'flex-col space-y-12': this.type === SulaModalType.Alert,\n 'flex-row-reverse space-x-reverse space-x-12': this.type === SulaModalType.Custom,\n };\n }\n\n renderPromoImage() {\n if (!this.isPromoOrSpecialSide()) {\n return null;\n }\n\n const imageClasses = {\n 'w-full md:w-1/2 h-[20vh] md:h-auto overflow-hidden flex': true,\n 'rounded-b-none md:rounded-b-lg md:rounded-r-none rounded-lg': this.type === SulaModalType.Promo,\n };\n\n return (\n <div class={imageClasses}>\n <img src={this.promoImage} alt=\"Promotional Image\" class=\"w-full h-full object-cover\" />\n </div>\n );\n }\n\n renderHeaderIcon() {\n if ((this.type === SulaModalType.Alert || this.type === SulaModalType.Custom) && this.headerIcon) {\n return (\n <div class=\"w-64 h-64 border border-line-general flex justify-center items-center rounded-full\">\n <sula-icon icon={this.headerIcon} customClass=\"text-5xl text-icon-primary\" class=\"flex\" />\n </div>\n );\n }\n return null;\n }\n\n renderCloseButton() {\n return (\n <div class={this.getCloseButtonClasses()} onClick={() => this.closeModal()}>\n <sula-icon icon=\"ph ph-x\" customClass=\"text-2xl\" class=\"flex\" />\n </div>\n );\n }\n\n renderTitleSection() {\n if (!this.modalTitle && !this.subTitle) {\n return null;\n }\n\n return (\n <div class={this.getTitleContainerClasses()}>\n {this.modalTitle && <h1 class={this.getTitleClasses()}>{this.modalTitle}</h1>}\n {this.subTitle && <p class=\"text-paragraph-medium-regular text-text-secondary\">{this.subTitle}</p>}\n </div>\n );\n }\n\n renderSlot() {\n if (!this.hasSlotContent()) {\n return null;\n }\n\n return (\n <div class={this.getSlotClasses()}>\n <slot></slot>\n </div>\n );\n }\n\n renderButtons() {\n if (!this.hasButtons()) {\n return null;\n }\n\n return (\n <div class={this.getButtonContainerClasses()}>\n {this.primaryButtonText && <sula-button text={this.primaryButtonText} fullWidth={true} onButtonClicked={() => this.handlePrimaryButtonClick()} />}\n {this.secondaryButtonText && (\n <sula-button onButtonClicked={() => this.handleSecondaryButtonClick()} appearance={SulaButtonAppearance.Secondary} text={this.secondaryButtonText} fullWidth={true} />\n )}\n </div>\n );\n }\n\n render() {\n if (!this.shouldRender) {\n return <Host />;\n }\n\n return (\n <Host>\n <div class={this.getOverlayClasses()} onClick={event => this.handleClickOutside(event)}>\n <div class={this.getWrapperClasses()}>\n {this.renderPromoImage()}\n <div class={this.getContentClasses()}>\n <div class={this.getHeaderClasses()}>\n {this.renderHeaderIcon()}\n {this.renderCloseButton()}\n </div>\n {this.renderTitleSection()}\n {this.renderSlot()}\n {this.renderButtons()}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}