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,235 @@
1
+ /* eslint-disable no-magic-numbers */
2
+ /* eslint-disable max-lines-per-function */
3
+ /* eslint-disable sonarjs/no-identical-functions */
4
+ import { Scene } from 'phaser';
5
+ import { describe, expect, it, vi } from 'vitest';
6
+ vi.mock('font-awesome-for-phaser', () => {
7
+ class IconText {
8
+ // eslint-disable-next-line no-unused-vars
9
+ constructor(_params) { }
10
+ setFontStyle() {
11
+ return this;
12
+ }
13
+ setOrigin() {
14
+ return this;
15
+ }
16
+ setColor() {
17
+ return this;
18
+ }
19
+ }
20
+ return { IconText };
21
+ });
22
+ vi.mock('../stack', () => {
23
+ class MockStack {
24
+ width = 40;
25
+ height = 20;
26
+ // eslint-disable-next-line no-unused-vars
27
+ constructor(_params) { }
28
+ layout() {
29
+ /* noop */
30
+ }
31
+ setSize(w, h) {
32
+ this.width = w;
33
+ this.height = h;
34
+ return this;
35
+ }
36
+ }
37
+ return { Stack: MockStack };
38
+ });
39
+ vi.mock('phaser-wind', () => ({
40
+ Duration: { ms: vi.fn(() => 100), seconds: vi.fn(() => 0.1), css: vi.fn(() => '100ms') },
41
+ Ease: { value: vi.fn(() => 'Linear') },
42
+ Color: {
43
+ rgb: vi.fn((color) => `rgb-${color}`),
44
+ hex: vi.fn((color) => `hex-${color}`),
45
+ /* eslint-disable-next-line no-unused-vars */
46
+ shift: vi.fn((token, _diff) => token),
47
+ isValidColorToken: vi.fn(() => false),
48
+ },
49
+ Opacity: {
50
+ value: vi.fn(() => 0.6),
51
+ },
52
+ isColorKey: vi.fn(() => false),
53
+ palette: {
54
+ red: {}, blue: {}, green: {}, yellow: {}, slate: {}, black: '#000', white: '#fff',
55
+ },
56
+ }));
57
+ vi.mock('../../utils/get-pw-from-scene', () => ({
58
+ getPWFromScene: vi.fn(() => ({
59
+ fontSize: {
60
+ px: vi.fn((size) => {
61
+ const sizes = { xs: 12, sm: 14, base: 16, lg: 18, xl: 20 };
62
+ return sizes[size] || 16;
63
+ }),
64
+ },
65
+ spacing: {
66
+ px: vi.fn(() => 16),
67
+ },
68
+ radius: {
69
+ px: vi.fn(() => 8),
70
+ },
71
+ font: {
72
+ family: vi.fn(() => 'Fredoka'),
73
+ },
74
+ })),
75
+ }));
76
+ vi.mock('../text', () => {
77
+ class MockText {
78
+ text;
79
+ // eslint-disable-next-line no-unused-vars
80
+ constructor(params) {
81
+ this.text = params.text;
82
+ }
83
+ setText(t) {
84
+ this.text = t;
85
+ return this;
86
+ }
87
+ setOrigin() {
88
+ return this;
89
+ }
90
+ setColor() {
91
+ return this;
92
+ }
93
+ getBounds() {
94
+ return { width: this.text.length * 10, height: 18 };
95
+ }
96
+ }
97
+ return { Text: MockText };
98
+ });
99
+ vi.mock('phaser', () => {
100
+ class MockSprite {
101
+ width = 0;
102
+ height = 0;
103
+ // eslint-disable-next-line no-unused-vars
104
+ constructor(_x, _y, _texture) { }
105
+ setOrigin() {
106
+ return this;
107
+ }
108
+ setInteractive() {
109
+ return this;
110
+ }
111
+ setTexture() {
112
+ return this;
113
+ }
114
+ setSize(w, h) {
115
+ this.width = w;
116
+ this.height = h;
117
+ return this;
118
+ }
119
+ on() {
120
+ return this;
121
+ }
122
+ }
123
+ class MockGraphics {
124
+ fillStyle() {
125
+ return this;
126
+ }
127
+ fillRoundedRect() {
128
+ return this;
129
+ }
130
+ generateTexture() {
131
+ return this;
132
+ }
133
+ destroy() {
134
+ return this;
135
+ }
136
+ }
137
+ class Container {
138
+ scene;
139
+ list = [];
140
+ // eslint-disable-next-line no-unused-vars
141
+ constructor(_scene, _x, _y) {
142
+ this.scene = _scene;
143
+ }
144
+ add() {
145
+ return this;
146
+ }
147
+ remove() {
148
+ return this;
149
+ }
150
+ addAt() {
151
+ return this;
152
+ }
153
+ }
154
+ class Scene {
155
+ add = {
156
+ existing: vi.fn(),
157
+ sprite: vi.fn((x, y, t) => new MockSprite(x, y, t)),
158
+ graphics: vi.fn(() => new MockGraphics()),
159
+ };
160
+ }
161
+ const GameObjects = { Container };
162
+ return { GameObjects, Scene };
163
+ });
164
+ import { Alert } from './alert';
165
+ describe('Alert', () => {
166
+ it('should create with the info variant by default', () => {
167
+ const scene = new Scene();
168
+ const alert = new Alert({ scene, x: 0, y: 0, text: 'hello' });
169
+ expect(alert).toBeInstanceOf(Alert);
170
+ });
171
+ it('should accept every semantic variant', () => {
172
+ const scene = new Scene();
173
+ const variants = ['success', 'error', 'warning', 'info', 'neutral'];
174
+ variants.forEach((variant) => {
175
+ const alert = new Alert({ scene, x: 0, y: 0, text: 't', variant });
176
+ expect(alert).toBeInstanceOf(Alert);
177
+ });
178
+ });
179
+ it('should honor a custom color override', () => {
180
+ const scene = new Scene();
181
+ const alert = new Alert({
182
+ scene,
183
+ x: 0,
184
+ y: 0,
185
+ text: 't',
186
+ variant: 'success',
187
+ color: 'purple-600',
188
+ });
189
+ expect(alert).toBeInstanceOf(Alert);
190
+ });
191
+ it('should disable the default icon when leftIcon is explicitly null', () => {
192
+ const scene = new Scene();
193
+ const alert = new Alert({
194
+ scene,
195
+ x: 0,
196
+ y: 0,
197
+ text: 't',
198
+ variant: 'success',
199
+ leftIcon: null,
200
+ });
201
+ expect(alert.leftIconText).toBeUndefined();
202
+ });
203
+ it('should use the variant default leftIcon when leftIcon is omitted', () => {
204
+ const scene = new Scene();
205
+ const alert = new Alert({
206
+ scene,
207
+ x: 0,
208
+ y: 0,
209
+ text: 't',
210
+ variant: 'success',
211
+ });
212
+ expect(alert.leftIconText).toBeDefined();
213
+ });
214
+ it('should return this for chaining on setters', () => {
215
+ const scene = new Scene();
216
+ const alert = new Alert({ scene, x: 0, y: 0, text: 't' });
217
+ expect(alert.setText('new')).toBe(alert);
218
+ expect(alert.setColor('red-500')).toBe(alert);
219
+ expect(alert.setVariant('warning')).toBe(alert);
220
+ });
221
+ it('should support an optional onClick', () => {
222
+ const scene = new Scene();
223
+ const alert = new Alert({
224
+ scene,
225
+ x: 0,
226
+ y: 0,
227
+ text: 't',
228
+ onClick: () => {
229
+ /* noop */
230
+ },
231
+ });
232
+ expect(alert).toBeInstanceOf(Alert);
233
+ });
234
+ });
235
+ //# sourceMappingURL=alert.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.spec.js","sourceRoot":"","sources":["../../../src/components/alert/alert.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './alert';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/alert/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './alert';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/alert/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { GameObjects, Scene } from 'phaser';
2
+ import { type ColorKey, type FontKey, type FontSizeKey, type RadiusKey, type SpacingKey } from 'phaser-wind';
3
+ import { ContainerInteractive } from '../container-interactive';
4
+ /**
5
+ * Parameters for creating a Badge.
6
+ *
7
+ * Same visual language as `TextButton` (flat fill + outlined text), but
8
+ * without interactivity — meant for titles on top of a panel, tags,
9
+ * status pills, notification counts, etc.
10
+ */
11
+ export type BadgeParams = {
12
+ /** Phaser scene where the badge will be added. */
13
+ scene: Scene;
14
+ /** X position of the badge. */
15
+ x: number;
16
+ /** Y position of the badge. */
17
+ y: number;
18
+ /** Badge text. */
19
+ text: string;
20
+ /**
21
+ * Font size in px (number) or a Phaser Wind font size token (string).
22
+ * Defaults to `'lg'`.
23
+ */
24
+ fontSize?: FontSizeKey | number;
25
+ /**
26
+ * Font family. Defaults to `'Fredoka'` (the Hudini base font).
27
+ */
28
+ font?: FontKey | string;
29
+ /**
30
+ * Background color. Accepts a palette family (`'blue'`), a full token
31
+ * (`'blue-600'`), a theme key, or a CSS string. Defaults to `'blue-600'`.
32
+ */
33
+ color?: ColorKey | string;
34
+ /**
35
+ * Text color. Defaults to `'white'`.
36
+ */
37
+ textColor?: ColorKey | string;
38
+ /**
39
+ * Border radius in px (number) or a Phaser Wind radius token. Defaults to
40
+ * `'md'`.
41
+ */
42
+ borderRadius?: RadiusKey | number;
43
+ /**
44
+ * Inner padding around the text in px (number) or a Phaser Wind spacing
45
+ * token. Defaults to `'4'`.
46
+ */
47
+ padding?: SpacingKey | number;
48
+ };
49
+ /**
50
+ * A flat, non-interactive labeled box — the static counterpart to
51
+ * `TextButton`. Uses the same fill + outlined-text visual language and shares
52
+ * `getButtonStrokeColor` / `BUTTON_STROKE_THICKNESS` with the buttons, so the
53
+ * UI kit stays cohesive.
54
+ */
55
+ export declare class Badge extends ContainerInteractive<Phaser.GameObjects.Sprite> {
56
+ /** The background sprite of the badge. */
57
+ backgroundSprite: GameObjects.Sprite;
58
+ /** The text object of the badge. */
59
+ badgeText: GameObjects.Text;
60
+ private pw;
61
+ private fontSizePx;
62
+ private paddingPx;
63
+ private borderRadiusPx;
64
+ private colorInput;
65
+ private colorBadge;
66
+ private textColorValue;
67
+ private fontFamily;
68
+ private textValue;
69
+ constructor({ scene, x, y, text, fontSize, font, color, textColor, borderRadius, padding, }: BadgeParams);
70
+ setText(text: string): this;
71
+ setFontSize(fontSize: FontSizeKey | number): this;
72
+ setFont(font: FontKey | string): this;
73
+ setColor(color: ColorKey | string): this;
74
+ setTextColor(color: ColorKey | string): this;
75
+ setBorderRadius(borderRadius: RadiusKey | number): this;
76
+ setPadding(padding: SpacingKey | number): this;
77
+ private createBadgeText;
78
+ private createBackgroundSprite;
79
+ private regenerateSprites;
80
+ /**
81
+ * Keep the container's own width/height in sync with the visible badge box
82
+ * (excluding the transparent margin baked into the sprite texture). This is
83
+ * what layout containers like Row/Column read when computing positions.
84
+ */
85
+ private syncContainerSize;
86
+ private getBadgeDimensions;
87
+ private createBackgroundTexture;
88
+ /**
89
+ * Draws the badge's background as a flat filled rounded rect.
90
+ */
91
+ private drawBadgeBackground;
92
+ private setupContainer;
93
+ }
94
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/components/badge/badge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAOrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,kDAAkD;IAClD,KAAK,EAAE,KAAK,CAAC;IACb,+BAA+B;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,+BAA+B;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAChC;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC/B,CAAC;AAUF;;;;;GAKG;AACH,qBAAa,KAAM,SAAQ,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;IACxE,0CAA0C;IACnC,gBAAgB,EAAG,WAAW,CAAC,MAAM,CAAC;IAC7C,oCAAoC;IAC7B,SAAS,EAAG,WAAW,CAAC,IAAI,CAAC;IAEpC,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAU;gBAEf,EACV,KAAK,EACL,CAAC,EACD,CAAC,EACD,IAAI,EACJ,QAAe,EACf,IAAI,EACJ,KAAkB,EAClB,SAAmB,EACnB,YAAmB,EACnB,OAAa,GACd,EAAE,WAAW;IAoCP,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO3B,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI;IAUjD,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAUrC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAOxC,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAM5C,eAAe,CAAC,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IASvD,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IASrD,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;IAOzB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,uBAAuB;IAqB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,cAAc;CAGvB"}
@@ -0,0 +1,180 @@
1
+ import { Color, } from 'phaser-wind';
2
+ import { BUTTON_STROKE_THICKNESS, getButtonStrokeColor, } from '../../utils/button-style';
3
+ import { getPWFromScene } from '../../utils/get-pw-from-scene';
4
+ import { ContainerInteractive } from '../container-interactive';
5
+ import { Text } from '../text';
6
+ /**
7
+ * Extra transparent margin around the drawn badge inside its texture, just
8
+ * enough so the anti-aliased rounded-corner fill isn't clipped at the edge.
9
+ * The container itself is resized to the *visual* box (see setSize below),
10
+ * so this margin never leaks into layout measurements.
11
+ */
12
+ const TEXTURE_ANTIALIAS_MARGIN = 1;
13
+ /**
14
+ * A flat, non-interactive labeled box — the static counterpart to
15
+ * `TextButton`. Uses the same fill + outlined-text visual language and shares
16
+ * `getButtonStrokeColor` / `BUTTON_STROKE_THICKNESS` with the buttons, so the
17
+ * UI kit stays cohesive.
18
+ */
19
+ export class Badge extends ContainerInteractive {
20
+ /** The background sprite of the badge. */
21
+ backgroundSprite;
22
+ /** The text object of the badge. */
23
+ badgeText;
24
+ pw;
25
+ fontSizePx;
26
+ paddingPx;
27
+ borderRadiusPx;
28
+ colorInput;
29
+ colorBadge;
30
+ textColorValue;
31
+ fontFamily;
32
+ textValue;
33
+ constructor({ scene, x, y, text, fontSize = 'lg', font, color = 'blue-600', textColor = 'white', borderRadius = 'md', padding = '4', }) {
34
+ super({ scene, x, y });
35
+ this.pw = getPWFromScene(scene);
36
+ this.textValue = text;
37
+ this.fontSizePx =
38
+ typeof fontSize === 'number'
39
+ ? fontSize
40
+ : this.pw.fontSize.px(fontSize ?? 'lg');
41
+ this.paddingPx =
42
+ typeof padding === 'number'
43
+ ? padding
44
+ : this.pw.spacing.px(padding ?? '4');
45
+ this.borderRadiusPx =
46
+ typeof borderRadius === 'number'
47
+ ? borderRadius
48
+ : this.pw.radius.px(borderRadius ?? 'md');
49
+ this.colorInput = String(color);
50
+ this.colorBadge = Color.rgb(color);
51
+ this.textColorValue = Color.rgb(textColor);
52
+ this.fontFamily = font
53
+ ? typeof font === 'string'
54
+ ? font
55
+ : this.pw.font.family(font)
56
+ : 'Fredoka';
57
+ this.createBadgeText(scene);
58
+ this.createBackgroundSprite(scene);
59
+ this.setupContainer();
60
+ this.hitArea = this.backgroundSprite;
61
+ this.syncContainerSize();
62
+ }
63
+ setText(text) {
64
+ this.textValue = text;
65
+ this.badgeText.setText(text);
66
+ this.regenerateSprites();
67
+ return this;
68
+ }
69
+ setFontSize(fontSize) {
70
+ this.fontSizePx =
71
+ typeof fontSize === 'number'
72
+ ? fontSize
73
+ : this.pw.fontSize.px(fontSize ?? 'lg');
74
+ this.badgeText.setFontSize(this.fontSizePx);
75
+ this.regenerateSprites();
76
+ return this;
77
+ }
78
+ setFont(font) {
79
+ this.fontFamily =
80
+ typeof font === 'string'
81
+ ? font
82
+ : this.pw.font.family(font ?? 'primary');
83
+ this.badgeText.setFontFamily(this.fontFamily);
84
+ this.regenerateSprites();
85
+ return this;
86
+ }
87
+ setColor(color) {
88
+ this.colorInput = String(color);
89
+ this.colorBadge = Color.rgb(color);
90
+ this.regenerateSprites();
91
+ return this;
92
+ }
93
+ setTextColor(color) {
94
+ this.textColorValue = Color.rgb(color);
95
+ this.badgeText.setColor(this.textColorValue);
96
+ return this;
97
+ }
98
+ setBorderRadius(borderRadius) {
99
+ this.borderRadiusPx =
100
+ typeof borderRadius === 'number'
101
+ ? borderRadius
102
+ : this.pw.radius.px(borderRadius ?? 'md');
103
+ this.regenerateSprites();
104
+ return this;
105
+ }
106
+ setPadding(padding) {
107
+ this.paddingPx =
108
+ typeof padding === 'number'
109
+ ? padding
110
+ : this.pw.spacing.px(padding ?? '4');
111
+ this.regenerateSprites();
112
+ return this;
113
+ }
114
+ createBadgeText(scene) {
115
+ this.badgeText = new Text({
116
+ scene,
117
+ x: 0,
118
+ y: 0,
119
+ text: this.textValue,
120
+ size: this.fontSizePx,
121
+ fontFamily: this.fontFamily,
122
+ strokeThickness: BUTTON_STROKE_THICKNESS,
123
+ strokeColor: getButtonStrokeColor(this.colorInput),
124
+ });
125
+ this.badgeText.setColor(this.textColorValue);
126
+ this.badgeText.setOrigin(0.5, 0.5);
127
+ }
128
+ createBackgroundSprite(scene) {
129
+ const backgroundTexture = this.createBackgroundTexture(scene);
130
+ this.backgroundSprite = scene.add.sprite(0, 0, backgroundTexture);
131
+ this.backgroundSprite.setOrigin(0.5, 0.5);
132
+ }
133
+ regenerateSprites() {
134
+ this.badgeText.setText(this.textValue);
135
+ const backgroundTexture = this.createBackgroundTexture(this.scene);
136
+ this.backgroundSprite.setTexture(backgroundTexture);
137
+ this.syncContainerSize();
138
+ }
139
+ /**
140
+ * Keep the container's own width/height in sync with the visible badge box
141
+ * (excluding the transparent margin baked into the sprite texture). This is
142
+ * what layout containers like Row/Column read when computing positions.
143
+ */
144
+ syncContainerSize() {
145
+ const { width, height } = this.getBadgeDimensions();
146
+ this.setSize(width, height);
147
+ }
148
+ getBadgeDimensions() {
149
+ const textBounds = this.badgeText.getBounds();
150
+ const width = textBounds.width + this.paddingPx * 2;
151
+ const height = textBounds.height + this.paddingPx * 2;
152
+ return { width, height };
153
+ }
154
+ createBackgroundTexture(scene) {
155
+ const { width, height } = this.getBadgeDimensions();
156
+ const textureKey = `badge_bg_${this.colorBadge}_${this.borderRadiusPx}_${width}_${height}`;
157
+ const padding = TEXTURE_ANTIALIAS_MARGIN;
158
+ const textureWidth = width + padding * 2;
159
+ const textureHeight = height + padding * 2;
160
+ const graphics = scene.add.graphics();
161
+ const maxRadius = Math.floor(Math.min(width / 2, height / 2));
162
+ const effectiveRadius = Math.min(this.borderRadiusPx, maxRadius);
163
+ const finalRadius = Math.max(0, effectiveRadius);
164
+ this.drawBadgeBackground(graphics, padding, width, height, finalRadius);
165
+ graphics.generateTexture(textureKey, textureWidth, textureHeight);
166
+ graphics.destroy();
167
+ return textureKey;
168
+ }
169
+ /**
170
+ * Draws the badge's background as a flat filled rounded rect.
171
+ */
172
+ drawBadgeBackground(graphics, padding, width, height, effectiveRadius) {
173
+ graphics.fillStyle(Color.hex(this.colorBadge), 1);
174
+ graphics.fillRoundedRect(padding, padding, width, height, effectiveRadius);
175
+ }
176
+ setupContainer() {
177
+ this.add([this.backgroundSprite, this.badgeText]);
178
+ }
179
+ }
180
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.js","sourceRoot":"","sources":["../../../src/components/badge/badge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=badge.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.spec.d.ts","sourceRoot":"","sources":["../../../src/components/badge/badge.spec.ts"],"names":[],"mappings":""}