hudini 0.19.0 → 0.21.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/README.md +1 -27
- package/dist/components/alert/alert.d.ts +161 -0
- package/dist/components/alert/alert.d.ts.map +1 -0
- package/dist/components/alert/alert.js +304 -0
- package/dist/components/alert/alert.js.map +1 -0
- package/dist/components/alert/alert.spec.d.ts +2 -0
- package/dist/components/alert/alert.spec.d.ts.map +1 -0
- package/dist/components/alert/alert.spec.js +235 -0
- package/dist/components/alert/alert.spec.js.map +1 -0
- package/dist/components/alert/index.d.ts +2 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js +2 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/badge/badge.d.ts +94 -0
- package/dist/components/badge/badge.d.ts.map +1 -0
- package/dist/components/badge/badge.js +180 -0
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/badge/badge.spec.d.ts +2 -0
- package/dist/components/badge/badge.spec.d.ts.map +1 -0
- package/dist/components/badge/badge.spec.js +197 -0
- package/dist/components/badge/badge.spec.js.map +1 -0
- package/dist/components/badge/index.d.ts +2 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/card/card.d.ts +11 -15
- package/dist/components/card/card.d.ts.map +1 -1
- package/dist/components/card/card.js +37 -59
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/checkbox/checkbox.d.ts +153 -0
- package/dist/components/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.js +329 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/checkbox/checkbox.spec.d.ts +2 -0
- package/dist/components/checkbox/checkbox.spec.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.spec.js +346 -0
- package/dist/components/checkbox/checkbox.spec.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +2 -0
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/components/circular-progress/circular-progress.d.ts.map +1 -1
- package/dist/components/circular-progress/circular-progress.js +2 -1
- package/dist/components/circular-progress/circular-progress.js.map +1 -1
- package/dist/components/circular-progress/circular-progress.spec.js +2 -0
- package/dist/components/circular-progress/circular-progress.spec.js.map +1 -1
- package/dist/components/dock/dock.d.ts +115 -0
- package/dist/components/dock/dock.d.ts.map +1 -0
- package/dist/components/dock/dock.js +168 -0
- package/dist/components/dock/dock.js.map +1 -0
- package/dist/components/dock/dock.spec.d.ts +2 -0
- package/dist/components/dock/dock.spec.d.ts.map +1 -0
- package/dist/components/dock/dock.spec.js +178 -0
- package/dist/components/dock/dock.spec.js.map +1 -0
- package/dist/components/dock/index.d.ts +2 -0
- package/dist/components/dock/index.d.ts.map +1 -0
- package/dist/components/dock/index.js +2 -0
- package/dist/components/dock/index.js.map +1 -0
- package/dist/components/icon-button/icon-button.d.ts +18 -9
- package/dist/components/icon-button/icon-button.d.ts.map +1 -1
- package/dist/components/icon-button/icon-button.js +57 -101
- package/dist/components/icon-button/icon-button.js.map +1 -1
- package/dist/components/index.d.ts +10 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +10 -5
- package/dist/components/index.js.map +1 -1
- package/dist/components/linear-progress/linear-progress.d.ts.map +1 -1
- package/dist/components/linear-progress/linear-progress.js +4 -4
- package/dist/components/linear-progress/linear-progress.js.map +1 -1
- package/dist/components/linear-progress/linear-progress.spec.js +2 -0
- package/dist/components/linear-progress/linear-progress.spec.js.map +1 -1
- package/dist/components/modal/index.d.ts +2 -0
- package/dist/components/modal/index.d.ts.map +1 -0
- package/dist/components/modal/index.js +2 -0
- package/dist/components/modal/index.js.map +1 -0
- package/dist/components/modal/modal.d.ts +193 -0
- package/dist/components/modal/modal.d.ts.map +1 -0
- package/dist/components/modal/modal.js +382 -0
- package/dist/components/modal/modal.js.map +1 -0
- package/dist/components/modal/modal.spec.d.ts +2 -0
- package/dist/components/modal/modal.spec.d.ts.map +1 -0
- package/dist/components/modal/modal.spec.js +360 -0
- package/dist/components/modal/modal.spec.js.map +1 -0
- package/dist/components/overlay/index.d.ts +2 -0
- package/dist/components/overlay/index.d.ts.map +1 -0
- package/dist/components/overlay/index.js +2 -0
- package/dist/components/overlay/index.js.map +1 -0
- package/dist/components/overlay/overlay.d.ts +75 -0
- package/dist/components/overlay/overlay.d.ts.map +1 -0
- package/dist/components/overlay/overlay.js +106 -0
- package/dist/components/overlay/overlay.js.map +1 -0
- package/dist/components/overlay/overlay.spec.d.ts +2 -0
- package/dist/components/overlay/overlay.spec.d.ts.map +1 -0
- package/dist/components/overlay/overlay.spec.js +135 -0
- package/dist/components/overlay/overlay.spec.js.map +1 -0
- package/dist/components/radial-progress/radial-progress.d.ts.map +1 -1
- package/dist/components/radial-progress/radial-progress.js +3 -2
- package/dist/components/radial-progress/radial-progress.js.map +1 -1
- package/dist/components/radio/index.d.ts +2 -0
- package/dist/components/radio/index.d.ts.map +1 -0
- package/dist/components/radio/index.js +2 -0
- package/dist/components/radio/index.js.map +1 -0
- package/dist/components/radio/radio.d.ts +157 -0
- package/dist/components/radio/radio.d.ts.map +1 -0
- package/dist/components/radio/radio.js +312 -0
- package/dist/components/radio/radio.js.map +1 -0
- package/dist/components/radio/radio.spec.d.ts +2 -0
- package/dist/components/radio/radio.spec.d.ts.map +1 -0
- package/dist/components/radio/radio.spec.js +353 -0
- package/dist/components/radio/radio.spec.js.map +1 -0
- package/dist/components/radio-group/index.d.ts +2 -0
- package/dist/components/radio-group/index.d.ts.map +1 -0
- package/dist/components/radio-group/index.js +2 -0
- package/dist/components/radio-group/index.js.map +1 -0
- package/dist/components/radio-group/radio-group.d.ts +122 -0
- package/dist/components/radio-group/radio-group.d.ts.map +1 -0
- package/dist/components/radio-group/radio-group.js +165 -0
- package/dist/components/radio-group/radio-group.js.map +1 -0
- package/dist/components/radio-group/radio-group.spec.d.ts +2 -0
- package/dist/components/radio-group/radio-group.spec.d.ts.map +1 -0
- package/dist/components/radio-group/radio-group.spec.js +205 -0
- package/dist/components/radio-group/radio-group.spec.js.map +1 -0
- package/dist/components/stack/index.d.ts +2 -0
- package/dist/components/stack/index.d.ts.map +1 -0
- package/dist/components/stack/index.js +2 -0
- package/dist/components/stack/index.js.map +1 -0
- package/dist/components/stack/stack.d.ts +118 -0
- package/dist/components/stack/stack.d.ts.map +1 -0
- package/dist/components/stack/stack.js +137 -0
- package/dist/components/stack/stack.js.map +1 -0
- package/dist/components/stack/stack.spec.d.ts +2 -0
- package/dist/components/stack/stack.spec.d.ts.map +1 -0
- package/dist/components/stack/stack.spec.js +116 -0
- package/dist/components/stack/stack.spec.js.map +1 -0
- package/dist/components/text/text.d.ts +21 -4
- package/dist/components/text/text.d.ts.map +1 -1
- package/dist/components/text/text.js +14 -14
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/text-button/text-button.d.ts +77 -24
- package/dist/components/text-button/text-button.d.ts.map +1 -1
- package/dist/components/text-button/text-button.js +203 -104
- package/dist/components/text-button/text-button.js.map +1 -1
- package/dist/components/text-button/text-button.spec.js +97 -9
- package/dist/components/text-button/text-button.spec.js.map +1 -1
- package/dist/components/toggle/index.d.ts +2 -0
- package/dist/components/toggle/index.d.ts.map +1 -0
- package/dist/components/toggle/index.js +2 -0
- package/dist/components/toggle/index.js.map +1 -0
- package/dist/components/toggle/toggle.d.ts +149 -0
- package/dist/components/toggle/toggle.d.ts.map +1 -0
- package/dist/components/toggle/toggle.js +378 -0
- package/dist/components/toggle/toggle.js.map +1 -0
- package/dist/components/toggle/toggle.spec.d.ts +2 -0
- package/dist/components/toggle/toggle.spec.d.ts.map +1 -0
- package/dist/components/toggle/toggle.spec.js +353 -0
- package/dist/components/toggle/toggle.spec.js.map +1 -0
- package/dist/hudini.js +6523 -4980
- package/dist/hudini.min.js +1 -1
- package/dist/loaders/load-fonts.d.ts +29 -0
- package/dist/loaders/load-fonts.d.ts.map +1 -1
- package/dist/loaders/load-fonts.js +20 -1
- package/dist/loaders/load-fonts.js.map +1 -1
- package/dist/utils/button-style.d.ts +27 -0
- package/dist/utils/button-style.d.ts.map +1 -0
- package/dist/utils/button-style.js +37 -0
- package/dist/utils/button-style.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/number-to-rgb.d.ts +16 -0
- package/dist/utils/number-to-rgb.d.ts.map +1 -0
- package/dist/utils/number-to-rgb.js +20 -0
- package/dist/utils/number-to-rgb.js.map +1 -0
- package/package.json +2 -2
- package/dist/components/flat-icon-button/flat-icon-button.d.ts +0 -60
- package/dist/components/flat-icon-button/flat-icon-button.d.ts.map +0 -1
- package/dist/components/flat-icon-button/flat-icon-button.js +0 -279
- package/dist/components/flat-icon-button/flat-icon-button.js.map +0 -1
- package/dist/components/flat-icon-button/index.d.ts +0 -2
- package/dist/components/flat-icon-button/index.d.ts.map +0 -1
- package/dist/components/flat-icon-button/index.js +0 -2
- package/dist/components/flat-icon-button/index.js.map +0 -1
- package/dist/components/flat-section-header/flat-section-header.d.ts +0 -143
- package/dist/components/flat-section-header/flat-section-header.d.ts.map +0 -1
- package/dist/components/flat-section-header/flat-section-header.js +0 -275
- package/dist/components/flat-section-header/flat-section-header.js.map +0 -1
- package/dist/components/flat-section-header/flat-section-header.spec.d.ts +0 -2
- package/dist/components/flat-section-header/flat-section-header.spec.d.ts.map +0 -1
- package/dist/components/flat-section-header/flat-section-header.spec.js +0 -255
- package/dist/components/flat-section-header/flat-section-header.spec.js.map +0 -1
- package/dist/components/flat-section-header/index.d.ts +0 -2
- package/dist/components/flat-section-header/index.d.ts.map +0 -1
- package/dist/components/flat-section-header/index.js +0 -2
- package/dist/components/flat-section-header/index.js.map +0 -1
- package/dist/components/flat-text-button/flat-text-button.d.ts +0 -165
- package/dist/components/flat-text-button/flat-text-button.d.ts.map +0 -1
- package/dist/components/flat-text-button/flat-text-button.js +0 -325
- package/dist/components/flat-text-button/flat-text-button.js.map +0 -1
- package/dist/components/flat-text-button/flat-text-button.spec.d.ts +0 -2
- package/dist/components/flat-text-button/flat-text-button.spec.d.ts.map +0 -1
- package/dist/components/flat-text-button/flat-text-button.spec.js +0 -243
- package/dist/components/flat-text-button/flat-text-button.spec.js.map +0 -1
- package/dist/components/flat-text-button/index.d.ts +0 -2
- package/dist/components/flat-text-button/index.d.ts.map +0 -1
- package/dist/components/flat-text-button/index.js +0 -2
- package/dist/components/flat-text-button/index.js.map +0 -1
- package/dist/components/panel/index.d.ts +0 -2
- package/dist/components/panel/index.d.ts.map +0 -1
- package/dist/components/panel/index.js +0 -2
- package/dist/components/panel/index.js.map +0 -1
- package/dist/components/panel/panel.d.ts +0 -78
- package/dist/components/panel/panel.d.ts.map +0 -1
- package/dist/components/panel/panel.js +0 -192
- package/dist/components/panel/panel.js.map +0 -1
- package/dist/components/section-header/index.d.ts +0 -2
- package/dist/components/section-header/index.d.ts.map +0 -1
- package/dist/components/section-header/index.js +0 -2
- package/dist/components/section-header/index.js.map +0 -1
- package/dist/components/section-header/section-header.d.ts +0 -149
- package/dist/components/section-header/section-header.d.ts.map +0 -1
- package/dist/components/section-header/section-header.js +0 -292
- package/dist/components/section-header/section-header.js.map +0 -1
- package/dist/components/section-header/section-header.spec.d.ts +0 -2
- package/dist/components/section-header/section-header.spec.d.ts.map +0 -1
- package/dist/components/section-header/section-header.spec.js +0 -264
- package/dist/components/section-header/section-header.spec.js.map +0 -1
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { type IconKey } from 'font-awesome-for-phaser';
|
|
2
|
+
import { GameObjects, Scene } from 'phaser';
|
|
3
|
+
import { Column, type ColorKey, type ColorToken, type FontKey, type RadiusKey, type SpacingKey } from 'phaser-wind';
|
|
4
|
+
import { type ButtonVariant } from '../../utils/button-style';
|
|
5
|
+
import { IconButton } from '../icon-button';
|
|
6
|
+
import { Overlay } from '../overlay';
|
|
7
|
+
/**
|
|
8
|
+
* One action button rendered in the modal footer. Actions are laid out
|
|
9
|
+
* left-to-right in a row aligned to the right edge; the LAST action is
|
|
10
|
+
* treated as the primary CTA (variant `'filled'`) and the rest are secondary
|
|
11
|
+
* (variant `'outline'`) unless overridden.
|
|
12
|
+
*/
|
|
13
|
+
export type ModalAction = {
|
|
14
|
+
/** Button label. */
|
|
15
|
+
label: string;
|
|
16
|
+
/** Called on click. Modal does NOT auto-close — call `modal.close()` yourself if desired. */
|
|
17
|
+
onClick: () => void;
|
|
18
|
+
/** Overrides the auto-assigned primary/secondary variant. */
|
|
19
|
+
variant?: 'filled' | 'outline';
|
|
20
|
+
/** Overrides the auto-assigned color. */
|
|
21
|
+
color?: ColorToken | string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Visual customization for the top-right close button. `showCloseButton`
|
|
25
|
+
* controls whether it's rendered at all; this object tweaks its appearance
|
|
26
|
+
* when it is shown. All fields are optional and merged with sensible defaults.
|
|
27
|
+
*/
|
|
28
|
+
export type ModalCloseButtonConfig = {
|
|
29
|
+
/** Font Awesome icon key. Defaults to `'xmark'`. */
|
|
30
|
+
icon?: IconKey;
|
|
31
|
+
/**
|
|
32
|
+
* Icon/border color. Accepts the same palette family names as IconButton
|
|
33
|
+
* (`'gray'`, `'blue'`, `'red-500'`, …). Defaults to `'gray'`.
|
|
34
|
+
*/
|
|
35
|
+
color?: Omit<ColorKey, 'black' | 'white'>;
|
|
36
|
+
/** Icon size in pixels. Defaults to `14`. */
|
|
37
|
+
size?: number;
|
|
38
|
+
/** `'outline'` (default) or `'filled'`. */
|
|
39
|
+
variant?: ButtonVariant;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Named modal widths. Height auto-fits the content.
|
|
43
|
+
* - `'sm'` — 320px (compact confirmations).
|
|
44
|
+
* - `'md'` — 480px (default, standard dialog).
|
|
45
|
+
* - `'lg'` — 640px (rich content, forms).
|
|
46
|
+
* - `{ width }` — explicit pixel width for custom sizing.
|
|
47
|
+
*/
|
|
48
|
+
export type ModalSize = 'sm' | 'md' | 'lg' | {
|
|
49
|
+
width: number;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Friendly key names accepted by `keysToClose`. Case-insensitive strings
|
|
53
|
+
* mapped internally to `KeyboardEvent.key`. Common shortcuts:
|
|
54
|
+
* `'ESC'`, `'ENTER'`, `'SPACE'`, single letters (`'C'`, `'Y'`).
|
|
55
|
+
*/
|
|
56
|
+
export type ModalKey = string;
|
|
57
|
+
export type ModalParams = {
|
|
58
|
+
/** Phaser scene where the modal will be added. */
|
|
59
|
+
scene: Scene;
|
|
60
|
+
/** Modal title. Rendered at the top of the header, bold. */
|
|
61
|
+
title?: string;
|
|
62
|
+
/** Supporting description below the title. Regular weight, smaller. */
|
|
63
|
+
description?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Optional media (image/sprite/container) shown ABOVE the header. You are
|
|
66
|
+
* responsible for its size — Modal just places it at the top of the card
|
|
67
|
+
* with the standard content padding.
|
|
68
|
+
*/
|
|
69
|
+
media?: GameObjects.GameObject;
|
|
70
|
+
/**
|
|
71
|
+
* Footer action buttons. Rendered right-aligned in a row. The LAST entry
|
|
72
|
+
* is auto-assigned the primary variant (filled); the rest are secondary
|
|
73
|
+
* (outline). Actions do NOT auto-close the modal.
|
|
74
|
+
*/
|
|
75
|
+
actions?: ModalAction[];
|
|
76
|
+
/** Custom header GameObject — overrides `title` + `description`. */
|
|
77
|
+
header?: GameObjects.GameObject;
|
|
78
|
+
/** Custom body GameObject — content between header and footer. */
|
|
79
|
+
body?: GameObjects.GameObject;
|
|
80
|
+
/** Custom footer GameObject — overrides `actions`. */
|
|
81
|
+
footer?: GameObjects.GameObject;
|
|
82
|
+
/** Modal width. Defaults to `'md'` (480px). */
|
|
83
|
+
size?: ModalSize;
|
|
84
|
+
/** Card background color. Defaults to `'white'`. */
|
|
85
|
+
backgroundColor?: ColorToken | string;
|
|
86
|
+
/** Card border radius. Defaults to `'lg'`. */
|
|
87
|
+
borderRadius?: RadiusKey | number;
|
|
88
|
+
/** Inner content padding. Defaults to `'6'` (24px). */
|
|
89
|
+
padding?: SpacingKey | number;
|
|
90
|
+
/** Font family for title/description. Defaults to `'Fredoka'`. */
|
|
91
|
+
font?: FontKey | string;
|
|
92
|
+
/**
|
|
93
|
+
* Show the X close button in the top-right corner. Defaults to `true`.
|
|
94
|
+
* Disable for forced-choice dialogs (error, critical confirmation).
|
|
95
|
+
*/
|
|
96
|
+
showCloseButton?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Visual customization for the close button (icon, color, size, variant).
|
|
99
|
+
* Only applied when `showCloseButton` is `true`. Fields are optional and
|
|
100
|
+
* merged with defaults (`icon: 'xmark'`, `color: 'gray'`, `size: 14`,
|
|
101
|
+
* `variant: 'outline'`).
|
|
102
|
+
*/
|
|
103
|
+
closeButton?: ModalCloseButtonConfig;
|
|
104
|
+
/**
|
|
105
|
+
* Close when the user clicks the dim overlay. Defaults to `true`.
|
|
106
|
+
* Disable for confirmations you don't want dismissed by accident.
|
|
107
|
+
*/
|
|
108
|
+
closeOnOverlayClick?: boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Keyboard keys that dismiss the modal. Defaults to `['ESC']`. Pass `[]`
|
|
111
|
+
* to disable keyboard closing entirely. Case-insensitive; strings map to
|
|
112
|
+
* `KeyboardEvent.key` (`'ESC'` → `'Escape'`, `'SPACE'` → `' '`).
|
|
113
|
+
*/
|
|
114
|
+
keysToClose?: ModalKey[];
|
|
115
|
+
/**
|
|
116
|
+
* Called after the modal has been closed (by X button, overlay click,
|
|
117
|
+
* keyboard, or `modal.close()`). Fires AFTER the exit animation completes,
|
|
118
|
+
* BEFORE the modal is destroyed. Not called if `modal.destroy()` is called
|
|
119
|
+
* directly without a close.
|
|
120
|
+
*/
|
|
121
|
+
onClose?: () => void;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Modal — centered dialog with an animated dim overlay, keyboard/click
|
|
125
|
+
* dismissal, and preset slots for title/description/media/actions. Composes
|
|
126
|
+
* on top of the Overlay primitive.
|
|
127
|
+
*
|
|
128
|
+
* Constructor sets it up invisible; call `modal.open()` to fade in. It is
|
|
129
|
+
* destroyed after `modal.close()` completes.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* const modal = new Modal({
|
|
133
|
+
* scene,
|
|
134
|
+
* title: 'Delete save?',
|
|
135
|
+
* description: 'This cannot be undone.',
|
|
136
|
+
* actions: [
|
|
137
|
+
* { label: 'Cancel', onClick: () => modal.close() },
|
|
138
|
+
* { label: 'Delete', onClick: () => { deleteSave(); modal.close(); } },
|
|
139
|
+
* ],
|
|
140
|
+
* });
|
|
141
|
+
* modal.open();
|
|
142
|
+
*/
|
|
143
|
+
export declare class Modal extends GameObjects.Container {
|
|
144
|
+
/** Underlying dim overlay. */
|
|
145
|
+
overlay: Overlay;
|
|
146
|
+
/** Card background sprite. */
|
|
147
|
+
backgroundSprite: GameObjects.Sprite;
|
|
148
|
+
/** Column composing media/header/body/footer. */
|
|
149
|
+
contentColumn: Column;
|
|
150
|
+
/** X button (top-right). Only present when `showCloseButton` is `true`. */
|
|
151
|
+
closeButton: IconButton | undefined;
|
|
152
|
+
private pw;
|
|
153
|
+
private cardWidth;
|
|
154
|
+
private paddingPx;
|
|
155
|
+
private borderRadiusPx;
|
|
156
|
+
private backgroundColorValue;
|
|
157
|
+
private fontFamily;
|
|
158
|
+
private closeOnOverlayClick;
|
|
159
|
+
private keysToClose;
|
|
160
|
+
private onCloseCallback;
|
|
161
|
+
private isOpen;
|
|
162
|
+
private isAnimating;
|
|
163
|
+
private cardHeight;
|
|
164
|
+
private keydownHandler;
|
|
165
|
+
constructor(params: ModalParams);
|
|
166
|
+
/** Open the modal — fades in overlay + pops the card. Idempotent while open. */
|
|
167
|
+
open(): Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* Close the modal — reverses the animation and destroys the instance.
|
|
170
|
+
* Fires `onClose` after the exit animation completes. Idempotent.
|
|
171
|
+
*/
|
|
172
|
+
close(): Promise<void>;
|
|
173
|
+
/** `true` while the modal is open (between `open()` start and `close()` end). */
|
|
174
|
+
get opened(): boolean;
|
|
175
|
+
destroy(): void;
|
|
176
|
+
private createOverlay;
|
|
177
|
+
private buildContent;
|
|
178
|
+
private buildDefaultHeader;
|
|
179
|
+
private buildDefaultFooter;
|
|
180
|
+
private createBackgroundSprite;
|
|
181
|
+
private arrangeChildren;
|
|
182
|
+
private createCloseButton;
|
|
183
|
+
private measureContentHeight;
|
|
184
|
+
private createBackgroundTexture;
|
|
185
|
+
private attachKeyboardListener;
|
|
186
|
+
private detachKeyboardListener;
|
|
187
|
+
private static resolveWidth;
|
|
188
|
+
private static resolvePadding;
|
|
189
|
+
private static resolveRadius;
|
|
190
|
+
private static resolveFont;
|
|
191
|
+
private static normalizeKey;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../../src/components/modal/modal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { GameObjects } from 'phaser';
|
|
2
|
+
import { Color, Column, Ease, Row, } from 'phaser-wind';
|
|
3
|
+
import { getPWFromScene } from '../../utils/get-pw-from-scene';
|
|
4
|
+
import { IconButton } from '../icon-button';
|
|
5
|
+
import { Overlay } from '../overlay';
|
|
6
|
+
import { Text } from '../text';
|
|
7
|
+
import { TextButton } from '../text-button';
|
|
8
|
+
// -------------------- Constants --------------------
|
|
9
|
+
const SIZE_TO_WIDTH = {
|
|
10
|
+
sm: 320,
|
|
11
|
+
md: 480,
|
|
12
|
+
lg: 640,
|
|
13
|
+
};
|
|
14
|
+
const DEFAULT_SIZE = 'md';
|
|
15
|
+
const DEFAULT_BACKGROUND = 'white';
|
|
16
|
+
const DEFAULT_RADIUS = 'lg';
|
|
17
|
+
const DEFAULT_PADDING = '6';
|
|
18
|
+
const DEFAULT_FONT = 'Fredoka';
|
|
19
|
+
const TITLE_FONT_SIZE = 22;
|
|
20
|
+
const DESCRIPTION_FONT_SIZE = 16;
|
|
21
|
+
const TITLE_COLOR = 'gray-900';
|
|
22
|
+
const DESCRIPTION_COLOR = 'gray-600';
|
|
23
|
+
const CONTENT_ROW_GAP = 16;
|
|
24
|
+
const FOOTER_BUTTON_GAP = 8;
|
|
25
|
+
const HEADER_GAP = 4;
|
|
26
|
+
const CLOSE_BUTTON_SIZE = 14;
|
|
27
|
+
const CLOSE_BUTTON_INSET = 12;
|
|
28
|
+
const CLOSE_BUTTON_COLOR = 'gray';
|
|
29
|
+
const PRIMARY_ACTION_COLOR = 'blue-500';
|
|
30
|
+
const SECONDARY_ACTION_COLOR = 'gray-500';
|
|
31
|
+
const TEXTURE_ANTIALIAS_MARGIN = 1;
|
|
32
|
+
// Open/close animation
|
|
33
|
+
const OPEN_DURATION_MS = 200;
|
|
34
|
+
const CLOSE_DURATION_MS = 150;
|
|
35
|
+
const START_SCALE = 0.9;
|
|
36
|
+
const CLOSE_END_SCALE = 0.95;
|
|
37
|
+
// Friendly key aliases → KeyboardEvent.key value
|
|
38
|
+
const KEY_ALIAS = {
|
|
39
|
+
ESC: 'Escape',
|
|
40
|
+
ESCAPE: 'Escape',
|
|
41
|
+
ENTER: 'Enter',
|
|
42
|
+
RETURN: 'Enter',
|
|
43
|
+
SPACE: ' ',
|
|
44
|
+
TAB: 'Tab',
|
|
45
|
+
};
|
|
46
|
+
// -------------------- Component --------------------
|
|
47
|
+
/**
|
|
48
|
+
* Modal — centered dialog with an animated dim overlay, keyboard/click
|
|
49
|
+
* dismissal, and preset slots for title/description/media/actions. Composes
|
|
50
|
+
* on top of the Overlay primitive.
|
|
51
|
+
*
|
|
52
|
+
* Constructor sets it up invisible; call `modal.open()` to fade in. It is
|
|
53
|
+
* destroyed after `modal.close()` completes.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* const modal = new Modal({
|
|
57
|
+
* scene,
|
|
58
|
+
* title: 'Delete save?',
|
|
59
|
+
* description: 'This cannot be undone.',
|
|
60
|
+
* actions: [
|
|
61
|
+
* { label: 'Cancel', onClick: () => modal.close() },
|
|
62
|
+
* { label: 'Delete', onClick: () => { deleteSave(); modal.close(); } },
|
|
63
|
+
* ],
|
|
64
|
+
* });
|
|
65
|
+
* modal.open();
|
|
66
|
+
*/
|
|
67
|
+
export class Modal extends GameObjects.Container {
|
|
68
|
+
/** Underlying dim overlay. */
|
|
69
|
+
overlay;
|
|
70
|
+
/** Card background sprite. */
|
|
71
|
+
backgroundSprite;
|
|
72
|
+
/** Column composing media/header/body/footer. */
|
|
73
|
+
contentColumn;
|
|
74
|
+
/** X button (top-right). Only present when `showCloseButton` is `true`. */
|
|
75
|
+
closeButton;
|
|
76
|
+
pw;
|
|
77
|
+
// Resolved config
|
|
78
|
+
cardWidth;
|
|
79
|
+
paddingPx;
|
|
80
|
+
borderRadiusPx;
|
|
81
|
+
backgroundColorValue;
|
|
82
|
+
fontFamily;
|
|
83
|
+
closeOnOverlayClick;
|
|
84
|
+
keysToClose;
|
|
85
|
+
onCloseCallback;
|
|
86
|
+
// State
|
|
87
|
+
isOpen = false;
|
|
88
|
+
isAnimating = false;
|
|
89
|
+
cardHeight = 0;
|
|
90
|
+
keydownHandler;
|
|
91
|
+
constructor(params) {
|
|
92
|
+
const { scene } = params;
|
|
93
|
+
const cam = scene.cameras.main;
|
|
94
|
+
super(scene, cam.width / 2, cam.height / 2);
|
|
95
|
+
this.pw = getPWFromScene(scene);
|
|
96
|
+
this.cardWidth = Modal.resolveWidth(params.size ?? DEFAULT_SIZE);
|
|
97
|
+
this.paddingPx = Modal.resolvePadding(this.pw, params.padding);
|
|
98
|
+
this.borderRadiusPx = Modal.resolveRadius(this.pw, params.borderRadius);
|
|
99
|
+
this.backgroundColorValue = Color.rgb((params.backgroundColor ?? DEFAULT_BACKGROUND));
|
|
100
|
+
this.fontFamily = Modal.resolveFont(this.pw, params.font);
|
|
101
|
+
this.closeOnOverlayClick = params.closeOnOverlayClick ?? true;
|
|
102
|
+
this.keysToClose = (params.keysToClose ?? ['ESC']).map((k) => Modal.normalizeKey(k));
|
|
103
|
+
this.onCloseCallback = params.onClose;
|
|
104
|
+
this.createOverlay(scene);
|
|
105
|
+
this.buildContent(scene, params);
|
|
106
|
+
this.createBackgroundSprite(scene);
|
|
107
|
+
this.arrangeChildren();
|
|
108
|
+
this.createCloseButton(scene, params.showCloseButton ?? true, params.closeButton);
|
|
109
|
+
// Start invisible + slightly shrunk for pop-in animation.
|
|
110
|
+
this.setAlpha(0);
|
|
111
|
+
this.setScale(START_SCALE);
|
|
112
|
+
this.setDepth(this.pw.depth.value('modal'));
|
|
113
|
+
this.setScrollFactor(0);
|
|
114
|
+
scene.add.existing(this);
|
|
115
|
+
}
|
|
116
|
+
/** Open the modal — fades in overlay + pops the card. Idempotent while open. */
|
|
117
|
+
open() {
|
|
118
|
+
if (this.isOpen || this.isAnimating)
|
|
119
|
+
return Promise.resolve();
|
|
120
|
+
this.isOpen = true;
|
|
121
|
+
this.isAnimating = true;
|
|
122
|
+
this.attachKeyboardListener();
|
|
123
|
+
const overlayPromise = this.overlay.open();
|
|
124
|
+
const cardPromise = new Promise((resolve) => {
|
|
125
|
+
this.scene.tweens.add({
|
|
126
|
+
targets: this,
|
|
127
|
+
alpha: 1,
|
|
128
|
+
scaleX: 1,
|
|
129
|
+
scaleY: 1,
|
|
130
|
+
duration: OPEN_DURATION_MS,
|
|
131
|
+
ease: Ease.value('back-out'),
|
|
132
|
+
onComplete: () => {
|
|
133
|
+
this.isAnimating = false;
|
|
134
|
+
resolve();
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
return Promise.all([overlayPromise, cardPromise]).then(() => undefined);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Close the modal — reverses the animation and destroys the instance.
|
|
142
|
+
* Fires `onClose` after the exit animation completes. Idempotent.
|
|
143
|
+
*/
|
|
144
|
+
close() {
|
|
145
|
+
if (!this.isOpen)
|
|
146
|
+
return Promise.resolve();
|
|
147
|
+
this.isOpen = false;
|
|
148
|
+
this.isAnimating = true;
|
|
149
|
+
this.detachKeyboardListener();
|
|
150
|
+
const overlayPromise = this.overlay.close();
|
|
151
|
+
const cardPromise = new Promise((resolve) => {
|
|
152
|
+
this.scene.tweens.add({
|
|
153
|
+
targets: this,
|
|
154
|
+
alpha: 0,
|
|
155
|
+
scaleX: CLOSE_END_SCALE,
|
|
156
|
+
scaleY: CLOSE_END_SCALE,
|
|
157
|
+
duration: CLOSE_DURATION_MS,
|
|
158
|
+
ease: Ease.value('out'),
|
|
159
|
+
onComplete: () => resolve(),
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
return Promise.all([overlayPromise, cardPromise]).then(() => {
|
|
163
|
+
this.isAnimating = false;
|
|
164
|
+
this.onCloseCallback?.();
|
|
165
|
+
this.destroy();
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/** `true` while the modal is open (between `open()` start and `close()` end). */
|
|
169
|
+
get opened() {
|
|
170
|
+
return this.isOpen;
|
|
171
|
+
}
|
|
172
|
+
destroy() {
|
|
173
|
+
this.detachKeyboardListener();
|
|
174
|
+
this.overlay?.destroy();
|
|
175
|
+
super.destroy();
|
|
176
|
+
}
|
|
177
|
+
// -------------------- Construction helpers --------------------
|
|
178
|
+
createOverlay(scene) {
|
|
179
|
+
this.overlay = new Overlay({
|
|
180
|
+
scene,
|
|
181
|
+
interactive: true,
|
|
182
|
+
onClick: () => {
|
|
183
|
+
if (this.closeOnOverlayClick && this.isOpen && !this.isAnimating) {
|
|
184
|
+
void this.close();
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
buildContent(scene, params) {
|
|
190
|
+
const sections = [];
|
|
191
|
+
if (params.media)
|
|
192
|
+
sections.push(params.media);
|
|
193
|
+
const header = params.header ?? this.buildDefaultHeader(scene, params);
|
|
194
|
+
if (header)
|
|
195
|
+
sections.push(header);
|
|
196
|
+
if (params.body)
|
|
197
|
+
sections.push(params.body);
|
|
198
|
+
const footer = params.footer ?? this.buildDefaultFooter(scene, params.actions);
|
|
199
|
+
if (footer)
|
|
200
|
+
sections.push(footer);
|
|
201
|
+
this.contentColumn = new Column({
|
|
202
|
+
scene,
|
|
203
|
+
x: 0,
|
|
204
|
+
y: 0,
|
|
205
|
+
gap: CONTENT_ROW_GAP,
|
|
206
|
+
align: 'center',
|
|
207
|
+
children: sections,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
buildDefaultHeader(scene, params) {
|
|
211
|
+
if (!params.title && !params.description)
|
|
212
|
+
return undefined;
|
|
213
|
+
const items = [];
|
|
214
|
+
if (params.title) {
|
|
215
|
+
const title = new Text({
|
|
216
|
+
scene,
|
|
217
|
+
x: 0,
|
|
218
|
+
y: 0,
|
|
219
|
+
text: params.title,
|
|
220
|
+
size: TITLE_FONT_SIZE,
|
|
221
|
+
fontFamily: this.fontFamily,
|
|
222
|
+
strokeThickness: 0,
|
|
223
|
+
});
|
|
224
|
+
title.setColor(Color.rgb(TITLE_COLOR));
|
|
225
|
+
title.setOrigin(0.5, 0.5);
|
|
226
|
+
items.push(title);
|
|
227
|
+
}
|
|
228
|
+
if (params.description) {
|
|
229
|
+
const desc = new Text({
|
|
230
|
+
scene,
|
|
231
|
+
x: 0,
|
|
232
|
+
y: 0,
|
|
233
|
+
text: params.description,
|
|
234
|
+
size: DESCRIPTION_FONT_SIZE,
|
|
235
|
+
fontFamily: this.fontFamily,
|
|
236
|
+
strokeThickness: 0,
|
|
237
|
+
});
|
|
238
|
+
desc.setColor(Color.rgb(DESCRIPTION_COLOR));
|
|
239
|
+
desc.setOrigin(0.5, 0.5);
|
|
240
|
+
items.push(desc);
|
|
241
|
+
}
|
|
242
|
+
if (items.length === 1)
|
|
243
|
+
return items[0];
|
|
244
|
+
return new Column({
|
|
245
|
+
scene,
|
|
246
|
+
x: 0,
|
|
247
|
+
y: 0,
|
|
248
|
+
gap: HEADER_GAP,
|
|
249
|
+
align: 'center',
|
|
250
|
+
children: items,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
buildDefaultFooter(scene, actions) {
|
|
254
|
+
if (!actions || actions.length === 0)
|
|
255
|
+
return undefined;
|
|
256
|
+
const buttons = actions.map((action, index) => {
|
|
257
|
+
const isLast = index === actions.length - 1;
|
|
258
|
+
const variant = action.variant ?? (isLast ? 'filled' : 'outline');
|
|
259
|
+
const color = action.color ?? (isLast ? PRIMARY_ACTION_COLOR : SECONDARY_ACTION_COLOR);
|
|
260
|
+
return new TextButton({
|
|
261
|
+
scene,
|
|
262
|
+
x: 0,
|
|
263
|
+
y: 0,
|
|
264
|
+
text: action.label,
|
|
265
|
+
color,
|
|
266
|
+
variant,
|
|
267
|
+
onClick: action.onClick,
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
return new Row({
|
|
271
|
+
scene,
|
|
272
|
+
x: 0,
|
|
273
|
+
y: 0,
|
|
274
|
+
gap: FOOTER_BUTTON_GAP,
|
|
275
|
+
align: 'center',
|
|
276
|
+
children: buttons,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
createBackgroundSprite(scene) {
|
|
280
|
+
const height = this.measureContentHeight() + this.paddingPx * 2;
|
|
281
|
+
this.cardHeight = height;
|
|
282
|
+
const textureKey = this.createBackgroundTexture(scene, this.cardWidth, height);
|
|
283
|
+
this.backgroundSprite = scene.add.sprite(0, 0, textureKey);
|
|
284
|
+
this.backgroundSprite.setOrigin(0.5, 0.5);
|
|
285
|
+
this.addAt(this.backgroundSprite, 0);
|
|
286
|
+
}
|
|
287
|
+
arrangeChildren() {
|
|
288
|
+
this.add(this.contentColumn);
|
|
289
|
+
this.contentColumn.setPosition(0, 0);
|
|
290
|
+
}
|
|
291
|
+
createCloseButton(scene, show, config) {
|
|
292
|
+
if (!show)
|
|
293
|
+
return;
|
|
294
|
+
const btn = new IconButton({
|
|
295
|
+
scene,
|
|
296
|
+
x: this.cardWidth / 2 - CLOSE_BUTTON_INSET,
|
|
297
|
+
y: -this.cardHeight / 2 + CLOSE_BUTTON_INSET,
|
|
298
|
+
icon: config?.icon ?? 'xmark',
|
|
299
|
+
size: config?.size ?? CLOSE_BUTTON_SIZE,
|
|
300
|
+
color: config?.color ?? CLOSE_BUTTON_COLOR,
|
|
301
|
+
variant: config?.variant ?? 'outline',
|
|
302
|
+
onClick: () => {
|
|
303
|
+
if (this.isOpen && !this.isAnimating)
|
|
304
|
+
void this.close();
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
this.closeButton = btn;
|
|
308
|
+
this.add(btn);
|
|
309
|
+
}
|
|
310
|
+
measureContentHeight() {
|
|
311
|
+
// Column measures children via layout(); read its computed height.
|
|
312
|
+
const { height } = this.contentColumn;
|
|
313
|
+
return typeof height === 'number' ? height : 0;
|
|
314
|
+
}
|
|
315
|
+
createBackgroundTexture(scene, width, height) {
|
|
316
|
+
const key = `modal_bg_${this.backgroundColorValue}_${this.borderRadiusPx}_${width}_${height}`;
|
|
317
|
+
if (scene.textures.exists(key))
|
|
318
|
+
return key;
|
|
319
|
+
const graphics = scene.add.graphics();
|
|
320
|
+
const pad = TEXTURE_ANTIALIAS_MARGIN;
|
|
321
|
+
const maxRadius = Math.floor(Math.min(width / 2, height / 2));
|
|
322
|
+
const finalRadius = Math.max(0, Math.min(this.borderRadiusPx, maxRadius));
|
|
323
|
+
graphics.fillStyle(Color.hex(this.backgroundColorValue), 1);
|
|
324
|
+
graphics.fillRoundedRect(pad, pad, width, height, finalRadius);
|
|
325
|
+
graphics.generateTexture(key, width + pad * 2, height + pad * 2);
|
|
326
|
+
graphics.destroy();
|
|
327
|
+
return key;
|
|
328
|
+
}
|
|
329
|
+
// -------------------- Keyboard --------------------
|
|
330
|
+
attachKeyboardListener() {
|
|
331
|
+
if (this.keysToClose.length === 0)
|
|
332
|
+
return;
|
|
333
|
+
const keyboard = this.scene.input?.keyboard;
|
|
334
|
+
if (!keyboard)
|
|
335
|
+
return;
|
|
336
|
+
const handler = (event) => {
|
|
337
|
+
if (!this.isOpen || this.isAnimating)
|
|
338
|
+
return;
|
|
339
|
+
if (this.keysToClose.includes(event.key)) {
|
|
340
|
+
event.preventDefault();
|
|
341
|
+
void this.close();
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
this.keydownHandler = handler;
|
|
345
|
+
keyboard.on('keydown', handler);
|
|
346
|
+
}
|
|
347
|
+
detachKeyboardListener() {
|
|
348
|
+
if (!this.keydownHandler)
|
|
349
|
+
return;
|
|
350
|
+
const keyboard = this.scene.input?.keyboard;
|
|
351
|
+
keyboard?.off('keydown', this.keydownHandler);
|
|
352
|
+
this.keydownHandler = undefined;
|
|
353
|
+
}
|
|
354
|
+
// -------------------- Static resolvers --------------------
|
|
355
|
+
static resolveWidth(size) {
|
|
356
|
+
if (typeof size === 'object')
|
|
357
|
+
return size.width;
|
|
358
|
+
return SIZE_TO_WIDTH[size];
|
|
359
|
+
}
|
|
360
|
+
static resolvePadding(pw, padding) {
|
|
361
|
+
if (typeof padding === 'number')
|
|
362
|
+
return padding;
|
|
363
|
+
return pw.spacing.px((padding ?? DEFAULT_PADDING));
|
|
364
|
+
}
|
|
365
|
+
static resolveRadius(pw, radius) {
|
|
366
|
+
if (typeof radius === 'number')
|
|
367
|
+
return radius;
|
|
368
|
+
return pw.radius.px((radius ?? DEFAULT_RADIUS));
|
|
369
|
+
}
|
|
370
|
+
static resolveFont(pw, font) {
|
|
371
|
+
if (!font)
|
|
372
|
+
return DEFAULT_FONT;
|
|
373
|
+
if (typeof font === 'string')
|
|
374
|
+
return font;
|
|
375
|
+
return pw.font.family(font);
|
|
376
|
+
}
|
|
377
|
+
static normalizeKey(key) {
|
|
378
|
+
const upper = key.toUpperCase();
|
|
379
|
+
return KEY_ALIAS[upper] ?? key;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.js","sourceRoot":"","sources":["../../../src/components/modal/modal.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAS,MAAM,QAAQ,CAAC;AAC5C,OAAO,EACL,KAAK,EACL,MAAM,EACN,IAAI,EAEJ,GAAG,GAMJ,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAwI5C,sDAAsD;AAEtD,MAAM,aAAa,GAA0D;IAC3E,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;CACR,CAAC;AAEF,MAAM,YAAY,GAAc,IAAI,CAAC;AACrC,MAAM,kBAAkB,GAAe,OAAO,CAAC;AAC/C,MAAM,cAAc,GAAc,IAAI,CAAC;AACvC,MAAM,eAAe,GAAe,GAAG,CAAC;AACxC,MAAM,YAAY,GAAG,SAAS,CAAC;AAE/B,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,WAAW,GAAe,UAAU,CAAC;AAC3C,MAAM,iBAAiB,GAAe,UAAU,CAAC;AAEjD,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,kBAAkB,GAAa,MAAM,CAAC;AAE5C,MAAM,oBAAoB,GAAe,UAAU,CAAC;AACpD,MAAM,sBAAsB,GAAe,UAAU,CAAC;AAEtD,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAEnC,uBAAuB;AACvB,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,iDAAiD;AACjD,MAAM,SAAS,GAA2B;IACxC,GAAG,EAAE,QAAQ;IACb,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,GAAG;IACV,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,sDAAsD;AAEtD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,KAAM,SAAQ,WAAW,CAAC,SAAS;IAC9C,8BAA8B;IACvB,OAAO,CAAW;IACzB,8BAA8B;IACvB,gBAAgB,CAAsB;IAC7C,iDAAiD;IAC1C,aAAa,CAAU;IAC9B,2EAA2E;IACpE,WAAW,CAAyB;IAEnC,EAAE,CAAuB;IAEjC,kBAAkB;IACV,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,cAAc,CAAS;IACvB,oBAAoB,CAAS;IAC7B,UAAU,CAAS;IACnB,mBAAmB,CAAU;IAC7B,WAAW,CAAW;IACtB,eAAe,CAA2B;IAElD,QAAQ;IACA,MAAM,GAAY,KAAK,CAAC;IACxB,WAAW,GAAY,KAAK,CAAC;IAC7B,UAAU,GAAW,CAAC,CAAC;IACvB,cAAc,CAA+C;IAErE,YAAY,MAAmB;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/B,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,YAAY,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACxE,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,GAAG,CACnC,CAAC,MAAM,CAAC,eAAe,IAAI,kBAAkB,CAAe,CAC7D,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC;QAC9D,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAU,EAAE,CACnE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CACtB,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC;QAEtC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,CACpB,KAAK,EACL,MAAM,CAAC,eAAe,IAAI,IAAI,EAC9B,MAAM,CAAC,WAAW,CACnB,CAAC;QAEF,0DAA0D;QAC1D,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAExB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,gFAAgF;IACzE,IAAI;QACT,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAQ,EAAE;YACtD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBACpB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,CAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5B,UAAU,EAAE,GAAS,EAAE;oBACrB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBACzB,OAAO,EAAE,CAAC;gBACZ,CAAC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAS,EAAE,CAAC,SAAS,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACI,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAQ,EAAE;YACtD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBACpB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,eAAe;gBACvB,QAAQ,EAAE,iBAAiB;gBAC3B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBACvB,UAAU,EAAE,GAAS,EAAE,CAAC,OAAO,EAAE;aAClC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAS,EAAE;YAChE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iFAAiF;IACjF,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEe,OAAO;QACrB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,iEAAiE;IAEzD,aAAa,CAAC,KAAY;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC;YACzB,KAAK;YACL,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,GAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;gBACpB,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,KAAY,EAAE,MAAmB;QACpD,MAAM,QAAQ,GAA6B,EAAE,CAAC;QAE9C,IAAI,MAAM,CAAC,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvE,IAAI,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,MAAM,CAAC,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/E,IAAI,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC;YAC9B,KAAK;YACL,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CACxB,KAAY,EACZ,MAAmB;QAEnB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,SAAS,CAAC;QAE3D,MAAM,KAAK,GAA6B,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC;gBACrB,KAAK;gBACL,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,IAAI,EAAE,MAAM,CAAC,KAAK;gBAClB,IAAI,EAAE,eAAe;gBACrB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,eAAe,EAAE,CAAC;aACnB,CAAC,CAAC;YACH,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YACvC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;gBACpB,KAAK;gBACL,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,IAAI,EAAE,MAAM,CAAC,WAAW;gBACxB,IAAI,EAAE,qBAAqB;gBAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,eAAe,EAAE,CAAC;aACnB,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAExC,OAAO,IAAI,MAAM,CAAC;YAChB,KAAK;YACL,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CACxB,KAAY,EACZ,OAAkC;QAElC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEvD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAc,EAAE;YACxD,MAAM,MAAM,GAAG,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAClE,MAAM,KAAK,GACT,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;YAC3E,OAAO,IAAI,UAAU,CAAC;gBACpB,KAAK;gBACL,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC;gBACJ,IAAI,EAAE,MAAM,CAAC,KAAK;gBAClB,KAAK;gBACL,OAAO;gBACP,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,GAAG,CAAC;YACb,KAAK;YACL,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,GAAG,EAAE,iBAAiB;YACtB,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,KAAY;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/E,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAEO,iBAAiB,CACvB,KAAY,EACZ,IAAa,EACb,MAA0C;QAE1C,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC;YACzB,KAAK;YACL,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,kBAAkB;YAC1C,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,kBAAkB;YAC5C,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,OAAO;YAC7B,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,iBAAiB;YACvC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,kBAAkB;YAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,SAAS;YACrC,OAAO,EAAE,GAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1D,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAEO,oBAAoB;QAC1B,mEAAmE;QACnE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,aAA8C,CAAC;QACvE,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAEO,uBAAuB,CAC7B,KAAY,EACZ,KAAa,EACb,MAAc;QAEd,MAAM,GAAG,GAAG,YAAY,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QAC9F,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;QAE3C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,wBAAwB,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;QAE1E,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC/D,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QACjE,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEnB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,qDAAqD;IAE7C,sBAAsB;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC5C,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,OAAO,GAAG,CAAC,KAAoB,EAAQ,EAAE;YAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;gBAAE,OAAO;YAC7C,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC5C,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAClC,CAAC;IAED,6DAA6D;IAErD,MAAM,CAAC,YAAY,CAAC,IAAe;QACzC,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAChD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAEO,MAAM,CAAC,cAAc,CAC3B,EAAwB,EACxB,OAAwC;QAExC,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;QAChD,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,IAAI,eAAe,CAAe,CAAC,CAAC;IACnE,CAAC;IAEO,MAAM,CAAC,aAAa,CAC1B,EAAwB,EACxB,MAAsC;QAEtC,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC;QAC9C,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,cAAc,CAAc,CAAC,CAAC;IAC/D,CAAC;IAEO,MAAM,CAAC,WAAW,CACxB,EAAwB,EACxB,IAAkC;QAElC,IAAI,CAAC,IAAI;YAAE,OAAO,YAAY,CAAC;QAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,GAAW;QACrC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.spec.d.ts","sourceRoot":"","sources":["../../../src/components/modal/modal.spec.ts"],"names":[],"mappings":""}
|