@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,11 +1,20 @@
1
1
  import type { JSX } from 'preact';
2
2
  export type ActionButtonSize = 'small' | 'medium' | 'large';
3
+ /** Icon prop — component ref for button icon. */
4
+ export type ActionButtonIconProp = ((props: {
5
+ size?: number;
6
+ color?: string;
7
+ fill?: string;
8
+ strokeWidth?: number;
9
+ }) => JSX.Element);
3
10
  export interface ActionButtonProps {
4
11
  position: 'bottom-left' | 'bottom-right' | 'fullscreen';
5
12
  label: string;
6
13
  action?: string;
7
14
  size?: ActionButtonSize;
8
15
  opacity?: number;
16
+ /** Optional icon to display inside the button. */
17
+ icon?: ActionButtonIconProp;
9
18
  /**
10
19
  * When rendered inside an ActionButtonGroup, positioning is managed by the
11
20
  * parent. Setting `_managed` suppresses fixed positioning and the media
@@ -14,5 +23,5 @@ export interface ActionButtonProps {
14
23
  */
15
24
  _managed?: boolean;
16
25
  }
17
- export declare function ActionButton({ position, label, action, size, opacity, _managed, }: ActionButtonProps): JSX.Element;
26
+ export declare function ActionButton({ position, label, action, size, opacity, icon, _managed, }: ActionButtonProps): JSX.Element;
18
27
  //# sourceMappingURL=ActionButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionButton.d.ts","sourceRoot":"","sources":["../../src/controls/ActionButton.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAKlC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA6BD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAK,EACL,MAAiB,EACjB,IAAe,EACf,OAAa,EACb,QAAgB,GACjB,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA8GjC"}
