hudini 0.5.0 → 0.7.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 (41) hide show
  1. package/dist/components/circular-progress/circular-progress.d.ts +59 -0
  2. package/dist/components/circular-progress/circular-progress.d.ts.map +1 -0
  3. package/dist/components/circular-progress/circular-progress.js +130 -0
  4. package/dist/components/circular-progress/circular-progress.js.map +1 -0
  5. package/dist/components/circular-progress/circular-progress.spec.d.ts +2 -0
  6. package/dist/components/circular-progress/circular-progress.spec.d.ts.map +1 -0
  7. package/dist/components/circular-progress/circular-progress.spec.js +185 -0
  8. package/dist/components/circular-progress/circular-progress.spec.js.map +1 -0
  9. package/dist/components/circular-progress/index.d.ts +2 -0
  10. package/dist/components/circular-progress/index.d.ts.map +1 -0
  11. package/dist/components/circular-progress/index.js +2 -0
  12. package/dist/components/circular-progress/index.js.map +1 -0
  13. package/dist/components/flat-icon-button/flat-icon-button.d.ts +45 -0
  14. package/dist/components/flat-icon-button/flat-icon-button.d.ts.map +1 -0
  15. package/dist/components/flat-icon-button/flat-icon-button.js +152 -0
  16. package/dist/components/flat-icon-button/flat-icon-button.js.map +1 -0
  17. package/dist/components/flat-icon-button/index.d.ts +2 -0
  18. package/dist/components/flat-icon-button/index.d.ts.map +1 -0
  19. package/dist/components/flat-icon-button/index.js +2 -0
  20. package/dist/components/flat-icon-button/index.js.map +1 -0
  21. package/dist/components/icon-button/icon-button.d.ts +1 -0
  22. package/dist/components/icon-button/icon-button.d.ts.map +1 -1
  23. package/dist/components/icon-button/icon-button.js +10 -0
  24. package/dist/components/icon-button/icon-button.js.map +1 -1
  25. package/dist/components/index.d.ts +3 -0
  26. package/dist/components/index.d.ts.map +1 -1
  27. package/dist/components/index.js +3 -0
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/components/linear-progress/index.d.ts +2 -0
  30. package/dist/components/linear-progress/index.d.ts.map +1 -0
  31. package/dist/components/linear-progress/index.js +2 -0
  32. package/dist/components/linear-progress/index.js.map +1 -0
  33. package/dist/components/linear-progress/linear-progress.d.ts +93 -0
  34. package/dist/components/linear-progress/linear-progress.d.ts.map +1 -0
  35. package/dist/components/linear-progress/linear-progress.js +231 -0
  36. package/dist/components/linear-progress/linear-progress.js.map +1 -0
  37. package/dist/components/linear-progress/linear-progress.spec.d.ts +2 -0
  38. package/dist/components/linear-progress/linear-progress.spec.d.ts.map +1 -0
  39. package/dist/components/linear-progress/linear-progress.spec.js +288 -0
  40. package/dist/components/linear-progress/linear-progress.spec.js.map +1 -0
  41. package/package.json +2 -2
