hudini 0.18.1 → 0.20.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 +58 -27
- 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 +195 -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/icon-button/icon-button.d.ts +2 -8
- package/dist/components/icon-button/icon-button.d.ts.map +1 -1
- package/dist/components/icon-button/icon-button.js +10 -86
- package/dist/components/icon-button/icon-button.js.map +1 -1
- package/dist/components/index.d.ts +1 -4
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -4
- package/dist/components/index.js.map +1 -1
- package/dist/components/panel/panel.d.ts +8 -8
- package/dist/components/panel/panel.d.ts.map +1 -1
- package/dist/components/panel/panel.js +29 -30
- package/dist/components/panel/panel.js.map +1 -1
- 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 +9 -18
- package/dist/components/text-button/text-button.d.ts.map +1 -1
- package/dist/components/text-button/text-button.js +38 -81
- package/dist/components/text-button/text-button.js.map +1 -1
- package/dist/components/text-button/text-button.spec.js +55 -9
- package/dist/components/text-button/text-button.spec.js.map +1 -1
- package/dist/hudini.js +2375 -3881
- 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/scene/index.d.ts +1 -0
- package/dist/scene/index.d.ts.map +1 -1
- package/dist/scene/index.js +1 -0
- package/dist/scene/index.js.map +1 -1
- package/dist/scene/scene-with-hudini.d.ts +24 -1
- package/dist/scene/scene-with-hudini.d.ts.map +1 -1
- package/dist/scene/scene-with-hudini.js +24 -1
- package/dist/scene/scene-with-hudini.js.map +1 -1
- package/dist/scene/with-hudini.d.ts +35 -0
- package/dist/scene/with-hudini.d.ts.map +1 -0
- package/dist/scene/with-hudini.js +33 -0
- package/dist/scene/with-hudini.js.map +1 -0
- package/dist/utils/button-style.d.ts +16 -0
- package/dist/utils/button-style.d.ts.map +1 -0
- package/dist/utils/button-style.js +35 -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/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
package/README.md
CHANGED
|
@@ -140,6 +140,63 @@ import { Column, Row, IconButton } from 'hudini';
|
|
|
140
140
|
|
|
141
141
|
Check the Storybook for live, interactive examples: [Hudini on Storybook](https://renatocassino.github.io/phaser-toolkit/?path=/story/hudini--index)
|
|
142
142
|
|
|
143
|
+
## 🎯 Access the plugin from your scene
|
|
144
|
+
|
|
145
|
+
Use the `withHudini(scene)` accessor to get a fully typed handle to the plugin. It composes with any base scene, doesn't rely on global module augmentation, and infers your theme's tokens at the call site.
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
import Phaser from 'phaser';
|
|
149
|
+
import { withHudini } from 'hudini';
|
|
150
|
+
import type { ThemeType } from './theme'; // your createTheme() result
|
|
151
|
+
|
|
152
|
+
class MyScene extends Phaser.Scene {
|
|
153
|
+
create(): void {
|
|
154
|
+
const hudini = withHudini<ThemeType>(this);
|
|
155
|
+
const pw = hudini.pw; // phaser-wind API, narrowed to your theme
|
|
156
|
+
|
|
157
|
+
this.cameras.main.setBackgroundColor(pw.color.rgb('background'));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Call `withHudini(this)` inside `create()` / `update()` (after the plugin has mounted). Don't call it in the constructor or `init()` — the plugin isn't attached yet.
|
|
163
|
+
|
|
164
|
+
### Recommended: wrap it in a project-local helper
|
|
165
|
+
|
|
166
|
+
Passing `<ThemeType>` on every call gets old. Define a one-line helper once in your project so scenes stay short and the theme type stays in one place:
|
|
167
|
+
|
|
168
|
+
```ts
|
|
169
|
+
// src/theme.ts (in your project)
|
|
170
|
+
import type { Scene } from 'phaser';
|
|
171
|
+
import { createTheme, withHudini, type CreateTheme } from 'hudini';
|
|
172
|
+
|
|
173
|
+
export const theme = createTheme({
|
|
174
|
+
colors: { primary: 'blue-600', danger: 'red-500' },
|
|
175
|
+
// ...
|
|
176
|
+
} satisfies CreateTheme<any>);
|
|
177
|
+
|
|
178
|
+
export type ThemeType = typeof theme;
|
|
179
|
+
|
|
180
|
+
/** Project-local accessor — no need to pass the theme type. */
|
|
181
|
+
export const withHud = (scene: Scene) => withHudini<ThemeType>(scene);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Now every scene is a one-liner:
|
|
185
|
+
|
|
186
|
+
```ts
|
|
187
|
+
import Phaser from 'phaser';
|
|
188
|
+
import { withHud } from './theme';
|
|
189
|
+
|
|
190
|
+
class MyScene extends Phaser.Scene {
|
|
191
|
+
create(): void {
|
|
192
|
+
const hudini = withHud(this); // fully typed against your theme
|
|
193
|
+
this.cameras.main.setBackgroundColor(hudini.pw.color.rgb('background'));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
You can name the helper whatever fits your style — `withHud`, `useHud`, `getHud`, `hud`. The lib intentionally doesn't ship an alias, so you own the naming in your codebase.
|
|
199
|
+
|
|
143
200
|
## 🧩 Components
|
|
144
201
|
|
|
145
202
|
### Column
|
|
@@ -236,35 +293,9 @@ Notes:
|
|
|
236
293
|
- Hover scales the icon subtly, click animates press/release.
|
|
237
294
|
- Colors and sizes integrate with `phaser-wind` theme tokens.
|
|
238
295
|
|
|
239
|
-
### FlatIconButton
|
|
240
|
-
|
|
241
|
-
A flat-style icon button with customizable colors, opacity, and border radius.
|
|
242
|
-
|
|
243
|
-
```ts
|
|
244
|
-
import { FlatIconButton } from 'hudini';
|
|
245
|
-
|
|
246
|
-
const flatBtn = new FlatIconButton({
|
|
247
|
-
scene: this,
|
|
248
|
-
x: 200,
|
|
249
|
-
y: 100,
|
|
250
|
-
icon: 'solid/play',
|
|
251
|
-
size: 'lg',
|
|
252
|
-
backgroundColor: 'blue-600',
|
|
253
|
-
iconColor: 'white',
|
|
254
|
-
borderRadius: 'md',
|
|
255
|
-
backgroundOpacity: 0.8,
|
|
256
|
-
iconOpacity: 1,
|
|
257
|
-
onClick: () => {
|
|
258
|
-
// your click handler
|
|
259
|
-
},
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
this.add.existing(flatBtn);
|
|
263
|
-
```
|
|
264
|
-
|
|
265
296
|
### Interactive API
|
|
266
297
|
|
|
267
|
-
|
|
298
|
+
`IconButton` provides direct access to event methods for advanced event handling:
|
|
268
299
|
|
|
269
300
|
```ts
|
|
270
301
|
const button = new IconButton({
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"badge.spec.d.ts","sourceRoot":"","sources":["../../../src/components/badge/badge.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/* eslint-disable no-magic-numbers */
|
|
2
|
+
/* eslint-disable max-lines-per-function */
|
|
3
|
+
import { Scene } from 'phaser';
|
|
4
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
5
|
+
vi.mock('hudini', () => ({
|
|
6
|
+
Color: {
|
|
7
|
+
rgb: vi.fn((color) => `rgb-${color}`),
|
|
8
|
+
hex: vi.fn((color) => `hex-${color}`),
|
|
9
|
+
black: vi.fn(() => 'rgb(0, 0, 0)'),
|
|
10
|
+
white: vi.fn(() => 'rgb(255, 255, 255)'),
|
|
11
|
+
},
|
|
12
|
+
Opacity: {
|
|
13
|
+
value: vi.fn(() => 0.9),
|
|
14
|
+
},
|
|
15
|
+
}));
|
|
16
|
+
vi.mock('phaser-wind', () => ({
|
|
17
|
+
Color: {
|
|
18
|
+
rgb: vi.fn((color) => `rgb-${color}`),
|
|
19
|
+
hex: vi.fn((color) => `hex-${color}`),
|
|
20
|
+
shift: vi.fn((token) => token),
|
|
21
|
+
isValidColorToken: vi.fn(() => false),
|
|
22
|
+
},
|
|
23
|
+
Opacity: {
|
|
24
|
+
value: vi.fn(() => 0.6),
|
|
25
|
+
percent: vi.fn(() => 60),
|
|
26
|
+
css: vi.fn(() => '60%'),
|
|
27
|
+
},
|
|
28
|
+
isColorKey: vi.fn(() => false),
|
|
29
|
+
palette: {
|
|
30
|
+
red: {}, blue: {}, green: {}, purple: {}, amber: {},
|
|
31
|
+
slate: {}, gray: {}, zinc: {}, neutral: {}, stone: {},
|
|
32
|
+
orange: {}, yellow: {}, lime: {}, emerald: {}, teal: {},
|
|
33
|
+
cyan: {}, sky: {}, indigo: {}, violet: {}, fuchsia: {},
|
|
34
|
+
pink: {}, rose: {},
|
|
35
|
+
black: '#000',
|
|
36
|
+
white: '#fff',
|
|
37
|
+
},
|
|
38
|
+
PHASER_WIND_KEY: 'PhaserWind',
|
|
39
|
+
SceneWithPhaserWind: class SceneWithPhaserWind {
|
|
40
|
+
},
|
|
41
|
+
}));
|
|
42
|
+
vi.mock('../../utils/get-pw-from-scene', () => ({
|
|
43
|
+
getPWFromScene: vi.fn(() => ({
|
|
44
|
+
fontSize: {
|
|
45
|
+
px: vi.fn((size) => {
|
|
46
|
+
const sizes = { xs: 12, sm: 14, md: 16, lg: 18, xl: 20 };
|
|
47
|
+
return sizes[size] || 18;
|
|
48
|
+
}),
|
|
49
|
+
},
|
|
50
|
+
spacing: {
|
|
51
|
+
px: vi.fn((spacing) => {
|
|
52
|
+
const spacings = { xs: 4, sm: 8, md: 12, lg: 16, xl: 20 };
|
|
53
|
+
return spacings[spacing] || 16;
|
|
54
|
+
}),
|
|
55
|
+
},
|
|
56
|
+
radius: {
|
|
57
|
+
px: vi.fn((radius) => {
|
|
58
|
+
const radiuses = { none: 0, sm: 4, md: 8, lg: 12, xl: 16, full: 9999 };
|
|
59
|
+
return radiuses[radius] || 8;
|
|
60
|
+
}),
|
|
61
|
+
},
|
|
62
|
+
font: {
|
|
63
|
+
family: vi.fn((font) => {
|
|
64
|
+
const fonts = {
|
|
65
|
+
primary: 'Inter, sans-serif',
|
|
66
|
+
secondary: 'Roboto, Arial, sans-serif',
|
|
67
|
+
monospace: 'Courier, monospace',
|
|
68
|
+
display: 'Poppins, Inter, sans-serif',
|
|
69
|
+
};
|
|
70
|
+
return fonts[font] || 'Fredoka';
|
|
71
|
+
}),
|
|
72
|
+
},
|
|
73
|
+
})),
|
|
74
|
+
}));
|
|
75
|
+
vi.mock('../text', () => {
|
|
76
|
+
class MockText {
|
|
77
|
+
text;
|
|
78
|
+
style;
|
|
79
|
+
constructor(params) {
|
|
80
|
+
this.text = params.text;
|
|
81
|
+
this.style = {
|
|
82
|
+
fontSize: params.size ?? 22,
|
|
83
|
+
fontFamily: params.fontFamily ?? 'Fredoka',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
setText(text) {
|
|
87
|
+
this.text = text;
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
setOrigin() { return this; }
|
|
91
|
+
setFontSize(size) { this.style['fontSize'] = size; return this; }
|
|
92
|
+
setFontFamily(family) { this.style['fontFamily'] = family; return this; }
|
|
93
|
+
setColor(color) { this.style['color'] = color; return this; }
|
|
94
|
+
getBounds() {
|
|
95
|
+
const charWidth = 10;
|
|
96
|
+
const lineHeight = parseInt(this.style['fontSize']) || 18;
|
|
97
|
+
return {
|
|
98
|
+
width: this.text.length * charWidth,
|
|
99
|
+
height: lineHeight,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return { Text: MockText };
|
|
104
|
+
});
|
|
105
|
+
vi.mock('phaser', () => {
|
|
106
|
+
class MockSprite {
|
|
107
|
+
width = 0;
|
|
108
|
+
height = 0;
|
|
109
|
+
// eslint-disable-next-line no-unused-vars
|
|
110
|
+
constructor(_x, _y, _texture) { }
|
|
111
|
+
setOrigin() { return this; }
|
|
112
|
+
setTexture() { return this; }
|
|
113
|
+
setSize(width, height) {
|
|
114
|
+
this.width = width;
|
|
115
|
+
this.height = height;
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
on() { return this; }
|
|
119
|
+
}
|
|
120
|
+
class MockGraphics {
|
|
121
|
+
fillStyle() { return this; }
|
|
122
|
+
fillRoundedRect() { return this; }
|
|
123
|
+
generateTexture() { return this; }
|
|
124
|
+
destroy() { return this; }
|
|
125
|
+
}
|
|
126
|
+
class Container {
|
|
127
|
+
scene;
|
|
128
|
+
// eslint-disable-next-line no-unused-vars
|
|
129
|
+
constructor(_scene, _x, _y) {
|
|
130
|
+
this.scene = _scene;
|
|
131
|
+
}
|
|
132
|
+
add() { return this; }
|
|
133
|
+
setSize() { return this; }
|
|
134
|
+
on() { return this; }
|
|
135
|
+
}
|
|
136
|
+
class Scene {
|
|
137
|
+
add = {
|
|
138
|
+
sprite: vi.fn((x, y, texture) => new MockSprite(x, y, texture)),
|
|
139
|
+
graphics: vi.fn(() => new MockGraphics()),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
class BasePlugin {
|
|
143
|
+
constructor() { }
|
|
144
|
+
}
|
|
145
|
+
const GameObjects = { Container };
|
|
146
|
+
const Plugins = { BasePlugin };
|
|
147
|
+
return { GameObjects, Scene, Plugins };
|
|
148
|
+
});
|
|
149
|
+
import { Badge } from './badge';
|
|
150
|
+
describe('Badge', () => {
|
|
151
|
+
it('should create a Badge instance', () => {
|
|
152
|
+
const scene = new Scene();
|
|
153
|
+
const badge = new Badge({ scene, x: 100, y: 100, text: 'New' });
|
|
154
|
+
expect(badge).toBeInstanceOf(Badge);
|
|
155
|
+
});
|
|
156
|
+
it('should create with custom properties', () => {
|
|
157
|
+
const scene = new Scene();
|
|
158
|
+
const badge = new Badge({
|
|
159
|
+
scene,
|
|
160
|
+
x: 100,
|
|
161
|
+
y: 100,
|
|
162
|
+
text: 'Custom',
|
|
163
|
+
fontSize: 'xl',
|
|
164
|
+
font: 'display',
|
|
165
|
+
color: 'purple-600',
|
|
166
|
+
textColor: 'white',
|
|
167
|
+
borderRadius: 'lg',
|
|
168
|
+
padding: '6',
|
|
169
|
+
});
|
|
170
|
+
expect(badge).toBeInstanceOf(Badge);
|
|
171
|
+
});
|
|
172
|
+
it('should support method chaining for colors', () => {
|
|
173
|
+
const scene = new Scene();
|
|
174
|
+
const badge = new Badge({ scene, x: 0, y: 0, text: 'X' });
|
|
175
|
+
const result = badge.setTextColor('white').setColor('blue-600');
|
|
176
|
+
expect(result).toBe(badge);
|
|
177
|
+
});
|
|
178
|
+
it('should handle borderRadius full correctly', () => {
|
|
179
|
+
const scene = new Scene();
|
|
180
|
+
const badge = new Badge({
|
|
181
|
+
scene,
|
|
182
|
+
x: 0,
|
|
183
|
+
y: 0,
|
|
184
|
+
text: 'Full',
|
|
185
|
+
borderRadius: 'full',
|
|
186
|
+
});
|
|
187
|
+
expect(badge).toBeInstanceOf(Badge);
|
|
188
|
+
});
|
|
189
|
+
it('should expose the internal text object', () => {
|
|
190
|
+
const scene = new Scene();
|
|
191
|
+
const badge = new Badge({ scene, x: 0, y: 0, text: 'Hi' });
|
|
192
|
+
expect(badge.badgeText).toBeDefined();
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
//# sourceMappingURL=badge.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.spec.js","sourceRoot":"","sources":["../../../src/components/badge/badge.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/badge/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/badge/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
|
|
@@ -14,28 +14,22 @@ export type IconButtonParams = {
|
|
|
14
14
|
};
|
|
15
15
|
export declare class IconButton extends GameObjects.Container {
|
|
16
16
|
backgroundSprite: GameObjects.Sprite;
|
|
17
|
-
whiteBorderSprite: GameObjects.Sprite;
|
|
18
17
|
iconText: IconText;
|
|
19
18
|
private pw;
|
|
20
19
|
private baseColor;
|
|
21
20
|
private colorButton;
|
|
22
|
-
private lightColorButton;
|
|
23
|
-
private darkColorButton;
|
|
24
21
|
private sizePx;
|
|
25
22
|
private borderRadiusPx;
|
|
26
23
|
constructor({ scene, x, y, icon, size, color, onClick, borderRadius, }: IconButtonParams);
|
|
27
24
|
setBorderRadius(borderRadius: RadiusKey | number): this;
|
|
28
25
|
setButtonSize(size: FontSizeKey | number): this;
|
|
29
26
|
private updateSize;
|
|
30
|
-
private createWhiteBorderSprite;
|
|
31
27
|
private createBackgroundSprite;
|
|
32
|
-
private createWhiteBorderTexture;
|
|
33
28
|
private createBackgroundTexture;
|
|
34
29
|
/**
|
|
35
|
-
* Draws
|
|
36
|
-
* For round buttons, uses a smaller centered graphic with light color.
|
|
30
|
+
* Draws the button's background as a flat filled rounded rect.
|
|
37
31
|
*/
|
|
38
|
-
private
|
|
32
|
+
private drawButtonBackground;
|
|
39
33
|
private createIconText;
|
|
40
34
|
private setupContainer;
|
|
41
35
|
private setupInteractivity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/icon-button/icon-button.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/icon-button/icon-button.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAQrB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,KAAK,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,+FAA+F;IAC/F,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CACnC,CAAC;AAeF,qBAAa,UAAW,SAAQ,WAAW,CAAC,SAAS;IAC5C,gBAAgB,EAAG,WAAW,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAG,QAAQ,CAAC;IAE3B,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,cAAc,CAAU;gBAEpB,EACV,KAAK,EACL,CAAC,EACD,CAAC,EACD,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,YAAY,GACb,EAAE,gBAAgB;IA2BZ,eAAe,CAAC,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IAkBvD,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI;IAoBtD,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,kBAAkB;IA+C1B;;;OAGG;IACH,IAAW,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,MAAM,CAAC,CAQ9G;IAED;;;;OAIG;IACa,SAAS,CACvB,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,GAC7B,MAAM,CAAC,IAAI,CAAC,SAAS;CAoBzB"}
|