1
+ {"version":3,"file":"ActionButton.d.ts","sourceRoot":"","sources":["../../src/controls/ActionButton.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAKlC,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5D,iDAAiD;AACjD,MAAM,MAAM,oBAAoB,GAC5B,CAAC,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;AAErG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA6BD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAK,EACL,MAAiB,EACjB,IAAe,EACf,OAAa,EACb,IAAI,EACJ,QAAgB,GACjB,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAqHjC"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx } from "preact/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
2
  // ---------------------------------------------------------------------------
3
3
  // @joydle/ui — Single action button (touch)
4
4
  // ---------------------------------------------------------------------------
@@ -26,7 +26,7 @@ function injectStyle() {
26
26
  document.head.appendChild(el);
27
27
  }
28
28
  // ---- Component ------------------------------------------------------------
29
- export function ActionButton({ position, label, action = 'action', size = 'medium', opacity = 0.6, _managed = false, }) {
29
+ export function ActionButton({ position, label, action = 'action', size = 'medium', opacity = 0.6, icon, _managed = false, }) {
30
30
  const ctx = useContext(GameContext);
31
31
  const inputManager = ctx?.inputManager ?? null;
32
32
  const pressedRef = useRef(false);
@@ -103,6 +103,6 @@ export function ActionButton({ position, label, action = 'action', size = 'mediu
103
103
  else {
104
104
  baseStyle.opacity = opacity;
105
105
  }
106
- return (_jsx("div", { class: _managed ? undefined : 'joydle-action-btn', style: baseStyle, onTouchStart: handleTouchStart, onTouchEnd: handleTouchEnd, onTouchCancel: handleTouchEnd, children: label }));
106
+ return (_jsx("div", { class: _managed ? undefined : 'joydle-action-btn', style: baseStyle, onTouchStart: handleTouchStart, onTouchEnd: handleTouchEnd, onTouchCancel: handleTouchEnd, children: icon ? (_jsxs("span", { style: { lineHeight: 0, display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 2 }, children: [icon({ size: Math.round(px * 0.4), color: 'white', strokeWidth: 2 }), label && _jsx("span", { style: { fontSize: Math.round(px * 0.18), lineHeight: 1 }, children: label })] })) : (label) }));
107
107
  }
108
108
  //# sourceMappingURL=ActionButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionButton.js","sourceRoot":"","sources":["../../src/controls/ActionButton.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActionButton.js","sourceRoot":"","sources":["../../src/controls/ActionButton.tsx"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA2B/C,8EAA8E;AAE9E,MAAM,QAAQ,GAAqC;IACjD,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,8EAA8E;AAE9E,yCAAyC;AACzC,MAAM,UAAU,GAAW;;;CAG1B,CAAC;AAEF,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,SAAS,WAAW;IAClB,IAAI,aAAa;QAAE,OAAO;IAC1B,aAAa,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,EAAE,CAAC,WAAW,GAAG,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,8EAA8E;AAE9E,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAK,EACL,MAAM,GAAG,QAAQ,EACjB,IAAI,GAAG,QAAQ,EACf,OAAO,GAAG,GAAG,EACb,IAAI,EACJ,QAAQ,GAAG,KAAK,GACE;IAClB,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjC,WAAW,EAAE,CAAC;IAEd,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE1B,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,CAAa,EAAE,EAAE;QAChB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,IAAI,YAAY;YAAE,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEvD,0CAA0C;QAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,aAAmC,CAAC;QACjD,IAAI,EAAE;YAAE,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;IAC5C,CAAC,EACD,CAAC,YAAY,EAAE,MAAM,CAAC,CACvB,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,CAAa,EAAE,EAAE;QAChB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAC3B,IAAI,YAAY;YAAE,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAExD,MAAM,EAAE,GAAG,CAAC,CAAC,aAAmC,CAAC;QACjD,IAAI,EAAE;YAAE,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;IAC1C,CAAC,EACD,CAAC,YAAY,EAAE,MAAM,CAAC,CACvB,CAAC;IAEF,6EAA6E;IAC7E,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAoC;YACjD,QAAQ,EAAE,OAAO;YACjB,GAAG,EAAE,CAAC;YACN,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG;YACX,aAAa,EAAE,MAAM;YACrB,WAAW,EAAE,MAAM;YACnB,UAAU,EAAE,aAAa;YACzB,2BAA2B;YAC3B,OAAO,EAAE,CAAC;SACX,CAAC;QAEF,OAAO,CACL,cACE,KAAK,EAAC,mBAAmB,EACzB,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,gBAAgB,EAC9B,UAAU,EAAE,cAAc,EAC1B,aAAa,EAAE,cAAc,GAC7B,CACH,CAAC;IACJ,CAAC;IAED,6EAA6E;IAE7E,MAAM,MAAM,GAAG,QAAQ,KAAK,aAAa,CAAC;IAE1C,MAAM,SAAS,GAAoC;QACjD,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,KAAK;QACnB,UAAU,EAAE,wBAAwB;QACpC,MAAM,EAAE,iCAAiC;QACzC,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,aAAa,EAAE,MAAM;QACrB,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,MAAM;QAClB,gBAAgB,EAAE,MAAM;QACxB,UAAU,EAAE,sBAAsB;QAClC,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC;QAC9B,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,YAAY;KACxB,CAAC;IAEF,mDAAmD;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YACvB,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,EAAE;YACV,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE;YAC/B,OAAO;YACP,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAC9B,CAAC;IAED,OAAO,CACL,cACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,EACjD,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,gBAAgB,EAC9B,UAAU,EAAE,cAAc,EAC1B,aAAa,EAAE,cAAc,YAE5B,IAAI,CAAC,CAAC,CAAC,CACN,gBAAM,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aACnG,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EACpE,KAAK,IAAI,eAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,YAAG,KAAK,GAAQ,IACpF,CACR,CAAC,CAAC,CAAC,CACF,KAAK,CACN,GACG,CACP,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export { TouchDPad, type TouchDPadProps } from './TouchDPad.js';
2
2
  export { Joystick, type JoystickProps } from './Joystick.js';
3
- export { ActionButton, type ActionButtonProps, type ActionButtonSize, } from './ActionButton.js';
3
+ export { ActionButton, type ActionButtonProps, type ActionButtonSize, type ActionButtonIconProp, } from './ActionButton.js';
4
4
  export { ActionButtonGroup, type ActionButtonGroupProps, type ActionButtonConfig, } from './ActionButtonGroup.js';
5
5
  export { SwipeZone, type SwipeZoneProps, type SwipeDirection, } from './SwipeZone.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,GAGlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,SAAS,GAGV,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAC7D,OAAO,EACL,YAAY,GAIb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,GAGlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,SAAS,GAGV,MAAM,gBAAgB,CAAC"}
package/dist/deps.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ type GsapCore = typeof import('gsap').default;
2
+ /**
3
+ * Provide peer dependencies for @joydle/ui.
4
+ * Call once at app startup before rendering any UI components.
5
+ */
6
+ export declare function configure(deps: {
7
+ gsap?: GsapCore;
8
+ }): void;
9
+ export declare function getGsap(): GsapCore;
10
+ export {};
11
+ //# sourceMappingURL=deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAIA,KAAK,QAAQ,GAAG,cAAc,MAAM,EAAE,OAAO,CAAC;AAI9C;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,QAAQ,CAAA;CAAE,GAAG,IAAI,CAEzD;AAED,wBAAgB,OAAO,IAAI,QAAQ,CAOlC"}
package/dist/deps.js ADDED
@@ -0,0 +1,19 @@
1
+ // ---------------------------------------------------------------------------
2
+ // @joydle/ui — Centralized dependency injection
3
+ // ---------------------------------------------------------------------------
4
+ let _gsap = null;
5
+ /**
6
+ * Provide peer dependencies for @joydle/ui.
7
+ * Call once at app startup before rendering any UI components.
8
+ */
9
+ export function configure(deps) {
10
+ if (deps.gsap)
11
+ _gsap = deps.gsap;
12
+ }
13
+ export function getGsap() {
14
+ if (!_gsap) {
15
+ throw new Error('[@joydle/ui] gsap not configured. Call configure({ gsap }) first.');
16
+ }
17
+ return _gsap;
18
+ }
19
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAI9E,IAAI,KAAK,GAAoB,IAAI,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAyB;IACjD,IAAI,IAAI,CAAC,IAAI;QAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,163 @@
1
+ import type { JSX } from 'preact';
2
+ import type { AlertState, BannerState, KillState, BeamState } from './hooks.js';
3
+ export interface DamageFlashProps {
4
+ /** Trigger a flash on every truthy change. */
5
+ active: boolean;
6
+ /** Flash color. Default: `var(--joydle-danger, #ff0033)`. */
7
+ color?: string;
8
+ /** Flash duration in ms. Default: 250. */
9
+ duration?: number;
10
+ /** Peak opacity (0–1). Default: 0.7. */
11
+ intensity?: number;
12
+ }
13
+ /**
14
+ * Full-screen color flash — ideal for taking damage, screen hit, health critical.
15
+ *
16
+ * ```tsx
17
+ * <DamageFlash active={playerHit} color="#ff0033" duration={250} />
18
+ * ```
19
+ */
20
+ export declare function DamageFlash({ active, color, duration, intensity, }: DamageFlashProps): JSX.Element;
21
+ export interface VignetteProps {
22
+ /** Current health value (0–maxHp). */
23
+ hp: number;
24
+ /** Maximum health value. Default: 100. */
25
+ maxHp?: number;
26
+ /** HP threshold below which vignette appears (0–1 fraction). Default: 0.3. */
27
+ threshold?: number;
28
+ /** Vignette color. Default: `var(--joydle-danger, #ff0033)`. */
29
+ color?: string;
30
+ /** Pulse the vignette opacity when active. Default: true. */
31
+ pulse?: boolean;
32
+ }
33
+ /**
34
+ * Health-state edge vignette — darkens/tints screen edges as HP drops.
35
+ *
36
+ * ```tsx
37
+ * <Vignette hp={hp} maxHp={100} threshold={0.3} color="#ff0000" />
38
+ * ```
39
+ */
40
+ export declare function Vignette({ hp, maxHp, threshold, color, pulse, }: VignetteProps): JSX.Element;
41
+ export interface CRTOverlayProps {
42
+ /** Scanline opacity multiplier. Default: 0.06. */
43
+ opacity?: number;
44
+ /** Vignette strength (0–1). Default: 0.35. */
45
+ vignetteStrength?: number;
46
+ }
47
+ /**
48
+ * CRT monitor effect — scanlines + edge vignette.
49
+ * Place above the canvas layer for an authentic retro look.
50
+ *
51
+ * ```tsx
52
+ * <CRTOverlay opacity={0.06} vignetteStrength={0.35} />
53
+ * ```
54
+ */
55
+ export declare function CRTOverlay({ opacity, vignetteStrength, }: CRTOverlayProps): JSX.Element;
56
+ export interface AlertBannerProps {
57
+ /** Alert state from useAlerts(). */
58
+ alert: AlertState | null;
59
+ /** Vertical position (CSS value). Default: `'32%'`. */
60
+ position?: string;
61
+ /** Main text font size in px. Default: 42. */
62
+ fontSize?: number;
63
+ /** Main text color. Default: `var(--joydle-danger, #ff0033)`. */
64
+ color?: string;
65
+ }
66
+ /**
67
+ * Cinematic alert banner — large text reveal with auto-dismiss.
68
+ *
69
+ * ```tsx
70
+ * const { alert, showAlert } = useAlerts();
71
+ * <AlertBanner alert={alert} color="#ff0033" />
72
+ * ```
73
+ */
74
+ export declare function AlertBanner({ alert, position, fontSize, color, }: AlertBannerProps): JSX.Element;
75
+ export interface WaveBannerProps {
76
+ /** Banner state from useWaveBanner(). */
77
+ banner: BannerState | null;
78
+ /** Title color. Default: `var(--joydle-danger, #ff0033)`. */
79
+ color?: string;
80
+ /** Sub-label text after count. Default: `'ENEMIES INCOMING'`. */
81
+ countLabel?: string;
82
+ }
83
+ /**
84
+ * Full-screen wave announcement overlay.
85
+ *
86
+ * ```tsx
87
+ * const { banner, showWave } = useWaveBanner();
88
+ * showWave(3, 8);
89
+ * <WaveBanner banner={banner} />
90
+ * ```
91
+ */
92
+ export declare function WaveBanner({ banner, color, countLabel, }: WaveBannerProps): JSX.Element;
93
+ export interface MuzzleFlashProps {
94
+ /** Trigger a flash on every truthy change. */
95
+ active: boolean;
96
+ /** Flash color. Default: `var(--joydle-accent, #ff6a00)`. */
97
+ color?: string;
98
+ /** Bottom offset (CSS value). Default: `'18%'`. */
99
+ position?: string;
100
+ /** Size in px. Default: 80. */
101
+ size?: number;
102
+ }
103
+ /**
104
+ * Muzzle / weapon flash overlay at screen bottom-center.
105
+ *
106
+ * ```tsx
107
+ * <MuzzleFlash active={firing} color="#ff6a00" />
108
+ * ```
109
+ */
110
+ export declare function MuzzleFlash({ active, color, position, size, }: MuzzleFlashProps): JSX.Element;
111
+ export interface KillConfirmProps {
112
+ /** Kill states from useKillConfirm(). */
113
+ kills: KillState[];
114
+ /** Icon/symbol to display. Default: `'×'`. */
115
+ icon?: string;
116
+ /** Marker color. Default: `var(--joydle-accent, #ff6a00)`. */
117
+ color?: string;
118
+ }
119
+ /**
120
+ * Animated kill confirmation markers that appear at random screen positions.
121
+ *
122
+ * ```tsx
123
+ * const { kills, addKill } = useKillConfirm();
124
+ * <KillConfirm kills={kills} icon="×" />
125
+ * ```
126
+ */
127
+ export declare function KillConfirm({ kills, icon, color, }: KillConfirmProps): JSX.Element;
128
+ export interface WarningStripesProps {
129
+ /** Show the stripes. */
130
+ active: boolean;
131
+ /** Stripe color. Default: `var(--joydle-gold, #ffd600)`. */
132
+ color?: string;
133
+ /** Stripe height in px. Default: 3. */
134
+ height?: number;
135
+ }
136
+ /**
137
+ * Animated hazard-stripe bars at screen top and bottom.
138
+ * Great for wave start, danger zones, time pressure.
139
+ *
140
+ * ```tsx
141
+ * <WarningStripes active={wavePending} color="#ffd600" />
142
+ * ```
143
+ */
144
+ export declare function WarningStripes({ active, color, height, }: WarningStripesProps): JSX.Element;
145
+ export interface ScreenBeamProps {
146
+ /** Beam states from useBeamEffect(). */
147
+ beams: BeamState[];
148
+ /** Beam color. Default: `var(--joydle-danger, #ff0033)`. */
149
+ color?: string;
150
+ /** Beam height in px. Default: 4. */
151
+ height?: number;
152
+ }
153
+ /**
154
+ * Horizontal beam / energy ray flashes across the screen.
155
+ * Use for enemy attacks, explosions, special effects.
156
+ *
157
+ * ```tsx
158
+ * const { beams, addBeam } = useBeamEffect();
159
+ * <ScreenBeam beams={beams} color="#ff0033" />
160
+ * ```
161
+ */
162
+ export declare function ScreenBeam({ beams, color, height, }: ScreenBeamProps): JSX.Element;
163
+ //# sourceMappingURL=effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../src/fx/effects.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,337 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
2
+ // ---------------------------------------------------------------------------
3
+ // @joydle/ui/fx — Composable screen effects
4
+ // All effects default to theme CSS vars but accept overrides for full variety.
5
+ // ---------------------------------------------------------------------------
6
+ import { useState, useEffect } from 'preact/hooks';
7
+ // ---- CSS injection (shared keyframes) -------------------------------------
8
+ const FX_CSS = `
9
+ @keyframes joydle-damage-flash {
10
+ 0% { opacity: var(--joydle-fx-intensity, 0.7); }
11
+ 100% { opacity: 0; }
12
+ }
13
+ @keyframes joydle-vignette-pulse {
14
+ 0%, 100% { opacity: 0.6; }
15
+ 50% { opacity: 0.3; }
16
+ }
17
+ @keyframes joydle-muzzle-flash {
18
+ 0% { opacity: 1; transform: translateX(-50%) scale(0.5); }
19
+ 100% { opacity: 0; transform: translateX(-50%) scale(1.2); }
20
+ }
21
+ @keyframes joydle-alert-reveal {
22
+ 0% { opacity: 0; letter-spacing: 30px; }
23
+ 15% { opacity: 1; letter-spacing: 12px; }
24
+ 75% { opacity: 1; }
25
+ 100% { opacity: 0; transform: translateX(-50%) translateY(-15px); }
26
+ }
27
+ @keyframes joydle-wave-banner {
28
+ 0% { opacity: 0; }
29
+ 8% { opacity: 1; }
30
+ 65% { opacity: 1; }
31
+ 100% { opacity: 0; }
32
+ }
33
+ @keyframes joydle-kill-cross {
34
+ 0% { transform: scale(0.2); opacity: 1; }
35
+ 30% { transform: scale(1.6); opacity: 0.8; }
36
+ 100% { transform: scale(3); opacity: 0; }
37
+ }
38
+ @keyframes joydle-warning-scroll {
39
+ from { background-position: 0; }
40
+ to { background-position: 16px; }
41
+ }
42
+ @keyframes joydle-beam-flash {
43
+ 0% { opacity: 0; transform: scaleX(0); }
44
+ 10% { opacity: 1; transform: scaleX(1); }
45
+ 70% { opacity: 1; }
46
+ 100% { opacity: 0; }
47
+ }
48
+ `;
49
+ let fxStyleInjected = false;
50
+ function injectFxStyle() {
51
+ if (fxStyleInjected)
52
+ return;
53
+ fxStyleInjected = true;
54
+ const el = document.createElement('style');
55
+ el.textContent = FX_CSS;
56
+ document.head.appendChild(el);
57
+ }
58
+ /**
59
+ * Full-screen color flash — ideal for taking damage, screen hit, health critical.
60
+ *
61
+ * ```tsx
62
+ * <DamageFlash active={playerHit} color="#ff0033" duration={250} />
63
+ * ```
64
+ */
65
+ export function DamageFlash({ active, color = 'var(--joydle-danger, #ff0033)', duration = 250, intensity = 0.7, }) {
66
+ injectFxStyle();
67
+ const [show, setShow] = useState(false);
68
+ useEffect(() => {
69
+ if (!active)
70
+ return;
71
+ setShow(true);
72
+ const t = setTimeout(() => setShow(false), duration);
73
+ return () => clearTimeout(t);
74
+ }, [active, duration]);
75
+ if (!show)
76
+ return _jsx(_Fragment, {});
77
+ return (_jsx("div", { style: {
78
+ position: 'fixed',
79
+ inset: 0,
80
+ zIndex: 45,
81
+ pointerEvents: 'none',
82
+ background: `radial-gradient(ellipse, transparent 20%, ${color} 100%)`,
83
+ opacity: intensity,
84
+ animation: `joydle-damage-flash ${duration / 1000}s ease-out forwards`,
85
+ } }));
86
+ }
87
+ /**
88
+ * Health-state edge vignette — darkens/tints screen edges as HP drops.
89
+ *
90
+ * ```tsx
91
+ * <Vignette hp={hp} maxHp={100} threshold={0.3} color="#ff0000" />
92
+ * ```
93
+ */
94
+ export function Vignette({ hp, maxHp = 100, threshold = 0.3, color = 'var(--joydle-danger, #ff0033)', pulse = true, }) {
95
+ injectFxStyle();
96
+ const pct = hp / maxHp;
97
+ if (pct >= threshold)
98
+ return _jsx(_Fragment, {});
99
+ return (_jsx("div", { style: {
100
+ position: 'fixed',
101
+ inset: 0,
102
+ zIndex: 44,
103
+ pointerEvents: 'none',
104
+ background: `radial-gradient(ellipse, transparent 40%, ${color}40 100%)`,
105
+ animation: pulse ? 'joydle-vignette-pulse 1.5s infinite' : 'none',
106
+ transition: 'opacity 0.5s',
107
+ } }));
108
+ }
109
+ /**
110
+ * CRT monitor effect — scanlines + edge vignette.
111
+ * Place above the canvas layer for an authentic retro look.
112
+ *
113
+ * ```tsx
114
+ * <CRTOverlay opacity={0.06} vignetteStrength={0.35} />
115
+ * ```
116
+ */
117
+ export function CRTOverlay({ opacity = 0.06, vignetteStrength = 0.35, }) {
118
+ return (_jsx("div", { style: {
119
+ position: 'fixed',
120
+ top: 0,
121
+ left: 0,
122
+ width: '100%',
123
+ height: '100%',
124
+ zIndex: 100,
125
+ pointerEvents: 'none',
126
+ background: `repeating-linear-gradient(0deg, rgba(0,0,0,${opacity}) 0px, rgba(0,0,0,${opacity}) 1px, transparent 1px, transparent 3px)`,
127
+ mixBlendMode: 'multiply',
128
+ }, children: _jsx("div", { style: {
129
+ position: 'absolute',
130
+ inset: 0,
131
+ background: `radial-gradient(ellipse at center, transparent 55%, rgba(0,0,0,${vignetteStrength}) 100%)`,
132
+ } }) }));
133
+ }
134
+ /**
135
+ * Cinematic alert banner — large text reveal with auto-dismiss.
136
+ *
137
+ * ```tsx
138
+ * const { alert, showAlert } = useAlerts();
139
+ * <AlertBanner alert={alert} color="#ff0033" />
140
+ * ```
141
+ */
142
+ export function AlertBanner({ alert, position = '32%', fontSize = 42, color = 'var(--joydle-danger, #ff0033)', }) {
143
+ injectFxStyle();
144
+ if (!alert)
145
+ return _jsx(_Fragment, {});
146
+ return (_jsxs("div", { style: {
147
+ position: 'fixed',
148
+ top: position,
149
+ left: '50%',
150
+ transform: 'translateX(-50%)',
151
+ zIndex: 55,
152
+ textAlign: 'center',
153
+ pointerEvents: 'none',
154
+ animation: 'joydle-alert-reveal 1.8s ease-out forwards',
155
+ }, children: [_jsx("div", { style: {
156
+ fontFamily: 'var(--joydle-font, sans-serif)',
157
+ fontSize,
158
+ fontWeight: 900,
159
+ color,
160
+ letterSpacing: 12,
161
+ textShadow: `0 0 35px ${color}`,
162
+ }, children: alert.main }), alert.sub && (_jsx("div", { style: {
163
+ fontFamily: 'var(--joydle-font, sans-serif)',
164
+ fontSize: fontSize * 0.3,
165
+ color: 'var(--joydle-accent, #ff6a00)',
166
+ letterSpacing: 8,
167
+ marginTop: 6,
168
+ opacity: 0.7,
169
+ }, children: alert.sub })), alert.jp && (_jsx("div", { style: {
170
+ fontSize: fontSize * 0.38,
171
+ color: 'rgba(255,255,255,0.18)',
172
+ marginTop: 10,
173
+ letterSpacing: 6,
174
+ }, children: alert.jp }))] }, alert.id));
175
+ }
176
+ /**
177
+ * Full-screen wave announcement overlay.
178
+ *
179
+ * ```tsx
180
+ * const { banner, showWave } = useWaveBanner();
181
+ * showWave(3, 8);
182
+ * <WaveBanner banner={banner} />
183
+ * ```
184
+ */
185
+ export function WaveBanner({ banner, color = 'var(--joydle-danger, #ff0033)', countLabel = 'ENEMIES INCOMING', }) {
186
+ injectFxStyle();
187
+ if (!banner)
188
+ return _jsx(_Fragment, {});
189
+ return (_jsxs("div", { style: {
190
+ position: 'fixed',
191
+ top: '50%',
192
+ left: '50%',
193
+ transform: 'translate(-50%,-50%)',
194
+ zIndex: 70,
195
+ textAlign: 'center',
196
+ pointerEvents: 'none',
197
+ animation: 'joydle-wave-banner 2.8s ease-out forwards',
198
+ }, children: [_jsxs("div", { style: {
199
+ fontFamily: 'var(--joydle-font, sans-serif)',
200
+ fontSize: 64,
201
+ fontWeight: 900,
202
+ color,
203
+ textShadow: `0 0 50px ${color}`,
204
+ letterSpacing: 14,
205
+ }, children: ["WAVE ", banner.wave] }), banner.count != null && (_jsxs("div", { style: {
206
+ fontSize: 13,
207
+ color: 'var(--joydle-accent, #ff6a00)',
208
+ letterSpacing: 8,
209
+ }, children: [banner.count, " ", countLabel] }))] }, banner.id));
210
+ }
211
+ /**
212
+ * Muzzle / weapon flash overlay at screen bottom-center.
213
+ *
214
+ * ```tsx
215
+ * <MuzzleFlash active={firing} color="#ff6a00" />
216
+ * ```
217
+ */
218
+ export function MuzzleFlash({ active, color = 'var(--joydle-accent, #ff6a00)', position = '18%', size = 80, }) {
219
+ injectFxStyle();
220
+ const [show, setShow] = useState(false);
221
+ useEffect(() => {
222
+ if (!active)
223
+ return;
224
+ setShow(true);
225
+ const t = setTimeout(() => setShow(false), 70);
226
+ return () => clearTimeout(t);
227
+ }, [active]);
228
+ if (!show)
229
+ return _jsx(_Fragment, {});
230
+ return (_jsx("div", { style: {
231
+ position: 'fixed',
232
+ bottom: position,
233
+ left: '50%',
234
+ transform: 'translateX(-50%)',
235
+ width: size,
236
+ height: size,
237
+ zIndex: 42,
238
+ pointerEvents: 'none',
239
+ borderRadius: '50%',
240
+ background: `radial-gradient(circle, ${color}e5, ${color}4d, transparent)`,
241
+ animation: `joydle-muzzle-flash 0.07s ease-out`,
242
+ } }));
243
+ }
244
+ /**
245
+ * Animated kill confirmation markers that appear at random screen positions.
246
+ *
247
+ * ```tsx
248
+ * const { kills, addKill } = useKillConfirm();
249
+ * <KillConfirm kills={kills} icon="×" />
250
+ * ```
251
+ */
252
+ export function KillConfirm({ kills, icon = '×', color = 'var(--joydle-accent, #ff6a00)', }) {
253
+ injectFxStyle();
254
+ return (_jsx("div", { style: { position: 'fixed', inset: 0, zIndex: 55, pointerEvents: 'none' }, children: kills.map(k => (_jsxs("div", { style: {
255
+ position: 'fixed',
256
+ left: `${k.x}%`,
257
+ top: `${k.y}%`,
258
+ animation: 'joydle-kill-cross 1.2s ease-out forwards',
259
+ }, children: [_jsx("div", { style: {
260
+ position: 'absolute',
261
+ width: 5,
262
+ height: 100,
263
+ left: '50%',
264
+ top: -50,
265
+ transform: 'translateX(-50%)',
266
+ background: `linear-gradient(to bottom, ${color}, transparent)`,
267
+ opacity: 0.85,
268
+ } }), _jsx("div", { style: {
269
+ position: 'absolute',
270
+ width: 70,
271
+ height: 3,
272
+ top: 0,
273
+ left: -35,
274
+ background: color,
275
+ opacity: 0.85,
276
+ } }), _jsx("div", { style: {
277
+ position: 'absolute',
278
+ left: '50%',
279
+ top: '50%',
280
+ transform: 'translate(-50%, -50%)',
281
+ fontSize: 20,
282
+ fontWeight: 900,
283
+ color,
284
+ fontFamily: 'var(--joydle-font, sans-serif)',
285
+ }, children: icon })] }, k.id))) }));
286
+ }
287
+ /**
288
+ * Animated hazard-stripe bars at screen top and bottom.
289
+ * Great for wave start, danger zones, time pressure.
290
+ *
291
+ * ```tsx
292
+ * <WarningStripes active={wavePending} color="#ffd600" />
293
+ * ```
294
+ */
295
+ export function WarningStripes({ active, color = 'var(--joydle-gold, #ffd600)', height = 3, }) {
296
+ injectFxStyle();
297
+ const stripeStyle = {
298
+ left: 0,
299
+ right: 0,
300
+ height,
301
+ opacity: active ? 0.7 : 0,
302
+ transition: 'opacity 0.2s',
303
+ zIndex: 45,
304
+ pointerEvents: 'none',
305
+ background: `repeating-linear-gradient(90deg, ${color} 0px, ${color} 8px, transparent 8px, transparent 16px)`,
306
+ animation: active ? 'joydle-warning-scroll 0.4s linear infinite' : 'none',
307
+ position: 'fixed',
308
+ };
309
+ return (_jsxs(_Fragment, { children: [_jsx("div", { style: { ...stripeStyle, top: 48 } }), _jsx("div", { style: { ...stripeStyle, bottom: 160 } })] }));
310
+ }
311
+ /**
312
+ * Horizontal beam / energy ray flashes across the screen.
313
+ * Use for enemy attacks, explosions, special effects.
314
+ *
315
+ * ```tsx
316
+ * const { beams, addBeam } = useBeamEffect();
317
+ * <ScreenBeam beams={beams} color="#ff0033" />
318
+ * ```
319
+ */
320
+ export function ScreenBeam({ beams, color = 'var(--joydle-danger, #ff0033)', height = 4, }) {
321
+ injectFxStyle();
322
+ return (_jsx("div", { style: { position: 'fixed', inset: 0, zIndex: 43, pointerEvents: 'none' }, children: beams.map(b => (_jsx("div", { style: {
323
+ position: 'absolute',
324
+ top: `${b.top}%`,
325
+ left: 0,
326
+ right: 0,
327
+ animation: 'joydle-beam-flash 0.6s ease-out forwards',
328
+ }, children: _jsx("div", { style: {
329
+ height,
330
+ width: b.width,
331
+ margin: '0 auto',
332
+ background: `linear-gradient(90deg, transparent, ${color}, rgba(255,0,51,0.8), ${color}, transparent)`,
333
+ boxShadow: `0 0 15px ${color}, 0 0 30px ${color}4d`,
334
+ borderRadius: 2,
335
+ } }) }, b.id))) }));
336
+ }
337
+ //# sourceMappingURL=effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects.js","sourceRoot":"","sources":["../../src/fx/effects.tsx"],"names":[],"mappings":"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"}