hudini 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -27
- package/dist/components/alert/alert.d.ts +161 -0
- package/dist/components/alert/alert.d.ts.map +1 -0
- package/dist/components/alert/alert.js +304 -0
- package/dist/components/alert/alert.js.map +1 -0
- package/dist/components/alert/alert.spec.d.ts +2 -0
- package/dist/components/alert/alert.spec.d.ts.map +1 -0
- package/dist/components/alert/alert.spec.js +235 -0
- package/dist/components/alert/alert.spec.js.map +1 -0
- package/dist/components/alert/index.d.ts +2 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js +2 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/badge/badge.d.ts +94 -0
- package/dist/components/badge/badge.d.ts.map +1 -0
- package/dist/components/badge/badge.js +180 -0
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/badge/badge.spec.d.ts +2 -0
- package/dist/components/badge/badge.spec.d.ts.map +1 -0
- package/dist/components/badge/badge.spec.js +197 -0
- package/dist/components/badge/badge.spec.js.map +1 -0
- package/dist/components/badge/index.d.ts +2 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/card/card.d.ts +11 -15
- package/dist/components/card/card.d.ts.map +1 -1
- package/dist/components/card/card.js +37 -59
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/checkbox/checkbox.d.ts +153 -0
- package/dist/components/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.js +329 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/checkbox/checkbox.spec.d.ts +2 -0
- package/dist/components/checkbox/checkbox.spec.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.spec.js +346 -0
- package/dist/components/checkbox/checkbox.spec.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +2 -0
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/components/circular-progress/circular-progress.d.ts.map +1 -1
- package/dist/components/circular-progress/circular-progress.js +2 -1
- package/dist/components/circular-progress/circular-progress.js.map +1 -1
- package/dist/components/circular-progress/circular-progress.spec.js +2 -0
- package/dist/components/circular-progress/circular-progress.spec.js.map +1 -1
- package/dist/components/dock/dock.d.ts +115 -0
- package/dist/components/dock/dock.d.ts.map +1 -0
- package/dist/components/dock/dock.js +168 -0
- package/dist/components/dock/dock.js.map +1 -0
- package/dist/components/dock/dock.spec.d.ts +2 -0
- package/dist/components/dock/dock.spec.d.ts.map +1 -0
- package/dist/components/dock/dock.spec.js +178 -0
- package/dist/components/dock/dock.spec.js.map +1 -0
- package/dist/components/dock/index.d.ts +2 -0
- package/dist/components/dock/index.d.ts.map +1 -0
- package/dist/components/dock/index.js +2 -0
- package/dist/components/dock/index.js.map +1 -0
- package/dist/components/icon-button/icon-button.d.ts +18 -9
- package/dist/components/icon-button/icon-button.d.ts.map +1 -1
- package/dist/components/icon-button/icon-button.js +57 -101
- package/dist/components/icon-button/icon-button.js.map +1 -1
- package/dist/components/index.d.ts +10 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +10 -5
- package/dist/components/index.js.map +1 -1
- package/dist/components/linear-progress/linear-progress.d.ts.map +1 -1
- package/dist/components/linear-progress/linear-progress.js +4 -4
- package/dist/components/linear-progress/linear-progress.js.map +1 -1
- package/dist/components/linear-progress/linear-progress.spec.js +2 -0
- package/dist/components/linear-progress/linear-progress.spec.js.map +1 -1
- package/dist/components/modal/index.d.ts +2 -0
- package/dist/components/modal/index.d.ts.map +1 -0
- package/dist/components/modal/index.js +2 -0
- package/dist/components/modal/index.js.map +1 -0
- package/dist/components/modal/modal.d.ts +193 -0
- package/dist/components/modal/modal.d.ts.map +1 -0
- package/dist/components/modal/modal.js +382 -0
- package/dist/components/modal/modal.js.map +1 -0
- package/dist/components/modal/modal.spec.d.ts +2 -0
- package/dist/components/modal/modal.spec.d.ts.map +1 -0
- package/dist/components/modal/modal.spec.js +360 -0
- package/dist/components/modal/modal.spec.js.map +1 -0
- package/dist/components/overlay/index.d.ts +2 -0
- package/dist/components/overlay/index.d.ts.map +1 -0
- package/dist/components/overlay/index.js +2 -0
- package/dist/components/overlay/index.js.map +1 -0
- package/dist/components/overlay/overlay.d.ts +75 -0
- package/dist/components/overlay/overlay.d.ts.map +1 -0
- package/dist/components/overlay/overlay.js +106 -0
- package/dist/components/overlay/overlay.js.map +1 -0
- package/dist/components/overlay/overlay.spec.d.ts +2 -0
- package/dist/components/overlay/overlay.spec.d.ts.map +1 -0
- package/dist/components/overlay/overlay.spec.js +135 -0
- package/dist/components/overlay/overlay.spec.js.map +1 -0
- package/dist/components/radial-progress/radial-progress.d.ts.map +1 -1
- package/dist/components/radial-progress/radial-progress.js +3 -2
- package/dist/components/radial-progress/radial-progress.js.map +1 -1
- package/dist/components/radio/index.d.ts +2 -0
- package/dist/components/radio/index.d.ts.map +1 -0
- package/dist/components/radio/index.js +2 -0
- package/dist/components/radio/index.js.map +1 -0
- package/dist/components/radio/radio.d.ts +157 -0
- package/dist/components/radio/radio.d.ts.map +1 -0
- package/dist/components/radio/radio.js +312 -0
- package/dist/components/radio/radio.js.map +1 -0
- package/dist/components/radio/radio.spec.d.ts +2 -0
- package/dist/components/radio/radio.spec.d.ts.map +1 -0
- package/dist/components/radio/radio.spec.js +353 -0
- package/dist/components/radio/radio.spec.js.map +1 -0
- package/dist/components/radio-group/index.d.ts +2 -0
- package/dist/components/radio-group/index.d.ts.map +1 -0
- package/dist/components/radio-group/index.js +2 -0
- package/dist/components/radio-group/index.js.map +1 -0
- package/dist/components/radio-group/radio-group.d.ts +122 -0
- package/dist/components/radio-group/radio-group.d.ts.map +1 -0
- package/dist/components/radio-group/radio-group.js +165 -0
- package/dist/components/radio-group/radio-group.js.map +1 -0
- package/dist/components/radio-group/radio-group.spec.d.ts +2 -0
- package/dist/components/radio-group/radio-group.spec.d.ts.map +1 -0
- package/dist/components/radio-group/radio-group.spec.js +205 -0
- package/dist/components/radio-group/radio-group.spec.js.map +1 -0
- package/dist/components/stack/index.d.ts +2 -0
- package/dist/components/stack/index.d.ts.map +1 -0
- package/dist/components/stack/index.js +2 -0
- package/dist/components/stack/index.js.map +1 -0
- package/dist/components/stack/stack.d.ts +118 -0
- package/dist/components/stack/stack.d.ts.map +1 -0
- package/dist/components/stack/stack.js +137 -0
- package/dist/components/stack/stack.js.map +1 -0
- package/dist/components/stack/stack.spec.d.ts +2 -0
- package/dist/components/stack/stack.spec.d.ts.map +1 -0
- package/dist/components/stack/stack.spec.js +116 -0
- package/dist/components/stack/stack.spec.js.map +1 -0
- package/dist/components/text/text.d.ts +21 -4
- package/dist/components/text/text.d.ts.map +1 -1
- package/dist/components/text/text.js +14 -14
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/text-button/text-button.d.ts +77 -24
- package/dist/components/text-button/text-button.d.ts.map +1 -1
- package/dist/components/text-button/text-button.js +203 -104
- package/dist/components/text-button/text-button.js.map +1 -1
- package/dist/components/text-button/text-button.spec.js +97 -9
- package/dist/components/text-button/text-button.spec.js.map +1 -1
- package/dist/components/toggle/index.d.ts +2 -0
- package/dist/components/toggle/index.d.ts.map +1 -0
- package/dist/components/toggle/index.js +2 -0
- package/dist/components/toggle/index.js.map +1 -0
- package/dist/components/toggle/toggle.d.ts +149 -0
- package/dist/components/toggle/toggle.d.ts.map +1 -0
- package/dist/components/toggle/toggle.js +378 -0
- package/dist/components/toggle/toggle.js.map +1 -0
- package/dist/components/toggle/toggle.spec.d.ts +2 -0
- package/dist/components/toggle/toggle.spec.d.ts.map +1 -0
- package/dist/components/toggle/toggle.spec.js +353 -0
- package/dist/components/toggle/toggle.spec.js.map +1 -0
- package/dist/hudini.js +6523 -4980
- package/dist/hudini.min.js +1 -1
- package/dist/loaders/load-fonts.d.ts +29 -0
- package/dist/loaders/load-fonts.d.ts.map +1 -1
- package/dist/loaders/load-fonts.js +20 -1
- package/dist/loaders/load-fonts.js.map +1 -1
- package/dist/utils/button-style.d.ts +27 -0
- package/dist/utils/button-style.d.ts.map +1 -0
- package/dist/utils/button-style.js +37 -0
- package/dist/utils/button-style.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/number-to-rgb.d.ts +16 -0
- package/dist/utils/number-to-rgb.d.ts.map +1 -0
- package/dist/utils/number-to-rgb.js +20 -0
- package/dist/utils/number-to-rgb.js.map +1 -0
- package/package.json +2 -2
- package/dist/components/flat-icon-button/flat-icon-button.d.ts +0 -60
- package/dist/components/flat-icon-button/flat-icon-button.d.ts.map +0 -1
- package/dist/components/flat-icon-button/flat-icon-button.js +0 -279
- package/dist/components/flat-icon-button/flat-icon-button.js.map +0 -1
- package/dist/components/flat-icon-button/index.d.ts +0 -2
- package/dist/components/flat-icon-button/index.d.ts.map +0 -1
- package/dist/components/flat-icon-button/index.js +0 -2
- package/dist/components/flat-icon-button/index.js.map +0 -1
- package/dist/components/flat-section-header/flat-section-header.d.ts +0 -143
- package/dist/components/flat-section-header/flat-section-header.d.ts.map +0 -1
- package/dist/components/flat-section-header/flat-section-header.js +0 -275
- package/dist/components/flat-section-header/flat-section-header.js.map +0 -1
- package/dist/components/flat-section-header/flat-section-header.spec.d.ts +0 -2
- package/dist/components/flat-section-header/flat-section-header.spec.d.ts.map +0 -1
- package/dist/components/flat-section-header/flat-section-header.spec.js +0 -255
- package/dist/components/flat-section-header/flat-section-header.spec.js.map +0 -1
- package/dist/components/flat-section-header/index.d.ts +0 -2
- package/dist/components/flat-section-header/index.d.ts.map +0 -1
- package/dist/components/flat-section-header/index.js +0 -2
- package/dist/components/flat-section-header/index.js.map +0 -1
- package/dist/components/flat-text-button/flat-text-button.d.ts +0 -165
- package/dist/components/flat-text-button/flat-text-button.d.ts.map +0 -1
- package/dist/components/flat-text-button/flat-text-button.js +0 -325
- package/dist/components/flat-text-button/flat-text-button.js.map +0 -1
- package/dist/components/flat-text-button/flat-text-button.spec.d.ts +0 -2
- package/dist/components/flat-text-button/flat-text-button.spec.d.ts.map +0 -1
- package/dist/components/flat-text-button/flat-text-button.spec.js +0 -243
- package/dist/components/flat-text-button/flat-text-button.spec.js.map +0 -1
- package/dist/components/flat-text-button/index.d.ts +0 -2
- package/dist/components/flat-text-button/index.d.ts.map +0 -1
- package/dist/components/flat-text-button/index.js +0 -2
- package/dist/components/flat-text-button/index.js.map +0 -1
- package/dist/components/panel/index.d.ts +0 -2
- package/dist/components/panel/index.d.ts.map +0 -1
- package/dist/components/panel/index.js +0 -2
- package/dist/components/panel/index.js.map +0 -1
- package/dist/components/panel/panel.d.ts +0 -78
- package/dist/components/panel/panel.d.ts.map +0 -1
- package/dist/components/panel/panel.js +0 -192
- package/dist/components/panel/panel.js.map +0 -1
- package/dist/components/section-header/index.d.ts +0 -2
- package/dist/components/section-header/index.d.ts.map +0 -1
- package/dist/components/section-header/index.js +0 -2
- package/dist/components/section-header/index.js.map +0 -1
- package/dist/components/section-header/section-header.d.ts +0 -149
- package/dist/components/section-header/section-header.d.ts.map +0 -1
- package/dist/components/section-header/section-header.js +0 -292
- package/dist/components/section-header/section-header.js.map +0 -1
- package/dist/components/section-header/section-header.spec.d.ts +0 -2
- package/dist/components/section-header/section-header.spec.d.ts.map +0 -1
- package/dist/components/section-header/section-header.spec.js +0 -264
- package/dist/components/section-header/section-header.spec.js.map +0 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { IconText, type IconKey } from 'font-awesome-for-phaser';
|
|
2
|
+
import { GameObjects, Scene } from 'phaser';
|
|
3
|
+
import { type ColorKey, type FontSizeKey, type RadiusKey } from 'phaser-wind';
|
|
4
|
+
import { ContainerInteractive } from '../container-interactive';
|
|
5
|
+
/** Parameters for creating a {@link Checkbox}. */
|
|
6
|
+
export type CheckboxParams = {
|
|
7
|
+
/** Phaser scene where the checkbox will be added. */
|
|
8
|
+
scene: Scene;
|
|
9
|
+
/** X position (center of the whole content — box + label). */
|
|
10
|
+
x: number;
|
|
11
|
+
/** Y position (center of the whole content). */
|
|
12
|
+
y: number;
|
|
13
|
+
/** Initial checked state. Default `false`. */
|
|
14
|
+
checked?: boolean;
|
|
15
|
+
/** If `true`, the checkbox is muted and non-interactive. Default `false`. */
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
/** If `true`, the checkbox is visually normal but ignores clicks. Default `false`. */
|
|
18
|
+
readOnly?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Optional metadata used by a future Form container. Not consumed by the
|
|
21
|
+
* Checkbox itself; passed back as the second arg of `onChange`.
|
|
22
|
+
*/
|
|
23
|
+
name?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Optional text label to the right of the box. Clicking the label toggles
|
|
26
|
+
* the checkbox (same as clicking the box), matching `<label>` behavior.
|
|
27
|
+
*/
|
|
28
|
+
label?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Font Awesome icon key shown when checked. Default `'check'`. Use any FA
|
|
31
|
+
* key — `'heart'`, `'star'`, `'thumbs-up'` — to theme it per game.
|
|
32
|
+
*/
|
|
33
|
+
icon?: IconKey;
|
|
34
|
+
/** Icon color. Default `'white'`. */
|
|
35
|
+
iconColor?: ColorKey | string;
|
|
36
|
+
/** Box fill / border color. Default `'blue-500'`. */
|
|
37
|
+
color?: ColorKey | string;
|
|
38
|
+
/** Label text color. Default `'slate-800'`. */
|
|
39
|
+
labelColor?: ColorKey | string;
|
|
40
|
+
/**
|
|
41
|
+
* Visual size (font size for the label and reference size for the box).
|
|
42
|
+
* Default `'base'` (16px). Box side = `size + 8`.
|
|
43
|
+
*/
|
|
44
|
+
size?: FontSizeKey | number;
|
|
45
|
+
/** Border radius of the box. Default `'sm'`. */
|
|
46
|
+
borderRadius?: RadiusKey | number;
|
|
47
|
+
/** Gap between box and label, in pixels. Default 8. */
|
|
48
|
+
labelGap?: number;
|
|
49
|
+
/** Fires whenever the checked state changes (via click or `setChecked`). */
|
|
50
|
+
onChange?: (checked: boolean, name?: string) => void;
|
|
51
|
+
/** Fires on any click / tap — regardless of whether the state changed. */
|
|
52
|
+
onClick?: () => void;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Checkbox — a toggleable form control.
|
|
56
|
+
*
|
|
57
|
+
* The Checkbox owns its own state (uncontrolled). Read it back via
|
|
58
|
+
* `getValue()` / `isChecked()`, mutate it via `toggle()` / `setChecked(v)`,
|
|
59
|
+
* observe it via the `onChange` callback.
|
|
60
|
+
*
|
|
61
|
+
* For persistent named state, wire it up with `phaser-hooks` on the outside:
|
|
62
|
+
* `withLocalState(scene, 'settings.sound', true)` + pass `.get()` to
|
|
63
|
+
* `checked` + call `.set(v)` from `onChange`. The Checkbox stays decoupled.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* const cb = new Checkbox({
|
|
67
|
+
* scene, x: 100, y: 100,
|
|
68
|
+
* checked: true,
|
|
69
|
+
* label: 'Enable sound',
|
|
70
|
+
* onChange: (v) => console.log('sound:', v),
|
|
71
|
+
* });
|
|
72
|
+
* cb.toggle();
|
|
73
|
+
* cb.getValue(); // false
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* // Custom icon + color (great for game-flavored toggles)
|
|
77
|
+
* new Checkbox({
|
|
78
|
+
* scene, x, y,
|
|
79
|
+
* label: 'Favorite',
|
|
80
|
+
* icon: 'heart',
|
|
81
|
+
* color: 'red-500',
|
|
82
|
+
* });
|
|
83
|
+
*/
|
|
84
|
+
export declare class Checkbox extends ContainerInteractive<Phaser.GameObjects.Rectangle> {
|
|
85
|
+
/** The rectangle drawn as the checkbox box (visible fill + border). */
|
|
86
|
+
boxSprite: GameObjects.Sprite;
|
|
87
|
+
/** The check-mark icon shown when checked (alpha 0 when unchecked). */
|
|
88
|
+
iconText: IconText;
|
|
89
|
+
/** Optional label text next to the box, when `label` is set. */
|
|
90
|
+
labelText: GameObjects.Text | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* The invisible click target sized to `box + label`. Wider than the box
|
|
93
|
+
* alone so clicking the label also toggles.
|
|
94
|
+
*/
|
|
95
|
+
hitRect: GameObjects.Rectangle;
|
|
96
|
+
private pw;
|
|
97
|
+
private checkedState;
|
|
98
|
+
private disabledState;
|
|
99
|
+
private readOnlyState;
|
|
100
|
+
private sizePx;
|
|
101
|
+
private boxSidePx;
|
|
102
|
+
private borderRadiusPx;
|
|
103
|
+
private colorInput;
|
|
104
|
+
private colorFilled;
|
|
105
|
+
private iconColorValue;
|
|
106
|
+
private labelColorValue;
|
|
107
|
+
private iconKey;
|
|
108
|
+
private labelValue;
|
|
109
|
+
private labelGap;
|
|
110
|
+
private onChangeCb;
|
|
111
|
+
private onClickCb;
|
|
112
|
+
constructor({ scene, x, y, checked, disabled, readOnly, name, label, icon, iconColor, color, labelColor, size, borderRadius, labelGap, onChange, onClick, }: CheckboxParams);
|
|
113
|
+
/** Flip the checked state. Fires `onChange`. */
|
|
114
|
+
toggle(): this;
|
|
115
|
+
/** Programmatically set the checked state. Fires `onChange` if it changes. */
|
|
116
|
+
setChecked(checked: boolean): this;
|
|
117
|
+
/** Current checked state. */
|
|
118
|
+
isChecked(): boolean;
|
|
119
|
+
/** Alias for {@link isChecked}, meant for form-style value collection. */
|
|
120
|
+
getValue(): boolean;
|
|
121
|
+
/** Set the disabled state (muted + non-interactive). */
|
|
122
|
+
setDisabled(disabled: boolean): this;
|
|
123
|
+
/** Shortcut: `setDisabled(true)`. */
|
|
124
|
+
disable(): this;
|
|
125
|
+
/** Shortcut: `setDisabled(false)`. */
|
|
126
|
+
enable(): this;
|
|
127
|
+
/** Current disabled state. */
|
|
128
|
+
isDisabled(): boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Set the read-only state. Visually the same as an interactive checkbox,
|
|
131
|
+
* but clicks are ignored.
|
|
132
|
+
*/
|
|
133
|
+
setReadOnly(readOnly: boolean): this;
|
|
134
|
+
/** Current read-only state. */
|
|
135
|
+
isReadOnly(): boolean;
|
|
136
|
+
/** Replace the change callback. Pass `undefined` to clear. */
|
|
137
|
+
onChange(cb: ((checked: boolean, name?: string) => void) | undefined): this;
|
|
138
|
+
/** Replace the click callback. Pass `undefined` to clear. */
|
|
139
|
+
onClick(cb: (() => void) | undefined): this;
|
|
140
|
+
private createBox;
|
|
141
|
+
private createIcon;
|
|
142
|
+
private createLabel;
|
|
143
|
+
private createHitRect;
|
|
144
|
+
private setupContainer;
|
|
145
|
+
private setupInteractivity;
|
|
146
|
+
private syncSize;
|
|
147
|
+
private applyDisabledVisual;
|
|
148
|
+
private animateIcon;
|
|
149
|
+
private getBoxTextureKey;
|
|
150
|
+
private drawBoxTexture;
|
|
151
|
+
private regenerateBoxTexture;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/* eslint-disable max-lines-per-function */
|
|
2
|
+
/* eslint-disable complexity */
|
|
3
|
+
/* eslint-disable max-lines */
|
|
4
|
+
import { IconText } from 'font-awesome-for-phaser';
|
|
5
|
+
import { Color, Duration, Ease, Opacity, } from 'phaser-wind';
|
|
6
|
+
import { getPWFromScene } from '../../utils/get-pw-from-scene';
|
|
7
|
+
import { ContainerInteractive } from '../container-interactive';
|
|
8
|
+
import { Stack } from '../stack';
|
|
9
|
+
import { Text } from '../text';
|
|
10
|
+
const DEFAULT_SIZE_KEY = 'base';
|
|
11
|
+
const DEFAULT_ICON = 'check';
|
|
12
|
+
const BOX_PADDING_PX = 4;
|
|
13
|
+
const BOX_BORDER_THICKNESS = 2;
|
|
14
|
+
const TEXTURE_ANTIALIAS_MARGIN = 1;
|
|
15
|
+
const DEFAULT_LABEL_GAP = 8;
|
|
16
|
+
const DISABLED_ALPHA = 0.4;
|
|
17
|
+
/**
|
|
18
|
+
* Checkbox — a toggleable form control.
|
|
19
|
+
*
|
|
20
|
+
* The Checkbox owns its own state (uncontrolled). Read it back via
|
|
21
|
+
* `getValue()` / `isChecked()`, mutate it via `toggle()` / `setChecked(v)`,
|
|
22
|
+
* observe it via the `onChange` callback.
|
|
23
|
+
*
|
|
24
|
+
* For persistent named state, wire it up with `phaser-hooks` on the outside:
|
|
25
|
+
* `withLocalState(scene, 'settings.sound', true)` + pass `.get()` to
|
|
26
|
+
* `checked` + call `.set(v)` from `onChange`. The Checkbox stays decoupled.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* const cb = new Checkbox({
|
|
30
|
+
* scene, x: 100, y: 100,
|
|
31
|
+
* checked: true,
|
|
32
|
+
* label: 'Enable sound',
|
|
33
|
+
* onChange: (v) => console.log('sound:', v),
|
|
34
|
+
* });
|
|
35
|
+
* cb.toggle();
|
|
36
|
+
* cb.getValue(); // false
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* // Custom icon + color (great for game-flavored toggles)
|
|
40
|
+
* new Checkbox({
|
|
41
|
+
* scene, x, y,
|
|
42
|
+
* label: 'Favorite',
|
|
43
|
+
* icon: 'heart',
|
|
44
|
+
* color: 'red-500',
|
|
45
|
+
* });
|
|
46
|
+
*/
|
|
47
|
+
export class Checkbox extends ContainerInteractive {
|
|
48
|
+
/** The rectangle drawn as the checkbox box (visible fill + border). */
|
|
49
|
+
boxSprite;
|
|
50
|
+
/** The check-mark icon shown when checked (alpha 0 when unchecked). */
|
|
51
|
+
iconText;
|
|
52
|
+
/** Optional label text next to the box, when `label` is set. */
|
|
53
|
+
labelText;
|
|
54
|
+
/**
|
|
55
|
+
* The invisible click target sized to `box + label`. Wider than the box
|
|
56
|
+
* alone so clicking the label also toggles.
|
|
57
|
+
*/
|
|
58
|
+
hitRect;
|
|
59
|
+
pw;
|
|
60
|
+
checkedState;
|
|
61
|
+
disabledState;
|
|
62
|
+
readOnlyState;
|
|
63
|
+
sizePx;
|
|
64
|
+
boxSidePx;
|
|
65
|
+
borderRadiusPx;
|
|
66
|
+
colorInput;
|
|
67
|
+
colorFilled;
|
|
68
|
+
iconColorValue;
|
|
69
|
+
labelColorValue;
|
|
70
|
+
iconKey;
|
|
71
|
+
labelValue;
|
|
72
|
+
labelGap;
|
|
73
|
+
onChangeCb;
|
|
74
|
+
onClickCb;
|
|
75
|
+
constructor({ scene, x, y, checked = false, disabled = false, readOnly = false, name, label, icon = DEFAULT_ICON, iconColor = 'white', color = 'blue-500', labelColor = 'slate-800', size = DEFAULT_SIZE_KEY, borderRadius = 'sm', labelGap = DEFAULT_LABEL_GAP, onChange, onClick, }) {
|
|
76
|
+
super({ scene, x, y });
|
|
77
|
+
this.pw = getPWFromScene(scene);
|
|
78
|
+
this.checkedState = checked;
|
|
79
|
+
this.disabledState = disabled;
|
|
80
|
+
this.readOnlyState = readOnly;
|
|
81
|
+
// Store the form field name via Phaser Container's built-in `name` slot.
|
|
82
|
+
if (name !== undefined)
|
|
83
|
+
this.name = name;
|
|
84
|
+
this.labelValue = label;
|
|
85
|
+
this.iconKey = icon;
|
|
86
|
+
this.labelGap = labelGap;
|
|
87
|
+
this.onChangeCb = onChange;
|
|
88
|
+
this.onClickCb = onClick;
|
|
89
|
+
this.sizePx =
|
|
90
|
+
typeof size === 'number'
|
|
91
|
+
? size
|
|
92
|
+
: this.pw.fontSize.px(size ?? DEFAULT_SIZE_KEY);
|
|
93
|
+
this.boxSidePx = this.sizePx + BOX_PADDING_PX * 2;
|
|
94
|
+
this.borderRadiusPx =
|
|
95
|
+
typeof borderRadius === 'number'
|
|
96
|
+
? borderRadius
|
|
97
|
+
: this.pw.radius.px(borderRadius ?? 'sm');
|
|
98
|
+
this.colorInput = String(color);
|
|
99
|
+
this.colorFilled = Color.hex(color);
|
|
100
|
+
this.iconColorValue = Color.rgb(iconColor);
|
|
101
|
+
this.labelColorValue = Color.rgb(labelColor);
|
|
102
|
+
this.createBox(scene);
|
|
103
|
+
this.createIcon(scene);
|
|
104
|
+
this.createLabel(scene);
|
|
105
|
+
this.createHitRect(scene);
|
|
106
|
+
this.setupContainer();
|
|
107
|
+
this.hitArea = this.hitRect;
|
|
108
|
+
this.applyDisabledVisual();
|
|
109
|
+
this.setupInteractivity();
|
|
110
|
+
this.syncSize();
|
|
111
|
+
}
|
|
112
|
+
// -------- public API --------
|
|
113
|
+
/** Flip the checked state. Fires `onChange`. */
|
|
114
|
+
toggle() {
|
|
115
|
+
return this.setChecked(!this.checkedState);
|
|
116
|
+
}
|
|
117
|
+
/** Programmatically set the checked state. Fires `onChange` if it changes. */
|
|
118
|
+
setChecked(checked) {
|
|
119
|
+
if (this.checkedState === checked)
|
|
120
|
+
return this;
|
|
121
|
+
this.checkedState = checked;
|
|
122
|
+
this.regenerateBoxTexture();
|
|
123
|
+
this.animateIcon(checked);
|
|
124
|
+
// Phaser Container `name` defaults to `''`; normalize to `undefined` for
|
|
125
|
+
// consumers so an unnamed checkbox reads as no-name.
|
|
126
|
+
this.onChangeCb?.(checked, this.name === '' ? undefined : this.name);
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
/** Current checked state. */
|
|
130
|
+
isChecked() {
|
|
131
|
+
return this.checkedState;
|
|
132
|
+
}
|
|
133
|
+
/** Alias for {@link isChecked}, meant for form-style value collection. */
|
|
134
|
+
getValue() {
|
|
135
|
+
return this.checkedState;
|
|
136
|
+
}
|
|
137
|
+
/** Set the disabled state (muted + non-interactive). */
|
|
138
|
+
setDisabled(disabled) {
|
|
139
|
+
if (this.disabledState === disabled)
|
|
140
|
+
return this;
|
|
141
|
+
this.disabledState = disabled;
|
|
142
|
+
this.applyDisabledVisual();
|
|
143
|
+
return this;
|
|
144
|
+
}
|
|
145
|
+
/** Shortcut: `setDisabled(true)`. */
|
|
146
|
+
disable() {
|
|
147
|
+
return this.setDisabled(true);
|
|
148
|
+
}
|
|
149
|
+
/** Shortcut: `setDisabled(false)`. */
|
|
150
|
+
enable() {
|
|
151
|
+
return this.setDisabled(false);
|
|
152
|
+
}
|
|
153
|
+
/** Current disabled state. */
|
|
154
|
+
isDisabled() {
|
|
155
|
+
return this.disabledState;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Set the read-only state. Visually the same as an interactive checkbox,
|
|
159
|
+
* but clicks are ignored.
|
|
160
|
+
*/
|
|
161
|
+
setReadOnly(readOnly) {
|
|
162
|
+
this.readOnlyState = readOnly;
|
|
163
|
+
return this;
|
|
164
|
+
}
|
|
165
|
+
/** Current read-only state. */
|
|
166
|
+
isReadOnly() {
|
|
167
|
+
return this.readOnlyState;
|
|
168
|
+
}
|
|
169
|
+
/** Replace the change callback. Pass `undefined` to clear. */
|
|
170
|
+
onChange(cb) {
|
|
171
|
+
this.onChangeCb = cb;
|
|
172
|
+
return this;
|
|
173
|
+
}
|
|
174
|
+
/** Replace the click callback. Pass `undefined` to clear. */
|
|
175
|
+
onClick(cb) {
|
|
176
|
+
this.onClickCb = cb;
|
|
177
|
+
return this;
|
|
178
|
+
}
|
|
179
|
+
// -------- private --------
|
|
180
|
+
createBox(scene) {
|
|
181
|
+
const textureKey = this.getBoxTextureKey();
|
|
182
|
+
this.drawBoxTexture(scene, textureKey);
|
|
183
|
+
this.boxSprite = scene.add.sprite(0, 0, textureKey);
|
|
184
|
+
this.boxSprite.setOrigin(0.5, 0.5);
|
|
185
|
+
}
|
|
186
|
+
createIcon(scene) {
|
|
187
|
+
this.iconText = new IconText({
|
|
188
|
+
scene,
|
|
189
|
+
x: 0,
|
|
190
|
+
y: 0,
|
|
191
|
+
icon: this.iconKey,
|
|
192
|
+
size: this.sizePx,
|
|
193
|
+
style: { color: this.iconColorValue },
|
|
194
|
+
});
|
|
195
|
+
this.iconText.setFontStyle('900');
|
|
196
|
+
this.iconText.setOrigin(0.5, 0.5);
|
|
197
|
+
scene.add.existing(this.iconText);
|
|
198
|
+
// Start hidden if unchecked, visible if checked.
|
|
199
|
+
if (!this.checkedState) {
|
|
200
|
+
this.iconText.setAlpha(0);
|
|
201
|
+
this.iconText.setScale(0);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
createLabel(scene) {
|
|
205
|
+
if (this.labelValue === undefined || this.labelValue === '')
|
|
206
|
+
return;
|
|
207
|
+
this.labelText = new Text({
|
|
208
|
+
scene,
|
|
209
|
+
x: 0,
|
|
210
|
+
y: 0,
|
|
211
|
+
text: this.labelValue,
|
|
212
|
+
size: this.sizePx,
|
|
213
|
+
fontFamily: 'Fredoka',
|
|
214
|
+
strokeThickness: 0,
|
|
215
|
+
strokeColor: 'rgba(0,0,0,0)',
|
|
216
|
+
});
|
|
217
|
+
this.labelText.setColor(this.labelColorValue);
|
|
218
|
+
this.labelText.setOrigin(0.5, 0.5);
|
|
219
|
+
}
|
|
220
|
+
createHitRect(scene) {
|
|
221
|
+
// Rectangle sized to (box + labelGap + label) so clicks on the label
|
|
222
|
+
// toggle too. We update its size in syncSize after we know the actual
|
|
223
|
+
// width.
|
|
224
|
+
this.hitRect = scene.add.rectangle(0, 0, this.boxSidePx, this.boxSidePx, 0x000000, 0);
|
|
225
|
+
this.hitRect.setOrigin(0.5, 0.5);
|
|
226
|
+
}
|
|
227
|
+
setupContainer() {
|
|
228
|
+
// Compose box + icon into a single "checkbox unit" container so a Stack
|
|
229
|
+
// can measure it as one item.
|
|
230
|
+
const boxUnit = this.scene.add.container(0, 0, [
|
|
231
|
+
this.boxSprite,
|
|
232
|
+
this.iconText,
|
|
233
|
+
]);
|
|
234
|
+
boxUnit.setSize(this.boxSidePx, this.boxSidePx);
|
|
235
|
+
const children = [boxUnit];
|
|
236
|
+
if (this.labelText)
|
|
237
|
+
children.push(this.labelText);
|
|
238
|
+
// Outer horizontal layout — box + optional label.
|
|
239
|
+
const contentStack = new Stack({
|
|
240
|
+
scene: this.scene,
|
|
241
|
+
x: 0,
|
|
242
|
+
y: 0,
|
|
243
|
+
direction: 'row',
|
|
244
|
+
align: 'center',
|
|
245
|
+
gap: this.labelGap,
|
|
246
|
+
children,
|
|
247
|
+
});
|
|
248
|
+
// Z-order: hit rect first (behind, transparent), then the visible content.
|
|
249
|
+
this.add([this.hitRect, contentStack]);
|
|
250
|
+
}
|
|
251
|
+
setupInteractivity() {
|
|
252
|
+
this.hitRect.setInteractive({ useHandCursor: true });
|
|
253
|
+
this.hitRect.on('pointerdown', () => {
|
|
254
|
+
if (this.disabledState || this.readOnlyState)
|
|
255
|
+
return;
|
|
256
|
+
this.onClickCb?.();
|
|
257
|
+
this.toggle();
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
syncSize() {
|
|
261
|
+
// Width: box + (labelGap + label) if any. Height: max of box and label.
|
|
262
|
+
const labelBounds = this.labelText?.getBounds();
|
|
263
|
+
const labelWidth = labelBounds?.width ?? 0;
|
|
264
|
+
const labelHeight = labelBounds?.height ?? 0;
|
|
265
|
+
const totalWidth = this.boxSidePx + (this.labelText ? this.labelGap + labelWidth : 0);
|
|
266
|
+
const totalHeight = Math.max(this.boxSidePx, labelHeight);
|
|
267
|
+
// Resize the hit target to cover the whole clickable area.
|
|
268
|
+
this.hitRect.setSize(totalWidth, totalHeight);
|
|
269
|
+
// ContainerInteractive proxies our width/height to the hitRect, so a
|
|
270
|
+
// parent Row/Column/Stack measures this checkbox correctly.
|
|
271
|
+
this.setSize(totalWidth, totalHeight);
|
|
272
|
+
}
|
|
273
|
+
applyDisabledVisual() {
|
|
274
|
+
const targetAlpha = this.disabledState ? DISABLED_ALPHA : 1;
|
|
275
|
+
this.boxSprite.setAlpha(targetAlpha);
|
|
276
|
+
this.iconText.setAlpha(this.checkedState ? targetAlpha : 0);
|
|
277
|
+
if (this.labelText)
|
|
278
|
+
this.labelText.setAlpha(targetAlpha);
|
|
279
|
+
}
|
|
280
|
+
animateIcon(toChecked) {
|
|
281
|
+
// Kill any in-flight tween on the icon so rapid toggles don't stack.
|
|
282
|
+
this.scene.tweens.killTweensOf(this.iconText);
|
|
283
|
+
const targetAlpha = toChecked ? (this.disabledState ? DISABLED_ALPHA : 1) : 0;
|
|
284
|
+
const targetScale = toChecked ? 1 : 0;
|
|
285
|
+
this.scene.tweens.add({
|
|
286
|
+
targets: this.iconText,
|
|
287
|
+
alpha: targetAlpha,
|
|
288
|
+
scaleX: targetScale,
|
|
289
|
+
scaleY: targetScale,
|
|
290
|
+
duration: toChecked ? Duration.ms('150') : Duration.ms('100'),
|
|
291
|
+
ease: toChecked ? Ease.value('back-out') : Ease.value('sine-in'),
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
getBoxTextureKey() {
|
|
295
|
+
return `checkbox_box_${this.colorInput}_${this.borderRadiusPx}_${this.boxSidePx}_${this.checkedState ? 'on' : 'off'}`;
|
|
296
|
+
}
|
|
297
|
+
drawBoxTexture(scene, textureKey) {
|
|
298
|
+
if (scene.textures.exists(textureKey))
|
|
299
|
+
return;
|
|
300
|
+
const padding = TEXTURE_ANTIALIAS_MARGIN;
|
|
301
|
+
const textureSide = this.boxSidePx + padding * 2;
|
|
302
|
+
const graphics = scene.add.graphics();
|
|
303
|
+
const maxRadius = Math.floor(this.boxSidePx / 2);
|
|
304
|
+
const radius = Math.min(this.borderRadiusPx, maxRadius);
|
|
305
|
+
if (this.checkedState) {
|
|
306
|
+
// Filled with color.
|
|
307
|
+
graphics.fillStyle(this.colorFilled, 1);
|
|
308
|
+
graphics.fillRoundedRect(padding, padding, this.boxSidePx, this.boxSidePx, radius);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
// Outlined — colored border inset by half the stroke so the outer edge
|
|
312
|
+
// sits at the visual box boundary.
|
|
313
|
+
const half = BOX_BORDER_THICKNESS / 2;
|
|
314
|
+
graphics.lineStyle(BOX_BORDER_THICKNESS, this.colorFilled, 1);
|
|
315
|
+
graphics.strokeRoundedRect(padding + half, padding + half, this.boxSidePx - BOX_BORDER_THICKNESS, this.boxSidePx - BOX_BORDER_THICKNESS, Math.max(0, radius - half));
|
|
316
|
+
// Subtle translucent fill so the empty box is still readable on any bg.
|
|
317
|
+
graphics.fillStyle(this.colorFilled, Opacity.value('10'));
|
|
318
|
+
graphics.fillRoundedRect(padding, padding, this.boxSidePx, this.boxSidePx, radius);
|
|
319
|
+
}
|
|
320
|
+
graphics.generateTexture(textureKey, textureSide, textureSide);
|
|
321
|
+
graphics.destroy();
|
|
322
|
+
}
|
|
323
|
+
regenerateBoxTexture() {
|
|
324
|
+
const textureKey = this.getBoxTextureKey();
|
|
325
|
+
this.drawBoxTexture(this.scene, textureKey);
|
|
326
|
+
this.boxSprite.setTexture(textureKey);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.spec.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox.spec.ts"],"names":[],"mappings":""}
|