@joydle/ui 0.1.0 → 0.1.1

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 (106) hide show
  1. package/dist/controls/ActionButton.d.ts +10 -1
  2. package/dist/controls/ActionButton.d.ts.map +1 -1
  3. package/dist/controls/ActionButton.js +3 -3
  4. package/dist/controls/ActionButton.js.map +1 -1
  5. package/dist/controls/index.d.ts +1 -1
  6. package/dist/controls/index.d.ts.map +1 -1
  7. package/dist/controls/index.js.map +1 -1
  8. package/dist/deps.d.ts +11 -0
  9. package/dist/deps.d.ts.map +1 -0
  10. package/dist/deps.js +19 -0
  11. package/dist/deps.js.map +1 -0
  12. package/dist/fx/effects.d.ts +163 -0
  13. package/dist/fx/effects.d.ts.map +1 -0
  14. package/dist/fx/effects.js +337 -0
  15. package/dist/fx/effects.js.map +1 -0
  16. package/dist/fx/hooks.d.ts +100 -0
  17. package/dist/fx/hooks.d.ts.map +1 -0
  18. package/dist/fx/hooks.js +116 -0
  19. package/dist/fx/hooks.js.map +1 -0
  20. package/dist/fx/index.d.ts +15 -0
  21. package/dist/fx/index.d.ts.map +1 -0
  22. package/dist/fx/index.js +22 -0
  23. package/dist/fx/index.js.map +1 -0
  24. package/dist/hud/BottomHint.d.ts.map +1 -1
  25. package/dist/hud/BottomHint.js +1 -9
  26. package/dist/hud/BottomHint.js.map +1 -1
  27. package/dist/hud/ComboLabel.d.ts.map +1 -1
  28. package/dist/hud/ComboLabel.js +1 -9
  29. package/dist/hud/ComboLabel.js.map +1 -1
  30. package/dist/hud/Crosshair.d.ts +28 -0
  31. package/dist/hud/Crosshair.d.ts.map +1 -0
  32. package/dist/hud/Crosshair.js +93 -0
  33. package/dist/hud/Crosshair.js.map +1 -0
  34. package/dist/hud/EntityLabel.d.ts +46 -0
  35. package/dist/hud/EntityLabel.d.ts.map +1 -0
  36. package/dist/hud/EntityLabel.js +59 -0
  37. package/dist/hud/EntityLabel.js.map +1 -0
  38. package/dist/hud/FloatingNumbers.d.ts +43 -0
  39. package/dist/hud/FloatingNumbers.d.ts.map +1 -0
  40. package/dist/hud/FloatingNumbers.js +93 -0
  41. package/dist/hud/FloatingNumbers.js.map +1 -0
  42. package/dist/hud/HUD.d.ts +2 -0
  43. package/dist/hud/HUD.d.ts.map +1 -1
  44. package/dist/hud/HUD.js +11 -0
  45. package/dist/hud/HUD.js.map +1 -1
  46. package/dist/hud/Lives.d.ts +26 -5
  47. package/dist/hud/Lives.d.ts.map +1 -1
  48. package/dist/hud/Lives.js +30 -31
  49. package/dist/hud/Lives.js.map +1 -1
  50. package/dist/hud/Meter.d.ts +10 -1
  51. package/dist/hud/Meter.d.ts.map +1 -1
  52. package/dist/hud/Meter.js +3 -11
  53. package/dist/hud/Meter.js.map +1 -1
  54. package/dist/hud/ResourceDisplay.d.ts +30 -0
  55. package/dist/hud/ResourceDisplay.d.ts.map +1 -0
  56. package/dist/hud/ResourceDisplay.js +49 -0
  57. package/dist/hud/ResourceDisplay.js.map +1 -0
  58. package/dist/hud/Score.d.ts +12 -1
  59. package/dist/hud/Score.d.ts.map +1 -1
  60. package/dist/hud/Score.js +15 -12
  61. package/dist/hud/Score.js.map +1 -1
  62. package/dist/hud/StatDisplay.d.ts +33 -0
  63. package/dist/hud/StatDisplay.d.ts.map +1 -0
  64. package/dist/hud/StatDisplay.js +56 -0
  65. package/dist/hud/StatDisplay.js.map +1 -0
  66. package/dist/hud/Timer.d.ts.map +1 -1
  67. package/dist/hud/Timer.js +1 -9
  68. package/dist/hud/Timer.js.map +1 -1
  69. package/dist/hud/WaveLabel.d.ts.map +1 -1
  70. package/dist/hud/WaveLabel.js +1 -9
  71. package/dist/hud/WaveLabel.js.map +1 -1
  72. package/dist/hud/index.d.ts +8 -3
  73. package/dist/hud/index.d.ts.map +1 -1
  74. package/dist/hud/index.js +5 -0
  75. package/dist/hud/index.js.map +1 -1
  76. package/dist/index.d.ts +1 -0
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +2 -0
  79. package/dist/index.js.map +1 -1
  80. package/dist/screens/GameOverScreen.d.ts.map +1 -1
  81. package/dist/screens/GameOverScreen.js +3 -10
  82. package/dist/screens/GameOverScreen.js.map +1 -1
  83. package/dist/screens/LoadingScreen.d.ts.map +1 -1
  84. package/dist/screens/LoadingScreen.js +1 -9
  85. package/dist/screens/LoadingScreen.js.map +1 -1
  86. package/dist/screens/LobbyScreen.d.ts.map +1 -1
  87. package/dist/screens/LobbyScreen.js +1 -9
  88. package/dist/screens/LobbyScreen.js.map +1 -1
  89. package/dist/screens/PauseOverlay.d.ts.map +1 -1
  90. package/dist/screens/PauseOverlay.js +1 -9
  91. package/dist/screens/PauseOverlay.js.map +1 -1
  92. package/dist/screens/TitleScreen.d.ts.map +1 -1
  93. package/dist/screens/TitleScreen.js +3 -10
  94. package/dist/screens/TitleScreen.js.map +1 -1
  95. package/dist/screens/index.d.ts +1 -0
  96. package/dist/screens/index.d.ts.map +1 -1
  97. package/dist/screens/index.js +1 -0
  98. package/dist/screens/index.js.map +1 -1
  99. package/dist/screens/primitives.d.ts +101 -0
  100. package/dist/screens/primitives.d.ts.map +1 -0
  101. package/dist/screens/primitives.js +239 -0
  102. package/dist/screens/primitives.js.map +1 -0
  103. package/dist/transitions/ScreenTransition.d.ts.map +1 -1
  104. package/dist/transitions/ScreenTransition.js +31 -40
  105. package/dist/transitions/ScreenTransition.js.map +1 -1
  106. package/package.json +13 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/screens/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,OAAO,EAAE,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,WAAW,EAA6C,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,cAAc,EAAmD,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,YAAY,EAA0B,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,WAAW,EAA2C,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/screens/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,OAAO,EAAE,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,WAAW,EAA6C,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,cAAc,EAAmD,MAAM,kBAAkB,CAAC;AACnG,OAAO,EAAE,YAAY,EAA0B,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,WAAW,EAA2C,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,WAAW,EAAyB,WAAW,EAAyB,YAAY,EAA0B,UAAU,EAAwB,aAAa,EAA2B,aAAa,EAA2B,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,101 @@