@@ -0,0 +1,59 @@
1
+ import { IconText, type IconKey } from 'font-awesome-for-phaser';
2
+ import { GameObjects, Scene } from 'phaser';
3
+ import { ColorToken, type ColorKey, type FontSizeKey } from 'phaser-wind';
4
+ export type CircularProgressParams = {
5
+ scene: Scene;
6
+ x: number;
7
+ y: number;
8
+ icon?: IconKey;
9
+ size?: FontSizeKey | number;
10
+ color?: ColorKey;
11
+ rotationsPerSecond?: number;
12
+ };
13
+ export declare class CircularProgress extends GameObjects.Container {
14
+ iconText: IconText;
15
+ private pw;
16
+ private rotationSpeed;
17
+ private isSpinning;
18
+ constructor({ scene, x, y, icon, size, color, rotationsPerSecond }: CircularProgressParams);
19
+ /**
20
+ * Start the spinning animation
21
+ */
22
+ start(): this;
23
+ /**
24
+ * Stop the spinning animation
25
+ */
26
+ stop(): this;
27
+ /**
28
+ * Set the rotation speed
29
+ * @param speed - Rotations per second
30
+ */
31
+ setRotationsPerSecond(rotationsPerSecond: number): this;
32
+ /**
33
+ * Set the icon
34
+ * @param icon - Font Awesome icon key
35
+ */
36
+ setIcon(icon: IconKey): this;
37
+ /**
38
+ * Set the color
39
+ * @param color - Phaser Wind color token
40
+ */
41
+ setColor(color: ColorToken): this;
42
+ /**
43
+ * Set the size
44
+ * @param size - Font size key or pixel value
45
+ */
46
+ setSize(size: FontSizeKey | number): this;
47
+ /**
48
+ * Check if the spinner is currently spinning
49
+ */
50
+ get spinning(): boolean;
51
+ private createIconText;
52
+ private setupContainer;
53
+ private startSpinning;
54
+ /**
55
+ * Clean up the component
56
+ */
57
+ destroy(): void;
58
+ }
59
+ //# sourceMappingURL=circular-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-progress.d.ts","sourceRoot":"","sources":["../../../src/components/circular-progress/circular-progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAEL,UAAU,EAEV,KAAK,QAAQ,EACb,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAIrB,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,KAAK,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAOF,qBAAa,gBAAiB,SAAQ,WAAW,CAAC,SAAS;IAClD,QAAQ,EAAG,QAAQ,CAAC;IAE3B,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAiB;gBAEvB,EACV,KAAK,EACL,CAAC,EACD,CAAC,EACD,IAAmB,EACnB,IAAI,EACJ,KAAqB,EACrB,kBAAyC,EAC1C,EAAE,sBAAsB;IAczB;;OAEG;IACI,KAAK,IAAI,IAAI;IAQpB;;OAEG;IACI,IAAI,IAAI,IAAI;IAMnB;;;OAGG;IACI,qBAAqB,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI;IAS9D;;;OAGG;IACI,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKnC;;;OAGG;IACI,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOxC;;;OAGG;IACa,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI;IASzD;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACa,OAAO,IAAI,IAAI;CAIhC"}
@@ -0,0 +1,130 @@
1
+ import { IconText } from 'font-awesome-for-phaser';
2
+ import { GameObjects } from 'phaser';
3
+ import { Color, } from 'phaser-wind';
4
+ import { getPWFromScene } from '../../utils/get-pw-from-scene';
5
+ const DEFAULT_ICON = 'spinner';
6
+ const DEFAULT_COLOR = 'blue';
7
+ const ROTATIONS_PER_SECOND = 2;
8
+ const ONE_SECOND = 1000;
9
+ export class CircularProgress extends GameObjects.Container {
10
+ iconText;
11
+ pw;
12
+ rotationSpeed;
13
+ isSpinning = true;
14
+ constructor({ scene, x, y, icon = DEFAULT_ICON, size, color = DEFAULT_COLOR, rotationsPerSecond = ROTATIONS_PER_SECOND }) {
15
+ super(scene, x, y);
16
+ this.pw = getPWFromScene(scene);
17
+ this.rotationSpeed = rotationsPerSecond;
18
+ const sizePx = typeof size === 'number'
19
+ ? size
20
+ : this.pw.fontSize.px(size ?? 'md');
21
+ this.createIconText(scene, icon, sizePx, color);
22
+ this.setupContainer();
23
+ this.startSpinning();
24
+ }
25
+ /**
26
+ * Start the spinning animation
27
+ */
28
+ start() {
29
+ if (!this.isSpinning) {
30
+ this.isSpinning = true;
31
+ this.startSpinning();
32
+ }
33
+ return this;
34
+ }
35
+ /**
36
+ * Stop the spinning animation
37
+ */
38
+ stop() {
39
+ this.isSpinning = false;
40
+ this.scene.tweens.killTweensOf(this.iconText);
41
+ return this;
42
+ }
43
+ /**
44
+ * Set the rotation speed
45
+ * @param speed - Rotations per second
46
+ */
47
+ setRotationsPerSecond(rotationsPerSecond) {
48
+ this.rotationSpeed = rotationsPerSecond;
49
+ if (this.isSpinning) {
50
+ this.scene.tweens.killTweensOf(this.iconText);
51
+ this.startSpinning();
52
+ }
53
+ return this;
54
+ }
55
+ /**
56
+ * Set the icon
57
+ * @param icon - Font Awesome icon key
58
+ */
59
+ setIcon(icon) {
60
+ this.iconText.setIcon(icon);
61
+ return this;
62
+ }
63
+ /**
64
+ * Set the color
65
+ * @param color - Phaser Wind color token
66
+ */
67
+ setColor(color) {
68
+ this.iconText.setStyle({
69
+ color: this.pw.color.rgb(color),
70
+ });
71
+ return this;
72
+ }
73
+ /**
74
+ * Set the size
75
+ * @param size - Font size key or pixel value
76
+ */
77
+ setSize(size) {
78
+ const sizePx = typeof size === 'number'
79
+ ? size
80
+ : this.pw.fontSize.px(size);
81
+ this.iconText.setFontSize(`${sizePx}px`);
82
+ return this;
83
+ }
84
+ /**
85
+ * Check if the spinner is currently spinning
86
+ */
87
+ get spinning() {
88
+ return this.isSpinning;
89
+ }
90
+ createIconText(scene, icon, size, color) {
91
+ this.iconText = new IconText({
92
+ scene,
93
+ x: 0,
94
+ y: 0,
95
+ icon,
96
+ size,
97
+ style: {
98
+ color: Color.rgb(color),
99
+ },
100
+ });
101
+ this.iconText.setOrigin(0.5, 0.5);
102
+ }
103
+ setupContainer() {
104
+ this.add([this.iconText]);
105
+ }
106
+ startSpinning() {
107
+ if (!this.isSpinning)
108
+ return;
109
+ const duration = ONE_SECOND / this.rotationSpeed;
110
+ this.scene.tweens.add({
111
+ targets: this.iconText,
112
+ rotation: Math.PI * 2,
113
+ duration,
114
+ ease: 'Linear',
115
+ repeat: -1,
116
+ onComplete: () => {
117
+ // Reset rotation to prevent accumulation
118
+ this.iconText.rotation = 0;
119
+ },
120
+ });
121
+ }
122
+ /**
123
+ * Clean up the component
124
+ */
125
+ destroy() {
126
+ this.stop();
127
+ super.destroy();
128
+ }
129
+ }
130
+ //# sourceMappingURL=circular-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-progress.js","sourceRoot":"","sources":["../../../src/components/circular-progress/circular-progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=circular-progress.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-progress.spec.d.ts","sourceRoot":"","sources":["../../../src/components/circular-progress/circular-progress.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,185 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ // Mock dependencies
3
+ const mockTweens = {
4
+ add: vi.fn(),
5
+ killTweensOf: vi.fn(),
6
+ };
7
+ const mockScene = {
8
+ tweens: mockTweens,
9
+ };
10
+ vi.mock('phaser', () => ({
11
+ GameObjects: {
12
+ Container: class Container {
13
+ x;
14
+ y;
15
+ scene;
16
+ list = [];
17
+ constructor(scene, x, y) {
18
+ this.scene = scene;
19
+ this.x = x;
20
+ this.y = y;
21
+ }
22
+ add(children) {
23
+ this.list.push(...children);
24
+ return this;
25
+ }
26
+ destroy() {
27
+ // Mock destroy
28
+ }
29
+ },
30
+ },
31
+ }));
32
+ vi.mock('font-awesome-for-phaser', () => ({
33
+ IconText: class IconText {
34
+ params;
35
+ rotation = 0;
36
+ constructor(params) {
37
+ this.params = params;
38
+ }
39
+ setOrigin() { return this; }
40
+ setIcon() { return this; }
41
+ setStyle() { return this; }
42
+ setFontSize() { return this; }
43
+ },
44
+ }));
45
+ vi.mock('phaser-wind', () => ({
46
+ Color: {
47
+ rgb: vi.fn((color) => `rgb-${color}`),
48
+ },
49
+ }));
50
+ vi.mock('../../utils/get-pw-from-scene', () => ({
51
+ getPWFromScene: vi.fn(() => ({
52
+ color: {
53
+ rgb: vi.fn((color) => `rgb-${color}`),
54
+ },
55
+ fontSize: {
56
+ px: vi.fn((size) => {
57
+ const sizeMap = {
58
+ sm: 14,
59
+ md: 16,
60
+ lg: 18,
61
+ xl: 20,
62
+ };
63
+ return sizeMap[size] ?? 16;
64
+ }),
65
+ },
66
+ })),
67
+ }));
68
+ import { CircularProgress } from './circular-progress';
69
+ beforeEach(() => {
70
+ vi.clearAllMocks();
71
+ });
72
+ describe('CircularProgress', () => {
73
+ it('creates with default parameters', () => {
74
+ const progress = new CircularProgress({
75
+ scene: mockScene,
76
+ x: 100,
77
+ y: 200,
78
+ });
79
+ expect(progress.x).toBe(100);
80
+ expect(progress.y).toBe(200);
81
+ expect(progress.spinning).toBe(true);
82
+ expect(mockTweens.add).toHaveBeenCalled();
83
+ });
84
+ it('creates with custom parameters', () => {
85
+ const progress = new CircularProgress({
86
+ scene: mockScene,
87
+ x: 100,
88
+ y: 200,
89
+ icon: 'gear',
90
+ color: 'red',
91
+ size: 'lg',
92
+ rotationsPerSecond: 3,
93
+ });
94
+ expect(progress.spinning).toBe(true);
95
+ expect(mockTweens.add).toHaveBeenCalled();
96
+ });
97
+ it('can start and stop spinning', () => {
98
+ const progress = new CircularProgress({
99
+ scene: mockScene,
100
+ x: 100,
101
+ y: 200,
102
+ });
103
+ // Should start spinning by default
104
+ expect(progress.spinning).toBe(true);
105
+ // Stop spinning
106
+ progress.stop();
107
+ expect(progress.spinning).toBe(false);
108
+ expect(mockTweens.killTweensOf).toHaveBeenCalled();
109
+ // Start spinning again
110
+ vi.clearAllMocks();
111
+ progress.start();
112
+ expect(progress.spinning).toBe(true);
113
+ expect(mockTweens.add).toHaveBeenCalled();
114
+ });
115
+ it('can change speed', () => {
116
+ const progress = new CircularProgress({
117
+ scene: mockScene,
118
+ x: 100,
119
+ y: 200,
120
+ rotationsPerSecond: 1,
121
+ });
122
+ vi.clearAllMocks();
123
+ progress.setRotationsPerSecond(5);
124
+ // Should restart animation with new speed
125
+ expect(mockTweens.killTweensOf).toHaveBeenCalled();
126
+ expect(mockTweens.add).toHaveBeenCalled();
127
+ });
128
+ it('can change icon', () => {
129
+ const progress = new CircularProgress({
130
+ scene: mockScene,
131
+ x: 100,
132
+ y: 200,
133
+ });
134
+ const result = progress.setIcon('rotate');
135
+ expect(result).toBe(progress); // Should return this for chaining
136
+ });
137
+ it('can change color', () => {
138
+ const progress = new CircularProgress({
139
+ scene: mockScene,
140
+ x: 100,
141
+ y: 200,
142
+ });
143
+ const result = progress.setColor('green-500');
144
+ expect(result).toBe(progress); // Should return this for chaining
145
+ });
146
+ it('can change size', () => {
147
+ const progress = new CircularProgress({
148
+ scene: mockScene,
149
+ x: 100,
150
+ y: 200,
151
+ });
152
+ // Test with token
153
+ let result = progress.setSize('xl');
154
+ expect(result).toBe(progress);
155
+ // Test with pixel value
156
+ result = progress.setSize(32);
157
+ expect(result).toBe(progress);
158
+ });
159
+ it('cleans up properly on destroy', () => {
160
+ const progress = new CircularProgress({
161
+ scene: mockScene,
162
+ x: 100,
163
+ y: 200,
164
+ });
165
+ progress.destroy();
166
+ expect(progress.spinning).toBe(false);
167
+ expect(mockTweens.killTweensOf).toHaveBeenCalled();
168
+ });
169
+ it('supports method chaining', () => {
170
+ const progress = new CircularProgress({
171
+ scene: mockScene,
172
+ x: 100,
173
+ y: 200,
174
+ });
175
+ const result = progress
176
+ .setRotationsPerSecond(3)
177
+ .setIcon('gear')
178
+ .setColor('red-500')
179
+ .setSize('lg')
180
+ .stop()
181
+ .start();
182
+ expect(result).toBe(progress);
183
+ });
184
+ });
185
+ //# sourceMappingURL=circular-progress.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circular-progress.spec.js","sourceRoot":"","sources":["../../../src/components/circular-progress/circular-progress.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './circular-progress';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/circular-progress/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './circular-progress';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/circular-progress/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { IconText, type IconKey, type IconStyle } from 'font-awesome-for-phaser';
2
+ import { GameObjects, Scene } from 'phaser';
3
+ import { type ColorKey, type FontSizeKey } from 'phaser-wind';
4
+ export type FlatIconButtonParams = {
5
+ scene: Scene;
6
+ x: number;
7
+ y: number;
8
+ icon: IconKey;
9
+ iconStyle?: IconStyle;
10
+ size?: FontSizeKey | number;
11
+ backgroundColor?: ColorKey | string;
12
+ iconColor?: ColorKey | string;
13
+ onClick?: () => void;
14
+ borderRadius?: string | number;
15
+ backgroundOpacity?: number;
16
+ iconOpacity?: number;
17
+ };
18
+ export declare class FlatIconButton extends GameObjects.Container {
19
+ backgroundSprite: GameObjects.Sprite;
20
+ iconText: IconText;
21
+ private pw;
22
+ private baseSizePx;
23
+ private borderRadiusPx;
24
+ private backgroundColorValue;
25
+ private iconColorValue;
26
+ private backgroundOpacityValue;
27
+ private iconOpacityValue;
28
+ constructor({ scene, x, y, icon, iconStyle, size, backgroundColor, iconColor, onClick, borderRadius, backgroundOpacity, iconOpacity, }: FlatIconButtonParams);
29
+ setBackgroundColor(color: ColorKey | string): this;
30
+ setIconColor(color: ColorKey | string): this;
31
+ setBackgroundOpacity(opacity: number): this;
32
+ setIconOpacity(opacity: number): this;
33
+ setBorderRadius(borderRadius: string | number): this;
34
+ setIcon(icon: IconKey, opts?: {
35
+ iconStyle?: IconStyle;
36
+ }): this;
37
+ setButtonSize(size: FontSizeKey | number): this;
38
+ private createBackgroundSprite;
39
+ private regenerateBackgroundTexture;
40
+ private createBackgroundTexture;
41
+ private createIconText;
42
+ private setupContainer;
43
+ private setupInteractivity;
44
+ }
45
+ //# sourceMappingURL=flat-icon-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flat-icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/flat-icon-button/flat-icon-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAIrB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAWF,qBAAa,cAAe,SAAQ,WAAW,CAAC,SAAS;IAChD,gBAAgB,EAAG,WAAW,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAG,QAAQ,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAuB;IAEjC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,sBAAsB,CAAK;IACnC,OAAO,CAAC,gBAAgB,CAAK;gBAEjB,EACV,KAAK,EACL,CAAC,EACD,CAAC,EACD,IAAI,EACJ,SAAmB,EACnB,IAAI,EACJ,eAA4B,EAC5B,SAAmB,EACnB,OAAO,EACP,YAAmB,EACnB,iBAAqB,EACrB,WAAe,GAChB,EAAE,oBAAoB;IAwBhB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAMlD,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAQ5C,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOrC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYpD,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI;IAK9D,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI;IAQtD,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,2BAA2B;IAMnC,OAAO,CAAC,uBAAuB;IAyB/B,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,kBAAkB;CAsB3B"}
@@ -0,0 +1,152 @@
1
+ import { IconText } from 'font-awesome-for-phaser';
2
+ import { GameObjects } from 'phaser';
3
+ import { Color, } from 'phaser-wind';
4
+ import { getPWFromScene } from '../../utils/get-pw-from-scene';
5
+ const durations = {
6
+ click: 100,
7
+ hover: 150,
8
+ };
9
+ const CLICK_OFFSET = 2;
10
+ const BUTTON_SCALE = 2.2;
11
+ const CENTER_OFFSET = 1.1;
12
+ export class FlatIconButton extends GameObjects.Container {
13
+ backgroundSprite;
14
+ iconText;
15
+ pw;
16
+ baseSizePx;
17
+ borderRadiusPx;
18
+ backgroundColorValue; // rgb string
19
+ iconColorValue; // rgb string
20
+ backgroundOpacityValue = 1;
21
+ iconOpacityValue = 1;
22
+ constructor({ scene, x, y, icon, iconStyle = 'solid', size, backgroundColor = 'gray-600', iconColor = 'white', onClick, borderRadius = 'md', backgroundOpacity = 1, iconOpacity = 1, }) {
23
+ super(scene, x, y);
24
+ this.pw = getPWFromScene(scene);
25
+ this.baseSizePx =
26
+ typeof size === 'number' ? size : this.pw.fontSize.px(size ?? 'md');
27
+ this.borderRadiusPx =
28
+ typeof borderRadius === 'number'
29
+ ? borderRadius
30
+ : this.pw.radius.px((borderRadius ?? 'md'));
31
+ this.backgroundColorValue = Color.rgb(backgroundColor);
32
+ this.iconColorValue = Color.rgb(iconColor);
33
+ this.backgroundOpacityValue = backgroundOpacity;
34
+ this.iconOpacityValue = iconOpacity;
35
+ this.createBackgroundSprite(scene);
36
+ this.createIconText(scene, icon, iconStyle);
37
+ this.setupContainer();
38
+ this.setupInteractivity(onClick);
39
+ }
40
+ // API: colors
41
+ setBackgroundColor(color) {
42
+ this.backgroundColorValue = Color.rgb(color);
43
+ this.regenerateBackgroundTexture();
44
+ return this;
45
+ }
46
+ setIconColor(color) {
47
+ this.iconColorValue = Color.rgb(color);
48
+ this.iconText.setColor(this.iconColorValue);
49
+ this.iconText.setAlpha(this.iconOpacityValue);
50
+ return this;
51
+ }
52
+ // API: opacity
53
+ setBackgroundOpacity(opacity) {
54
+ this.backgroundOpacityValue = Math.max(0, Math.min(1, opacity));
55
+ this.backgroundSprite.setAlpha(this.backgroundOpacityValue);
56
+ return this;
57
+ }
58
+ setIconOpacity(opacity) {
59
+ this.iconOpacityValue = Math.max(0, Math.min(1, opacity));
60
+ this.iconText.setAlpha(this.iconOpacityValue);
61
+ return this;
62
+ }
63
+ // API: radius
64
+ setBorderRadius(borderRadius) {
65
+ const newRadiusPx = typeof borderRadius === 'number'
66
+ ? borderRadius
67
+ : this.pw.radius.px(borderRadius);
68
+ if (this.borderRadiusPx === newRadiusPx)
69
+ return this;
70
+ this.borderRadiusPx = newRadiusPx;
71
+ this.regenerateBackgroundTexture();
72
+ return this;
73
+ }
74
+ // API: icon
75
+ setIcon(icon, opts) {
76
+ this.iconText.setIcon(icon, opts);
77
+ return this;
78
+ }
79
+ setButtonSize(size) {
80
+ this.baseSizePx =
81
+ typeof size === 'number' ? size : this.pw.fontSize.px(size ?? 'md');
82
+ this.iconText.setFontSize(`${this.baseSizePx}px`);
83
+ this.regenerateBackgroundTexture();
84
+ return this;
85
+ }
86
+ createBackgroundSprite(scene) {
87
+ const textureKey = this.createBackgroundTexture(scene);
88
+ this.backgroundSprite = scene.add.sprite(0, 0, textureKey);
89
+ this.backgroundSprite.setOrigin(0.5, 0.5);
90
+ this.backgroundSprite.setAlpha(this.backgroundOpacityValue);
91
+ }
92
+ regenerateBackgroundTexture() {
93
+ const textureKey = this.createBackgroundTexture(this.scene);
94
+ this.backgroundSprite.setTexture(textureKey);
95
+ this.backgroundSprite.setAlpha(this.backgroundOpacityValue);
96
+ }
97
+ createBackgroundTexture(scene) {
98
+ const size = this.baseSizePx;
99
+ const textureKey = `flatIconButton_${this.backgroundColorValue}_${this.borderRadiusPx}_${size}`;
100
+ const textureSize = size * BUTTON_SCALE; // match icon-button scale for consistency
101
+ const centerX = size * CENTER_OFFSET;
102
+ const centerY = size * CENTER_OFFSET;
103
+ const graphics = scene.add.graphics();
104
+ graphics.fillStyle(Color.hex(this.backgroundColorValue), 1);
105
+ const side = size * 2;
106
+ const radius = Math.min(this.borderRadiusPx, side / 2);
107
+ graphics.fillRoundedRect(centerX - side / 2, centerY - side / 2, side, side, radius);
108
+ graphics.generateTexture(textureKey, textureSize, textureSize);
109
+ graphics.destroy();
110
+ return textureKey;
111
+ }
112
+ createIconText(scene, icon, iconStyle) {
113
+ this.iconText = new IconText({
114
+ scene,
115
+ x: 0,
116
+ y: 0,
117
+ icon,
118
+ size: this.baseSizePx,
119
+ style: {
120
+ color: this.iconColorValue,
121
+ strokeThickness: 0,
122
+ },
123
+ iconStyle,
124
+ });
125
+ this.iconText.setAlpha(this.iconOpacityValue);
126
+ this.iconText.setOrigin(0.5, 0.5);
127
+ }
128
+ setupContainer() {
129
+ this.add([this.backgroundSprite, this.iconText]);
130
+ }
131
+ setupInteractivity(onClick) {
132
+ this.backgroundSprite.setInteractive({ useHandCursor: true });
133
+ this.backgroundSprite.on('pointerdown', () => {
134
+ this.scene.tweens.add({
135
+ targets: [this.backgroundSprite, this.iconText],
136
+ y: CLICK_OFFSET,
137
+ duration: durations.click,
138
+ ease: 'Linear',
139
+ });
140
+ });
141
+ this.backgroundSprite.on('pointerup', () => {
142
+ this.scene.tweens.add({
143
+ targets: [this.backgroundSprite, this.iconText],
144
+ y: 0,
145
+ duration: durations.click,
146
+ ease: 'Linear',
147
+ });
148
+ onClick?.();
149
+ });
150
+ }
151
+ }
152
+ //# sourceMappingURL=flat-icon-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flat-icon-button.js","sourceRoot":"","sources":["../../../src/components/flat-icon-button/flat-icon-button.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './flat-icon-button';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/flat-icon-button/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './flat-icon-button';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/flat-icon-button/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
@@ -22,6 +22,7 @@ export declare class IconButton extends GameObjects.Container {
22
22
  private borderRadiusPx;
23
23
  constructor({ scene, x, y, icon, size, color, onClick, borderRadius }: IconButtonParams);
24
24
  setBorderRadius(borderRadius: RadiusKey | number): this;
25
+ setButtonSize(size: FontSizeKey | number): this;
25
26
  private createShadowSprite;
26
27
  private createShadowTexture;
27
28
  private createBackgroundSprite;