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.
Files changed (227) hide show
  1. package/README.md +1 -27
  2. package/dist/components/alert/alert.d.ts +161 -0
  3. package/dist/components/alert/alert.d.ts.map +1 -0
  4. package/dist/components/alert/alert.js +304 -0
  5. package/dist/components/alert/alert.js.map +1 -0
  6. package/dist/components/alert/alert.spec.d.ts +2 -0
  7. package/dist/components/alert/alert.spec.d.ts.map +1 -0
  8. package/dist/components/alert/alert.spec.js +235 -0
  9. package/dist/components/alert/alert.spec.js.map +1 -0
  10. package/dist/components/alert/index.d.ts +2 -0
  11. package/dist/components/alert/index.d.ts.map +1 -0
  12. package/dist/components/alert/index.js +2 -0
  13. package/dist/components/alert/index.js.map +1 -0
  14. package/dist/components/badge/badge.d.ts +94 -0
  15. package/dist/components/badge/badge.d.ts.map +1 -0
  16. package/dist/components/badge/badge.js +180 -0
  17. package/dist/components/badge/badge.js.map +1 -0
  18. package/dist/components/badge/badge.spec.d.ts +2 -0
  19. package/dist/components/badge/badge.spec.d.ts.map +1 -0
  20. package/dist/components/badge/badge.spec.js +197 -0
  21. package/dist/components/badge/badge.spec.js.map +1 -0
  22. package/dist/components/badge/index.d.ts +2 -0
  23. package/dist/components/badge/index.d.ts.map +1 -0
  24. package/dist/components/badge/index.js +2 -0
  25. package/dist/components/badge/index.js.map +1 -0
  26. package/dist/components/card/card.d.ts +11 -15
  27. package/dist/components/card/card.d.ts.map +1 -1
  28. package/dist/components/card/card.js +37 -59
  29. package/dist/components/card/card.js.map +1 -1
  30. package/dist/components/checkbox/checkbox.d.ts +153 -0
  31. package/dist/components/checkbox/checkbox.d.ts.map +1 -0
  32. package/dist/components/checkbox/checkbox.js +329 -0
  33. package/dist/components/checkbox/checkbox.js.map +1 -0
  34. package/dist/components/checkbox/checkbox.spec.d.ts +2 -0
  35. package/dist/components/checkbox/checkbox.spec.d.ts.map +1 -0
  36. package/dist/components/checkbox/checkbox.spec.js +346 -0
  37. package/dist/components/checkbox/checkbox.spec.js.map +1 -0
  38. package/dist/components/checkbox/index.d.ts +2 -0
  39. package/dist/components/checkbox/index.d.ts.map +1 -0
  40. package/dist/components/checkbox/index.js +2 -0
  41. package/dist/components/checkbox/index.js.map +1 -0
  42. package/dist/components/circular-progress/circular-progress.d.ts.map +1 -1
  43. package/dist/components/circular-progress/circular-progress.js +2 -1
  44. package/dist/components/circular-progress/circular-progress.js.map +1 -1
  45. package/dist/components/circular-progress/circular-progress.spec.js +2 -0
  46. package/dist/components/circular-progress/circular-progress.spec.js.map +1 -1
  47. package/dist/components/dock/dock.d.ts +115 -0
  48. package/dist/components/dock/dock.d.ts.map +1 -0
  49. package/dist/components/dock/dock.js +168 -0
  50. package/dist/components/dock/dock.js.map +1 -0
  51. package/dist/components/dock/dock.spec.d.ts +2 -0
  52. package/dist/components/dock/dock.spec.d.ts.map +1 -0
  53. package/dist/components/dock/dock.spec.js +178 -0
  54. package/dist/components/dock/dock.spec.js.map +1 -0
  55. package/dist/components/dock/index.d.ts +2 -0
  56. package/dist/components/dock/index.d.ts.map +1 -0
  57. package/dist/components/dock/index.js +2 -0
  58. package/dist/components/dock/index.js.map +1 -0
  59. package/dist/components/icon-button/icon-button.d.ts +18 -9
  60. package/dist/components/icon-button/icon-button.d.ts.map +1 -1
  61. package/dist/components/icon-button/icon-button.js +57 -101
  62. package/dist/components/icon-button/icon-button.js.map +1 -1
  63. package/dist/components/index.d.ts +10 -5
  64. package/dist/components/index.d.ts.map +1 -1
  65. package/dist/components/index.js +10 -5
  66. package/dist/components/index.js.map +1 -1
  67. package/dist/components/linear-progress/linear-progress.d.ts.map +1 -1
  68. package/dist/components/linear-progress/linear-progress.js +4 -4
  69. package/dist/components/linear-progress/linear-progress.js.map +1 -1
  70. package/dist/components/linear-progress/linear-progress.spec.js +2 -0
  71. package/dist/components/linear-progress/linear-progress.spec.js.map +1 -1
  72. package/dist/components/modal/index.d.ts +2 -0
  73. package/dist/components/modal/index.d.ts.map +1 -0
  74. package/dist/components/modal/index.js +2 -0
  75. package/dist/components/modal/index.js.map +1 -0
  76. package/dist/components/modal/modal.d.ts +193 -0
  77. package/dist/components/modal/modal.d.ts.map +1 -0
  78. package/dist/components/modal/modal.js +382 -0
  79. package/dist/components/modal/modal.js.map +1 -0
  80. package/dist/components/modal/modal.spec.d.ts +2 -0
  81. package/dist/components/modal/modal.spec.d.ts.map +1 -0
  82. package/dist/components/modal/modal.spec.js +360 -0
  83. package/dist/components/modal/modal.spec.js.map +1 -0
  84. package/dist/components/overlay/index.d.ts +2 -0
  85. package/dist/components/overlay/index.d.ts.map +1 -0
  86. package/dist/components/overlay/index.js +2 -0
  87. package/dist/components/overlay/index.js.map +1 -0
  88. package/dist/components/overlay/overlay.d.ts +75 -0
  89. package/dist/components/overlay/overlay.d.ts.map +1 -0
  90. package/dist/components/overlay/overlay.js +106 -0
  91. package/dist/components/overlay/overlay.js.map +1 -0
  92. package/dist/components/overlay/overlay.spec.d.ts +2 -0
  93. package/dist/components/overlay/overlay.spec.d.ts.map +1 -0
  94. package/dist/components/overlay/overlay.spec.js +135 -0
  95. package/dist/components/overlay/overlay.spec.js.map +1 -0
  96. package/dist/components/radial-progress/radial-progress.d.ts.map +1 -1
  97. package/dist/components/radial-progress/radial-progress.js +3 -2
  98. package/dist/components/radial-progress/radial-progress.js.map +1 -1
  99. package/dist/components/radio/index.d.ts +2 -0
  100. package/dist/components/radio/index.d.ts.map +1 -0
  101. package/dist/components/radio/index.js +2 -0
  102. package/dist/components/radio/index.js.map +1 -0
  103. package/dist/components/radio/radio.d.ts +157 -0
  104. package/dist/components/radio/radio.d.ts.map +1 -0
  105. package/dist/components/radio/radio.js +312 -0
  106. package/dist/components/radio/radio.js.map +1 -0
  107. package/dist/components/radio/radio.spec.d.ts +2 -0
  108. package/dist/components/radio/radio.spec.d.ts.map +1 -0
  109. package/dist/components/radio/radio.spec.js +353 -0
  110. package/dist/components/radio/radio.spec.js.map +1 -0
  111. package/dist/components/radio-group/index.d.ts +2 -0
  112. package/dist/components/radio-group/index.d.ts.map +1 -0
  113. package/dist/components/radio-group/index.js +2 -0
  114. package/dist/components/radio-group/index.js.map +1 -0
  115. package/dist/components/radio-group/radio-group.d.ts +122 -0
  116. package/dist/components/radio-group/radio-group.d.ts.map +1 -0
  117. package/dist/components/radio-group/radio-group.js +165 -0
  118. package/dist/components/radio-group/radio-group.js.map +1 -0
  119. package/dist/components/radio-group/radio-group.spec.d.ts +2 -0
  120. package/dist/components/radio-group/radio-group.spec.d.ts.map +1 -0
  121. package/dist/components/radio-group/radio-group.spec.js +205 -0
  122. package/dist/components/radio-group/radio-group.spec.js.map +1 -0
  123. package/dist/components/stack/index.d.ts +2 -0
  124. package/dist/components/stack/index.d.ts.map +1 -0
  125. package/dist/components/stack/index.js +2 -0
  126. package/dist/components/stack/index.js.map +1 -0
  127. package/dist/components/stack/stack.d.ts +118 -0
  128. package/dist/components/stack/stack.d.ts.map +1 -0
  129. package/dist/components/stack/stack.js +137 -0
  130. package/dist/components/stack/stack.js.map +1 -0
  131. package/dist/components/stack/stack.spec.d.ts +2 -0
  132. package/dist/components/stack/stack.spec.d.ts.map +1 -0
  133. package/dist/components/stack/stack.spec.js +116 -0
  134. package/dist/components/stack/stack.spec.js.map +1 -0
  135. package/dist/components/text/text.d.ts +21 -4
  136. package/dist/components/text/text.d.ts.map +1 -1
  137. package/dist/components/text/text.js +14 -14
  138. package/dist/components/text/text.js.map +1 -1
  139. package/dist/components/text-button/text-button.d.ts +77 -24
  140. package/dist/components/text-button/text-button.d.ts.map +1 -1
  141. package/dist/components/text-button/text-button.js +203 -104
  142. package/dist/components/text-button/text-button.js.map +1 -1
  143. package/dist/components/text-button/text-button.spec.js +97 -9
  144. package/dist/components/text-button/text-button.spec.js.map +1 -1
  145. package/dist/components/toggle/index.d.ts +2 -0
  146. package/dist/components/toggle/index.d.ts.map +1 -0
  147. package/dist/components/toggle/index.js +2 -0
  148. package/dist/components/toggle/index.js.map +1 -0
  149. package/dist/components/toggle/toggle.d.ts +149 -0
  150. package/dist/components/toggle/toggle.d.ts.map +1 -0
  151. package/dist/components/toggle/toggle.js +378 -0
  152. package/dist/components/toggle/toggle.js.map +1 -0
  153. package/dist/components/toggle/toggle.spec.d.ts +2 -0
  154. package/dist/components/toggle/toggle.spec.d.ts.map +1 -0
  155. package/dist/components/toggle/toggle.spec.js +353 -0
  156. package/dist/components/toggle/toggle.spec.js.map +1 -0
  157. package/dist/hudini.js +6523 -4980
  158. package/dist/hudini.min.js +1 -1
  159. package/dist/loaders/load-fonts.d.ts +29 -0
  160. package/dist/loaders/load-fonts.d.ts.map +1 -1
  161. package/dist/loaders/load-fonts.js +20 -1
  162. package/dist/loaders/load-fonts.js.map +1 -1
  163. package/dist/utils/button-style.d.ts +27 -0
  164. package/dist/utils/button-style.d.ts.map +1 -0
  165. package/dist/utils/button-style.js +37 -0
  166. package/dist/utils/button-style.js.map +1 -0
  167. package/dist/utils/index.d.ts +2 -0
  168. package/dist/utils/index.d.ts.map +1 -1
  169. package/dist/utils/index.js +2 -0
  170. package/dist/utils/index.js.map +1 -1
  171. package/dist/utils/number-to-rgb.d.ts +16 -0
  172. package/dist/utils/number-to-rgb.d.ts.map +1 -0
  173. package/dist/utils/number-to-rgb.js +20 -0
  174. package/dist/utils/number-to-rgb.js.map +1 -0
  175. package/package.json +2 -2
  176. package/dist/components/flat-icon-button/flat-icon-button.d.ts +0 -60
  177. package/dist/components/flat-icon-button/flat-icon-button.d.ts.map +0 -1
  178. package/dist/components/flat-icon-button/flat-icon-button.js +0 -279
  179. package/dist/components/flat-icon-button/flat-icon-button.js.map +0 -1
  180. package/dist/components/flat-icon-button/index.d.ts +0 -2
  181. package/dist/components/flat-icon-button/index.d.ts.map +0 -1
  182. package/dist/components/flat-icon-button/index.js +0 -2
  183. package/dist/components/flat-icon-button/index.js.map +0 -1
  184. package/dist/components/flat-section-header/flat-section-header.d.ts +0 -143
  185. package/dist/components/flat-section-header/flat-section-header.d.ts.map +0 -1
  186. package/dist/components/flat-section-header/flat-section-header.js +0 -275
  187. package/dist/components/flat-section-header/flat-section-header.js.map +0 -1
  188. package/dist/components/flat-section-header/flat-section-header.spec.d.ts +0 -2
  189. package/dist/components/flat-section-header/flat-section-header.spec.d.ts.map +0 -1
  190. package/dist/components/flat-section-header/flat-section-header.spec.js +0 -255
  191. package/dist/components/flat-section-header/flat-section-header.spec.js.map +0 -1
  192. package/dist/components/flat-section-header/index.d.ts +0 -2
  193. package/dist/components/flat-section-header/index.d.ts.map +0 -1
  194. package/dist/components/flat-section-header/index.js +0 -2
  195. package/dist/components/flat-section-header/index.js.map +0 -1
  196. package/dist/components/flat-text-button/flat-text-button.d.ts +0 -165
  197. package/dist/components/flat-text-button/flat-text-button.d.ts.map +0 -1
  198. package/dist/components/flat-text-button/flat-text-button.js +0 -325
  199. package/dist/components/flat-text-button/flat-text-button.js.map +0 -1
  200. package/dist/components/flat-text-button/flat-text-button.spec.d.ts +0 -2
  201. package/dist/components/flat-text-button/flat-text-button.spec.d.ts.map +0 -1
  202. package/dist/components/flat-text-button/flat-text-button.spec.js +0 -243
  203. package/dist/components/flat-text-button/flat-text-button.spec.js.map +0 -1
  204. package/dist/components/flat-text-button/index.d.ts +0 -2
  205. package/dist/components/flat-text-button/index.d.ts.map +0 -1
  206. package/dist/components/flat-text-button/index.js +0 -2
  207. package/dist/components/flat-text-button/index.js.map +0 -1
  208. package/dist/components/panel/index.d.ts +0 -2
  209. package/dist/components/panel/index.d.ts.map +0 -1
  210. package/dist/components/panel/index.js +0 -2
  211. package/dist/components/panel/index.js.map +0 -1
  212. package/dist/components/panel/panel.d.ts +0 -78
  213. package/dist/components/panel/panel.d.ts.map +0 -1
  214. package/dist/components/panel/panel.js +0 -192
  215. package/dist/components/panel/panel.js.map +0 -1
  216. package/dist/components/section-header/index.d.ts +0 -2
  217. package/dist/components/section-header/index.d.ts.map +0 -1
  218. package/dist/components/section-header/index.js +0 -2
  219. package/dist/components/section-header/index.js.map +0 -1
  220. package/dist/components/section-header/section-header.d.ts +0 -149
  221. package/dist/components/section-header/section-header.d.ts.map +0 -1
  222. package/dist/components/section-header/section-header.js +0 -292
  223. package/dist/components/section-header/section-header.js.map +0 -1
  224. package/dist/components/section-header/section-header.spec.d.ts +0 -2
  225. package/dist/components/section-header/section-header.spec.d.ts.map +0 -1
  226. package/dist/components/section-header/section-header.spec.js +0 -264
  227. 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":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=modal.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal.spec.d.ts","sourceRoot":"","sources":["../../../src/components/modal/modal.spec.ts"],"names":[],"mappings":""}