1
+ import type { ComponentChildren, JSX } from 'preact';
2
+ export interface ScreenFrameProps {
3
+ /** Background color/value. Default: `var(--joydle-bg, #06060f)`. */
4
+ bg?: string;
5
+ /** Keys that trigger onStart (e.g. `['Space', 'Enter']`). */
6
+ onKeyStart?: string[];
7
+ /** Called when a key from onKeyStart is pressed. */
8
+ onStart?: () => void;
9
+ /** Screen identifier for ScreenManager routing. */
10
+ screen?: string;
11
+ /** Additional class names. */
12
+ class?: string;
13
+ children?: ComponentChildren;
14
+ }
15
+ /**
16
+ * Composable screen frame — handles positioning, background, and keyboard shortcuts.
17
+ *
18
+ * Owns: container structure, keyboard handling, z-stacking.
19
+ * Does NOT own: layout of children, colors, fonts, animations.
20
+ *
21
+ * ```tsx
22
+ * <ScreenFrame onKeyStart={['Space']} onStart={startGame} bg="#0a0012">
23
+ * <ScreenTitle>MY GAME</ScreenTitle>
24
+ * <ScreenButton onClick={startGame}>PLAY</ScreenButton>
25
+ * </ScreenFrame>
26
+ * ```
27
+ */
28
+ export declare function ScreenFrame({ bg, onKeyStart, onStart, screen: _screen, class: className, children, }: ScreenFrameProps): JSX.Element;
29
+ export interface ScreenTitleProps {
30
+ /** Title color. Default: `var(--joydle-primary)`. */
31
+ color?: string;
32
+ /** Add a glow text-shadow. Default: true. */
33
+ glow?: boolean;
34
+ children?: ComponentChildren;
35
+ }
36
+ /**
37
+ * Screen title element — styled h1 matching the joydle title aesthetic.
38
+ * Supports `<accent>` children for secondary color highlights.
39
+ *
40
+ * ```tsx
41
+ * <ScreenTitle>DEAD FOREST</ScreenTitle>
42
+ * <ScreenTitle color="#8b0000">BLOOD <accent>RUNS</accent></ScreenTitle>
43
+ * ```
44
+ */
45
+ export declare function ScreenTitle({ color, glow, children, }: ScreenTitleProps): JSX.Element;
46
+ export interface ScreenButtonProps {
47
+ onClick: () => void;
48
+ /** Button background color. Default: `var(--joydle-accent)`. */
49
+ color?: string;
50
+ /** Button text color. Default: `var(--joydle-bg)`. */
51
+ textColor?: string;
52
+ type?: 'button' | 'submit';
53
+ children?: ComponentChildren;
54
+ }
55
+ /**
56
+ * Themed action button for screens.
57
+ *
58
+ * ```tsx
59
+ * <ScreenButton onClick={start}>PLAY</ScreenButton>
60
+ * <ScreenButton onClick={start} color="var(--joydle-danger)">RETRY</ScreenButton>
61
+ * ```
62
+ */
63
+ export declare function ScreenButton({ onClick, color, textColor, type, children, }: ScreenButtonProps): JSX.Element;
64
+ export interface ScreenHintProps {
65
+ /** Hint text color. Default: `var(--joydle-text-dim)`. */
66
+ color?: string;
67
+ children?: ComponentChildren;
68
+ }
69
+ /**
70
+ * Small hint/caption below the play button.
71
+ *
72
+ * ```tsx
73
+ * <ScreenHint>WASD move · CLICK fire</ScreenHint>
74
+ * ```
75
+ */
76
+ export declare function ScreenHint({ color, children }: ScreenHintProps): JSX.Element;
77
+ export interface ScreenDividerProps {
78
+ /** Line color. Default: `var(--joydle-primary)`. */
79
+ color?: string;
80
+ /** Line width (CSS value). Default: `'160px'`. */
81
+ width?: string;
82
+ }
83
+ /**
84
+ * Decorative horizontal divider with a gradient fade.
85
+ */
86
+ export declare function ScreenDivider({ color, width }: ScreenDividerProps): JSX.Element;
87
+ export interface ScreenMetricsProps {
88
+ /** Array of metric strings to display. */
89
+ items: string[];
90
+ /** Text color. Default: `var(--joydle-text-dim)`. */
91
+ color?: string;
92
+ }
93
+ /**
94
+ * Simple metric list for game-over or results screens.
95
+ *
96
+ * ```tsx
97
+ * <ScreenMetrics items={['Time: 1:23', 'Combo: 5x', 'Accuracy: 84%']} />
98
+ * ```
99
+ */
100
+ export declare function ScreenMetrics({ items, color }: ScreenMetricsProps): JSX.Element;
101
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/screens/primitives.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAyHrD,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,EAAgC,EAChC,UAAU,EACV,OAAO,EACP,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,SAAS,EAChB,QAAQ,GACT,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAuBhC;AAID,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,IAAW,EACX,QAAQ,GACT,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAchC;AAID,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,SAAS,EACT,IAAe,EACf,QAAQ,GACT,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAejC;AAID,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAQ5E;AAID,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAQ/E;AAID,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAc/E"}
@@ -0,0 +1,239 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "preact/jsx-runtime";
2
+ // ---------------------------------------------------------------------------
3
+ // @joydle/ui/screens — Composable screen primitives
4
+ //
5
+ // Use these to build fully custom screens while getting keyboard shortcuts,
6
+ // entrance animation timing, and consistent joydle styling for free.
7
+ //
8
+ // Example (a horror game title screen):
9
+ // ```tsx
10
+ // <ScreenFrame onKeyStart={['Space','Enter']} onStart={startGame}>
11
+ // <img src="blood-logo.png" />
12
+ // <ScreenTitle color="#8b0000">DEAD FOREST</ScreenTitle>
13
+ // <ScreenHint>Find the key. Don't get caught.</ScreenHint>
14
+ // <ScreenButton onClick={startGame} color="var(--joydle-danger)">
15
+ // ENTER
16
+ // </ScreenButton>
17
+ // </ScreenFrame>
18
+ // ```
19
+ // ---------------------------------------------------------------------------
20
+ import { useEffect } from 'preact/hooks';
21
+ // ---- CSS injection ---------------------------------------------------------
22
+ const PRIMITIVES_CSS = `
23
+ .joydle-screen-frame {
24
+ position: absolute;
25
+ inset: 0;
26
+ z-index: 20;
27
+ overflow: hidden;
28
+ display: flex;
29
+ flex-direction: column;
30
+ align-items: center;
31
+ justify-content: center;
32
+ font-family: var(--joydle-font, sans-serif);
33
+ color: var(--joydle-text, #fff);
34
+ }
35
+
36
+ .joydle-screen-title {
37
+ font-size: clamp(2rem, 6vw, 4rem);
38
+ font-weight: 900;
39
+ letter-spacing: 0.04em;
40
+ color: var(--joydle-primary, #00f5ff);
41
+ text-transform: uppercase;
42
+ margin: 0;
43
+ line-height: 1.1;
44
+ text-align: center;
45
+ text-shadow: 0 0 var(--joydle-glow-blur, 0) var(--joydle-primary, #00f5ff);
46
+ }
47
+
48
+ .joydle-screen-title accent {
49
+ color: var(--joydle-accent, #ff2d7b);
50
+ text-shadow: 0 0 var(--joydle-glow-blur, 0) var(--joydle-accent, #ff2d7b);
51
+ }
52
+
53
+ .joydle-screen-hint {
54
+ font-size: 0.75rem;
55
+ color: var(--joydle-text-dim, rgba(255,255,255,0.5));
56
+ letter-spacing: 0.06em;
57
+ text-align: center;
58
+ margin: 0;
59
+ }
60
+
61
+ .joydle-screen-btn {
62
+ position: relative;
63
+ padding: 14px 48px;
64
+ font-size: 1.1rem;
65
+ font-weight: 700;
66
+ font-family: var(--joydle-font, sans-serif);
67
+ letter-spacing: 0.12em;
68
+ text-transform: uppercase;
69
+ color: var(--joydle-bg, #06060f);
70
+ background: var(--joydle-accent, #ff2d7b);
71
+ border: none;
72
+ border-radius: var(--joydle-border-radius, 4px);
73
+ cursor: pointer;
74
+ overflow: hidden;
75
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
76
+ box-shadow: 0 0 var(--joydle-glow-blur, 0) var(--joydle-glow-spread, 0) var(--joydle-accent, #ff2d7b);
77
+ }
78
+
79
+ .joydle-screen-btn:hover {
80
+ transform: scale(1.05);
81
+ box-shadow: 0 0 16px 4px var(--joydle-accent, #ff2d7b);
82
+ }
83
+
84
+ .joydle-screen-btn:active {
85
+ transform: scale(0.97);
86
+ }
87
+
88
+ .joydle-screen-btn::after {
89
+ content: '';
90
+ position: absolute;
91
+ top: -50%;
92
+ left: -75%;
93
+ width: 50%;
94
+ height: 200%;
95
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.25), transparent);
96
+ transform: skewX(-20deg);
97
+ animation: joydle-btn-shine 3s ease-in-out infinite;
98
+ }
99
+
100
+ @keyframes joydle-btn-shine {
101
+ 0%, 100% { left: -75%; }
102
+ 50% { left: 125%; }
103
+ }
104
+
105
+ .joydle-screen-divider {
106
+ border: none;
107
+ height: 1px;
108
+ width: 160px;
109
+ background: linear-gradient(90deg, transparent, var(--joydle-primary, #00f5ff), transparent);
110
+ margin: 0;
111
+ opacity: 0.4;
112
+ }
113
+
114
+ .joydle-screen-metrics {
115
+ display: flex;
116
+ flex-direction: column;
117
+ align-items: center;
118
+ gap: 4px;
119
+ }
120
+
121
+ .joydle-screen-metric {
122
+ font-size: 0.85rem;
123
+ color: var(--joydle-text-dim, rgba(255,255,255,0.5));
124
+ letter-spacing: 0.04em;
125
+ }
126
+ `;
127
+ let primitivesStyleInjected = false;
128
+ function injectPrimitivesStyle() {
129
+ if (primitivesStyleInjected)
130
+ return;
131
+ primitivesStyleInjected = true;
132
+ const el = document.createElement('style');
133
+ el.textContent = PRIMITIVES_CSS;
134
+ document.head.appendChild(el);
135
+ }
136
+ /**
137
+ * Composable screen frame — handles positioning, background, and keyboard shortcuts.
138
+ *
139
+ * Owns: container structure, keyboard handling, z-stacking.
140
+ * Does NOT own: layout of children, colors, fonts, animations.
141
+ *
142
+ * ```tsx
143
+ * <ScreenFrame onKeyStart={['Space']} onStart={startGame} bg="#0a0012">
144
+ * <ScreenTitle>MY GAME</ScreenTitle>
145
+ * <ScreenButton onClick={startGame}>PLAY</ScreenButton>
146
+ * </ScreenFrame>
147
+ * ```
148
+ */
149
+ export function ScreenFrame({ bg = 'var(--joydle-bg, #06060f)', onKeyStart, onStart, screen: _screen, class: className, children, }) {
150
+ injectPrimitivesStyle();
151
+ useEffect(() => {
152
+ if (!onKeyStart?.length || !onStart)
153
+ return;
154
+ const handler = (e) => {
155
+ if (onKeyStart.includes(e.code)) {
156
+ e.preventDefault();
157
+ onStart();
158
+ }
159
+ };
160
+ window.addEventListener('keydown', handler);
161
+ return () => window.removeEventListener('keydown', handler);
162
+ }, [onKeyStart, onStart]);
163
+ return (_jsx("div", { class: `joydle-screen-frame${className ? ' ' + className : ''}`, style: { background: bg }, children: children }));
164
+ }
165
+ /**
166
+ * Screen title element — styled h1 matching the joydle title aesthetic.
167
+ * Supports `<accent>` children for secondary color highlights.
168
+ *
169
+ * ```tsx
170
+ * <ScreenTitle>DEAD FOREST</ScreenTitle>
171
+ * <ScreenTitle color="#8b0000">BLOOD <accent>RUNS</accent></ScreenTitle>
172
+ * ```
173
+ */
174
+ export function ScreenTitle({ color, glow = true, children, }) {
175
+ injectPrimitivesStyle();
176
+ const style = {};
177
+ if (color) {
178
+ style.color = color;
179
+ if (glow)
180
+ style.textShadow = `0 0 var(--joydle-glow-blur, 0) ${color}`;
181
+ }
182
+ return (_jsx("h1", { class: "joydle-screen-title", style: style, children: children }));
183
+ }
184
+ /**
185
+ * Themed action button for screens.
186
+ *
187
+ * ```tsx
188
+ * <ScreenButton onClick={start}>PLAY</ScreenButton>
189
+ * <ScreenButton onClick={start} color="var(--joydle-danger)">RETRY</ScreenButton>
190
+ * ```
191
+ */
192
+ export function ScreenButton({ onClick, color, textColor, type = 'button', children, }) {
193
+ injectPrimitivesStyle();
194
+ const style = {};
195
+ if (color) {
196
+ style.background = color;
197
+ style.boxShadow = `0 0 var(--joydle-glow-blur, 0) var(--joydle-glow-spread, 0) ${color}`;
198
+ }
199
+ if (textColor)
200
+ style.color = textColor;
201
+ return (_jsx("button", { class: "joydle-screen-btn", style: style, onClick: onClick, type: type, children: children }));
202
+ }
203
+ /**
204
+ * Small hint/caption below the play button.
205
+ *
206
+ * ```tsx
207
+ * <ScreenHint>WASD move · CLICK fire</ScreenHint>
208
+ * ```
209
+ */
210
+ export function ScreenHint({ color, children }) {
211
+ injectPrimitivesStyle();
212
+ return (_jsx("p", { class: "joydle-screen-hint", style: color ? { color } : {}, children: children }));
213
+ }
214
+ /**
215
+ * Decorative horizontal divider with a gradient fade.
216
+ */
217
+ export function ScreenDivider({ color, width }) {
218
+ injectPrimitivesStyle();
219
+ const style = {};
220
+ if (color)
221
+ style.background = `linear-gradient(90deg, transparent, ${color}, transparent)`;
222
+ if (width)
223
+ style.width = width;
224
+ return _jsx("hr", { class: "joydle-screen-divider", style: style });
225
+ }
226
+ /**
227
+ * Simple metric list for game-over or results screens.
228
+ *
229
+ * ```tsx
230
+ * <ScreenMetrics items={['Time: 1:23', 'Combo: 5x', 'Accuracy: 84%']} />
231
+ * ```
232
+ */
233
+ export function ScreenMetrics({ items, color }) {
234
+ injectPrimitivesStyle();
235
+ if (!items.length)
236
+ return _jsx(_Fragment, {});
237
+ return (_jsx("div", { class: "joydle-screen-metrics", children: items.map((m, i) => (_jsx("span", { class: "joydle-screen-metric", style: color ? { color } : {}, children: m }, i))) }));
238
+ }
239
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/screens/primitives.tsx"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,qDAAqD;AACrD,EAAE;AACF,6EAA6E;AAC7E,sEAAsE;AACtE,EAAE;AACF,yCAAyC;AACzC,UAAU;AACV,oEAAoE;AACpE,kCAAkC;AAClC,4DAA4D;AAC5D,8DAA8D;AAC9D,qEAAqE;AACrE,aAAa;AACb,qBAAqB;AACrB,kBAAkB;AAClB,OAAO;AACP,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,+EAA+E;AAE/E,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwGtB,CAAC;AAEF,IAAI,uBAAuB,GAAG,KAAK,CAAC;AACpC,SAAS,qBAAqB;IAC5B,IAAI,uBAAuB;QAAE,OAAO;IACpC,uBAAuB,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,EAAE,CAAC,WAAW,GAAG,cAAc,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAkBD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,EAAE,GAAG,2BAA2B,EAChC,UAAU,EACV,OAAO,EACP,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,SAAS,EAChB,QAAQ,GACS;IACjB,qBAAqB,EAAE,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,OAAO;YAAE,OAAO;QAC5C,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAQ,EAAE;YACzC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1B,OAAO,CACL,cACE,KAAK,EAAE,sBAAsB,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAC/D,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,YAExB,QAAQ,GACL,CACP,CAAC;AACJ,CAAC;AAYD;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,IAAI,GAAG,IAAI,EACX,QAAQ,GACS;IACjB,qBAAqB,EAAE,CAAC;IAExB,MAAM,KAAK,GAAoC,EAAE,CAAC;IAClD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,IAAI,IAAI;YAAE,KAAK,CAAC,UAAU,GAAG,kCAAkC,KAAK,EAAE,CAAC;IACzE,CAAC;IAED,OAAO,CACL,aAAI,KAAK,EAAC,qBAAqB,EAAC,KAAK,EAAE,KAAK,YACzC,QAAQ,GACN,CACN,CAAC;AACJ,CAAC;AAcD;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,KAAK,EACL,SAAS,EACT,IAAI,GAAG,QAAQ,EACf,QAAQ,GACU;IAClB,qBAAqB,EAAE,CAAC;IAExB,MAAM,KAAK,GAAoC,EAAE,CAAC;IAClD,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;QACzB,KAAK,CAAC,SAAS,GAAG,+DAA+D,KAAK,EAAE,CAAC;IAC3F,CAAC;IACD,IAAI,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;IAEvC,OAAO,CACL,iBAAQ,KAAK,EAAC,mBAAmB,EAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,YACzE,QAAQ,GACF,CACV,CAAC;AACJ,CAAC;AAUD;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAmB;IAC7D,qBAAqB,EAAE,CAAC;IAExB,OAAO,CACL,YAAG,KAAK,EAAC,oBAAoB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,YACxD,QAAQ,GACP,CACL,CAAC;AACJ,CAAC;AAWD;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAsB;IAChE,qBAAqB,EAAE,CAAC;IAExB,MAAM,KAAK,GAAoC,EAAE,CAAC;IAClD,IAAI,KAAK;QAAE,KAAK,CAAC,UAAU,GAAG,uCAAuC,KAAK,gBAAgB,CAAC;IAC3F,IAAI,KAAK;QAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAE/B,OAAO,aAAI,KAAK,EAAC,uBAAuB,EAAC,KAAK,EAAE,KAAK,GAAI,CAAC;AAC5D,CAAC;AAWD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAsB;IAChE,qBAAqB,EAAE,CAAC;IAExB,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,mBAAK,CAAC;IAEhC,OAAO,CACL,cAAK,KAAK,EAAC,uBAAuB,YAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,eAAc,KAAK,EAAC,sBAAsB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,YACrE,CAAC,IADO,CAAC,CAEL,CACR,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenTransition.d.ts","sourceRoot":"","sources":["../../src/transitions/ScreenTransition.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAehD,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAsBD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,UAAmB,EACnB,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,EAAE,qBAAqB,gCAsFvB"}
1
+ {"version":3,"file":"ScreenTransition.d.ts","sourceRoot":"","sources":["../../src/transitions/ScreenTransition.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAMhD,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAsBD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,UAAmB,EACnB,QAAQ,EACR,SAAS,EACT,QAAQ,GACT,EAAE,qBAAqB,gCAiFvB"}
@@ -4,15 +4,7 @@ import { jsx as _jsx } from "preact/jsx-runtime";
4
4
  // ---------------------------------------------------------------------------
5
5
  import { useRef, useEffect } from 'preact/hooks';
6
6
  import { transitionPresets } from './presets';
7
- // ---- GSAP helper ----------------------------------------------------------
8
- function getGsap() {
9
- try {
10
- return globalThis.gsap ?? require('gsap').default;
11
- }
12
- catch {
13
- return null;
14
- }
15
- }
7
+ import { getGsap } from '../deps.js';
16
8
  // ---- Helpers --------------------------------------------------------------
17
9
  /**
18
10
  * Converts a `TransitionPreset` phase (enter or exit) into `gsap.fromTo`
@@ -49,30 +41,12 @@ export function ScreenTransition({ transition = 'fade', duration, activeKey, chi
49
41
  tlRef.current = null;
50
42
  }
51
43
  };
52
- // Enter animation on mount / key change.
44
+ // Animate on mount and on key change.
45
+ // When activeKey changes the children have already been swapped by the
46
+ // re-render, so we sequence: quick exit of the wrapper → enter with new
47
+ // content, all on the same element.
53
48
  useEffect(() => {
54
49
  const el = wrapperRef.current;
55
- if (!el || !preset)
56
- return;
57
- const gsap = getGsap();
58
- if (!gsap)
59
- return;
60
- killTimeline();
61
- const { from, to } = buildFromTo(preset.enter);
62
- const tl = gsap.timeline();
63
- tl.fromTo(el, from, { ...to, duration: dur, ease: 'power2.out' });
64
- tlRef.current = tl;
65
- return () => {
66
- killTimeline();
67
- };
68
- // Re-run when activeKey changes.
69
- // eslint-disable-next-line react-hooks/exhaustive-deps
70
- }, [activeKey]);
71
- // Handle key transitions: exit old, enter new.
72
- useEffect(() => {
73
- if (prevKeyRef.current === activeKey)
74
- return;
75
- const el = wrapperRef.current;
76
50
  if (!el || !preset) {
77
51
  prevKeyRef.current = activeKey;
78
52
  return;
@@ -83,15 +57,32 @@ export function ScreenTransition({ transition = 'fade', duration, activeKey, chi
83
57
  return;
84
58
  }
85
59
  killTimeline();
86
- // Quick exit of previous content.
87
- const { from: exitFrom, to: exitTo } = buildFromTo(preset.exit);
88
- const tl = gsap.timeline({
89
- onComplete: () => {
90
- prevKeyRef.current = activeKey;
91
- },
92
- });
93
- tl.fromTo(el, exitFrom, { ...exitTo, duration: dur * 0.4, ease: 'power2.in' });
94
- tlRef.current = tl;
60
+ const isInitial = prevKeyRef.current === activeKey;
61
+ const { from: enterFrom, to: enterTo } = buildFromTo(preset.enter);
62
+ if (isInitial) {
63
+ // First mount — just enter.
64
+ const tl = gsap.timeline();
65
+ tl.fromTo(el, enterFrom, { ...enterTo, duration: dur, ease: 'power2.out' });
66
+ tlRef.current = tl;
67
+ }
68
+ else {
69
+ // Key changed — exit then enter.
70
+ const { from: exitFrom, to: exitTo } = buildFromTo(preset.exit);
71
+ const tl = gsap.timeline({
72
+ onComplete: () => {
73
+ prevKeyRef.current = activeKey;
74
+ },
75
+ });
76
+ // Quick exit of previous visual state
77
+ tl.fromTo(el, exitFrom, { ...exitTo, duration: dur * 0.35, ease: 'power2.in' });
78
+ // Then enter with new content
79
+ tl.fromTo(el, enterFrom, { ...enterTo, duration: dur, ease: 'power2.out' });
80
+ tlRef.current = tl;
81
+ prevKeyRef.current = activeKey;
82
+ }
83
+ return () => {
84
+ killTimeline();
85
+ };
95
86
  // eslint-disable-next-line react-hooks/exhaustive-deps
96
87
  }, [activeKey]);
97
88
  // Cleanup on unmount.
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenTransition.js","sourceRoot":"","sources":["../../src/transitions/ScreenTransition.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScreenTransition.js","sourceRoot":"","sources":["../../src/transitions/ScreenTransition.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joydle/ui",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -28,9 +28,15 @@
28
28
  "./transitions": {
29
29
  "types": "./dist/transitions/index.d.ts",
30
30
  "import": "./dist/transitions/index.js"
31
+ },
32
+ "./fx": {
33
+ "types": "./dist/fx/index.d.ts",
34
+ "import": "./dist/fx/index.js"
31
35
  }
32
36
  },
33
- "files": ["dist"],
37
+ "files": [
38
+ "dist"
39
+ ],
34
40
  "scripts": {
35
41
  "build": "tsc",
36
42
  "typecheck": "tsc --noEmit",
@@ -45,15 +51,20 @@
45
51
  "author": "Joydle <contact@joydle.dev>",
46
52
  "homepage": "https://joydle.dev",
47
53
  "peerDependencies": {
54
+ "@joydle/icons": "^0.1.0",
48
55
  "gsap": "^3.12",
49
56
  "preact": "^10.19"
50
57
  },
51
58
  "peerDependenciesMeta": {
59
+ "@joydle/icons": {
60
+ "optional": true
61
+ },
52
62
  "gsap": {
53
63
  "optional": true
54
64
  }
55
65
  },
56
66
  "devDependencies": {
67
+ "gsap": "^3.12",
57
68
  "jsdom": "^28.1.0",
58
69
  "preact": "^10.19.0",
59
70
  "typescript": "^5.4.0",