@kayelaa/canvas 0.2.2 → 0.2.4
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 -1
- package/dist/index.cjs +2 -2
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/jsx-dev-runtime.cjs +2 -2
- package/dist/jsx-dev-runtime.d.cts +1 -1
- package/dist/jsx-dev-runtime.d.ts +1 -1
- package/dist/jsx-dev-runtime.js +2 -2
- package/dist/jsx-runtime.cjs +2 -2
- package/dist/jsx-runtime.d.cts +1 -1
- package/dist/jsx-runtime.d.ts +1 -1
- package/dist/jsx-runtime.js +2 -2
- package/dist/{kayla-internals-vuPhjkRg.d.cts → kayla-internals-BnnDnUVI.d.cts} +37 -16
- package/dist/{kayla-internals-C8v5s-0r.d.ts → kayla-internals-uYrgURKn.d.ts} +37 -16
- package/dist/kayla.cjs +2 -2
- package/dist/kayla.d.cts +2 -2
- package/dist/kayla.d.ts +2 -2
- package/dist/kayla.js +2 -2
- package/package.json +1 -1
|
@@ -298,11 +298,15 @@ declare namespace KaylaInternals {
|
|
|
298
298
|
* Pointer related event-emitter
|
|
299
299
|
*/
|
|
300
300
|
protected pointerEvents: LeaEventEmitter<{
|
|
301
|
-
|
|
301
|
+
action: [Vector2, KaylaClickType, KaylaPointerAction];
|
|
302
302
|
}>;
|
|
303
|
+
onPointerDown: (e: PointerEvent) => void;
|
|
304
|
+
onPointerUp: (e: PointerEvent) => void;
|
|
305
|
+
onPointerCancel: (e: PointerEvent) => void;
|
|
306
|
+
onPointerMove: (e: PointerEvent) => void;
|
|
303
307
|
constructor(canvas: HTMLCanvasElement);
|
|
304
308
|
protected pointerPosUpdater(e: PointerEvent): void;
|
|
305
|
-
protected
|
|
309
|
+
protected onPointerAll(e: PointerEvent, action: KaylaPointerAction): void;
|
|
306
310
|
static getClickType(e: PointerEvent): KaylaClickType;
|
|
307
311
|
listenPointerUpdates(): void;
|
|
308
312
|
unlistenPointerUpdates(): void;
|
|
@@ -369,8 +373,8 @@ declare namespace KaylaInternals {
|
|
|
369
373
|
useEffect(onEffect: KaylaFiber["onEffect"][number]): void;
|
|
370
374
|
useViewportEffect(onEffect: KaylaFiber["onViewportEffect"][number]): void;
|
|
371
375
|
useExports<T extends FC<any, any>>(_fc: T, onExport: KaylaFiber<PropOfFC<T>, ExportsOfFC<T>>["onExport"]): void;
|
|
372
|
-
useGlobalClick(onClick: KaylaFiber["onGlobalClick"][number]): void;
|
|
373
|
-
useClick(onClick: KaylaFiber["onGlobalClick"][number]): void;
|
|
376
|
+
useGlobalClick(onClick: KaylaFiber["onGlobalClick"][number]["handler"], config?: KaylaClickConfig): void;
|
|
377
|
+
useClick(onClick: KaylaFiber["onGlobalClick"][number]["handler"], config?: KaylaClickConfig): void;
|
|
374
378
|
useContext<T>(context: KaylaContext<T>): T;
|
|
375
379
|
save(): void;
|
|
376
380
|
restore(): void;
|
|
@@ -579,7 +583,7 @@ declare namespace KaylaInternals {
|
|
|
579
583
|
dynamicChildren: KaylaElement<any>[];
|
|
580
584
|
constructor(globalKayla: GlobalKayla, scene: KaylaScene, element: KaylaElement<Props>);
|
|
581
585
|
getChildrenEntities(): KaylaRectEntity[];
|
|
582
|
-
pointerHook(pos: Vector2, type: KaylaClickType): void;
|
|
586
|
+
pointerHook(pos: Vector2, type: KaylaClickType, action: KaylaPointerAction): void;
|
|
583
587
|
resizeHook({ width, height }: {
|
|
584
588
|
width: number;
|
|
585
589
|
height: number;
|
|
@@ -594,7 +598,10 @@ declare namespace KaylaInternals {
|
|
|
594
598
|
onExport: () => KaylaExports<Exports>;
|
|
595
599
|
onEffect: Array<() => (() => void) | void>;
|
|
596
600
|
onViewportEffect: Array<(renderer: KaylaRenderer, width: number, height: number) => void>;
|
|
597
|
-
onGlobalClick: Array<
|
|
601
|
+
onGlobalClick: Array<{
|
|
602
|
+
handler: (pos: Vector2, type: KaylaClickType, action: KaylaPointerAction) => void | void;
|
|
603
|
+
config: KaylaClickConfig;
|
|
604
|
+
}>;
|
|
598
605
|
onInits: Array<() => (() => void) | void>;
|
|
599
606
|
onUnInits: Array<() => (() => void) | void>;
|
|
600
607
|
onUnEffect: Array<() => void>;
|
|
@@ -926,6 +933,17 @@ declare class KaylaContext<Context> {
|
|
|
926
933
|
*/
|
|
927
934
|
declare function createContext<T>(defaultValue: T | null): KaylaContext<T>;
|
|
928
935
|
type KaylaClickType = "left" | "right" | "middle" | "invalid";
|
|
936
|
+
type KaylaPointerAction = "down" | "up" | "move" | "cancel" | "any";
|
|
937
|
+
interface KaylaClickConfig {
|
|
938
|
+
/**
|
|
939
|
+
* Default: "left"
|
|
940
|
+
*/
|
|
941
|
+
type?: Exclude<KaylaClickType, "invalid"> | "any";
|
|
942
|
+
/**
|
|
943
|
+
* Default: "down"
|
|
944
|
+
*/
|
|
945
|
+
action?: KaylaPointerAction;
|
|
946
|
+
}
|
|
929
947
|
/**
|
|
930
948
|
* Returns a stateful value wrapper with `.get()`, `.set()`, `.add()` (for numbers), etc.
|
|
931
949
|
*
|
|
@@ -1054,7 +1072,7 @@ declare const useViewportEffect: (onEffect: KaylaInternals.KaylaFiber["onViewpor
|
|
|
1054
1072
|
* }
|
|
1055
1073
|
* });
|
|
1056
1074
|
*/
|
|
1057
|
-
declare const useGlobalClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick"][number]) => void;
|
|
1075
|
+
declare const useGlobalClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick"][number]["handler"], config?: KaylaClickConfig) => void;
|
|
1058
1076
|
/**
|
|
1059
1077
|
* Registers a callback that runs **whenever the entity is clicked** (inside its bounds).
|
|
1060
1078
|
*
|
|
@@ -1077,7 +1095,7 @@ declare const useGlobalClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick
|
|
|
1077
1095
|
*
|
|
1078
1096
|
* @see {@link useGlobalClick} — for clicks anywhere (not bound to this entity)
|
|
1079
1097
|
*/
|
|
1080
|
-
declare const useClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick"][number]) => void;
|
|
1098
|
+
declare const useClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick"][number]["handler"], config?: KaylaClickConfig) => void;
|
|
1081
1099
|
/**
|
|
1082
1100
|
* Runs a one-time initialization function **exactly once** when the entity is first mounted.
|
|
1083
1101
|
*
|
|
@@ -1515,12 +1533,6 @@ declare const useNextStack: (callback: () => void) => void;
|
|
|
1515
1533
|
* }
|
|
1516
1534
|
*/
|
|
1517
1535
|
declare const KaylaFragment: FC;
|
|
1518
|
-
declare namespace JSX {
|
|
1519
|
-
type Element = KaylaElement<any>;
|
|
1520
|
-
interface IntrinsicElements {
|
|
1521
|
-
}
|
|
1522
|
-
type ElementType = FC<any>;
|
|
1523
|
-
}
|
|
1524
1536
|
/**
|
|
1525
1537
|
* Marker type for values that can be exported from a component via `useExports`.
|
|
1526
1538
|
*
|
|
@@ -1629,12 +1641,20 @@ interface KaylaCustomHookConfig<Return, Params = void> {
|
|
|
1629
1641
|
* const speed = useMoveSpeed({ baseSpeed: 200 });
|
|
1630
1642
|
*/
|
|
1631
1643
|
declare function createUseHook<Return, Params = void>(config: KaylaCustomHookConfig<Return, Params>): (params?: Params) => Return;
|
|
1644
|
+
declare namespace JSX {
|
|
1645
|
+
const id = "kayla";
|
|
1646
|
+
type Element = KaylaElement<any>;
|
|
1647
|
+
interface IntrinsicElements {
|
|
1648
|
+
}
|
|
1649
|
+
type ElementType = FC<any>;
|
|
1650
|
+
}
|
|
1632
1651
|
|
|
1633
1652
|
type Kayla_ExportsOfFC<T extends FC<any, any>> = ExportsOfFC<T>;
|
|
1634
1653
|
type Kayla_FC<Props extends FCProps = FCProps, Exports extends FCExports = FCExports> = FC<Props, Exports>;
|
|
1635
1654
|
type Kayla_FCExports = FCExports;
|
|
1636
1655
|
type Kayla_FCProps = FCProps;
|
|
1637
1656
|
declare const Kayla_JSX: typeof JSX;
|
|
1657
|
+
type Kayla_KaylaClickConfig = KaylaClickConfig;
|
|
1638
1658
|
type Kayla_KaylaClickType = KaylaClickType;
|
|
1639
1659
|
type Kayla_KaylaContext<Context> = KaylaContext<Context>;
|
|
1640
1660
|
declare const Kayla_KaylaContext: typeof KaylaContext;
|
|
@@ -1647,6 +1667,7 @@ type Kayla_KaylaFiberControl = KaylaFiberControl;
|
|
|
1647
1667
|
declare const Kayla_KaylaFragment: typeof KaylaFragment;
|
|
1648
1668
|
type Kayla_KaylaGame = KaylaGame;
|
|
1649
1669
|
declare const Kayla_KaylaInternals: typeof KaylaInternals;
|
|
1670
|
+
type Kayla_KaylaPointerAction = KaylaPointerAction;
|
|
1650
1671
|
declare const Kayla_KaylaRect: typeof KaylaRect;
|
|
1651
1672
|
type Kayla_KaylaRef<T> = KaylaRef<T>;
|
|
1652
1673
|
type Kayla_KaylaRenderer = KaylaRenderer;
|
|
@@ -1687,7 +1708,7 @@ declare const Kayla_useState: typeof useState;
|
|
|
1687
1708
|
declare const Kayla_useTick: typeof useTick;
|
|
1688
1709
|
declare const Kayla_useViewportEffect: typeof useViewportEffect;
|
|
1689
1710
|
declare namespace Kayla {
|
|
1690
|
-
export { type Kayla_ExportsOfFC as ExportsOfFC, type Kayla_FC as FC, type Kayla_FCExports as FCExports, type Kayla_FCProps as FCProps, Kayla_JSX as JSX, type Kayla_KaylaClickType as KaylaClickType, Kayla_KaylaContext as KaylaContext, type Kayla_KaylaCustomHookConfig as KaylaCustomHookConfig, type Kayla_KaylaElement as KaylaElement, type Kayla_KaylaElementRef as KaylaElementRef, type Kayla_KaylaExportables as KaylaExportables, type Kayla_KaylaExports as KaylaExports, type Kayla_KaylaFiberControl as KaylaFiberControl, Kayla_KaylaFragment as KaylaFragment, type Kayla_KaylaGame as KaylaGame, Kayla_KaylaInternals as KaylaInternals, Kayla_KaylaRect as KaylaRect, type Kayla_KaylaRef as KaylaRef, type Kayla_KaylaRenderer as KaylaRenderer, type Kayla_KaylaScene as KaylaScene, type Kayla_KaylaState as KaylaState, type Kayla_PropOfFC as PropOfFC, type Kayla_Reassignable as Reassignable, type Kayla_UnsafeKaylaFiber as UnsafeKaylaFiber, Kayla_createContext as createContext, Kayla_createElement as createElement, Kayla_createGame as createGame, Kayla_createReassignableObject as createReassignableObject, Kayla_createRenderer as createRenderer, Kayla_createScene as createScene, Kayla_createUseHook as createUseHook, selfSym as self, Kayla_setLogLevel as setLogLevel, Kayla_useClick as useClick, Kayla_useContext as useContext, Kayla_useCurrentGame as useCurrentGame, Kayla_useCurrentRenderer as useCurrentRenderer, Kayla_useCurrentScene as useCurrentScene, Kayla_useCurrentTicker as useCurrentTicker, Kayla_useDisposableRef as useDisposableRef, Kayla_useEffect as useEffect, Kayla_useEntity as useEntity, Kayla_useExports as useExports, Kayla_useFiber as useFiber, Kayla_useFiberControl as useFiberControl, Kayla_useGlobalClick as useGlobalClick, Kayla_useInitialization as useInitialization, Kayla_useNextStack as useNextStack, Kayla_usePaint as usePaint, Kayla_useRect as useRect, Kayla_useRef as useRef, Kayla_useSelf as useSelf, Kayla_useShouldRefresh as useShouldRefresh, Kayla_useState as useState, Kayla_useTick as useTick, Kayla_useViewportEffect as useViewportEffect };
|
|
1711
|
+
export { type Kayla_ExportsOfFC as ExportsOfFC, type Kayla_FC as FC, type Kayla_FCExports as FCExports, type Kayla_FCProps as FCProps, Kayla_JSX as JSX, type Kayla_KaylaClickConfig as KaylaClickConfig, type Kayla_KaylaClickType as KaylaClickType, Kayla_KaylaContext as KaylaContext, type Kayla_KaylaCustomHookConfig as KaylaCustomHookConfig, type Kayla_KaylaElement as KaylaElement, type Kayla_KaylaElementRef as KaylaElementRef, type Kayla_KaylaExportables as KaylaExportables, type Kayla_KaylaExports as KaylaExports, type Kayla_KaylaFiberControl as KaylaFiberControl, Kayla_KaylaFragment as KaylaFragment, type Kayla_KaylaGame as KaylaGame, Kayla_KaylaInternals as KaylaInternals, type Kayla_KaylaPointerAction as KaylaPointerAction, Kayla_KaylaRect as KaylaRect, type Kayla_KaylaRef as KaylaRef, type Kayla_KaylaRenderer as KaylaRenderer, type Kayla_KaylaScene as KaylaScene, type Kayla_KaylaState as KaylaState, type Kayla_PropOfFC as PropOfFC, type Kayla_Reassignable as Reassignable, type Kayla_UnsafeKaylaFiber as UnsafeKaylaFiber, Kayla_createContext as createContext, Kayla_createElement as createElement, Kayla_createGame as createGame, Kayla_createReassignableObject as createReassignableObject, Kayla_createRenderer as createRenderer, Kayla_createScene as createScene, Kayla_createUseHook as createUseHook, selfSym as self, Kayla_setLogLevel as setLogLevel, Kayla_useClick as useClick, Kayla_useContext as useContext, Kayla_useCurrentGame as useCurrentGame, Kayla_useCurrentRenderer as useCurrentRenderer, Kayla_useCurrentScene as useCurrentScene, Kayla_useCurrentTicker as useCurrentTicker, Kayla_useDisposableRef as useDisposableRef, Kayla_useEffect as useEffect, Kayla_useEntity as useEntity, Kayla_useExports as useExports, Kayla_useFiber as useFiber, Kayla_useFiberControl as useFiberControl, Kayla_useGlobalClick as useGlobalClick, Kayla_useInitialization as useInitialization, Kayla_useNextStack as useNextStack, Kayla_usePaint as usePaint, Kayla_useRect as useRect, Kayla_useRef as useRef, Kayla_useSelf as useSelf, Kayla_useShouldRefresh as useShouldRefresh, Kayla_useState as useState, Kayla_useTick as useTick, Kayla_useViewportEffect as useViewportEffect };
|
|
1691
1712
|
}
|
|
1692
1713
|
|
|
1693
|
-
export {
|
|
1714
|
+
export { useRef as $, createUseHook as A, selfSym as B, setLogLevel as C, useClick as D, type ExportsOfFC as E, type FCProps as F, useContext as G, useCurrentGame as H, useCurrentRenderer as I, JSX as J, Kayla as K, useCurrentScene as L, useCurrentTicker as M, useDisposableRef as N, useEffect as O, type PropOfFC as P, useEntity as Q, type Reassignable as R, useExports as S, useFiber as T, type UnsafeKaylaFiber as U, useFiberControl as V, useGlobalClick as W, useInitialization as X, useNextStack as Y, usePaint as Z, useRect as _, type FCExports as a, useSelf as a0, useShouldRefresh as a1, useState as a2, useTick as a3, useViewportEffect as a4, type FC as b, type KaylaClickConfig as c, type KaylaClickType as d, KaylaContext as e, type KaylaCustomHookConfig as f, type KaylaElement as g, type KaylaElementRef as h, type KaylaExportables as i, type KaylaExports as j, type KaylaFiberControl as k, KaylaFragment as l, KaylaGame as m, KaylaInternals as n, type KaylaPointerAction as o, KaylaRect as p, type KaylaRef as q, KaylaRenderer as r, KaylaScene as s, type KaylaState as t, createContext as u, createElement as v, createGame as w, createReassignableObject as x, createRenderer as y, createScene as z };
|
|
@@ -298,11 +298,15 @@ declare namespace KaylaInternals {
|
|
|
298
298
|
* Pointer related event-emitter
|
|
299
299
|
*/
|
|
300
300
|
protected pointerEvents: LeaEventEmitter<{
|
|
301
|
-
|
|
301
|
+
action: [Vector2, KaylaClickType, KaylaPointerAction];
|
|
302
302
|
}>;
|
|
303
|
+
onPointerDown: (e: PointerEvent) => void;
|
|
304
|
+
onPointerUp: (e: PointerEvent) => void;
|
|
305
|
+
onPointerCancel: (e: PointerEvent) => void;
|
|
306
|
+
onPointerMove: (e: PointerEvent) => void;
|
|
303
307
|
constructor(canvas: HTMLCanvasElement);
|
|
304
308
|
protected pointerPosUpdater(e: PointerEvent): void;
|
|
305
|
-
protected
|
|
309
|
+
protected onPointerAll(e: PointerEvent, action: KaylaPointerAction): void;
|
|
306
310
|
static getClickType(e: PointerEvent): KaylaClickType;
|
|
307
311
|
listenPointerUpdates(): void;
|
|
308
312
|
unlistenPointerUpdates(): void;
|
|
@@ -369,8 +373,8 @@ declare namespace KaylaInternals {
|
|
|
369
373
|
useEffect(onEffect: KaylaFiber["onEffect"][number]): void;
|
|
370
374
|
useViewportEffect(onEffect: KaylaFiber["onViewportEffect"][number]): void;
|
|
371
375
|
useExports<T extends FC<any, any>>(_fc: T, onExport: KaylaFiber<PropOfFC<T>, ExportsOfFC<T>>["onExport"]): void;
|
|
372
|
-
useGlobalClick(onClick: KaylaFiber["onGlobalClick"][number]): void;
|
|
373
|
-
useClick(onClick: KaylaFiber["onGlobalClick"][number]): void;
|
|
376
|
+
useGlobalClick(onClick: KaylaFiber["onGlobalClick"][number]["handler"], config?: KaylaClickConfig): void;
|
|
377
|
+
useClick(onClick: KaylaFiber["onGlobalClick"][number]["handler"], config?: KaylaClickConfig): void;
|
|
374
378
|
useContext<T>(context: KaylaContext<T>): T;
|
|
375
379
|
save(): void;
|
|
376
380
|
restore(): void;
|
|
@@ -579,7 +583,7 @@ declare namespace KaylaInternals {
|
|
|
579
583
|
dynamicChildren: KaylaElement<any>[];
|
|
580
584
|
constructor(globalKayla: GlobalKayla, scene: KaylaScene, element: KaylaElement<Props>);
|
|
581
585
|
getChildrenEntities(): KaylaRectEntity[];
|
|
582
|
-
pointerHook(pos: Vector2, type: KaylaClickType): void;
|
|
586
|
+
pointerHook(pos: Vector2, type: KaylaClickType, action: KaylaPointerAction): void;
|
|
583
587
|
resizeHook({ width, height }: {
|
|
584
588
|
width: number;
|
|
585
589
|
height: number;
|
|
@@ -594,7 +598,10 @@ declare namespace KaylaInternals {
|
|
|
594
598
|
onExport: () => KaylaExports<Exports>;
|
|
595
599
|
onEffect: Array<() => (() => void) | void>;
|
|
596
600
|
onViewportEffect: Array<(renderer: KaylaRenderer, width: number, height: number) => void>;
|
|
597
|
-
onGlobalClick: Array<
|
|
601
|
+
onGlobalClick: Array<{
|
|
602
|
+
handler: (pos: Vector2, type: KaylaClickType, action: KaylaPointerAction) => void | void;
|
|
603
|
+
config: KaylaClickConfig;
|
|
604
|
+
}>;
|
|
598
605
|
onInits: Array<() => (() => void) | void>;
|
|
599
606
|
onUnInits: Array<() => (() => void) | void>;
|
|
600
607
|
onUnEffect: Array<() => void>;
|
|
@@ -926,6 +933,17 @@ declare class KaylaContext<Context> {
|
|
|
926
933
|
*/
|
|
927
934
|
declare function createContext<T>(defaultValue: T | null): KaylaContext<T>;
|
|
928
935
|
type KaylaClickType = "left" | "right" | "middle" | "invalid";
|
|
936
|
+
type KaylaPointerAction = "down" | "up" | "move" | "cancel" | "any";
|
|
937
|
+
interface KaylaClickConfig {
|
|
938
|
+
/**
|
|
939
|
+
* Default: "left"
|
|
940
|
+
*/
|
|
941
|
+
type?: Exclude<KaylaClickType, "invalid"> | "any";
|
|
942
|
+
/**
|
|
943
|
+
* Default: "down"
|
|
944
|
+
*/
|
|
945
|
+
action?: KaylaPointerAction;
|
|
946
|
+
}
|
|
929
947
|
/**
|
|
930
948
|
* Returns a stateful value wrapper with `.get()`, `.set()`, `.add()` (for numbers), etc.
|
|
931
949
|
*
|
|
@@ -1054,7 +1072,7 @@ declare const useViewportEffect: (onEffect: KaylaInternals.KaylaFiber["onViewpor
|
|
|
1054
1072
|
* }
|
|
1055
1073
|
* });
|
|
1056
1074
|
*/
|
|
1057
|
-
declare const useGlobalClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick"][number]) => void;
|
|
1075
|
+
declare const useGlobalClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick"][number]["handler"], config?: KaylaClickConfig) => void;
|
|
1058
1076
|
/**
|
|
1059
1077
|
* Registers a callback that runs **whenever the entity is clicked** (inside its bounds).
|
|
1060
1078
|
*
|
|
@@ -1077,7 +1095,7 @@ declare const useGlobalClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick
|
|
|
1077
1095
|
*
|
|
1078
1096
|
* @see {@link useGlobalClick} — for clicks anywhere (not bound to this entity)
|
|
1079
1097
|
*/
|
|
1080
|
-
declare const useClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick"][number]) => void;
|
|
1098
|
+
declare const useClick: (onClick: KaylaInternals.KaylaFiber["onGlobalClick"][number]["handler"], config?: KaylaClickConfig) => void;
|
|
1081
1099
|
/**
|
|
1082
1100
|
* Runs a one-time initialization function **exactly once** when the entity is first mounted.
|
|
1083
1101
|
*
|
|
@@ -1515,12 +1533,6 @@ declare const useNextStack: (callback: () => void) => void;
|
|
|
1515
1533
|
* }
|
|
1516
1534
|
*/
|
|
1517
1535
|
declare const KaylaFragment: FC;
|
|
1518
|
-
declare namespace JSX {
|
|
1519
|
-
type Element = KaylaElement<any>;
|
|
1520
|
-
interface IntrinsicElements {
|
|
1521
|
-
}
|
|
1522
|
-
type ElementType = FC<any>;
|
|
1523
|
-
}
|
|
1524
1536
|
/**
|
|
1525
1537
|
* Marker type for values that can be exported from a component via `useExports`.
|
|
1526
1538
|
*
|
|
@@ -1629,12 +1641,20 @@ interface KaylaCustomHookConfig<Return, Params = void> {
|
|
|
1629
1641
|
* const speed = useMoveSpeed({ baseSpeed: 200 });
|
|
1630
1642
|
*/
|
|
1631
1643
|
declare function createUseHook<Return, Params = void>(config: KaylaCustomHookConfig<Return, Params>): (params?: Params) => Return;
|
|
1644
|
+
declare namespace JSX {
|
|
1645
|
+
const id = "kayla";
|
|
1646
|
+
type Element = KaylaElement<any>;
|
|
1647
|
+
interface IntrinsicElements {
|
|
1648
|
+
}
|
|
1649
|
+
type ElementType = FC<any>;
|
|
1650
|
+
}
|
|
1632
1651
|
|
|
1633
1652
|
type Kayla_ExportsOfFC<T extends FC<any, any>> = ExportsOfFC<T>;
|
|
1634
1653
|
type Kayla_FC<Props extends FCProps = FCProps, Exports extends FCExports = FCExports> = FC<Props, Exports>;
|
|
1635
1654
|
type Kayla_FCExports = FCExports;
|
|
1636
1655
|
type Kayla_FCProps = FCProps;
|
|
1637
1656
|
declare const Kayla_JSX: typeof JSX;
|
|
1657
|
+
type Kayla_KaylaClickConfig = KaylaClickConfig;
|
|
1638
1658
|
type Kayla_KaylaClickType = KaylaClickType;
|
|
1639
1659
|
type Kayla_KaylaContext<Context> = KaylaContext<Context>;
|
|
1640
1660
|
declare const Kayla_KaylaContext: typeof KaylaContext;
|
|
@@ -1647,6 +1667,7 @@ type Kayla_KaylaFiberControl = KaylaFiberControl;
|
|
|
1647
1667
|
declare const Kayla_KaylaFragment: typeof KaylaFragment;
|
|
1648
1668
|
type Kayla_KaylaGame = KaylaGame;
|
|
1649
1669
|
declare const Kayla_KaylaInternals: typeof KaylaInternals;
|
|
1670
|
+
type Kayla_KaylaPointerAction = KaylaPointerAction;
|
|
1650
1671
|
declare const Kayla_KaylaRect: typeof KaylaRect;
|
|
1651
1672
|
type Kayla_KaylaRef<T> = KaylaRef<T>;
|
|
1652
1673
|
type Kayla_KaylaRenderer = KaylaRenderer;
|
|
@@ -1687,7 +1708,7 @@ declare const Kayla_useState: typeof useState;
|
|
|
1687
1708
|
declare const Kayla_useTick: typeof useTick;
|
|
1688
1709
|
declare const Kayla_useViewportEffect: typeof useViewportEffect;
|
|
1689
1710
|
declare namespace Kayla {
|
|
1690
|
-
export { type Kayla_ExportsOfFC as ExportsOfFC, type Kayla_FC as FC, type Kayla_FCExports as FCExports, type Kayla_FCProps as FCProps, Kayla_JSX as JSX, type Kayla_KaylaClickType as KaylaClickType, Kayla_KaylaContext as KaylaContext, type Kayla_KaylaCustomHookConfig as KaylaCustomHookConfig, type Kayla_KaylaElement as KaylaElement, type Kayla_KaylaElementRef as KaylaElementRef, type Kayla_KaylaExportables as KaylaExportables, type Kayla_KaylaExports as KaylaExports, type Kayla_KaylaFiberControl as KaylaFiberControl, Kayla_KaylaFragment as KaylaFragment, type Kayla_KaylaGame as KaylaGame, Kayla_KaylaInternals as KaylaInternals, Kayla_KaylaRect as KaylaRect, type Kayla_KaylaRef as KaylaRef, type Kayla_KaylaRenderer as KaylaRenderer, type Kayla_KaylaScene as KaylaScene, type Kayla_KaylaState as KaylaState, type Kayla_PropOfFC as PropOfFC, type Kayla_Reassignable as Reassignable, type Kayla_UnsafeKaylaFiber as UnsafeKaylaFiber, Kayla_createContext as createContext, Kayla_createElement as createElement, Kayla_createGame as createGame, Kayla_createReassignableObject as createReassignableObject, Kayla_createRenderer as createRenderer, Kayla_createScene as createScene, Kayla_createUseHook as createUseHook, selfSym as self, Kayla_setLogLevel as setLogLevel, Kayla_useClick as useClick, Kayla_useContext as useContext, Kayla_useCurrentGame as useCurrentGame, Kayla_useCurrentRenderer as useCurrentRenderer, Kayla_useCurrentScene as useCurrentScene, Kayla_useCurrentTicker as useCurrentTicker, Kayla_useDisposableRef as useDisposableRef, Kayla_useEffect as useEffect, Kayla_useEntity as useEntity, Kayla_useExports as useExports, Kayla_useFiber as useFiber, Kayla_useFiberControl as useFiberControl, Kayla_useGlobalClick as useGlobalClick, Kayla_useInitialization as useInitialization, Kayla_useNextStack as useNextStack, Kayla_usePaint as usePaint, Kayla_useRect as useRect, Kayla_useRef as useRef, Kayla_useSelf as useSelf, Kayla_useShouldRefresh as useShouldRefresh, Kayla_useState as useState, Kayla_useTick as useTick, Kayla_useViewportEffect as useViewportEffect };
|
|
1711
|
+
export { type Kayla_ExportsOfFC as ExportsOfFC, type Kayla_FC as FC, type Kayla_FCExports as FCExports, type Kayla_FCProps as FCProps, Kayla_JSX as JSX, type Kayla_KaylaClickConfig as KaylaClickConfig, type Kayla_KaylaClickType as KaylaClickType, Kayla_KaylaContext as KaylaContext, type Kayla_KaylaCustomHookConfig as KaylaCustomHookConfig, type Kayla_KaylaElement as KaylaElement, type Kayla_KaylaElementRef as KaylaElementRef, type Kayla_KaylaExportables as KaylaExportables, type Kayla_KaylaExports as KaylaExports, type Kayla_KaylaFiberControl as KaylaFiberControl, Kayla_KaylaFragment as KaylaFragment, type Kayla_KaylaGame as KaylaGame, Kayla_KaylaInternals as KaylaInternals, type Kayla_KaylaPointerAction as KaylaPointerAction, Kayla_KaylaRect as KaylaRect, type Kayla_KaylaRef as KaylaRef, type Kayla_KaylaRenderer as KaylaRenderer, type Kayla_KaylaScene as KaylaScene, type Kayla_KaylaState as KaylaState, type Kayla_PropOfFC as PropOfFC, type Kayla_Reassignable as Reassignable, type Kayla_UnsafeKaylaFiber as UnsafeKaylaFiber, Kayla_createContext as createContext, Kayla_createElement as createElement, Kayla_createGame as createGame, Kayla_createReassignableObject as createReassignableObject, Kayla_createRenderer as createRenderer, Kayla_createScene as createScene, Kayla_createUseHook as createUseHook, selfSym as self, Kayla_setLogLevel as setLogLevel, Kayla_useClick as useClick, Kayla_useContext as useContext, Kayla_useCurrentGame as useCurrentGame, Kayla_useCurrentRenderer as useCurrentRenderer, Kayla_useCurrentScene as useCurrentScene, Kayla_useCurrentTicker as useCurrentTicker, Kayla_useDisposableRef as useDisposableRef, Kayla_useEffect as useEffect, Kayla_useEntity as useEntity, Kayla_useExports as useExports, Kayla_useFiber as useFiber, Kayla_useFiberControl as useFiberControl, Kayla_useGlobalClick as useGlobalClick, Kayla_useInitialization as useInitialization, Kayla_useNextStack as useNextStack, Kayla_usePaint as usePaint, Kayla_useRect as useRect, Kayla_useRef as useRef, Kayla_useSelf as useSelf, Kayla_useShouldRefresh as useShouldRefresh, Kayla_useState as useState, Kayla_useTick as useTick, Kayla_useViewportEffect as useViewportEffect };
|
|
1691
1712
|
}
|
|
1692
1713
|
|
|
1693
|
-
export {
|
|
1714
|
+
export { useRef as $, createUseHook as A, selfSym as B, setLogLevel as C, useClick as D, type ExportsOfFC as E, type FCProps as F, useContext as G, useCurrentGame as H, useCurrentRenderer as I, JSX as J, Kayla as K, useCurrentScene as L, useCurrentTicker as M, useDisposableRef as N, useEffect as O, type PropOfFC as P, useEntity as Q, type Reassignable as R, useExports as S, useFiber as T, type UnsafeKaylaFiber as U, useFiberControl as V, useGlobalClick as W, useInitialization as X, useNextStack as Y, usePaint as Z, useRect as _, type FCExports as a, useSelf as a0, useShouldRefresh as a1, useState as a2, useTick as a3, useViewportEffect as a4, type FC as b, type KaylaClickConfig as c, type KaylaClickType as d, KaylaContext as e, type KaylaCustomHookConfig as f, type KaylaElement as g, type KaylaElementRef as h, type KaylaExportables as i, type KaylaExports as j, type KaylaFiberControl as k, KaylaFragment as l, KaylaGame as m, KaylaInternals as n, type KaylaPointerAction as o, KaylaRect as p, type KaylaRef as q, KaylaRenderer as r, KaylaScene as s, type KaylaState as t, createContext as u, createElement as v, createGame as w, createReassignableObject as x, createRenderer as y, createScene as z };
|
package/dist/kayla.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var ge=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var ct=Object.prototype.hasOwnProperty;var xe=(r,e)=>{for(var n in e)ge(r,n,{get:e[n],enumerable:!0})},dt=(r,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ht(e))!ct.call(r,s)&&s!==n&&ge(r,s,{get:()=>e[s],enumerable:!(i=lt(e,s))||i.enumerable});return r};var ft=r=>dt(ge({},"__esModule",{value:!0}),r);var Et={};xe(Et,{Kayla:()=>pe,KaylaContext:()=>W,KaylaFragment:()=>nt,KaylaInternals:()=>V,KaylaRect:()=>F,LEA:()=>ue,UI:()=>ot,createContext:()=>Oe,createElement:()=>Ne,createGame:()=>ze,createReassignableObject:()=>it,createRenderer:()=>$e,createScene:()=>Ue,createUseHook:()=>at,self:()=>he,setLogLevel:()=>st,useClick:()=>We,useContext:()=>tt,useCurrentGame:()=>Qe,useCurrentRenderer:()=>Je,useCurrentScene:()=>Ze,useCurrentTicker:()=>et,useDisposableRef:()=>rt,useEffect:()=>ce,useEntity:()=>je,useExports:()=>J,useFiber:()=>Ee,useFiberControl:()=>de,useGlobalClick:()=>Ce,useInitialization:()=>Y,useNextStack:()=>fe,usePaint:()=>Q,useRect:()=>j,useRef:()=>le,useSelf:()=>L,useShouldRefresh:()=>qe,useState:()=>Xe,useTick:()=>Ye,useViewportEffect:()=>Be});module.exports=ft(Et);var pe={};xe(pe,{KaylaContext:()=>W,KaylaFragment:()=>nt,KaylaInternals:()=>V,KaylaRect:()=>F,createContext:()=>Oe,createElement:()=>Ne,createGame:()=>ze,createReassignableObject:()=>it,createRenderer:()=>$e,createScene:()=>Ue,createUseHook:()=>at,self:()=>he,setLogLevel:()=>st,useClick:()=>We,useContext:()=>tt,useCurrentGame:()=>Qe,useCurrentRenderer:()=>Je,useCurrentScene:()=>Ze,useCurrentTicker:()=>et,useDisposableRef:()=>rt,useEffect:()=>ce,useEntity:()=>je,useExports:()=>J,useFiber:()=>Ee,useFiberControl:()=>de,useGlobalClick:()=>Ce,useInitialization:()=>Y,useNextStack:()=>fe,usePaint:()=>Q,useRect:()=>j,useRef:()=>le,useSelf:()=>L,useShouldRefresh:()=>qe,useState:()=>Xe,useTick:()=>Ye,useViewportEffect:()=>Be});var ue={};xe(ue,{DeltaTweenII:()=>se,ENVIRONMENT:()=>ve,GEmitterMemory:()=>we,LeaEntityII:()=>z,LeaEventEmitter:()=>T,LeaGameII:()=>X,LeaRendererII:()=>N,LeaSceneII:()=>O,LeaSerializers:()=>ke,LeaTickerII:()=>ie,LeaTimeout:()=>ae,LeaUtilsII:()=>R,LiaAudio:()=>U,LiaAudioSrc:()=>H,LiaOscSFX:()=>_,LiaSFXMap:()=>xt,NOTE_NAMES:()=>Se,RectLeaEntity:()=>q,Vector2:()=>A,colToRGBA:()=>mt,defaultSFXConfig:()=>Ie,editRGBA:()=>yt,generateUUID:()=>Le,getAvoidAngle:()=>Ge,getEnvironment:()=>Te,getNormalizedColor:()=>pt,getRayHit:()=>De,isInitiallyMobile:()=>Ct,isMobile:()=>He,isNode:()=>B,isNote:()=>gt,isWeb:()=>C,parseFillStyle:()=>Ke,raycastAvoid:()=>vt,scaleCoord:()=>bt,setAnimInterval:()=>Ve,sfxHit:()=>_e,sfxJump:()=>Me,sfxLaser:()=>Ae,sfxUIClick:()=>Fe,sfxUIHover:()=>Pe,shortUID:()=>wt,tinyUID:()=>oe});var T=class{#e=new Map;constructor(){this.#e=new Map}on(e,n){let i=this.#e.get(e)||[];return i.push(n),this.#e.set(e,i),this}once(e,n){let i=(...s)=>{this.off(e,i),n(...s)};return this.on(e,i),this}off(e,n){let i=this.#e.get(e);if(!i)return this;let s=i.indexOf(n);return s>=0&&i.splice(s,1),this}emit(e,...n){let i=this.#e.get(e);if(!i||i.length===0){if(e==="error")throw n[0];return!1}return i.slice().forEach(s=>s(...n)),!0}removeAllListeners(e){return e?this.#e.delete(e):this.#e.clear(),this}listenerCount(e){return this.#e.get(e)?.length??0}},N=class extends T{canvas;ctx;running;_rafId;_fps;_frameCount;_fpsTimer;_lastFrameTime;constructor(e,{viewportWidth:n,viewportHeight:i,cameraWidth:s,cameraHeight:o}={}){if(!C)throw new Error("Web-Only");super(),this.canvas=e,this.ctx=e.getContext("2d"),this.automatic=!0,this.#e=n??e.width,this.#t=i??e.height,this.#n=s??e.width,this.#r=o??e.height,this.running=!1,this._rafId=null,this._loop=this._loop.bind(this),this.updateCanvasResolution(),this._fps=60,this._frameCount=0,this._fpsTimer=0}automatic;retransform(){this.ctx.setTransform(1,0,0,1,0,0);let e=this.#n/this.#e,n=this.#r/this.#t;this.ctx.translate(this.#n/2,this.#r/2),this.ctx.scale(e,n),this.ctx.translate(-this.#e/2,-this.#t/2)}#e=0;#t=0;#n=0;#r=0;get viewportWidth(){return this.#e}set viewportWidth(e){this.#e=e,this.retransform(),this.emitViewportUpdate()}get width(){return this.#e}get height(){return this.#t}get centerX(){return this.#e/2}get centerY(){return this.#t/2}get left(){return 0}get top(){return 0}get right(){return this.#e}get bottom(){return this.#t}get viewportHeight(){return this.#t}set viewportHeight(e){this.#t=e,this.retransform(),this.emitViewportUpdate()}get cameraWidth(){return this.#n}set cameraWidth(e){this.#n=e,this.updateCanvasResolution(),this.retransform()}get cameraHeight(){return this.#r}set cameraHeight(e){this.#r=e,this.updateCanvasResolution(),this.retransform()}updateCanvasResolution(){this.canvas.width=this.#n,this.canvas.height=this.#r}emitViewportUpdate(){this.emit("viewport_update",{width:this.viewportWidth,height:this.viewportHeight})}applyTransform(){this.retransform()}get FPS(){return this._fps}_loop(){this.automatic&&this.update(),this._rafId=requestAnimationFrame(this._loop)}update(){if(!this.running||!C)return;let e=performance.now(),n=(e-(this._lastFrameTime??e))/1e3;this._lastFrameTime=e,this._frameCount++,this._fpsTimer+=n,this._fpsTimer>=1&&(this._fps=Math.round(this._frameCount/this._fpsTimer),this._frameCount=0,this._fpsTimer=0),this.ctx.clearRect(0,0,this.#n,this.#r),this.emit("draw",this.ctx)}start(){if(!this.running){if(!C||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!0,this._rafId=requestAnimationFrame(this._loop)}}stop(){if(!C||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!1,this._rafId!==null&&(cancelAnimationFrame(this._rafId),this._rafId=null)}},ie=class extends T{setNow(e){this.#e=e}#e=0;__intervalId=null;__lastTime=0;constructor(e=16){super(),this.#t=e,this.speedHackDT=1}speedHackDT;get isRaf(){return this.tickInterval===1/0}#t=15;get tickInterval(){return this.#t}set tickInterval(e){this.#t=e,this.__intervalId&&(this.stop(),this.start())}now(){return this.#e}__tick(){let e=performance.now(),n=(e-this.__lastTime)/1e3*this.speedHackDT;this.__lastTime=e,!(C&&typeof this.__intervalId=="function"&&document.hidden)&&(this.#e+=n*1e3,this.emit("tick",n))}createTimeout(e){return new ae(e,this)}createTween(e,n=()=>{}){let i=new se(e),s=(o=0)=>{if(i.finished){this.off("tick",s);return}i.update(o)};return i.on("finish",()=>{this.off("tick",s)}),i.on("delta",o=>{n(o)}),this.on("tick",s),i}start(){this.__intervalId===null&&(this.__lastTime=performance.now(),this.__intervalId=C&&!isFinite(this.tickInterval)?Ve(()=>this.__tick()).clear:setInterval(()=>this.__tick(),this.tickInterval))}stop(){this.__intervalId!==null&&(typeof this.__intervalId=="function"?this.__intervalId():clearInterval(this.__intervalId)),this.__intervalId=null}getSineMod(e,n=0){return .5+.5*Math.sin((this.now()%e/e+n)*2*Math.PI)}},ke;(t=>{function r(a){return a===!0?1:0}t.booleanExport=r;function e(a){return a===0?!1:a===1}t.booleanImport=e;function n(a){return`${a.x}|${a.y}`}t.vec2Export=n;function i(a){let[l,f]=a.split("|"),y=parseFloat(l),w=parseFloat(f);if(isNaN(y)||isNaN(w))throw new Error(`Invalid Vector2 string: ${a}`);return new A(y,w)}t.vec2Import=i,t.booleanMap={mapExport:r,mapImport:e};function o(a){return l=>Number(l.toFixed(a))}t.createRounder=o;function c(a=10){return{mapExport(l){return Math.round(l/a)},mapImport(l){return l*a}}}t.createLowPrecision=c;function d(a){return Math.round(a)}t.lightWeightRounder=d;function u(a=100){return{mapExport(l){return Math.round(l*a)},mapImport(l){return l/a}}}t.createPercent=u;function h(a){let l=new Map(Object.entries(a));return{mapExport:f=>l.get(f)??null,mapImport:f=>Array.from(l.entries()).find(([y,w])=>w===f)?.[0]??null}}t.createLookup=h;function p(a){let l=a*(180/Math.PI);return Math.round((l%360+360)%360)}t.radToDeg=p;function b(a){return a*(Math.PI/180)}t.degToRad=b,t.angleRadToDeg={mapExport:p,mapImport:b};function x(a=10){let l=c(a);return{mapExport(f){return l.mapExport(p(f))},mapImport(f){return l.mapImport(b(f))}}}t.createLowPrecisionRadToDeg=x})(ke||={});var z=class r extends T{name="";scaleRotate=0;scale=1;constructor(e,n=0,i=0){super(),this.autoTranslate=!1,this.name=e,this.z=0,this.___pos=new A(n,i),this.nonSerializableProperties=[],this.nonSerializableProperties.push("___pos","autoTranslate","arraySerializeMap"),this.forceSerializableProperties=[],this.forceSerializableProperties.push("x","y")}arraySerializeMap;autoTranslate;z;___pos;nonSerializableProperties;forceSerializableProperties;get pos(){return this.___pos}get x(){return this.pos.x}get y(){return this.pos.y}set x(e){this.pos.x=e}set y(e){this.pos.y=e}handleUpdate(e){if(this.update)try{this.emit("update",e),this.update(e)}catch(n){this.emit("error",n)}}handleDraw(e){if(!(B||!this.draw)){e.save(),this.autoTranslate&&e.translate(this.x,this.y);try{this.emit("draw",e),this.draw(e)}catch(n){this.emit("error",n)}e.restore()}}serialize(){if(Array.isArray(this.arraySerializeMap))return this.arraySerializeMap.map(([s,{mapExport:o}])=>{let c=Reflect.get(this,s);return o?o(c):c});let e=["_events","_eventsCount","_maxListeners","nonSerializableProperties","forceSerializableProperties"],n=[...Reflect.ownKeys(this),...this.forceSerializableProperties].filter(s=>!this.nonSerializableProperties.includes(s)&&!e.includes(s.toString())),i=Object.fromEntries(n.map(s=>{let o=Reflect.get(this,s);if(B&&typeof o=="number"){let c=o.toString().split("."),u=(c[1]?c[1].length:0)>2?Number(o.toFixed(2)):o;return[s,u]}return[s,o]}));return JSON.parse(JSON.stringify(i))}toLocal(e){return e.subtract(this.pos)}toWorld(e){return e.add(this.pos)}deserializeArray(e){return r.deserializeArray(this.arraySerializeMap,e)}static deserializeArray(e,n){if(!e||!Array.isArray(n))return n;let i={};for(let s=0;s<n.length;s++){let o=e[s];if(!o)break;let[c,{mapImport:d}]=o,u=n[s];if(d&&(u=d(u)),typeof c!="string")break;try{Reflect.set(i,c,u)}catch(h){console.error(h)}}return i}},O=class extends T{name="";entities=new Map;paused=!0;constructor(e){super(),this.name=e}handleUpdate(e){if(!this.paused){this.emit("update",e);for(let n of this.entities.values())n.handleUpdate(e)}}handleDraw(e){if(!B&&!this.paused){this.emit("draw",e);for(let n of[...this.entities.values()].sort((i,s)=>i.z-s.z))n.handleDraw(e)}}addEntity(e){if(!(e instanceof z))throw new Error("invalid entity");if(!e.name)throw new Error("Entity must have a name.");this.entities.set(e.name,e)}removeEntity(e){if(!(e instanceof z))throw new Error("invalid entity");this.entities.delete(e.name)}getEntity(e){return this.entities.get(e)}},X=class{scenes;ticker;get centerX(){return this.width/2}get centerY(){return this.height/2}get left(){return 0}get top(){return 0}get right(){return this.width}get bottom(){return this.height}width;height;constructor(e,n,i=16){this.ticker=new ie(i),this.scenes=new Map,this.width=e,this.height=n,this.ticker.on("tick",s=>{for(let o of this.scenes.values())o.paused||o.handleUpdate(s)})}addScene(e){if(!e.name)throw new Error("Scene must have a name.");e.paused=!1,this.scenes.set(e.name,e)}removeScene(e){e&&(e.paused=!0),this.scenes.delete(e.name)}now(){return this.ticker.now()}start(){this.ticker.start()}stop(){this.ticker.stop()}},R={lerp(r,e,n){return r+(e-r)*n},clamp(r,e,n){return Math.min(n,Math.max(e,r))},clamp01(r){return Math.min(1,Math.max(0,r))},easeLinear(r){return r},easeInQuad(r){return r*r},easeOutQuad(r){return 1-(1-r)*(1-r)},easeInOutQuad(r){return r<.5?2*r*r:1-Math.pow(-2*r+2,2)/2},easeInSine(r){return 1-Math.cos(r*Math.PI/2)},easeOutSine(r){return Math.sin(r*Math.PI/2)},easeInOutSine(r){return-(Math.cos(Math.PI*r)-1)/2},easeInExpo(r){return r===0?0:Math.pow(2,10*r-10)},easeOutExpo(r){return r===1?1:1-Math.pow(2,-10*r)},easeInOutExpo(r){return r===0?0:r===1?1:r<.5?Math.pow(2,20*r-10)/2:(2-Math.pow(2,-20*r+10))/2},smoothstep(r){return r=R.clamp(r,0,1),r*r*(3-2*r)},randomLerp(r,e){return R.lerp(r,e,Math.random())},randomInt(r,e){return Math.floor(Math.random()*(e-r+1))+r},randomArrayValue(r){return r[R.randomInt(0,r.length-1)]},createBezier(r,e,n,i){function s(d,u,h,p,b){let g=1-d;return g*g*g*u+3*g*g*d*h+3*g*d*d*p+d*d*d*b}function o(d,u,h,p,b){let g=1-d;return 3*g*g*(h-u)+6*g*d*(p-h)+3*d*d*(b-p)}function c(d){let u=d;for(let h=0;h<6;h++){let p=s(u,0,r,n,1),b=o(u,0,r,n,1);if(b===0)break;u-=(p-d)/b}return R.clamp(u,0,1)}return function(u){u=R.clamp(u,0,1);let h=c(u);return s(h,0,e,i,1)}},lengthSquared(...r){return r.reduce((e,n)=>e+n*n,0)},normalizeRad(r){let e=2*Math.PI;return r=r%e,r<0&&(r+=e),r},angleInvertY(r){return R.normalizeRad(-r)},degToRadFlipY(r){return R.angleInvertY(r*Math.PI/180)},minimalAngularDirection(r,e){r=R.normalizeRad(r),e=R.normalizeRad(e);let n=R.normalizeRad(e-r),i=R.normalizeRad(r-e);return n<=i?1:-1}},se=class extends T{constructor({delta:e,ms:n,easing:i}){super(),this.delta=e,this.duration=n,this.elapsed=0,this.easing=i??(s=>s),this.lastValue=0,this.finished=!1}delta;duration;elapsed;lastValue;finished;easing;update(e){this.elapsed+=e*1e3;let n=R.clamp(this.elapsed/this.duration,0,1),i=this.easing(n),s=this.delta*i,o=s-this.lastValue;this.lastValue=s,this.emit("delta",o),n>=1&&(this.finished=!0,this.emit("finish",void 0))}},q=class extends z{constructor(e,n=0,i=0,s=50,o=50){super(e,n,i),this.width=s,this.height=o}width;height;get left(){return this.x-this.width/2}set left(e){this.x=e+this.width/2}get right(){return this.x+this.width/2}set right(e){this.x=e-this.width/2}get top(){return this.y-this.height/2}set top(e){this.y=e+this.height/2}get bottom(){return this.y+this.height/2}set bottom(e){this.y=e-this.height/2}get lx(){return 0}get ly(){return 0}get lleft(){return-this.width/2}get lright(){return this.width/2}get ltop(){return-this.height/2}get lbottom(){return this.height/2}isCollidingWith(e){return!(this.right<e.left||this.left>e.right||this.bottom<e.top||this.top>e.bottom)}color="rgba(0, 0, 255, 0.3)";draw(e){e.translate(this.x,this.y),e.rotate(this.scaleRotate),e.fillStyle=this.color,e.fillRect(-this.width/2,-this.height/2,this.width,this.height)}},ae=class extends T{duration;ticker;elapsed;finished;_resolve;promise;_timeoutId;constructor(e,n=null){super(),this.duration=e,this.ticker=n,this.elapsed=0,this.finished=!1,this._resolve=null,this.promise=new Promise(i=>this._resolve=i),this.update=this.update.bind(this),this.ticker&&this.ticker.on("tick",this.update)}update(e=0){this.finished||(this.elapsed+=e*1e3,this.elapsed>=this.duration&&this.finish())}finish(){this.finished||(this.finished=!0,this.emit("finish",void 0),this._resolve&&this._resolve(),this.ticker&&this.ticker.off("tick",this.update))}start(){return this.ticker||(this._timeoutId=setTimeout(()=>this.finish(),this.duration)),this}cancel(){this.finished||(this.finished=!0,!this.ticker&&this._timeoutId!=null&&clearTimeout(this._timeoutId),this.ticker&&this.ticker.off("tick",this.update))}then(e,n){return this.promise.then(e,n)}after(e,n){return this.promise.then(e,n)}},A=class r{constructor(e=0,n=0){this.x=e,this.y=n}x;y;toJSON(){return{x:this.x,y:this.y,vec2:!0}}static isVec2(e){return e&&typeof e=="object"&&"x"in e&&"y"in e&&e.vec2===!0}static fromSerialized(e){return this.isVec2(e)?new this(e.x,e.y):null}rotate(e){let n=Math.cos(e),i=Math.sin(e);return new r(this.x*n-this.y*i,this.x*i+this.y*n)}static from(e){return new r(Math.cos(e),Math.sin(e))}isEmpty(){return Math.abs(this.x)<.01&&Math.abs(this.y)<.01}get angle(){return Math.atan2(this.y,this.x)}angleTo(e){return Math.atan2(e.y-this.y,e.x-this.x)}get length(){return Math.hypot(this.x,this.y)}get lengthSquared(){return this.x*this.x+this.y*this.y}normalized(){let e=this.length;return e===0?new r(0,0):new r(this.x/e,this.y/e)}consume(e){let n=this.length;n<=e?(this.x=0,this.y=0):this.overwite(this.scale((n-e)/n))}project(e){return e.scale(this.dotNormalized(e))}reflect(e){let n=this.dot(e);return this.subtract(e.scale(2*n))}dotNormalized(e){let n=this.normalized(),i=e.normalized();return n.x*i.x+n.y*i.y}lengthSquaredTo(e){let n=this.x-e.x,i=this.y-e.y;return n*n+i*i}dot(e){return this.x*e.x+this.y*e.y}distanceTo(e){return Math.hypot(this.x-e.x,this.y-e.y)}distanceToCheap(e){let n=this.x-e.x,i=this.y-e.y;return n*n+i*i}directionTo(e){return new r(e.x-this.x,e.y-this.y).normalized()}add(e){return new r(this.x+e.x,this.y+e.y)}addRaw(e){return new r(this.x+e,this.y+e)}overwite(e){this.x=e.x,this.y=e.y}subtract(e){return new r(this.x-e.x,this.y-e.y)}scale(e){return new r(this.x*e,this.y*e)}toString(){return`Vector2(${this.x}, ${this.y})`}clone(){return new r(this.x,this.y)}};function pt(r){let e=/^rgba?\(([^)]+)\)$/,n=r.match(e);if(n){let[i,s,o,c=1]=n[1].split(",").map(d=>parseFloat(d));return{r:Math.max(0,Math.min(255,Math.floor(i))),g:Math.max(0,Math.min(255,Math.floor(s))),b:Math.max(0,Math.min(255,Math.floor(o))),a:Math.max(0,Math.min(1,Math.floor(c*255)/255))}}return Ke(r)}function mt(r){return`rgba(${r.r}, ${r.g}, ${r.b}, ${r.a})`}function Ke(r){if(r=r.trim().toLowerCase(),r[0]==="#"){let n,i,s;if(r.length===7)n=parseInt(r.slice(1,3),16),i=parseInt(r.slice(3,5),16),s=parseInt(r.slice(5,7),16);else if(r.length===4)n=parseInt(r[1]+r[1],16),i=parseInt(r[2]+r[2],16),s=parseInt(r[3]+r[3],16);else throw new Error("Invalid hex color");return{r:n,g:i,b:s,a:1}}let e=r.match(/^rgba?\s*\(\s*(\d+)[, ]\s*(\d+)[, ]\s*(\d+)(?:[, ]\s*([\d.]+))?\s*\)$/);if(e)return{r:parseInt(e[1]),g:parseInt(e[2]),b:parseInt(e[3]),a:e[4]!==void 0?parseFloat(e[4]):1};throw new Error("Unsupported fillStyle format")}function yt(r,{r:e,g:n,b:i,a:s}={}){let[o,c,d,u,h]=r.match(/rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*([\d.]*)\)?/)||[];return`rgba(${e??c}, ${n??d}, ${i??u}, ${s??(h||1)})`}function bt(r,e,n){return n+(r-n)*e}function Te(){return typeof process<"u"&&process.release?.name==="node"?"node":typeof window<"u"||typeof self<"u"?"web":"unknown"}var ve=Te(),B=ve==="node",C=ve==="web",U=class r{static unlock(){C&&this.audioCtx.state!=="running"&&this.audioCtx.resume()}static audioCtx=C?new AudioContext:null;static masterGain=C?this.audioCtx.createGain():null;static musicGain=C?this.audioCtx.createGain():null;static sfxGain=C?this.audioCtx.createGain():null;static{C&&(this.masterGain.gain.value=1,this.musicGain.gain.value=1,this.sfxGain.gain.value=1,this.sfxGain.connect(this.masterGain),this.musicGain.connect(this.masterGain),this.masterGain.connect(this.audioCtx.destination))}static get SFX_VOLUME(){return this.sfxGain.gain.value}static get MUSIC_VOLUME(){return this.musicGain.gain.value}static get VOLUME(){return this.masterGain.gain.value}static set SFX_VOLUME(e){this.sfxGain.gain.value=e}static set MUSIC_VOLUME(e){this.musicGain.gain.value=e}static set VOLUME(e){this.masterGain.gain.value=e}static noteToHz(e){return this.tuningFreq*Math.pow(2,(e-9)/12)}static tuningFreq=440;static audioBufferCache=new Map;static loops=new Map;static sfsx=new Map;static loopIdCounter=0;static CACHE_NAME="lia-audio-cache-v1";static async preLoad(e){if(this.audioBufferCache.has(e))return this.audioBufferCache.get(e);let n=r.CACHE_NAME,i,s;if(typeof caches<"u"&&(s=await caches.open(n),i=await s.match(e)),!i){if(i=await fetch(e),!i.ok)throw new Error(`Failed to fetch ${e}`);s&&await s.put(e,i.clone())}let o=await i.arrayBuffer(),c=await this.audioCtx.decodeAudioData(o);return this.audioBufferCache.set(e,c),c}static async getOnlyDownloadedCache(e){let n=r.CACHE_NAME;return await(await caches.open(n)).match(e)}static getCached(e){return this.audioBufferCache.get(e)||null}static async playSound(e,n=.2,i=1,s=!0){try{this.sfsx.has(e)&&this.sfsx.get(e).source.stop(),this.audioBufferCache.has(e)||await this.preLoad(e);let o=this.getCached(e);if(!o)return;let c=new H(o);c.buffer=o;let d=1-.12,u=1+.12;c.playbackRate=i??d+Math.random()*(u-d);let h=this.audioCtx.createGain();h.gain.value=n,c.tempGain=h,c.connect(h),h.connect(this.sfxGain),c.onended=()=>{c.disconnect(),h.disconnect()},c.start(),s&&this.sfsx.set(e,{source:c,gain:h})}catch(o){console.error(o)}}static async playLoop(e,n=1,{loopStart:i=0,loopEnd:s=null,exclusive:o=!0,skipMS:c=0}={}){if(o)for(let b of this.loops.keys())this.stopLoop(b);this.audioBufferCache.has(e)||await this.preLoad(e);let d=this.getCached(e);if(!d)return;let u=new H(d);u.buffer=d,u.loop=!0,typeof i=="number"&&(u.loopStart=i),typeof s=="number"&&(u.loopEnd=s);let h=this.audioCtx.createGain();h.gain.value=n,u.tempGain=h,u.playbackRate=1,u.onended=()=>{u.disconnect(),h.disconnect()},u.connect(h),h.connect(this.musicGain),u.start(0,c/1e3);let p=++this.loopIdCounter;return this.loops.set(p,{source:u,gain:h}),p}static stopLoop(e){let n=this.loops.get(e);n&&(n.source.stop(),n.source.notIndependent||(n.source.disconnect(),n.gain.disconnect()),this.loops.delete(e))}static async createLiaSource(e,{volume:n=1,speed:i=1,loop:s=!1,loopStart:o=0,loopEnd:c=null,isMusic:d=!1,gain:u=null}={}){try{this.audioBufferCache.has(e)||await this.preLoad(e);let h=this.getCached(e);if(!h)return null;let p=new H(h);p.loop=s,p.loopStart=o,p.loopEnd=typeof c=="number"?c:h.duration,p.playbackRate=i;let b=this.audioCtx.createGain();return b.gain.value=n,p.connect(b),p.tempGain=b,b.connect(u||(d?this.musicGain:this.sfxGain)),p.onended=()=>{p.disconnect(),b.disconnect()},p}catch(h){return console.error("Failed to create LiaAudioSrc:",h),null}}},Se=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"];function gt(r){return Se.includes(r)}var H=class{numberOfInputs;numberOfOutputs;constructor(e,n=U.audioCtx){this.context=n,this.buffer=e,this.source=null,this.startTime=0,this.pauseTime=0,this.playbackRate=1,this.isPlaying=!1,this.loop=!1,this.output=C?n.createGain():null,this.output.gain.value=1,this.channelCount=2,this.channelCountMode="max",this.channelInterpretation="speakers",this.numberOfInputs=0,this.numberOfOutputs=1,this.onended=null}channelCount;channelCountMode;channelInterpretation;onended;source;buffer;context;_createSource(){this.source&&(this.source.onended=null);let e=this.context.createBufferSource();return e.buffer=this.buffer,e.playbackRate.value=this.playbackRate,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd>0?this.loopEnd:this.buffer.duration,e.connect(this.output),this.source=e,e.onended=()=>{this.source===e&&(this.isPlaying&&!this.loop&&(this.isPlaying=!1,this.pauseTime=0),typeof this.onended=="function"&&this.onended())},e}play({fadeIn:e=0,offset:n=null}={}){let i=n!==null?n:this.pauseTime;if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.source=this._createSource(),this.startTime=this.context.currentTime-i/this.playbackRate,this.source.start(0,i),e>0?(this.output.gain.setValueAtTime(0,this.context.currentTime),this.output.gain.linearRampToValueAtTime(1,this.context.currentTime+e)):this.output.gain.setValueAtTime(1,this.context.currentTime),this.isPlaying=!0}start(e=0,n=0,i){this.isPlaying||(this.source=this._createSource(),this.startTime=this.context.currentTime+e-n/this.playbackRate,i!==void 0?this.source.start(this.context.currentTime+e,n,i):this.source.start(this.context.currentTime+e,n),this.pauseTime=n,this.isPlaying=!0)}pause({fadeOut:e=0}={}){if(!this.isPlaying)return;let n=this.getElapsed()/1e3;if(this.loop&&this.loopEnd>this.loopStart){let i=this.loopEnd-this.loopStart;n=this.loopStart+(n-this.loopStart)%i}if(this.isPlaying=!1,e>0){let i=this.context.currentTime;this.output.gain.setValueAtTime(this.output.gain.value,i),this.output.gain.linearRampToValueAtTime(0,i+e),setTimeout(()=>{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n,this.output.gain.setValueAtTime(1,this.context.currentTime)},e*1e3)}else{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n}}getElapsed(){return this.isPlaying?(this.context.currentTime-this.startTime)*this.playbackRate*1e3:this.pauseTime*1e3}setSpeed(e){if(e<=0)throw new Error("Playback rate must be positive");let n=this.getElapsed()/1e3;this.playbackRate=e,this.isPlaying&&(this.pause(),this.pauseTime=n,this.play())}setLoop(e=!0){this.loop=e,this.source&&(this.source.loop=e)}loop;playbackRate;startTime;tempGain=null;connect(e,n=0,i=0){if("value"in e)this.output.connect(e,n);else return this.output.connect(e,n,i),e}disconnect(e,n,i){e===void 0?this.output.disconnect():this.output.disconnect(e,n,i)}output;stop(e=0){if(this.notIndependent)return this.pause();if(!this.source)return;let n=this.context.currentTime+e;this.source.stop(n),this.isPlaying=!1,this.notIndependent||(this.pauseTime=0)}pauseTime;isPlaying;notIndependent=!1;loopStart=0;loopEnd=0},Ie={osc:{enabled:!0,type:"sine",freq:440,detune:0},noise:{enabled:!1,level:.5},ampEnv:{attack:.005,decay:.1,sustain:0,release:.1,volume:.3},pitchEnv:{amount:0,decay:.2},filter:{enabled:!1,type:"lowpass",freq:1200,Q:1,envAmount:0,decay:.2},lfo:{enabled:!1,target:"freq",rate:8,depth:20},duration:.4},_=class r{constructor(e={}){this.ctx=U.audioCtx,this.cfg=structuredClone(Ie),Object.assign(this.cfg,e)}ctx;cfg;play(e=U.sfxGain){let n=this.ctx,i=n.currentTime,s=this.cfg,o=n.createGain();o.gain.setValueAtTime(1e-4,i);let c=s.ampEnv;o.gain.exponentialRampToValueAtTime(c.volume,i+c.attack),o.gain.exponentialRampToValueAtTime(Math.max(1e-4,c.sustain*c.volume),i+c.attack+c.decay),o.gain.exponentialRampToValueAtTime(1e-4,i+s.duration+c.release);let d=o,u;s.filter.enabled&&(u=n.createBiquadFilter(),u.type=s.filter.type,u.frequency.value=s.filter.freq,u.Q.value=s.filter.Q,u.connect(o),d=u);let h;if(s.osc.enabled){if(h=n.createOscillator(),h.type=s.osc.type,h.frequency.value=s.osc.freq,h.detune.value=s.osc.detune,s.pitchEnv.amount!==0){let a=Math.pow(2,s.pitchEnv.amount/12);h.frequency.exponentialRampToValueAtTime(s.osc.freq*a,i+s.pitchEnv.decay)}h.connect(d),h.start(i),h.stop(i+s.duration+c.release)}let p;if(s.noise.enabled){let a=n.sampleRate*s.duration,l=n.createBuffer(1,a,n.sampleRate),f=l.getChannelData(0);for(let y=0;y<a;y++)f[y]=(Math.random()*2-1)*s.noise.level;p=n.createBufferSource(),p.buffer=l,p.connect(d),p.start(i),p.stop(i+s.duration+c.release)}let b,g;s.lfo.enabled&&h&&(b=n.createOscillator(),b.frequency.value=s.lfo.rate,g=n.createGain(),g.gain.value=s.lfo.depth,b.connect(g),s.lfo.target==="freq"?g.connect(h.frequency):s.lfo.target==="gain"?g.connect(o.gain):s.lfo.target==="filter"&&u&&g.connect(u.frequency),b.start(i),b.stop(i+s.duration)),o.connect(e);let x=[h,p,b,g,u,o],t=i+s.duration+c.release;setTimeout(()=>{x.forEach(a=>a?.disconnect())},(t-n.currentTime)*1e3)}getConfig(){return structuredClone(this.cfg)}setConfig(e){return Object.assign(this.cfg,e),this}getKey(e){return this.cfg[e]}setKey(e,n){return Object.assign(this.cfg[e],n),this}setFreq(e){return this.cfg.osc.freq=e,this}setWave(e){return this.cfg.osc.type=e,this}setVolume(e){return this.cfg.ampEnv.volume=e,this}setAmpEnv(e,n,i,s){return Object.assign(this.cfg.ampEnv,{attack:e,decay:n,sustain:i,release:s}),this}setPitchEnv(e,n){return Object.assign(this.cfg.pitchEnv,{amount:e,decay:n}),this}setNoiseEnabled(e){return this.cfg.noise.enabled=e,this}setNoiseLevel(e){return this.cfg.noise.level=e,this}setFilterEnabled(e){return this.cfg.filter.enabled=e,this}setFilter(e,n,i){return Object.assign(this.cfg.filter,{type:e,freq:n,Q:i,enabled:!0}),this}setLFOEnabled(e){return this.cfg.lfo.enabled=e,this}setLFO(e,n,i){return Object.assign(this.cfg.lfo,{target:e,rate:n,depth:i,enabled:!0}),this}setDuration(e){return this.cfg.duration=e,this}clone(){return new r(structuredClone(this.cfg))}},Fe=new _({osc:{enabled:!0,type:"square",freq:900,detune:0},ampEnv:{attack:.002,decay:.04,sustain:0,release:.02,volume:.15},duration:.05}),Pe=new _({osc:{enabled:!0,type:"sine",freq:600,detune:0},ampEnv:{attack:.01,decay:.08,sustain:0,release:.04,volume:.12},duration:.1}),Me=new _({osc:{enabled:!0,type:"triangle",freq:500,detune:0},pitchEnv:{amount:12,decay:.15},ampEnv:{attack:.01,decay:.12,sustain:0,release:.05,volume:.25},duration:.18}),Ae=new _({osc:{enabled:!0,type:"sawtooth",freq:1200,detune:0},pitchEnv:{amount:-24,decay:.3},ampEnv:{attack:.005,decay:.25,sustain:0,release:.05,volume:.3},duration:.35}),_e=new _({osc:{enabled:!0,type:"square",freq:180,detune:0},noise:{enabled:!0,level:.4},ampEnv:{attack:.002,decay:.15,sustain:0,release:.05,volume:.35},duration:.2}),xt=new Map([["ui_click",Fe],["ui_hover",Pe],["jump",Me],["laser",Ae],["hit",_e]]);function wt(r=12){let e=Date.now().toString(36),n=crypto.getRandomValues(new Uint8Array(r)),i=Array.from(n).map(s=>s.toString(36).padStart(2,"0")).join("");return(e+i).slice(0,r)}function oe(r=12){let e=Date.now().toString(36),n=crypto.getRandomValues(new Uint8Array(4)),i=Array.from(n).map(s=>s.toString(36).padStart(2,"0")).join("");return(e+i).slice(0,r)}var we=class{peer=null;key;events={};mbAcc=0;connected=!1;constructor(){this.key=`${Le()}_${Date.now()}`}connect(e){e&&(this.peer=e,e.peer=this,this.connected=!0,e.connected=!0),this._emit("open")}isConnected(){return this.connected&&!!this.peer}on(e,n){this.events[e]||(this.events[e]=[]),this.events[e].push(n)}off(e,n){this.events[e]&&(this.events[e]=this.events[e].filter(i=>i!==n))}_emit(e,n){this.events[e]?.forEach(i=>i(n))}send(e,n){if(!this.peer)throw new Error("No peer connected");this.peer._receive(e,n)}_receive(e,n){e?this._emit(e,n):this._emit("message",n)}close(){if(this.connected=!1,this.peer){let e=this.peer;this.peer=null,e.peer=null,e.connected=!1,e._emit("close")}this._emit("close")}getKey(){return this.key}};function Le(){if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();if(typeof crypto<"u"&&typeof crypto.getRandomValues=="function"){let r=new Uint8Array(16);return crypto.getRandomValues(r),r[6]=r[6]&15|64,r[8]=r[8]&63|128,[...r].map(e=>e.toString(16).padStart(2,"0")).join("").replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/,"$1-$2-$3-$4-$5")}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})}function Ve(r){let e=!0;function n(){e&&(r(),requestAnimationFrame(n))}return requestAnimationFrame(n),{clear:()=>e=!1}}function De(r,e,n,i,s){let o=Math.cos(s),c=Math.sin(s),d=[];if(o!==0){let u=(0-r)/o,h=e+u*c;u>0&&h>=0&&h<=i&&d.push({side:"left",t:u})}if(o!==0){let u=(n-r)/o,h=e+u*c;u>0&&h>=0&&h<=i&&d.push({side:"right",t:u})}if(c!==0){let u=(0-e)/c,h=r+u*o;u>0&&h>=0&&h<=n&&d.push({side:"top",t:u})}if(c!==0){let u=(i-e)/c,h=r+u*o;u>0&&h>=0&&h<=n&&d.push({side:"bottom",t:u})}return d.length===0?null:(d.sort((u,h)=>u.t-h.t),d[0])}function Ge(r,e){let n;switch(e){case"left":case"right":n=Math.PI-r;break;case"top":case"bottom":n=2*Math.PI-r;break}return(n%(2*Math.PI)+2*Math.PI)%(2*Math.PI)}function vt(r,e,n,i,s){let o=De(r,e,n,i,s);return o?{...o,avoidAngle:Ge(s,o.side)}:null}function He(){return B?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}var Ct=He();function ze({width:r,height:e,updateHz:n="frames"}){return new V.KaylaGame(r,e,n==="frames"?1/0:n)}function Ue(r){let e=new O(r);return new V.KaylaScene(e)}function $e(r){return new V.KaylaRenderer(r)}function Ne(r,e){if(typeof r!="function")throw new Error("Invalid Element Type.");let n=e??{};return n.key??=r.name+"_"+oe(),{type:r,props:n}}var F;(i=>{function r(s,o){return!(s.right<o.left||s.left>o.right||s.bottom<o.top||s.top>o.bottom)}i.rawCollision=r;function e(s,o,c){let d=o*Math.PI/180,u=Math.cos(d),h=Math.sin(d),p=1/0;return u>0&&(p=Math.min(p,(c.right-s.x)/u)),u<0&&(p=Math.min(p,(c.left-s.x)/u)),h>0&&(p=Math.min(p,(c.bottom-s.y)/h)),h<0&&(p=Math.min(p,(c.top-s.y)/h)),A.from(o).scale(p)}i.getCurrToBound=e;function n(s){let{left:o,right:c,top:d,bottom:u,width:h,height:p,x:b=0,y:g=0}=s;if(h===null||p===null)throw new Error("width and height are required");let x,t;if(o!=null&&c!=null){if(Math.abs(c-o-h)>1e-6)throw new Error("left, right, and width mismatch");x=o}else b!=null?x=b-h/2:o!=null?x=o:c!=null?x=c-h:x=0;if(d!=null&&u!=null){if(Math.abs(u-d-p)>1e-6)throw new Error("top, bottom, and height mismatch");t=d}else g!=null?t=g-p/2:d!=null?t=d:u!=null?t=u-p:t=0;return{left:x,right:x+h,top:t,bottom:t+p,width:h,height:p,x:x+h/2,y:t+p/2}}i.createRawRect=n})(F||={});var V;(g=>{class r extends X{#e;#t;constructor(t,a,l){super(t,a,l),this.#e=new Set,this.#t=!1}delay(t){return this.ticker.createTimeout(t)}get started(){return this.#t}start(){if(!this.#t){for(let t of this.#e)t.start();this.#t=!0,super.start()}}stop(){if(this.#t){for(let t of this.#e)t.stop();this.#t=!1,super.stop()}}addRenderer(t){this.#e.has(t)||(this.#e.add(t),this.#t&&t.start(),t.game=this)}get mainRenderer(){return[...this.#e].at(0)}getRenderers(){return[...this.#e]}deleteRenderer(t){this.#e.has(t)&&(this.#e.delete(t),this.#t&&t.stop(),delete t.game)}}g.KaylaGame=r;class e extends N{game;pointerX;pointerY;pointerEvents;constructor(t){super(t),this.useDraw=this.useDraw.bind(this),this.on("draw",a=>{if(this.game)for(let l of this.game.scenes.values())l.handleDraw(a)}),this.pointerX=0,this.pointerY=0,this.pointerEvents=new T,this.pointerPosUpdater=this.pointerPosUpdater.bind(this),this.onPointerDown=this.onPointerDown.bind(this)}pointerPosUpdater(t){this.pointerX=t.clientX,this.pointerY=t.clientY}onPointerDown(t){this.pointerPosUpdater(t);let a=e.getClickType(t);if(a!=="invalid"){t.preventDefault();let l=this.getMousePos();this.pointerEvents.emit("down",l,a)}}static getClickType(t){switch(t.button){case 0:return"left";case 1:return"middle";case 2:return"right";default:return"invalid"}}listenPointerUpdates(){this.canvas.addEventListener("pointermove",this.pointerPosUpdater),this.canvas.addEventListener("pointerdown",this.onPointerDown)}unlistenPointerUpdates(){this.canvas.removeEventListener("pointermove",this.pointerPosUpdater),this.canvas.removeEventListener("pointerdown",this.onPointerDown)}pointerPosToWorldPos(t,a){let l=this.canvas.getBoundingClientRect(),f=(t-l.left)/l.width,y=(a-l.top)/l.height,w=f*this.viewportWidth*this.cameraWidth/l.width,k=y*this.viewportHeight*this.cameraHeight/l.height;return new A(w,k)}getMousePos(){return this.pointerPosToWorldPos(this.pointerX,this.pointerY)}useDraw(t){let a=l=>{t(l,new i)};return this.on("draw",a),()=>{this.off("draw",a)}}attachTo(t){t.addRenderer(this),this.game=t}detach(){this.game&&this.game.deleteRenderer(this)}}g.KaylaRenderer=e;class n{current;saves;constructor(){this.saves=[]}useTick(t){if(!this.current)throw new Error("Hook 'useTick' must be executed in the top level scope of a component.");this.current.onTick[this.current.useStepCallIndex]=t,this.current.useStepCallIndex++}usePaint(t){if(!this.current)throw new Error("Hook 'usePaint' must be executed in the top level scope of a component.");this.current.onPaint[this.current.useDrawCallIndex]=t,this.current.useDrawCallIndex++}useEntity(){if(!this.current)throw new Error("Hook 'useEntity' must be executed in the top level scope of a component.");return le(he)}useSelf(t){if(!this.current)throw new Error("Hook 'useSelf' must be executed in the top level scope of a component.");let a=le(null);return(a.current===null||a.current===void 0)&&(a.current=t()),a.current}useInitialization(t){if(!this.current)throw new Error("Hook 'useInitialization' must be executed in the top level scope of a component.");let a=this.current;a.onInits[this.current.useInitCallIndex]=t,a.useInitCallIndex++}useRect(){if(!this.current)throw new Error("Hook 'useRect' must be executed in the top level scope of a component.");return L(()=>new g.KaylaInternalRect(this.current))}useFiber(){if(!this.current)throw new Error("Hook 'useFiber' must be executed in the top level scope of a component.");return L(()=>this.current)}useFiberControl(){if(!this.current)throw new Error("Hook 'useFiberControl' must be executed in the top level scope of a component.");let t=this.current;return L(()=>({refresh:()=>t.refresh(),get childrenCount(){return t.lastChildren.length},setMaxChildren:a=>{t.setMaxChildren(a)},getMaxChildren:()=>t.getMaxChildren(),get maxSafeChildren(){return t.maxSafeChildren},get key(){return t.key},get getChildrenEntities(){return t.getChildrenEntities.bind(t)},get getEntityChain(){return t.getEntityChain.bind(t)},get getFiberChain(){return t.getFiberChain.bind(t)}}))}useCurrentTicker(){if(!this.current)throw new Error("Hook 'useCurrentTicker' must be executed in the top level scope of a component.");return this.current.getAttachedGame().ticker}useCurrentRenderer(){if(!this.current)throw new Error("Hook 'useCurrentRenderer' must be executed in the top level scope of a component.");return this.current.getAttachedGame().mainRenderer}useCurrentGame(){if(!this.current)throw new Error("Hook 'useCurrentGame' must be executed in the top level scope of a component.");return this.current.getAttachedGame()}useCurrentScene(){if(!this.current)throw new Error("Hook 'useCurrentScene' must be executed in the top level scope of a component.");return this.current.scene}useState(t,{alwaysRecall:a=!1}={}){if(!this.current)throw new Error("Hook 'useState' must be executed in the top level scope of a component.");let f=this.current.state[this.current.useStateCallIndex]??new s(this.current,t,{alwaysRecall:a});return this.current.state[this.current.useStateCallIndex]=f,this.current.useStateCallIndex++,f}useShouldRefresh(t){let a=this.current;if(!a)throw new Error("useShouldRefresh must be called inside a component");a.watchedDeps&&console.warn("useShouldRefresh called multiple times \u2014 using the last call"),a.watchedDeps=t}useRef(t){if(!this.current)throw new Error("Hook 'useRef' must be executed in the top level scope of a component.");let l=this.current.refs[this.current.useRefCallIndex]??c(t??null);return this.current.refs[this.current.useRefCallIndex]=l,this.current.useRefCallIndex++,l}useEffect(t){if(!this.current)throw new Error("Hook 'useEffect' must be executed in the top level scope of a component.");this.current.onEffect[this.current.useEffectCallIndex]=t,this.current.useEffectCallIndex++}useViewportEffect(t){if(!this.current)throw new Error("Hook 'useViewport' must be executed in the top level scope of a component.");this.current.onViewportEffect[this.current.useViewCallIndex]=t,this.current.useViewCallIndex++}useExports(t,a){if(!this.current)throw new Error("Hook 'useExports' must be executed in the top level scope of a component.");this.current.onExport=a}useGlobalClick(t){if(!this.current)throw new Error("Hook 'useGlobalClick' must be executed in the top level scope of a component.");this.current.onGlobalClick[this.current.useGlobalClickCallIndex]=t,this.current.useGlobalClickCallIndex++}useClick(t){if(!this.current)throw new Error("Hook 'useClick' must be executed in the top level scope of a component.");let a=this.current;Ce((l,f)=>{let y=a.entity;if(!y)return;let w=y.getRawRect(),k=F.createRawRect({x:l.x,y:l.y,width:3,height:3});F.rawCollision(w,k)&&t(l,f)})}useContext(t){if(!this.current)throw new Error("Hook 'useContext' must be executed in the top level scope of a component.");return this.current.findContextValueFromInst(t)}save(){this.saves.push({current:this.current})}restore(){let t=this.saves.pop();if(!t)throw new Error("Cannot restore without saving.");this.current=t.current}logLevel="warn";logger={debug:(...t)=>{this.logLevel==="debug"&&console.debug(...t)},info:(...t)=>{["info","warn","debug"].includes(this.logLevel)&&console.info(...t)},warn:(...t)=>{["warn","debug"].includes(this.logLevel)&&console.warn(...t)},error:(...t)=>console.error(...t),withFiber:(t,a,l,...f)=>{let y=t?.fc?.name||"anonymous",w=t?.key?` key=${t.key}`:"";this.logger[a](`${l} <${y}${w}>`,...f)}}}g.GlobalKayla=n;class i{preventDefault(){this.#e=!0}#e=!1;isPrevented(){return this.#e}}g.KaylaEvent=i;class s{#e;#t;#n;alwaysRecall;constructor(t,a,{alwaysRecall:l=!1}={}){this.#t=t,this.#e=a??void 0,this.#n=Date.now(),this.alwaysRecall=l}get(){return this.#e}*[Symbol.iterator](){throw new Error(`Hey! KaylaState is NOT an array / iterable like useState in React.
|
|
1
|
+
"use strict";var xe=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames;var dt=Object.prototype.hasOwnProperty;var ve=(r,e)=>{for(var n in e)xe(r,n,{get:e[n],enumerable:!0})},pt=(r,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ct(e))!dt.call(r,s)&&s!==n&&xe(r,s,{get:()=>e[s],enumerable:!(i=ht(e,s))||i.enumerable});return r};var ft=r=>pt(xe({},"__esModule",{value:!0}),r);var kt={};ve(kt,{JSX:()=>Re,Kayla:()=>me,KaylaContext:()=>W,KaylaFragment:()=>rt,KaylaInternals:()=>V,KaylaRect:()=>F,LEA:()=>ue,UI:()=>lt,createContext:()=>Xe,createElement:()=>Oe,createGame:()=>Ue,createReassignableObject:()=>st,createRenderer:()=>Ne,createScene:()=>$e,createUseHook:()=>ot,self:()=>ce,setLogLevel:()=>at,useClick:()=>Ye,useContext:()=>nt,useCurrentGame:()=>Je,useCurrentRenderer:()=>Ze,useCurrentScene:()=>et,useCurrentTicker:()=>tt,useDisposableRef:()=>it,useEffect:()=>de,useEntity:()=>Qe,useExports:()=>J,useFiber:()=>ke,useFiberControl:()=>pe,useGlobalClick:()=>Ee,useInitialization:()=>Y,useNextStack:()=>fe,usePaint:()=>Q,useRect:()=>j,useRef:()=>he,useSelf:()=>L,useShouldRefresh:()=>Be,useState:()=>qe,useTick:()=>je,useViewportEffect:()=>We});module.exports=ft(kt);var me={};ve(me,{JSX:()=>Re,KaylaContext:()=>W,KaylaFragment:()=>rt,KaylaInternals:()=>V,KaylaRect:()=>F,createContext:()=>Xe,createElement:()=>Oe,createGame:()=>Ue,createReassignableObject:()=>st,createRenderer:()=>Ne,createScene:()=>$e,createUseHook:()=>ot,self:()=>ce,setLogLevel:()=>at,useClick:()=>Ye,useContext:()=>nt,useCurrentGame:()=>Je,useCurrentRenderer:()=>Ze,useCurrentScene:()=>et,useCurrentTicker:()=>tt,useDisposableRef:()=>it,useEffect:()=>de,useEntity:()=>Qe,useExports:()=>J,useFiber:()=>ke,useFiberControl:()=>pe,useGlobalClick:()=>Ee,useInitialization:()=>Y,useNextStack:()=>fe,usePaint:()=>Q,useRect:()=>j,useRef:()=>he,useSelf:()=>L,useShouldRefresh:()=>Be,useState:()=>qe,useTick:()=>je,useViewportEffect:()=>We});var ue={};ve(ue,{DeltaTweenII:()=>ae,ENVIRONMENT:()=>Ce,GEmitterMemory:()=>we,LeaEntityII:()=>z,LeaEventEmitter:()=>T,LeaGameII:()=>X,LeaRendererII:()=>N,LeaSceneII:()=>O,LeaSerializers:()=>Ke,LeaTickerII:()=>se,LeaTimeout:()=>oe,LeaUtilsII:()=>k,LiaAudio:()=>U,LiaAudioSrc:()=>H,LiaOscSFX:()=>_,LiaSFXMap:()=>vt,NOTE_NAMES:()=>Ie,RectLeaEntity:()=>q,Vector2:()=>A,colToRGBA:()=>yt,defaultSFXConfig:()=>Pe,editRGBA:()=>gt,generateUUID:()=>Ve,getAvoidAngle:()=>He,getEnvironment:()=>Se,getNormalizedColor:()=>mt,getRayHit:()=>Ge,isInitiallyMobile:()=>Et,isMobile:()=>ze,isNode:()=>B,isNote:()=>xt,isWeb:()=>C,parseFillStyle:()=>Te,raycastAvoid:()=>Ct,scaleCoord:()=>bt,setAnimInterval:()=>De,sfxHit:()=>Le,sfxJump:()=>Ae,sfxLaser:()=>_e,sfxUIClick:()=>Fe,sfxUIHover:()=>Me,shortUID:()=>wt,tinyUID:()=>le});var T=class{#e=new Map;constructor(){this.#e=new Map}on(e,n){let i=this.#e.get(e)||[];return i.push(n),this.#e.set(e,i),this}once(e,n){let i=(...s)=>{this.off(e,i),n(...s)};return this.on(e,i),this}off(e,n){let i=this.#e.get(e);if(!i)return this;let s=i.indexOf(n);return s>=0&&i.splice(s,1),this}emit(e,...n){let i=this.#e.get(e);if(!i||i.length===0){if(e==="error")throw n[0];return!1}return i.slice().forEach(s=>s(...n)),!0}removeAllListeners(e){return e?this.#e.delete(e):this.#e.clear(),this}listenerCount(e){return this.#e.get(e)?.length??0}},N=class extends T{canvas;ctx;running;_rafId;_fps;_frameCount;_fpsTimer;_lastFrameTime;constructor(e,{viewportWidth:n,viewportHeight:i,cameraWidth:s,cameraHeight:o}={}){if(!C)throw new Error("Web-Only");super(),this.canvas=e,this.ctx=e.getContext("2d"),this.automatic=!0,this.#e=n??e.width,this.#t=i??e.height,this.#n=s??e.width,this.#r=o??e.height,this.running=!1,this._rafId=null,this._loop=this._loop.bind(this),this.updateCanvasResolution(),this._fps=60,this._frameCount=0,this._fpsTimer=0}automatic;retransform(){this.ctx.setTransform(1,0,0,1,0,0);let e=this.#n/this.#e,n=this.#r/this.#t;this.ctx.translate(this.#n/2,this.#r/2),this.ctx.scale(e,n),this.ctx.translate(-this.#e/2,-this.#t/2)}#e=0;#t=0;#n=0;#r=0;get viewportWidth(){return this.#e}set viewportWidth(e){this.#e=e,this.retransform(),this.emitViewportUpdate()}get width(){return this.#e}get height(){return this.#t}get centerX(){return this.#e/2}get centerY(){return this.#t/2}get left(){return 0}get top(){return 0}get right(){return this.#e}get bottom(){return this.#t}get viewportHeight(){return this.#t}set viewportHeight(e){this.#t=e,this.retransform(),this.emitViewportUpdate()}get cameraWidth(){return this.#n}set cameraWidth(e){this.#n=e,this.updateCanvasResolution(),this.retransform()}get cameraHeight(){return this.#r}set cameraHeight(e){this.#r=e,this.updateCanvasResolution(),this.retransform()}updateCanvasResolution(){this.canvas.width=this.#n,this.canvas.height=this.#r}emitViewportUpdate(){this.emit("viewport_update",{width:this.viewportWidth,height:this.viewportHeight})}applyTransform(){this.retransform()}get FPS(){return this._fps}_loop(){this.automatic&&this.update(),this._rafId=requestAnimationFrame(this._loop)}update(){if(!this.running||!C)return;let e=performance.now(),n=(e-(this._lastFrameTime??e))/1e3;this._lastFrameTime=e,this._frameCount++,this._fpsTimer+=n,this._fpsTimer>=1&&(this._fps=Math.round(this._frameCount/this._fpsTimer),this._frameCount=0,this._fpsTimer=0),this.ctx.clearRect(0,0,this.#n,this.#r),this.emit("draw",this.ctx)}start(){if(!this.running){if(!C||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!0,this._rafId=requestAnimationFrame(this._loop)}}stop(){if(!C||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!1,this._rafId!==null&&(cancelAnimationFrame(this._rafId),this._rafId=null)}},se=class extends T{setNow(e){this.#e=e}#e=0;__intervalId=null;__lastTime=0;constructor(e=16){super(),this.#t=e,this.speedHackDT=1}speedHackDT;get isRaf(){return this.tickInterval===1/0}#t=15;get tickInterval(){return this.#t}set tickInterval(e){this.#t=e,this.__intervalId&&(this.stop(),this.start())}now(){return this.#e}__tick(){let e=performance.now(),n=(e-this.__lastTime)/1e3*this.speedHackDT;this.__lastTime=e,!(C&&typeof this.__intervalId=="function"&&document.hidden)&&(this.#e+=n*1e3,this.emit("tick",n))}createTimeout(e){return new oe(e,this)}createTween(e,n=()=>{}){let i=new ae(e),s=(o=0)=>{if(i.finished){this.off("tick",s);return}i.update(o)};return i.on("finish",()=>{this.off("tick",s)}),i.on("delta",o=>{n(o)}),this.on("tick",s),i}start(){this.__intervalId===null&&(this.__lastTime=performance.now(),this.__intervalId=C&&!isFinite(this.tickInterval)?De(()=>this.__tick()).clear:setInterval(()=>this.__tick(),this.tickInterval))}stop(){this.__intervalId!==null&&(typeof this.__intervalId=="function"?this.__intervalId():clearInterval(this.__intervalId)),this.__intervalId=null}getSineMod(e,n=0){return .5+.5*Math.sin((this.now()%e/e+n)*2*Math.PI)}},Ke;(t=>{function r(a){return a===!0?1:0}t.booleanExport=r;function e(a){return a===0?!1:a===1}t.booleanImport=e;function n(a){return`${a.x}|${a.y}`}t.vec2Export=n;function i(a){let[u,c]=a.split("|"),y=parseFloat(u),v=parseFloat(c);if(isNaN(y)||isNaN(v))throw new Error(`Invalid Vector2 string: ${a}`);return new A(y,v)}t.vec2Import=i,t.booleanMap={mapExport:r,mapImport:e};function o(a){return u=>Number(u.toFixed(a))}t.createRounder=o;function d(a=10){return{mapExport(u){return Math.round(u/a)},mapImport(u){return u*a}}}t.createLowPrecision=d;function p(a){return Math.round(a)}t.lightWeightRounder=p;function l(a=100){return{mapExport(u){return Math.round(u*a)},mapImport(u){return u/a}}}t.createPercent=l;function h(a){let u=new Map(Object.entries(a));return{mapExport:c=>u.get(c)??null,mapImport:c=>Array.from(u.entries()).find(([y,v])=>v===c)?.[0]??null}}t.createLookup=h;function f(a){let u=a*(180/Math.PI);return Math.round((u%360+360)%360)}t.radToDeg=f;function g(a){return a*(Math.PI/180)}t.degToRad=g,t.angleRadToDeg={mapExport:f,mapImport:g};function x(a=10){let u=d(a);return{mapExport(c){return u.mapExport(f(c))},mapImport(c){return u.mapImport(g(c))}}}t.createLowPrecisionRadToDeg=x})(Ke||={});var z=class r extends T{name="";scaleRotate=0;scale=1;constructor(e,n=0,i=0){super(),this.autoTranslate=!1,this.name=e,this.z=0,this.___pos=new A(n,i),this.nonSerializableProperties=[],this.nonSerializableProperties.push("___pos","autoTranslate","arraySerializeMap"),this.forceSerializableProperties=[],this.forceSerializableProperties.push("x","y")}arraySerializeMap;autoTranslate;z;___pos;nonSerializableProperties;forceSerializableProperties;get pos(){return this.___pos}get x(){return this.pos.x}get y(){return this.pos.y}set x(e){this.pos.x=e}set y(e){this.pos.y=e}handleUpdate(e){if(this.update)try{this.emit("update",e),this.update(e)}catch(n){this.emit("error",n)}}handleDraw(e){if(!(B||!this.draw)){e.save(),this.autoTranslate&&e.translate(this.x,this.y);try{this.emit("draw",e),this.draw(e)}catch(n){this.emit("error",n)}e.restore()}}serialize(){if(Array.isArray(this.arraySerializeMap))return this.arraySerializeMap.map(([s,{mapExport:o}])=>{let d=Reflect.get(this,s);return o?o(d):d});let e=["_events","_eventsCount","_maxListeners","nonSerializableProperties","forceSerializableProperties"],n=[...Reflect.ownKeys(this),...this.forceSerializableProperties].filter(s=>!this.nonSerializableProperties.includes(s)&&!e.includes(s.toString())),i=Object.fromEntries(n.map(s=>{let o=Reflect.get(this,s);if(B&&typeof o=="number"){let d=o.toString().split("."),l=(d[1]?d[1].length:0)>2?Number(o.toFixed(2)):o;return[s,l]}return[s,o]}));return JSON.parse(JSON.stringify(i))}toLocal(e){return e.subtract(this.pos)}toWorld(e){return e.add(this.pos)}deserializeArray(e){return r.deserializeArray(this.arraySerializeMap,e)}static deserializeArray(e,n){if(!e||!Array.isArray(n))return n;let i={};for(let s=0;s<n.length;s++){let o=e[s];if(!o)break;let[d,{mapImport:p}]=o,l=n[s];if(p&&(l=p(l)),typeof d!="string")break;try{Reflect.set(i,d,l)}catch(h){console.error(h)}}return i}},O=class extends T{name="";entities=new Map;paused=!0;constructor(e){super(),this.name=e}handleUpdate(e){if(!this.paused){this.emit("update",e);for(let n of this.entities.values())n.handleUpdate(e)}}handleDraw(e){if(!B&&!this.paused){this.emit("draw",e);for(let n of[...this.entities.values()].sort((i,s)=>i.z-s.z))n.handleDraw(e)}}addEntity(e){if(!(e instanceof z))throw new Error("invalid entity");if(!e.name)throw new Error("Entity must have a name.");this.entities.set(e.name,e)}removeEntity(e){if(!(e instanceof z))throw new Error("invalid entity");this.entities.delete(e.name)}getEntity(e){return this.entities.get(e)}},X=class{scenes;ticker;get centerX(){return this.width/2}get centerY(){return this.height/2}get left(){return 0}get top(){return 0}get right(){return this.width}get bottom(){return this.height}width;height;constructor(e,n,i=16){this.ticker=new se(i),this.scenes=new Map,this.width=e,this.height=n,this.ticker.on("tick",s=>{for(let o of this.scenes.values())o.paused||o.handleUpdate(s)})}addScene(e){if(!e.name)throw new Error("Scene must have a name.");e.paused=!1,this.scenes.set(e.name,e)}removeScene(e){e&&(e.paused=!0),this.scenes.delete(e.name)}now(){return this.ticker.now()}start(){this.ticker.start()}stop(){this.ticker.stop()}},k={lerp(r,e,n){return r+(e-r)*n},clamp(r,e,n){return Math.min(n,Math.max(e,r))},clamp01(r){return Math.min(1,Math.max(0,r))},easeLinear(r){return r},easeInQuad(r){return r*r},easeOutQuad(r){return 1-(1-r)*(1-r)},easeInOutQuad(r){return r<.5?2*r*r:1-Math.pow(-2*r+2,2)/2},easeInSine(r){return 1-Math.cos(r*Math.PI/2)},easeOutSine(r){return Math.sin(r*Math.PI/2)},easeInOutSine(r){return-(Math.cos(Math.PI*r)-1)/2},easeInExpo(r){return r===0?0:Math.pow(2,10*r-10)},easeOutExpo(r){return r===1?1:1-Math.pow(2,-10*r)},easeInOutExpo(r){return r===0?0:r===1?1:r<.5?Math.pow(2,20*r-10)/2:(2-Math.pow(2,-20*r+10))/2},smoothstep(r){return r=k.clamp(r,0,1),r*r*(3-2*r)},randomLerp(r,e){return k.lerp(r,e,Math.random())},randomInt(r,e){return Math.floor(Math.random()*(e-r+1))+r},randomArrayValue(r){return r[k.randomInt(0,r.length-1)]},createBezier(r,e,n,i){function s(p,l,h,f,g){let b=1-p;return b*b*b*l+3*b*b*p*h+3*b*p*p*f+p*p*p*g}function o(p,l,h,f,g){let b=1-p;return 3*b*b*(h-l)+6*b*p*(f-h)+3*p*p*(g-f)}function d(p){let l=p;for(let h=0;h<6;h++){let f=s(l,0,r,n,1),g=o(l,0,r,n,1);if(g===0)break;l-=(f-p)/g}return k.clamp(l,0,1)}return function(l){l=k.clamp(l,0,1);let h=d(l);return s(h,0,e,i,1)}},lengthSquared(...r){return r.reduce((e,n)=>e+n*n,0)},normalizeRad(r){let e=2*Math.PI;return r=r%e,r<0&&(r+=e),r},angleInvertY(r){return k.normalizeRad(-r)},degToRadFlipY(r){return k.angleInvertY(r*Math.PI/180)},minimalAngularDirection(r,e){r=k.normalizeRad(r),e=k.normalizeRad(e);let n=k.normalizeRad(e-r),i=k.normalizeRad(r-e);return n<=i?1:-1}},ae=class extends T{constructor({delta:e,ms:n,easing:i}){super(),this.delta=e,this.duration=n,this.elapsed=0,this.easing=i??(s=>s),this.lastValue=0,this.finished=!1}delta;duration;elapsed;lastValue;finished;easing;update(e){this.elapsed+=e*1e3;let n=k.clamp(this.elapsed/this.duration,0,1),i=this.easing(n),s=this.delta*i,o=s-this.lastValue;this.lastValue=s,this.emit("delta",o),n>=1&&(this.finished=!0,this.emit("finish",void 0))}},q=class extends z{constructor(e,n=0,i=0,s=50,o=50){super(e,n,i),this.width=s,this.height=o}width;height;get left(){return this.x-this.width/2}set left(e){this.x=e+this.width/2}get right(){return this.x+this.width/2}set right(e){this.x=e-this.width/2}get top(){return this.y-this.height/2}set top(e){this.y=e+this.height/2}get bottom(){return this.y+this.height/2}set bottom(e){this.y=e-this.height/2}get lx(){return 0}get ly(){return 0}get lleft(){return-this.width/2}get lright(){return this.width/2}get ltop(){return-this.height/2}get lbottom(){return this.height/2}isCollidingWith(e){return!(this.right<e.left||this.left>e.right||this.bottom<e.top||this.top>e.bottom)}color="rgba(0, 0, 255, 0.3)";draw(e){e.translate(this.x,this.y),e.rotate(this.scaleRotate),e.fillStyle=this.color,e.fillRect(-this.width/2,-this.height/2,this.width,this.height)}},oe=class extends T{duration;ticker;elapsed;finished;_resolve;promise;_timeoutId;constructor(e,n=null){super(),this.duration=e,this.ticker=n,this.elapsed=0,this.finished=!1,this._resolve=null,this.promise=new Promise(i=>this._resolve=i),this.update=this.update.bind(this),this.ticker&&this.ticker.on("tick",this.update)}update(e=0){this.finished||(this.elapsed+=e*1e3,this.elapsed>=this.duration&&this.finish())}finish(){this.finished||(this.finished=!0,this.emit("finish",void 0),this._resolve&&this._resolve(),this.ticker&&this.ticker.off("tick",this.update))}start(){return this.ticker||(this._timeoutId=setTimeout(()=>this.finish(),this.duration)),this}cancel(){this.finished||(this.finished=!0,!this.ticker&&this._timeoutId!=null&&clearTimeout(this._timeoutId),this.ticker&&this.ticker.off("tick",this.update))}then(e,n){return this.promise.then(e,n)}after(e,n){return this.promise.then(e,n)}},A=class r{constructor(e=0,n=0){this.x=e,this.y=n}x;y;toJSON(){return{x:this.x,y:this.y,vec2:!0}}static isVec2(e){return e&&typeof e=="object"&&"x"in e&&"y"in e&&e.vec2===!0}static fromSerialized(e){return this.isVec2(e)?new this(e.x,e.y):null}rotate(e){let n=Math.cos(e),i=Math.sin(e);return new r(this.x*n-this.y*i,this.x*i+this.y*n)}static from(e){return new r(Math.cos(e),Math.sin(e))}isEmpty(){return Math.abs(this.x)<.01&&Math.abs(this.y)<.01}get angle(){return Math.atan2(this.y,this.x)}angleTo(e){return Math.atan2(e.y-this.y,e.x-this.x)}get length(){return Math.hypot(this.x,this.y)}get lengthSquared(){return this.x*this.x+this.y*this.y}normalized(){let e=this.length;return e===0?new r(0,0):new r(this.x/e,this.y/e)}consume(e){let n=this.length;n<=e?(this.x=0,this.y=0):this.overwite(this.scale((n-e)/n))}project(e){return e.scale(this.dotNormalized(e))}reflect(e){let n=this.dot(e);return this.subtract(e.scale(2*n))}dotNormalized(e){let n=this.normalized(),i=e.normalized();return n.x*i.x+n.y*i.y}lengthSquaredTo(e){let n=this.x-e.x,i=this.y-e.y;return n*n+i*i}dot(e){return this.x*e.x+this.y*e.y}distanceTo(e){return Math.hypot(this.x-e.x,this.y-e.y)}distanceToCheap(e){let n=this.x-e.x,i=this.y-e.y;return n*n+i*i}directionTo(e){return new r(e.x-this.x,e.y-this.y).normalized()}add(e){return new r(this.x+e.x,this.y+e.y)}addRaw(e){return new r(this.x+e,this.y+e)}overwite(e){this.x=e.x,this.y=e.y}subtract(e){return new r(this.x-e.x,this.y-e.y)}scale(e){return new r(this.x*e,this.y*e)}toString(){return`Vector2(${this.x}, ${this.y})`}clone(){return new r(this.x,this.y)}};function mt(r){let e=/^rgba?\(([^)]+)\)$/,n=r.match(e);if(n){let[i,s,o,d=1]=n[1].split(",").map(p=>parseFloat(p));return{r:Math.max(0,Math.min(255,Math.floor(i))),g:Math.max(0,Math.min(255,Math.floor(s))),b:Math.max(0,Math.min(255,Math.floor(o))),a:Math.max(0,Math.min(1,Math.floor(d*255)/255))}}return Te(r)}function yt(r){return`rgba(${r.r}, ${r.g}, ${r.b}, ${r.a})`}function Te(r){if(r=r.trim().toLowerCase(),r[0]==="#"){let n,i,s;if(r.length===7)n=parseInt(r.slice(1,3),16),i=parseInt(r.slice(3,5),16),s=parseInt(r.slice(5,7),16);else if(r.length===4)n=parseInt(r[1]+r[1],16),i=parseInt(r[2]+r[2],16),s=parseInt(r[3]+r[3],16);else throw new Error("Invalid hex color");return{r:n,g:i,b:s,a:1}}let e=r.match(/^rgba?\s*\(\s*(\d+)[, ]\s*(\d+)[, ]\s*(\d+)(?:[, ]\s*([\d.]+))?\s*\)$/);if(e)return{r:parseInt(e[1]),g:parseInt(e[2]),b:parseInt(e[3]),a:e[4]!==void 0?parseFloat(e[4]):1};throw new Error("Unsupported fillStyle format")}function gt(r,{r:e,g:n,b:i,a:s}={}){let[o,d,p,l,h]=r.match(/rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*([\d.]*)\)?/)||[];return`rgba(${e??d}, ${n??p}, ${i??l}, ${s??(h||1)})`}function bt(r,e,n){return n+(r-n)*e}function Se(){return typeof process<"u"&&process.release?.name==="node"?"node":typeof window<"u"||typeof self<"u"?"web":"unknown"}var Ce=Se(),B=Ce==="node",C=Ce==="web",U=class r{static unlock(){C&&this.audioCtx.state!=="running"&&this.audioCtx.resume()}static audioCtx=C?new AudioContext:null;static masterGain=C?this.audioCtx.createGain():null;static musicGain=C?this.audioCtx.createGain():null;static sfxGain=C?this.audioCtx.createGain():null;static{C&&(this.masterGain.gain.value=1,this.musicGain.gain.value=1,this.sfxGain.gain.value=1,this.sfxGain.connect(this.masterGain),this.musicGain.connect(this.masterGain),this.masterGain.connect(this.audioCtx.destination))}static get SFX_VOLUME(){return this.sfxGain.gain.value}static get MUSIC_VOLUME(){return this.musicGain.gain.value}static get VOLUME(){return this.masterGain.gain.value}static set SFX_VOLUME(e){this.sfxGain.gain.value=e}static set MUSIC_VOLUME(e){this.musicGain.gain.value=e}static set VOLUME(e){this.masterGain.gain.value=e}static noteToHz(e){return this.tuningFreq*Math.pow(2,(e-9)/12)}static tuningFreq=440;static audioBufferCache=new Map;static loops=new Map;static sfsx=new Map;static loopIdCounter=0;static CACHE_NAME="lia-audio-cache-v1";static async preLoad(e){if(this.audioBufferCache.has(e))return this.audioBufferCache.get(e);let n=r.CACHE_NAME,i,s;if(typeof caches<"u"&&(s=await caches.open(n),i=await s.match(e)),!i){if(i=await fetch(e),!i.ok)throw new Error(`Failed to fetch ${e}`);s&&await s.put(e,i.clone())}let o=await i.arrayBuffer(),d=await this.audioCtx.decodeAudioData(o);return this.audioBufferCache.set(e,d),d}static async getOnlyDownloadedCache(e){let n=r.CACHE_NAME;return await(await caches.open(n)).match(e)}static getCached(e){return this.audioBufferCache.get(e)||null}static async playSound(e,n=.2,i=1,s=!0){try{this.sfsx.has(e)&&this.sfsx.get(e).source.stop(),this.audioBufferCache.has(e)||await this.preLoad(e);let o=this.getCached(e);if(!o)return;let d=new H(o);d.buffer=o;let p=1-.12,l=1+.12;d.playbackRate=i??p+Math.random()*(l-p);let h=this.audioCtx.createGain();h.gain.value=n,d.tempGain=h,d.connect(h),h.connect(this.sfxGain),d.onended=()=>{d.disconnect(),h.disconnect()},d.start(),s&&this.sfsx.set(e,{source:d,gain:h})}catch(o){console.error(o)}}static async playLoop(e,n=1,{loopStart:i=0,loopEnd:s=null,exclusive:o=!0,skipMS:d=0}={}){if(o)for(let g of this.loops.keys())this.stopLoop(g);this.audioBufferCache.has(e)||await this.preLoad(e);let p=this.getCached(e);if(!p)return;let l=new H(p);l.buffer=p,l.loop=!0,typeof i=="number"&&(l.loopStart=i),typeof s=="number"&&(l.loopEnd=s);let h=this.audioCtx.createGain();h.gain.value=n,l.tempGain=h,l.playbackRate=1,l.onended=()=>{l.disconnect(),h.disconnect()},l.connect(h),h.connect(this.musicGain),l.start(0,d/1e3);let f=++this.loopIdCounter;return this.loops.set(f,{source:l,gain:h}),f}static stopLoop(e){let n=this.loops.get(e);n&&(n.source.stop(),n.source.notIndependent||(n.source.disconnect(),n.gain.disconnect()),this.loops.delete(e))}static async createLiaSource(e,{volume:n=1,speed:i=1,loop:s=!1,loopStart:o=0,loopEnd:d=null,isMusic:p=!1,gain:l=null}={}){try{this.audioBufferCache.has(e)||await this.preLoad(e);let h=this.getCached(e);if(!h)return null;let f=new H(h);f.loop=s,f.loopStart=o,f.loopEnd=typeof d=="number"?d:h.duration,f.playbackRate=i;let g=this.audioCtx.createGain();return g.gain.value=n,f.connect(g),f.tempGain=g,g.connect(l||(p?this.musicGain:this.sfxGain)),f.onended=()=>{f.disconnect(),g.disconnect()},f}catch(h){return console.error("Failed to create LiaAudioSrc:",h),null}}},Ie=["C","C#","D","D#","E","F","F#","G","G#","A","A#","B"];function xt(r){return Ie.includes(r)}var H=class{numberOfInputs;numberOfOutputs;constructor(e,n=U.audioCtx){this.context=n,this.buffer=e,this.source=null,this.startTime=0,this.pauseTime=0,this.playbackRate=1,this.isPlaying=!1,this.loop=!1,this.output=C?n.createGain():null,this.output.gain.value=1,this.channelCount=2,this.channelCountMode="max",this.channelInterpretation="speakers",this.numberOfInputs=0,this.numberOfOutputs=1,this.onended=null}channelCount;channelCountMode;channelInterpretation;onended;source;buffer;context;_createSource(){this.source&&(this.source.onended=null);let e=this.context.createBufferSource();return e.buffer=this.buffer,e.playbackRate.value=this.playbackRate,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd>0?this.loopEnd:this.buffer.duration,e.connect(this.output),this.source=e,e.onended=()=>{this.source===e&&(this.isPlaying&&!this.loop&&(this.isPlaying=!1,this.pauseTime=0),typeof this.onended=="function"&&this.onended())},e}play({fadeIn:e=0,offset:n=null}={}){let i=n!==null?n:this.pauseTime;if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.source=this._createSource(),this.startTime=this.context.currentTime-i/this.playbackRate,this.source.start(0,i),e>0?(this.output.gain.setValueAtTime(0,this.context.currentTime),this.output.gain.linearRampToValueAtTime(1,this.context.currentTime+e)):this.output.gain.setValueAtTime(1,this.context.currentTime),this.isPlaying=!0}start(e=0,n=0,i){this.isPlaying||(this.source=this._createSource(),this.startTime=this.context.currentTime+e-n/this.playbackRate,i!==void 0?this.source.start(this.context.currentTime+e,n,i):this.source.start(this.context.currentTime+e,n),this.pauseTime=n,this.isPlaying=!0)}pause({fadeOut:e=0}={}){if(!this.isPlaying)return;let n=this.getElapsed()/1e3;if(this.loop&&this.loopEnd>this.loopStart){let i=this.loopEnd-this.loopStart;n=this.loopStart+(n-this.loopStart)%i}if(this.isPlaying=!1,e>0){let i=this.context.currentTime;this.output.gain.setValueAtTime(this.output.gain.value,i),this.output.gain.linearRampToValueAtTime(0,i+e),setTimeout(()=>{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n,this.output.gain.setValueAtTime(1,this.context.currentTime)},e*1e3)}else{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n}}getElapsed(){return this.isPlaying?(this.context.currentTime-this.startTime)*this.playbackRate*1e3:this.pauseTime*1e3}setSpeed(e){if(e<=0)throw new Error("Playback rate must be positive");let n=this.getElapsed()/1e3;this.playbackRate=e,this.isPlaying&&(this.pause(),this.pauseTime=n,this.play())}setLoop(e=!0){this.loop=e,this.source&&(this.source.loop=e)}loop;playbackRate;startTime;tempGain=null;connect(e,n=0,i=0){if("value"in e)this.output.connect(e,n);else return this.output.connect(e,n,i),e}disconnect(e,n,i){e===void 0?this.output.disconnect():this.output.disconnect(e,n,i)}output;stop(e=0){if(this.notIndependent)return this.pause();if(!this.source)return;let n=this.context.currentTime+e;this.source.stop(n),this.isPlaying=!1,this.notIndependent||(this.pauseTime=0)}pauseTime;isPlaying;notIndependent=!1;loopStart=0;loopEnd=0},Pe={osc:{enabled:!0,type:"sine",freq:440,detune:0},noise:{enabled:!1,level:.5},ampEnv:{attack:.005,decay:.1,sustain:0,release:.1,volume:.3},pitchEnv:{amount:0,decay:.2},filter:{enabled:!1,type:"lowpass",freq:1200,Q:1,envAmount:0,decay:.2},lfo:{enabled:!1,target:"freq",rate:8,depth:20},duration:.4},_=class r{constructor(e={}){this.ctx=U.audioCtx,this.cfg=structuredClone(Pe),Object.assign(this.cfg,e)}ctx;cfg;play(e=U.sfxGain){let n=this.ctx,i=n.currentTime,s=this.cfg,o=n.createGain();o.gain.setValueAtTime(1e-4,i);let d=s.ampEnv;o.gain.exponentialRampToValueAtTime(d.volume,i+d.attack),o.gain.exponentialRampToValueAtTime(Math.max(1e-4,d.sustain*d.volume),i+d.attack+d.decay),o.gain.exponentialRampToValueAtTime(1e-4,i+s.duration+d.release);let p=o,l;s.filter.enabled&&(l=n.createBiquadFilter(),l.type=s.filter.type,l.frequency.value=s.filter.freq,l.Q.value=s.filter.Q,l.connect(o),p=l);let h;if(s.osc.enabled){if(h=n.createOscillator(),h.type=s.osc.type,h.frequency.value=s.osc.freq,h.detune.value=s.osc.detune,s.pitchEnv.amount!==0){let a=Math.pow(2,s.pitchEnv.amount/12);h.frequency.exponentialRampToValueAtTime(s.osc.freq*a,i+s.pitchEnv.decay)}h.connect(p),h.start(i),h.stop(i+s.duration+d.release)}let f;if(s.noise.enabled){let a=n.sampleRate*s.duration,u=n.createBuffer(1,a,n.sampleRate),c=u.getChannelData(0);for(let y=0;y<a;y++)c[y]=(Math.random()*2-1)*s.noise.level;f=n.createBufferSource(),f.buffer=u,f.connect(p),f.start(i),f.stop(i+s.duration+d.release)}let g,b;s.lfo.enabled&&h&&(g=n.createOscillator(),g.frequency.value=s.lfo.rate,b=n.createGain(),b.gain.value=s.lfo.depth,g.connect(b),s.lfo.target==="freq"?b.connect(h.frequency):s.lfo.target==="gain"?b.connect(o.gain):s.lfo.target==="filter"&&l&&b.connect(l.frequency),g.start(i),g.stop(i+s.duration)),o.connect(e);let x=[h,f,g,b,l,o],t=i+s.duration+d.release;setTimeout(()=>{x.forEach(a=>a?.disconnect())},(t-n.currentTime)*1e3)}getConfig(){return structuredClone(this.cfg)}setConfig(e){return Object.assign(this.cfg,e),this}getKey(e){return this.cfg[e]}setKey(e,n){return Object.assign(this.cfg[e],n),this}setFreq(e){return this.cfg.osc.freq=e,this}setWave(e){return this.cfg.osc.type=e,this}setVolume(e){return this.cfg.ampEnv.volume=e,this}setAmpEnv(e,n,i,s){return Object.assign(this.cfg.ampEnv,{attack:e,decay:n,sustain:i,release:s}),this}setPitchEnv(e,n){return Object.assign(this.cfg.pitchEnv,{amount:e,decay:n}),this}setNoiseEnabled(e){return this.cfg.noise.enabled=e,this}setNoiseLevel(e){return this.cfg.noise.level=e,this}setFilterEnabled(e){return this.cfg.filter.enabled=e,this}setFilter(e,n,i){return Object.assign(this.cfg.filter,{type:e,freq:n,Q:i,enabled:!0}),this}setLFOEnabled(e){return this.cfg.lfo.enabled=e,this}setLFO(e,n,i){return Object.assign(this.cfg.lfo,{target:e,rate:n,depth:i,enabled:!0}),this}setDuration(e){return this.cfg.duration=e,this}clone(){return new r(structuredClone(this.cfg))}},Fe=new _({osc:{enabled:!0,type:"square",freq:900,detune:0},ampEnv:{attack:.002,decay:.04,sustain:0,release:.02,volume:.15},duration:.05}),Me=new _({osc:{enabled:!0,type:"sine",freq:600,detune:0},ampEnv:{attack:.01,decay:.08,sustain:0,release:.04,volume:.12},duration:.1}),Ae=new _({osc:{enabled:!0,type:"triangle",freq:500,detune:0},pitchEnv:{amount:12,decay:.15},ampEnv:{attack:.01,decay:.12,sustain:0,release:.05,volume:.25},duration:.18}),_e=new _({osc:{enabled:!0,type:"sawtooth",freq:1200,detune:0},pitchEnv:{amount:-24,decay:.3},ampEnv:{attack:.005,decay:.25,sustain:0,release:.05,volume:.3},duration:.35}),Le=new _({osc:{enabled:!0,type:"square",freq:180,detune:0},noise:{enabled:!0,level:.4},ampEnv:{attack:.002,decay:.15,sustain:0,release:.05,volume:.35},duration:.2}),vt=new Map([["ui_click",Fe],["ui_hover",Me],["jump",Ae],["laser",_e],["hit",Le]]);function wt(r=12){let e=Date.now().toString(36),n=crypto.getRandomValues(new Uint8Array(r)),i=Array.from(n).map(s=>s.toString(36).padStart(2,"0")).join("");return(e+i).slice(0,r)}function le(r=12){let e=Date.now().toString(36),n=crypto.getRandomValues(new Uint8Array(4)),i=Array.from(n).map(s=>s.toString(36).padStart(2,"0")).join("");return(e+i).slice(0,r)}var we=class{peer=null;key;events={};mbAcc=0;connected=!1;constructor(){this.key=`${Ve()}_${Date.now()}`}connect(e){e&&(this.peer=e,e.peer=this,this.connected=!0,e.connected=!0),this._emit("open")}isConnected(){return this.connected&&!!this.peer}on(e,n){this.events[e]||(this.events[e]=[]),this.events[e].push(n)}off(e,n){this.events[e]&&(this.events[e]=this.events[e].filter(i=>i!==n))}_emit(e,n){this.events[e]?.forEach(i=>i(n))}send(e,n){if(!this.peer)throw new Error("No peer connected");this.peer._receive(e,n)}_receive(e,n){e?this._emit(e,n):this._emit("message",n)}close(){if(this.connected=!1,this.peer){let e=this.peer;this.peer=null,e.peer=null,e.connected=!1,e._emit("close")}this._emit("close")}getKey(){return this.key}};function Ve(){if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();if(typeof crypto<"u"&&typeof crypto.getRandomValues=="function"){let r=new Uint8Array(16);return crypto.getRandomValues(r),r[6]=r[6]&15|64,r[8]=r[8]&63|128,[...r].map(e=>e.toString(16).padStart(2,"0")).join("").replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/,"$1-$2-$3-$4-$5")}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})}function De(r){let e=!0;function n(){e&&(r(),requestAnimationFrame(n))}return requestAnimationFrame(n),{clear:()=>e=!1}}function Ge(r,e,n,i,s){let o=Math.cos(s),d=Math.sin(s),p=[];if(o!==0){let l=(0-r)/o,h=e+l*d;l>0&&h>=0&&h<=i&&p.push({side:"left",t:l})}if(o!==0){let l=(n-r)/o,h=e+l*d;l>0&&h>=0&&h<=i&&p.push({side:"right",t:l})}if(d!==0){let l=(0-e)/d,h=r+l*o;l>0&&h>=0&&h<=n&&p.push({side:"top",t:l})}if(d!==0){let l=(i-e)/d,h=r+l*o;l>0&&h>=0&&h<=n&&p.push({side:"bottom",t:l})}return p.length===0?null:(p.sort((l,h)=>l.t-h.t),p[0])}function He(r,e){let n;switch(e){case"left":case"right":n=Math.PI-r;break;case"top":case"bottom":n=2*Math.PI-r;break}return(n%(2*Math.PI)+2*Math.PI)%(2*Math.PI)}function Ct(r,e,n,i,s){let o=Ge(r,e,n,i,s);return o?{...o,avoidAngle:He(s,o.side)}:null}function ze(){return B?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}var Et=ze();function Ue({width:r,height:e,updateHz:n="frames"}){return new V.KaylaGame(r,e,n==="frames"?1/0:n)}function $e(r){let e=new O(r);return new V.KaylaScene(e)}function Ne(r){return new V.KaylaRenderer(r)}function Oe(r,e){if(typeof r!="function")throw new Error("Invalid Element Type.");let n=e??{};return n.key??=r.name+"_"+le(),{type:r,props:n}}var F;(i=>{function r(s,o){return!(s.right<o.left||s.left>o.right||s.bottom<o.top||s.top>o.bottom)}i.rawCollision=r;function e(s,o,d){let p=o*Math.PI/180,l=Math.cos(p),h=Math.sin(p),f=1/0;return l>0&&(f=Math.min(f,(d.right-s.x)/l)),l<0&&(f=Math.min(f,(d.left-s.x)/l)),h>0&&(f=Math.min(f,(d.bottom-s.y)/h)),h<0&&(f=Math.min(f,(d.top-s.y)/h)),A.from(o).scale(f)}i.getCurrToBound=e;function n(s){let{left:o,right:d,top:p,bottom:l,width:h,height:f,x:g=0,y:b=0}=s;if(h===null||f===null)throw new Error("width and height are required");let x,t;if(o!=null&&d!=null){if(Math.abs(d-o-h)>1e-6)throw new Error("left, right, and width mismatch");x=o}else g!=null?x=g-h/2:o!=null?x=o:d!=null?x=d-h:x=0;if(p!=null&&l!=null){if(Math.abs(l-p-f)>1e-6)throw new Error("top, bottom, and height mismatch");t=p}else b!=null?t=b-f/2:p!=null?t=p:l!=null?t=l-f:t=0;return{left:x,right:x+h,top:t,bottom:t+f,width:h,height:f,x:x+h/2,y:t+f/2}}i.createRawRect=n})(F||={});var V;(b=>{class r extends X{#e;#t;constructor(t,a,u){super(t,a,u),this.#e=new Set,this.#t=!1}delay(t){return this.ticker.createTimeout(t)}get started(){return this.#t}start(){if(!this.#t){for(let t of this.#e)t.start();this.#t=!0,super.start()}}stop(){if(this.#t){for(let t of this.#e)t.stop();this.#t=!1,super.stop()}}addRenderer(t){this.#e.has(t)||(this.#e.add(t),this.#t&&t.start(),t.game=this)}get mainRenderer(){return[...this.#e].at(0)}getRenderers(){return[...this.#e]}deleteRenderer(t){this.#e.has(t)&&(this.#e.delete(t),this.#t&&t.stop(),delete t.game)}}b.KaylaGame=r;class e extends N{game;pointerX;pointerY;pointerEvents;onPointerDown;onPointerUp;onPointerCancel;onPointerMove;constructor(t){super(t),this.useDraw=this.useDraw.bind(this),this.on("draw",a=>{if(this.game)for(let u of this.game.scenes.values())u.handleDraw(a)}),this.pointerX=0,this.pointerY=0,this.pointerEvents=new T,this.pointerPosUpdater=this.pointerPosUpdater.bind(this),this.onPointerDown=a=>this.onPointerAll(a,"down"),this.onPointerUp=a=>this.onPointerAll(a,"up"),this.onPointerCancel=a=>this.onPointerAll(a,"cancel"),this.onPointerMove=a=>this.onPointerAll(a,"move")}pointerPosUpdater(t){this.pointerX=t.clientX,this.pointerY=t.clientY}onPointerAll(t,a){this.pointerPosUpdater(t);let u=e.getClickType(t);if(u!=="invalid"){t.preventDefault();let c=this.getMousePos();this.pointerEvents.emit("action",c,u,a)}}static getClickType(t){switch(t.button){case 0:return"left";case 1:return"middle";case 2:return"right";default:return"invalid"}}listenPointerUpdates(){this.canvas.addEventListener("pointermove",this.pointerPosUpdater),this.canvas.addEventListener("pointerdown",this.onPointerDown),this.canvas.addEventListener("pointerup",this.onPointerUp),this.canvas.addEventListener("pointercancel",this.onPointerCancel),this.canvas.addEventListener("pointermove",this.onPointerMove)}unlistenPointerUpdates(){this.canvas.removeEventListener("pointermove",this.pointerPosUpdater),this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointermove",this.onPointerMove)}pointerPosToWorldPos(t,a){let u=this.canvas.getBoundingClientRect(),c=(t-u.left)/u.width,y=(a-u.top)/u.height,v=c*this.viewportWidth*this.cameraWidth/u.width,R=y*this.viewportHeight*this.cameraHeight/u.height;return new A(v,R)}getMousePos(){return this.pointerPosToWorldPos(this.pointerX,this.pointerY)}useDraw(t){let a=u=>{t(u,new i)};return this.on("draw",a),()=>{this.off("draw",a)}}attachTo(t){t.addRenderer(this),this.game=t}detach(){this.game&&this.game.deleteRenderer(this)}}b.KaylaRenderer=e;class n{current;saves;constructor(){this.saves=[]}useTick(t){if(!this.current)throw new Error("Hook 'useTick' must be executed in the top level scope of a component.");this.current.onTick[this.current.useStepCallIndex]=t,this.current.useStepCallIndex++}usePaint(t){if(!this.current)throw new Error("Hook 'usePaint' must be executed in the top level scope of a component.");this.current.onPaint[this.current.useDrawCallIndex]=t,this.current.useDrawCallIndex++}useEntity(){if(!this.current)throw new Error("Hook 'useEntity' must be executed in the top level scope of a component.");return he(ce)}useSelf(t){if(!this.current)throw new Error("Hook 'useSelf' must be executed in the top level scope of a component.");let a=he(null);return(a.current===null||a.current===void 0)&&(a.current=t()),a.current}useInitialization(t){if(!this.current)throw new Error("Hook 'useInitialization' must be executed in the top level scope of a component.");let a=this.current;a.onInits[this.current.useInitCallIndex]=t,a.useInitCallIndex++}useRect(){if(!this.current)throw new Error("Hook 'useRect' must be executed in the top level scope of a component.");return L(()=>new b.KaylaInternalRect(this.current))}useFiber(){if(!this.current)throw new Error("Hook 'useFiber' must be executed in the top level scope of a component.");return L(()=>this.current)}useFiberControl(){if(!this.current)throw new Error("Hook 'useFiberControl' must be executed in the top level scope of a component.");let t=this.current;return L(()=>({refresh:()=>t.refresh(),get childrenCount(){return t.lastChildren.length},setMaxChildren:a=>{t.setMaxChildren(a)},getMaxChildren:()=>t.getMaxChildren(),get maxSafeChildren(){return t.maxSafeChildren},get key(){return t.key},get getChildrenEntities(){return t.getChildrenEntities.bind(t)},get getEntityChain(){return t.getEntityChain.bind(t)},get getFiberChain(){return t.getFiberChain.bind(t)}}))}useCurrentTicker(){if(!this.current)throw new Error("Hook 'useCurrentTicker' must be executed in the top level scope of a component.");return this.current.getAttachedGame().ticker}useCurrentRenderer(){if(!this.current)throw new Error("Hook 'useCurrentRenderer' must be executed in the top level scope of a component.");return this.current.getAttachedGame().mainRenderer}useCurrentGame(){if(!this.current)throw new Error("Hook 'useCurrentGame' must be executed in the top level scope of a component.");return this.current.getAttachedGame()}useCurrentScene(){if(!this.current)throw new Error("Hook 'useCurrentScene' must be executed in the top level scope of a component.");return this.current.scene}useState(t,{alwaysRecall:a=!1}={}){if(!this.current)throw new Error("Hook 'useState' must be executed in the top level scope of a component.");let c=this.current.state[this.current.useStateCallIndex]??new s(this.current,t,{alwaysRecall:a});return this.current.state[this.current.useStateCallIndex]=c,this.current.useStateCallIndex++,c}useShouldRefresh(t){let a=this.current;if(!a)throw new Error("useShouldRefresh must be called inside a component");a.watchedDeps&&console.warn("useShouldRefresh called multiple times \u2014 using the last call"),a.watchedDeps=t}useRef(t){if(!this.current)throw new Error("Hook 'useRef' must be executed in the top level scope of a component.");let u=this.current.refs[this.current.useRefCallIndex]??d(t??null);return this.current.refs[this.current.useRefCallIndex]=u,this.current.useRefCallIndex++,u}useEffect(t){if(!this.current)throw new Error("Hook 'useEffect' must be executed in the top level scope of a component.");this.current.onEffect[this.current.useEffectCallIndex]=t,this.current.useEffectCallIndex++}useViewportEffect(t){if(!this.current)throw new Error("Hook 'useViewport' must be executed in the top level scope of a component.");this.current.onViewportEffect[this.current.useViewCallIndex]=t,this.current.useViewCallIndex++}useExports(t,a){if(!this.current)throw new Error("Hook 'useExports' must be executed in the top level scope of a component.");this.current.onExport=a}useGlobalClick(t,a){if(!this.current)throw new Error("Hook 'useGlobalClick' must be executed in the top level scope of a component.");a??={},this.current.onGlobalClick[this.current.useGlobalClickCallIndex]={handler:t,config:a},this.current.useGlobalClickCallIndex++}useClick(t,a){if(!this.current)throw new Error("Hook 'useClick' must be executed in the top level scope of a component.");a??={};let u=this.current;Ee((c,y,v)=>{let R=u.entity;if(!R)return;let S=R.getRawRect(),Z=F.createRawRect({x:c.x,y:c.y,width:3,height:3});F.rawCollision(S,Z)&&t(c,y,v)},a)}useContext(t){if(!this.current)throw new Error("Hook 'useContext' must be executed in the top level scope of a component.");return this.current.findContextValueFromInst(t)}save(){this.saves.push({current:this.current})}restore(){let t=this.saves.pop();if(!t)throw new Error("Cannot restore without saving.");this.current=t.current}logLevel="warn";logger={debug:(...t)=>{this.logLevel==="debug"&&console.debug(...t)},info:(...t)=>{["info","warn","debug"].includes(this.logLevel)&&console.info(...t)},warn:(...t)=>{["warn","debug"].includes(this.logLevel)&&console.warn(...t)},error:(...t)=>console.error(...t),withFiber:(t,a,u,...c)=>{let y=t?.fc?.name||"anonymous",v=t?.key?` key=${t.key}`:"";this.logger[a](`${u} <${y}${v}>`,...c)}}}b.GlobalKayla=n;class i{preventDefault(){this.#e=!0}#e=!1;isPrevented(){return this.#e}}b.KaylaEvent=i;class s{#e;#t;#n;alwaysRecall;constructor(t,a,{alwaysRecall:u=!1}={}){this.#t=t,this.#e=a??void 0,this.#n=Date.now(),this.alwaysRecall=u}get(){return this.#e}*[Symbol.iterator](){throw new Error(`Hey! KaylaState is NOT an array / iterable like useState in React.
|
|
2
2
|
You probably wrote: const [value, setValue] = useState(...)
|
|
3
3
|
|
|
4
4
|
\u2192 In Kayla write: const value = useState(...);
|
|
5
|
-
\u2192 Then: value.get() / value.set(v) / value.add(n)`)}refreshBased(){return[this.set.bind(this),this.get()]}add(t,{recall:a}={}){this.set(this.get()+t,{recall:a})}multiply(t,{recall:a}={}){this.set(this.get()*t,{recall:a})}set(t,{recall:a=!1}={}){let l=this.#e;if(t===l)return;this.#e=t;let y=Date.now()-this.#n;a&&y<67&&this.#t.global.logger.warn(`Hot structural state change <${this.#t.fc?.name||"anonymous"}> delta=${y}ms`),(a||this.alwaysRecall)&&this.#t.refresh(),this.#n=Date.now()}get value(){return this.#e}get lastChanged(){return this.#n}}g.KaylaInternalState=s;class o{#e;constructor(t){this.#e=t??void 0}#t;setSetter(t){this.#t=t}get current(){return this.#e}set current(t){this.#e=t,this.#t&&this.#t(this.#e)}}g.KaylaInternalRef=o;function c(x){return new o(x)}g.createReassignableRef=c;class d{state;refs;global;callProps;scene;exports;detectedParent;contextInfo;get childrenCount(){return this.lastChildren.length}maxSafeChildren;dynamicChildren;constructor(t,a,l){if(!l)throw new Error("Empty element");this.maxSafeChildren=40,this.scene=a,this.state=[],this.refs=[],this.onInits=[],this.onUnInits=[],this.fc=l.type,this.callProps=l.props??{},this.global=t,this.lastStateDeps=[],this.entity=null,this.lastChildren=[],this.onEffect=[],this.onUnEffect=[],this.onPaint=[],this.onTick=[],this.onGlobalClick=[],this.pointerHook=this.pointerHook.bind(this),this.resizeHook=this.resizeHook.bind(this),this.contextInfo=null,this.detectedParent=null,this.dynamicChildren=[],this.key??=this.fc.name+"_"+oe(),this.onViewportEffect=[]}getChildrenEntities(){return this.lastChildren.map(t=>t.entity)}pointerHook(t,a){try{for(let l of this.onGlobalClick)l(t,a)}catch(l){this.global.logger.error(l)}}resizeHook({width:t,height:a}){try{for(let l of this.onViewportEffect)l(this.getAttachedRenderer(),t,a)}catch(l){this.global.logger.error(l)}}bindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.on("down",this.pointerHook),t.on("viewport_update",this.resizeHook))}unbindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.off("down",this.pointerHook),t.off("viewport_update",this.resizeHook))}get key(){return this.callProps.key}set key(t){this.callProps.key=t}get children(){return this.callProps.children}set children(t){this.callProps.children=t}entity;onExport=()=>({});onEffect;onViewportEffect;onGlobalClick;onInits;onUnInits;onUnEffect;onEffectDeps;onPaint;onTick;fc;useStateCallIndex=0;useEffectCallIndex=0;useGlobalClickCallIndex=0;useDrawCallIndex=0;useStepCallIndex=0;useRefCallIndex=0;useInitCallIndex=0;useViewCallIndex=0;lastStateDeps;watchedDeps;lastDepStamps=[];getAttachedRenderer(){return this.getAttachedGame().mainRenderer}getAttachedGame(){return this.scene.getGame()}setMaxChildren(t){if(this.maxSafeChildren=Math.max(0,t),this.global.logger.debug(`Max children limit updated to ${t} for <${this.fc?.name||"anonymous"} key=${this.key}>`),this.lastChildren.length>this.maxSafeChildren){let a=this.lastChildren.length-this.maxSafeChildren;this.global.logger.warn(`Child limit exceeded (${this.lastChildren.length} > ${this.maxSafeChildren}) \u2014 removing ${a} oldest children <${this.fc?.name||"anonymous"} key=${this.key}>`);let l=this.lastChildren.slice(0,this.maxSafeChildren),f=this.lastChildren.slice(this.maxSafeChildren);this.lastChildren=l;for(let y of f)y.unuse()}}getMaxChildren(){return this.maxSafeChildren??1/0}getFiberChain(){let t=[],a=this.detectedParent;for(;a;)t.push(a),a=a?.detectedParent;return t}getContextChain(){return this.getFiberChain().map(t=>t.contextInfo).filter(Boolean)}findContextValueFromInst(t){return this.getContextChain().find(a=>a.instance===t)?.value}getEntityChain(){return this.getFiberChain().map(t=>t.entity)}shouldFullRefresh(){if(this.isFirstUse||!this.watchedDeps||this.watchedDeps.length===0)return!0;for(let t=0;t<this.watchedDeps.length;t++){let a=this.watchedDeps[t],l=this.lastDepStamps[t]??0;if(a.lastChanged>l)return!0}return!1}captureDepStamps(){this.watchedDeps&&(this.lastDepStamps=this.watchedDeps.map(t=>t.lastChanged))}refresh(){if(!this.shouldFullRefresh())return;let t=this.fc?.name||"anonymous";if(!this.shouldFullRefresh()){this.global.logger.debug(`Refresh skipped <${t} key=${this.key}>`);return}this.global.logger.debug(`Refresh executed <${t} key=${this.key}> reason=${this.isFirstUse?"first":"deps-changed"}`),this.lastChildren.length>this.maxSafeChildren&&this.global.logger.warn(`High child count <${t} key=${this.key}> children=${this.lastChildren.length}`);let a;this.global.save(),this.global.current=this,this.useStateCallIndex=0,this.useRefCallIndex=0,this.useInitCallIndex=0,this.useViewCallIndex=0,this.useStateCallIndex=0,this.useDrawCallIndex=0,this.useStepCallIndex=0,this.useEffectCallIndex=0,this.useGlobalClickCallIndex=0;let l=[];try{let f=this.fc(this.callProps)??[];if(f&&!Array.isArray(f)&&(f=[f]),!Array.isArray(f))throw new Error("Non array or non undefined children received.");for(let y of f)if(y.type===this.fc)throw new Error("Circular Component.");l=f}catch(f){a=f}if(this.global.restore(),this.updateChildren(l,!0),a)throw a}updateChildren(t,a){try{let l=[...t,...this.dynamicChildren],f=[],y=[];for(let w of l){let k=w.props?.key,P;k!=null&&(P=this.lastChildren.find(Re=>Re.key===k)),P||(P=new d(this.global,this.scene,w)),P.detectedParent=this,y.push(P),f.push(P)}for(let w of this.lastChildren)f.includes(w)||w.unuse();this.lastChildren=y,this.captureDepStamps(),this.use();for(let w of this.lastChildren)try{w.refresh()}catch(k){console.error(k)}}catch(l){console.error(l)}}lastChildren;isFirstUse=!0;use(){try{let t=!0;if(this.lastStateDeps??=[],Array.isArray(this.onEffectDeps)&&(t=this.onEffectDeps.some((a,l)=>{let f=this.lastStateDeps.at(l);if(f){let y=a.lastChanged,w=f.stamp;return y>w}})),t||this.isFirstUse){this.global.logger.debug(`Using <${this.fc?.name||"anonymous"} key=${this.key}> count=${this.onEffect.length}`);let a=this.isFirstUse;this.isFirstUse=!1,Array.isArray(this.onEffectDeps)&&(this.lastStateDeps=this.onEffectDeps.map(f=>({stamp:f.lastChanged,stateRef:f}))),this.entity&&this.scene.getScene().removeEntity(this.entity),this.entity&&this.entity.name!==this.key&&(this.entity=null),this.entity=this.entity??new u(this,this.key);for(let f of this.refs)f.current===he&&(f.current=this.entity);if(this.callProps.ref instanceof o&&(this.callProps.ref.current=this.entity),this.exports=this.onExport(),this.callProps.exportsRef instanceof o&&(this.callProps.exportsRef.current=this.exports),this.entity&&this.entity!==this.entity&&this.global.logger.warn(`Entity name mismatch during refresh <${this.fc?.name} key=${this.key}>`),this.scene.getScene().addEntity(this.entity),a){this.onUnInits=[];for(let f of this.onInits){this.bindEvents();try{let y=f();typeof y=="function"&&this.onUnInits.push(y)}catch(y){throw this.global.logger.error("Initialization failed",this.fc?.name||"anonymous",y),y}}}try{for(let f of this.onUnEffect??[])f()}catch(f){console.error(f)}let l=this.onEffect.map(f=>f()).filter(f=>f!==void 0);this.onUnEffect=l}}catch(t){throw this.global.logger.error(`use() failed <${this.fc?.name||"anonymous"} key=${this.key}>`,t),t}}unuse(){this.global.logger.debug(`unuse called <${this.fc?.name||"anonymous"} key=${this.key}> children=${this.lastChildren.length}`),this.detectedParent=null,this.watchedDeps=void 0,this.lastDepStamps=[],this.unbindEvents();try{for(let t of this.onUnInits)t();for(let t of this.onUnEffect)t()}catch(t){this.global.logger.error(`Cleanup failed in unuse <${this.fc?.name||"anonymous"} key=${this.key}>`,t)}this.scene.getScene().removeEntity(this.entity);for(let t of this.lastChildren)t.unuse();this.lastChildren.length=0}}g.KaylaFiber=d;class u extends q{#e;flags;getRawRect(){return F.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}getFiber(){return this.#e}constructor(t,a){super(a,0,0,0,0),this.#e=t,this.flags=new Map,this.color="transparent"}setFlag(t,a){return this.flags.set(t,a)}getFlag(t){return this.flags.get(t)}removeFlag(t){return this.flags.delete(t)}update(t){let a=new i;if(this.#e&&this.#e.onTick)for(let l of this.#e.onTick)l(t,a);a.isPrevented()}draw(t){let a=new i;if(this.#e&&this.#e.onPaint)for(let l of this.#e.onPaint)l(t,a);a.isPrevented()||super.draw(t)}getRect(){return new h(this.getFiber())}}g.KaylaRectEntity=u;class h{#e;constructor(t){this.#e=t}get color(){return this.#t(),this.entity.color}set color(t){this.#t(),this.entity.color=t}getRaw(){return F.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}get entity(){return this.#e.entity??null}#t(){if(!this.#e)throw new Error("No fibers found.");if(!this.entity)throw new Error("The entity does NOT exist yet.")}isCollidingWith(t){return this.#t(),this.entity.isCollidingWith(t.entity)}get setFlag(){return this.#t(),this.entity.setFlag.bind(this.entity)}get getFlag(){return this.#t(),this.entity.getFlag.bind(this.entity)}get removeFlag(){return this.#t(),this.entity.removeFlag.bind(this.entity)}isHovered(){let t=this.getRaw(),a=this.#e.getAttachedRenderer().getMousePos(),l=F.createRawRect({x:a.x,y:a.y,width:3,height:3});return F.rawCollision(t,l)}get pos(){return this.#t(),this.entity.pos}get x(){return this.#t(),this.pos.x}set x(t){this.#t(),this.pos.x=t}get y(){return this.#t(),this.pos.y}set y(t){this.#t(),this.pos.y=t}get width(){return this.#t(),this.entity.width}set width(t){this.#t(),this.entity.width=t}get height(){return this.#t(),this.entity.height}set height(t){this.#t(),this.entity.height=t}get z(){return this.#t(),this.entity.z}set z(t){this.#t(),this.entity.z=t}get left(){return this.#t(),this.entity.left}set left(t){this.#t(),this.entity.left=t}get right(){return this.#t(),this.entity.right}set right(t){this.#t(),this.entity.right=t}get top(){return this.#t(),this.entity.top}set top(t){this.#t(),this.entity.top=t}get bottom(){return this.#t(),this.entity.bottom}set bottom(t){this.#t(),this.entity.bottom=t}get toLocal(){return this.entity.toLocal.bind(this.entity)}get toWorld(){return this.entity.toWorld.bind(this.entity)}}g.KaylaInternalRect=h;class p{constructor(t){this.#t=t,this.#e=null,t.on("update",this.tickHandler.bind(this)),this.drawHandler=this.drawHandler.bind(this)}#e;#t;getFibers(){return this.getEntities().map(t=>t.getFiber())}getEntities(){return Array.from(this.getScene().entities.values())}getScene(){return this.#t}getGame(){return this.#e}drawHandler(t){return this.#t.handleDraw(t)}attachTo(t){t.addScene(this.#t),this.#e=t}async spawn(t){let a=this.createFiber(t);await this.#e.delay(0),a.refresh()}createFiber(t){return new d(g.singleGlobalInstance,this,t)}detach(){this.#e&&this.#e.removeScene(this.#t)}tickHandler(){}}g.KaylaScene=p,g.singleGlobalInstance=new g.GlobalKayla})(V||={});var W=class{#e;constructor(e){this.Provider=this.#t.bind(this),this.#e=e}get defaultValue(){return this.#e}#t({value:e=this.defaultValue,children:n}){let i=Ee();return Y(()=>{i.contextInfo={instance:this,value:e}}),J(this.Provider,()=>({value:e})),n}Provider;Consumer};function Oe(r){return new W(r)}var m=V.singleGlobalInstance,Xe=m.useState.bind(m),le=m.useRef.bind(m),qe=m.useShouldRefresh.bind(m),ce=m.useEffect.bind(m),Be=m.useViewportEffect.bind(m),Ce=m.useGlobalClick.bind(m),We=m.useClick.bind(m),Y=m.useInitialization.bind(m),j=m.useRect.bind(m),Ye=m.useTick.bind(m),Q=m.usePaint.bind(m),J=m.useExports.bind(m),L=m.useSelf.bind(m),de=m.useFiberControl.bind(m),Ee=m.useFiber.bind(m),je=m.useEntity.bind(m),Qe=m.useCurrentGame.bind(m),Je=m.useCurrentRenderer.bind(m),Ze=m.useCurrentScene.bind(m),et=m.useCurrentTicker.bind(m),tt=m.useContext.bind(m),he=Symbol("self_ref");var fe=r=>{Promise.resolve(1).then(()=>{try{r()}catch(e){console.error(e)}})},nt=({children:r})=>Array.isArray(r)?[...r]:r;function rt(r){return V.createReassignableRef(r)}function it(r){if(typeof r!="object"||typeof r=="function"||r===null)return r;let e={current:r};return new Proxy({},{get(i,s,o){return s==="reassignSelf"?c=>{e.current=c}:Reflect.get(e.current,s,o)},set(i,s,o,c){return Reflect.set(e.current,s,o,c)},has(i,s){return Reflect.has(e.current,s)},ownKeys(i){return Reflect.ownKeys(e.current)},getOwnPropertyDescriptor(i,s){return Reflect.getOwnPropertyDescriptor(e.current,s)},deleteProperty(i,s){return Reflect.deleteProperty(e.current,s)}})}function st(r){m.logLevel=r}function at(r){let e=r.name||"anonymous-custom-hook";return function(i){let s=m.current;if(!s)throw new Error(`Custom hook '${e}' must be called inside a Kayla component`);let o=i??{};return r.memoize!==!1?L(()=>(s.global.logLevel==="debug"&&s.global.logger.debug(`Custom hook '${e}' initialized (memoized) <${s.fc?.name||"anonymous"} key=${s.key||"no-key"}>`),r.onUse(s,m,o))):(s.global.logLevel==="debug"&&s.global.logger.debug(`Custom hook '${e}' running (non-memoized) <${s.fc?.name||"anonymous"} key=${s.key||"no-key"}>`),r.onUse(s,m,o))}}Reflect.set(globalThis,"Kayla",pe);var ot;(n=>(n.Flex=({align:i="stretch",children:s,direction:o="row",gap:c=0,justify:d="start",wrap:u="nowrap",getHeight:h,getWidth:p,getCenterX:b,getCenterY:g,color:x})=>{let t=de(),a=j(),l=L(()=>({recalc(){let f=Number(c)||0,y=b(),w=g(),k=p(),P=h();a.x=y,a.y=w,a.width=k,a.height=P;let ut=t.getChildrenEntities().filter(Boolean).map(v=>v.getRect()).filter(v=>v.getFlag("flex-ignored")!==!0),S=o==="row",M=S?a.width:a.height,Rt=S?a.height:a.width,me=0,$=0,ye=[],Z=[];ut.forEach(v=>{let ee=S?v.width:v.height;me+ee>M&&u==="wrap"?(ye.push({height:$,items:Z}),Z=[v],me=ee,$=S?v.height:v.width):(Z.push(v),me+=ee+f,$=Math.max($,S?v.height:v.width))}),ye.push({height:$,items:Z});let be=0;ye.forEach((v,ee)=>{let I=v.items,D=I.reduce((E,te)=>E+(S?te.width:te.height),0)+f*(I.length-1),K=0;d==="center"&&(K=(M-D)/2),d==="end"&&(K=M-D),d==="space-between"&&(K=0),d==="space-around"&&(K=(M-D)/(I.length*2)),d==="space-evenly"&&(K=(M-D)/(I.length+1)),I.forEach((E,te)=>{E.z=a.z+1;let G=S?E.width:E.height,ne=S?E.height:E.width,re=0;i==="center"&&(re=(v.height-ne)/2),i==="end"&&(re=v.height-ne),i==="stretch"&&(S?E.height=v.height:E.width=v.height),S?(E.x=K+G/2,E.y=be+re+ne/2):(E.x=be+re+ne/2,E.y=K+G/2),d==="space-between"&&te<I.length-1?K+=G+f+(M-D)/(I.length-1):d==="space-around"?K+=G+f+(M-D)/I.length:d==="space-evenly"?K+=G+f+(M-D)/(I.length+1):K+=G+f}),be+=v.height+f})}}));return Q((f,y)=>{y.preventDefault(),f.fillStyle=x,f.fillRect(a.left,a.top,a.width,a.height)}),ce(()=>{fe(()=>{l.recalc()})}),J(n.Flex,()=>({controls:l})),s},n.GenericBox=({color:i,width:s=20,height:o=20,x:c=0,y:d=0})=>{let u=j();Y(()=>{u.width=s,u.height=o,u.x=c,u.y=d}),Q((h,p)=>{p.preventDefault(),h.fillStyle=i,h.fillRect(u.left,u.top,u.width,u.height)})}))(ot||={});0&&(module.exports={Kayla,KaylaContext,KaylaFragment,KaylaInternals,KaylaRect,LEA,UI,createContext,createElement,createGame,createReassignableObject,createRenderer,createScene,createUseHook,self,setLogLevel,useClick,useContext,useCurrentGame,useCurrentRenderer,useCurrentScene,useCurrentTicker,useDisposableRef,useEffect,useEntity,useExports,useFiber,useFiberControl,useGlobalClick,useInitialization,useNextStack,usePaint,useRect,useRef,useSelf,useShouldRefresh,useState,useTick,useViewportEffect});
|
|
5
|
+
\u2192 Then: value.get() / value.set(v) / value.add(n)`)}refreshBased(){return[this.set.bind(this),this.get()]}add(t,{recall:a}={}){this.set(this.get()+t,{recall:a})}multiply(t,{recall:a}={}){this.set(this.get()*t,{recall:a})}set(t,{recall:a=!1}={}){let u=this.#e;if(t===u)return;this.#e=t;let y=Date.now()-this.#n;a&&y<67&&this.#t.global.logger.warn(`Hot structural state change <${this.#t.fc?.name||"anonymous"}> delta=${y}ms`),(a||this.alwaysRecall)&&this.#t.refresh(),this.#n=Date.now()}get value(){return this.#e}get lastChanged(){return this.#n}}b.KaylaInternalState=s;class o{#e;constructor(t){this.#e=t??void 0}#t;setSetter(t){this.#t=t}get current(){return this.#e}set current(t){this.#e=t,this.#t&&this.#t(this.#e)}}b.KaylaInternalRef=o;function d(x){return new o(x)}b.createReassignableRef=d;class p{state;refs;global;callProps;scene;exports;detectedParent;contextInfo;get childrenCount(){return this.lastChildren.length}maxSafeChildren;dynamicChildren;constructor(t,a,u){if(!u)throw new Error("Empty element");this.maxSafeChildren=40,this.scene=a,this.state=[],this.refs=[],this.onInits=[],this.onUnInits=[],this.fc=u.type,this.callProps=u.props??{},this.global=t,this.lastStateDeps=[],this.entity=null,this.lastChildren=[],this.onEffect=[],this.onUnEffect=[],this.onPaint=[],this.onTick=[],this.onGlobalClick=[],this.pointerHook=this.pointerHook.bind(this),this.resizeHook=this.resizeHook.bind(this),this.contextInfo=null,this.detectedParent=null,this.dynamicChildren=[],this.key??=this.fc.name+"_"+le(),this.onViewportEffect=[]}getChildrenEntities(){return this.lastChildren.map(t=>t.entity)}pointerHook(t,a,u){try{for(let{handler:c,config:y}of this.onGlobalClick)y.type??="any",y.action??="down",!(y.action!=="any"&&y.action!==u||y.type!=="any"&&y.type!==a)&&c(t,a,u)}catch(c){this.global.logger.error(c)}}resizeHook({width:t,height:a}){try{for(let u of this.onViewportEffect)u(this.getAttachedRenderer(),t,a)}catch(u){this.global.logger.error(u)}}bindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.on("action",this.pointerHook),t.on("viewport_update",this.resizeHook))}unbindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.off("action",this.pointerHook),t.off("viewport_update",this.resizeHook))}get key(){return this.callProps.key}set key(t){this.callProps.key=t}get children(){return this.callProps.children}set children(t){this.callProps.children=t}entity;onExport=()=>({});onEffect;onViewportEffect;onGlobalClick;onInits;onUnInits;onUnEffect;onEffectDeps;onPaint;onTick;fc;useStateCallIndex=0;useEffectCallIndex=0;useGlobalClickCallIndex=0;useDrawCallIndex=0;useStepCallIndex=0;useRefCallIndex=0;useInitCallIndex=0;useViewCallIndex=0;lastStateDeps;watchedDeps;lastDepStamps=[];getAttachedRenderer(){return this.getAttachedGame().mainRenderer}getAttachedGame(){return this.scene.getGame()}setMaxChildren(t){if(this.maxSafeChildren=Math.max(0,t),this.global.logger.debug(`Max children limit updated to ${t} for <${this.fc?.name||"anonymous"} key=${this.key}>`),this.lastChildren.length>this.maxSafeChildren){let a=this.lastChildren.length-this.maxSafeChildren;this.global.logger.warn(`Child limit exceeded (${this.lastChildren.length} > ${this.maxSafeChildren}) \u2014 removing ${a} oldest children <${this.fc?.name||"anonymous"} key=${this.key}>`);let u=this.lastChildren.slice(0,this.maxSafeChildren),c=this.lastChildren.slice(this.maxSafeChildren);this.lastChildren=u;for(let y of c)y.unuse()}}getMaxChildren(){return this.maxSafeChildren??1/0}getFiberChain(){let t=[],a=this.detectedParent;for(;a;)t.push(a),a=a?.detectedParent;return t}getContextChain(){return this.getFiberChain().map(t=>t.contextInfo).filter(Boolean)}findContextValueFromInst(t){return this.getContextChain().find(a=>a.instance===t)?.value}getEntityChain(){return this.getFiberChain().map(t=>t.entity)}shouldFullRefresh(){if(this.isFirstUse||!this.watchedDeps||this.watchedDeps.length===0)return!0;for(let t=0;t<this.watchedDeps.length;t++){let a=this.watchedDeps[t],u=this.lastDepStamps[t]??0;if(a.lastChanged>u)return!0}return!1}captureDepStamps(){this.watchedDeps&&(this.lastDepStamps=this.watchedDeps.map(t=>t.lastChanged))}refresh(){if(!this.shouldFullRefresh())return;let t=this.fc?.name||"anonymous";if(!this.shouldFullRefresh()){this.global.logger.debug(`Refresh skipped <${t} key=${this.key}>`);return}this.global.logger.debug(`Refresh executed <${t} key=${this.key}> reason=${this.isFirstUse?"first":"deps-changed"}`),this.lastChildren.length>this.maxSafeChildren&&this.global.logger.warn(`High child count <${t} key=${this.key}> children=${this.lastChildren.length}`);let a;this.global.save(),this.global.current=this,this.useStateCallIndex=0,this.useRefCallIndex=0,this.useInitCallIndex=0,this.useViewCallIndex=0,this.useStateCallIndex=0,this.useDrawCallIndex=0,this.useStepCallIndex=0,this.useEffectCallIndex=0,this.useGlobalClickCallIndex=0;let u=[];try{let c=this.fc(this.callProps)??[];if(c&&!Array.isArray(c)&&(c=[c]),!Array.isArray(c))throw new Error("Non array or non undefined children received.");for(let y of c)if(y.type===this.fc)throw new Error("Circular Component.");u=c}catch(c){a=c}if(this.global.restore(),this.updateChildren(u,!0),a)throw a}updateChildren(t,a){try{let u=[...t,...this.dynamicChildren],c=[],y=[];for(let v of u){let R=v.props?.key,S;R!=null&&(S=this.lastChildren.find(Z=>Z.key===R)),S||(S=new p(this.global,this.scene,v)),S.detectedParent=this,y.push(S),c.push(S)}for(let v of this.lastChildren)c.includes(v)||v.unuse();this.lastChildren=y,this.captureDepStamps(),this.use();for(let v of this.lastChildren)try{v.refresh()}catch(R){console.error(R)}}catch(u){console.error(u)}}lastChildren;isFirstUse=!0;use(){try{let t=!0;if(this.lastStateDeps??=[],Array.isArray(this.onEffectDeps)&&(t=this.onEffectDeps.some((a,u)=>{let c=this.lastStateDeps.at(u);if(c){let y=a.lastChanged,v=c.stamp;return y>v}})),t||this.isFirstUse){this.global.logger.debug(`Using <${this.fc?.name||"anonymous"} key=${this.key}> count=${this.onEffect.length}`);let a=this.isFirstUse;this.isFirstUse=!1,Array.isArray(this.onEffectDeps)&&(this.lastStateDeps=this.onEffectDeps.map(c=>({stamp:c.lastChanged,stateRef:c}))),this.entity&&this.scene.getScene().removeEntity(this.entity),this.entity&&this.entity.name!==this.key&&(this.entity=null),this.entity=this.entity??new l(this,this.key);for(let c of this.refs)c.current===ce&&(c.current=this.entity);if(this.callProps.ref instanceof o&&(this.callProps.ref.current=this.entity),this.exports=this.onExport(),this.callProps.exportsRef instanceof o&&(this.callProps.exportsRef.current=this.exports),this.entity&&this.entity!==this.entity&&this.global.logger.warn(`Entity name mismatch during refresh <${this.fc?.name} key=${this.key}>`),this.scene.getScene().addEntity(this.entity),a){this.onUnInits=[];for(let c of this.onInits){this.bindEvents();try{let y=c();typeof y=="function"&&this.onUnInits.push(y)}catch(y){throw this.global.logger.error("Initialization failed",this.fc?.name||"anonymous",y),y}}}try{for(let c of this.onUnEffect??[])c()}catch(c){console.error(c)}let u=this.onEffect.map(c=>c()).filter(c=>c!==void 0);this.onUnEffect=u}}catch(t){throw this.global.logger.error(`use() failed <${this.fc?.name||"anonymous"} key=${this.key}>`,t),t}}unuse(){this.global.logger.debug(`unuse called <${this.fc?.name||"anonymous"} key=${this.key}> children=${this.lastChildren.length}`),this.detectedParent=null,this.watchedDeps=void 0,this.lastDepStamps=[],this.unbindEvents();try{for(let t of this.onUnInits)t();for(let t of this.onUnEffect)t()}catch(t){this.global.logger.error(`Cleanup failed in unuse <${this.fc?.name||"anonymous"} key=${this.key}>`,t)}this.scene.getScene().removeEntity(this.entity);for(let t of this.lastChildren)t.unuse();this.lastChildren.length=0}}b.KaylaFiber=p;class l extends q{#e;flags;getRawRect(){return F.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}getFiber(){return this.#e}constructor(t,a){super(a,0,0,0,0),this.#e=t,this.flags=new Map,this.color="transparent"}setFlag(t,a){return this.flags.set(t,a)}getFlag(t){return this.flags.get(t)}removeFlag(t){return this.flags.delete(t)}update(t){let a=new i;if(this.#e&&this.#e.onTick)for(let u of this.#e.onTick)u(t,a);a.isPrevented()}draw(t){let a=new i;if(this.#e&&this.#e.onPaint)for(let u of this.#e.onPaint)u(t,a);a.isPrevented()||super.draw(t)}getRect(){return new h(this.getFiber())}}b.KaylaRectEntity=l;class h{#e;constructor(t){this.#e=t}get color(){return this.#t(),this.entity.color}set color(t){this.#t(),this.entity.color=t}getRaw(){return F.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}get entity(){return this.#e.entity??null}#t(){if(!this.#e)throw new Error("No fibers found.");if(!this.entity)throw new Error("The entity does NOT exist yet.")}isCollidingWith(t){return this.#t(),this.entity.isCollidingWith(t.entity)}get setFlag(){return this.#t(),this.entity.setFlag.bind(this.entity)}get getFlag(){return this.#t(),this.entity.getFlag.bind(this.entity)}get removeFlag(){return this.#t(),this.entity.removeFlag.bind(this.entity)}isHovered(){let t=this.getRaw(),a=this.#e.getAttachedRenderer().getMousePos(),u=F.createRawRect({x:a.x,y:a.y,width:3,height:3});return F.rawCollision(t,u)}get pos(){return this.#t(),this.entity.pos}get x(){return this.#t(),this.pos.x}set x(t){this.#t(),this.pos.x=t}get y(){return this.#t(),this.pos.y}set y(t){this.#t(),this.pos.y=t}get width(){return this.#t(),this.entity.width}set width(t){this.#t(),this.entity.width=t}get height(){return this.#t(),this.entity.height}set height(t){this.#t(),this.entity.height=t}get z(){return this.#t(),this.entity.z}set z(t){this.#t(),this.entity.z=t}get left(){return this.#t(),this.entity.left}set left(t){this.#t(),this.entity.left=t}get right(){return this.#t(),this.entity.right}set right(t){this.#t(),this.entity.right=t}get top(){return this.#t(),this.entity.top}set top(t){this.#t(),this.entity.top=t}get bottom(){return this.#t(),this.entity.bottom}set bottom(t){this.#t(),this.entity.bottom=t}get toLocal(){return this.entity.toLocal.bind(this.entity)}get toWorld(){return this.entity.toWorld.bind(this.entity)}}b.KaylaInternalRect=h;class f{constructor(t){this.#t=t,this.#e=null,t.on("update",this.tickHandler.bind(this)),this.drawHandler=this.drawHandler.bind(this)}#e;#t;getFibers(){return this.getEntities().map(t=>t.getFiber())}getEntities(){return Array.from(this.getScene().entities.values())}getScene(){return this.#t}getGame(){return this.#e}drawHandler(t){return this.#t.handleDraw(t)}attachTo(t){t.addScene(this.#t),this.#e=t}async spawn(t){let a=this.createFiber(t);await this.#e.delay(0),a.refresh()}createFiber(t){return new p(b.singleGlobalInstance,this,t)}detach(){this.#e&&this.#e.removeScene(this.#t)}tickHandler(){}}b.KaylaScene=f,b.singleGlobalInstance=new b.GlobalKayla})(V||={});var W=class{#e;constructor(e){this.Provider=this.#t.bind(this),this.#e=e}get defaultValue(){return this.#e}#t({value:e=this.defaultValue,children:n}){let i=ke();return Y(()=>{i.contextInfo={instance:this,value:e}}),J(this.Provider,()=>({value:e})),n}Provider;Consumer};function Xe(r){return new W(r)}var m=V.singleGlobalInstance,qe=m.useState.bind(m),he=m.useRef.bind(m),Be=m.useShouldRefresh.bind(m),de=m.useEffect.bind(m),We=m.useViewportEffect.bind(m),Ee=m.useGlobalClick.bind(m),Ye=m.useClick.bind(m),Y=m.useInitialization.bind(m),j=m.useRect.bind(m),je=m.useTick.bind(m),Q=m.usePaint.bind(m),J=m.useExports.bind(m),L=m.useSelf.bind(m),pe=m.useFiberControl.bind(m),ke=m.useFiber.bind(m),Qe=m.useEntity.bind(m),Je=m.useCurrentGame.bind(m),Ze=m.useCurrentRenderer.bind(m),et=m.useCurrentScene.bind(m),tt=m.useCurrentTicker.bind(m),nt=m.useContext.bind(m),ce=Symbol("self_ref");var fe=r=>{Promise.resolve(1).then(()=>{try{r()}catch(e){console.error(e)}})},rt=({children:r})=>Array.isArray(r)?[...r]:r;function it(r){return V.createReassignableRef(r)}function st(r){if(typeof r!="object"||typeof r=="function"||r===null)return r;let e={current:r};return new Proxy({},{get(i,s,o){return s==="reassignSelf"?d=>{e.current=d}:Reflect.get(e.current,s,o)},set(i,s,o,d){return Reflect.set(e.current,s,o,d)},has(i,s){return Reflect.has(e.current,s)},ownKeys(i){return Reflect.ownKeys(e.current)},getOwnPropertyDescriptor(i,s){return Reflect.getOwnPropertyDescriptor(e.current,s)},deleteProperty(i,s){return Reflect.deleteProperty(e.current,s)}})}function at(r){m.logLevel=r}function ot(r){let e=r.name||"anonymous-custom-hook";return function(i){let s=m.current;if(!s)throw new Error(`Custom hook '${e}' must be called inside a Kayla component`);let o=i??{};return r.memoize!==!1?L(()=>(s.global.logLevel==="debug"&&s.global.logger.debug(`Custom hook '${e}' initialized (memoized) <${s.fc?.name||"anonymous"} key=${s.key||"no-key"}>`),r.onUse(s,m,o))):(s.global.logLevel==="debug"&&s.global.logger.debug(`Custom hook '${e}' running (non-memoized) <${s.fc?.name||"anonymous"} key=${s.key||"no-key"}>`),r.onUse(s,m,o))}}var Re;(e=>e.id="kayla")(Re||={});Reflect.set(globalThis,"Kayla",me);var lt;(n=>(n.Flex=({align:i="stretch",children:s,direction:o="row",gap:d=0,justify:p="start",wrap:l="nowrap",getHeight:h,getWidth:f,getCenterX:g,getCenterY:b,color:x})=>{let t=pe(),a=j(),u=L(()=>({recalc(){let c=Number(d)||0,y=g(),v=b(),R=f(),S=h();a.x=y,a.y=v,a.width=R,a.height=S;let ut=t.getChildrenEntities().filter(Boolean).map(w=>w.getRect()).filter(w=>w.getFlag("flex-ignored")!==!0),I=o==="row",M=I?a.width:a.height,Rt=I?a.height:a.width,ye=0,$=0,ge=[],ee=[];ut.forEach(w=>{let te=I?w.width:w.height;ye+te>M&&l==="wrap"?(ge.push({height:$,items:ee}),ee=[w],ye=te,$=I?w.height:w.width):(ee.push(w),ye+=te+c,$=Math.max($,I?w.height:w.width))}),ge.push({height:$,items:ee});let be=0;ge.forEach((w,te)=>{let P=w.items,D=P.reduce((E,ne)=>E+(I?ne.width:ne.height),0)+c*(P.length-1),K=0;p==="center"&&(K=(M-D)/2),p==="end"&&(K=M-D),p==="space-between"&&(K=0),p==="space-around"&&(K=(M-D)/(P.length*2)),p==="space-evenly"&&(K=(M-D)/(P.length+1)),P.forEach((E,ne)=>{E.z=a.z+1;let G=I?E.width:E.height,re=I?E.height:E.width,ie=0;i==="center"&&(ie=(w.height-re)/2),i==="end"&&(ie=w.height-re),i==="stretch"&&(I?E.height=w.height:E.width=w.height),I?(E.x=K+G/2,E.y=be+ie+re/2):(E.x=be+ie+re/2,E.y=K+G/2),p==="space-between"&&ne<P.length-1?K+=G+c+(M-D)/(P.length-1):p==="space-around"?K+=G+c+(M-D)/P.length:p==="space-evenly"?K+=G+c+(M-D)/(P.length+1):K+=G+c}),be+=w.height+c})}}));return Q((c,y)=>{y.preventDefault(),c.fillStyle=x,c.fillRect(a.left,a.top,a.width,a.height)}),de(()=>{fe(()=>{u.recalc()})}),J(n.Flex,()=>({controls:u})),s},n.GenericBox=({color:i,width:s=20,height:o=20,x:d=0,y:p=0})=>{let l=j();Y(()=>{l.width=s,l.height=o,l.x=d,l.y=p}),Q((h,f)=>{f.preventDefault(),h.fillStyle=i,h.fillRect(l.left,l.top,l.width,l.height)})}))(lt||={});0&&(module.exports={JSX,Kayla,KaylaContext,KaylaFragment,KaylaInternals,KaylaRect,LEA,UI,createContext,createElement,createGame,createReassignableObject,createRenderer,createScene,createUseHook,self,setLogLevel,useClick,useContext,useCurrentGame,useCurrentRenderer,useCurrentScene,useCurrentTicker,useDisposableRef,useEffect,useEntity,useExports,useFiber,useFiberControl,useGlobalClick,useInitialization,useNextStack,usePaint,useRect,useRef,useSelf,useShouldRefresh,useState,useTick,useViewportEffect});
|
package/dist/kayla.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FCProps, a as FCExports, b as FC } from './kayla-internals-
|
|
2
|
-
export { E as ExportsOfFC, J as JSX, K as Kayla, c as
|
|
1
|
+
import { F as FCProps, a as FCExports, b as FC } from './kayla-internals-BnnDnUVI.cjs';
|
|
2
|
+
export { E as ExportsOfFC, J as JSX, K as Kayla, c as KaylaClickConfig, d as KaylaClickType, e as KaylaContext, f as KaylaCustomHookConfig, g as KaylaElement, h as KaylaElementRef, i as KaylaExportables, j as KaylaExports, k as KaylaFiberControl, l as KaylaFragment, m as KaylaGame, n as KaylaInternals, o as KaylaPointerAction, p as KaylaRect, q as KaylaRef, r as KaylaRenderer, s as KaylaScene, t as KaylaState, P as PropOfFC, R as Reassignable, U as UnsafeKaylaFiber, u as createContext, v as createElement, w as createGame, x as createReassignableObject, y as createRenderer, z as createScene, A as createUseHook, B as self, C as setLogLevel, D as useClick, G as useContext, H as useCurrentGame, I as useCurrentRenderer, L as useCurrentScene, M as useCurrentTicker, N as useDisposableRef, O as useEffect, Q as useEntity, S as useExports, T as useFiber, V as useFiberControl, W as useGlobalClick, X as useInitialization, Y as useNextStack, Z as usePaint, _ as useRect, $ as useRef, a0 as useSelf, a1 as useShouldRefresh, a2 as useState, a3 as useTick, a4 as useViewportEffect } from './kayla-internals-BnnDnUVI.cjs';
|
|
3
3
|
export { L as LEA } from './lea-B1DIEiLR.cjs';
|
|
4
4
|
|
|
5
5
|
declare namespace UI {
|
package/dist/kayla.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FCProps, a as FCExports, b as FC } from './kayla-internals-
|
|
2
|
-
export { E as ExportsOfFC, J as JSX, K as Kayla, c as
|
|
1
|
+
import { F as FCProps, a as FCExports, b as FC } from './kayla-internals-uYrgURKn.js';
|
|
2
|
+
export { E as ExportsOfFC, J as JSX, K as Kayla, c as KaylaClickConfig, d as KaylaClickType, e as KaylaContext, f as KaylaCustomHookConfig, g as KaylaElement, h as KaylaElementRef, i as KaylaExportables, j as KaylaExports, k as KaylaFiberControl, l as KaylaFragment, m as KaylaGame, n as KaylaInternals, o as KaylaPointerAction, p as KaylaRect, q as KaylaRef, r as KaylaRenderer, s as KaylaScene, t as KaylaState, P as PropOfFC, R as Reassignable, U as UnsafeKaylaFiber, u as createContext, v as createElement, w as createGame, x as createReassignableObject, y as createRenderer, z as createScene, A as createUseHook, B as self, C as setLogLevel, D as useClick, G as useContext, H as useCurrentGame, I as useCurrentRenderer, L as useCurrentScene, M as useCurrentTicker, N as useDisposableRef, O as useEffect, Q as useEntity, S as useExports, T as useFiber, V as useFiberControl, W as useGlobalClick, X as useInitialization, Y as useNextStack, Z as usePaint, _ as useRect, $ as useRef, a0 as useSelf, a1 as useShouldRefresh, a2 as useState, a3 as useTick, a4 as useViewportEffect } from './kayla-internals-uYrgURKn.js';
|
|
3
3
|
export { L as LEA } from './lea-B1DIEiLR.js';
|
|
4
4
|
|
|
5
5
|
declare namespace UI {
|