pixi-watchface-engine 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/API.md +796 -0
  2. package/LICENSE +21 -0
  3. package/README.md +257 -0
  4. package/dist/EventBus.d.ts +73 -0
  5. package/dist/EventBus.d.ts.map +1 -0
  6. package/dist/WatchfaceEngine.d.ts +43 -0
  7. package/dist/WatchfaceEngine.d.ts.map +1 -0
  8. package/dist/elements/BaseElement.d.ts +49 -0
  9. package/dist/elements/BaseElement.d.ts.map +1 -0
  10. package/dist/elements/ElementRegistry.d.ts +12 -0
  11. package/dist/elements/ElementRegistry.d.ts.map +1 -0
  12. package/dist/elements/FillMask.d.ts +10 -0
  13. package/dist/elements/FillMask.d.ts.map +1 -0
  14. package/dist/elements/ImageElement.d.ts +21 -0
  15. package/dist/elements/ImageElement.d.ts.map +1 -0
  16. package/dist/elements/ShapeElement.d.ts +42 -0
  17. package/dist/elements/ShapeElement.d.ts.map +1 -0
  18. package/dist/elements/TextElement.d.ts +43 -0
  19. package/dist/elements/TextElement.d.ts.map +1 -0
  20. package/dist/elements/index.d.ts +10 -0
  21. package/dist/elements/index.d.ts.map +1 -0
  22. package/dist/index.d.ts +26 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +35005 -0
  25. package/dist/managers/ElementManager.d.ts +19 -0
  26. package/dist/managers/ElementManager.d.ts.map +1 -0
  27. package/dist/managers/InteractionManager.d.ts +21 -0
  28. package/dist/managers/InteractionManager.d.ts.map +1 -0
  29. package/dist/managers/SerializationManager.d.ts +20 -0
  30. package/dist/managers/SerializationManager.d.ts.map +1 -0
  31. package/dist/managers/ZOrderManager.d.ts +14 -0
  32. package/dist/managers/ZOrderManager.d.ts.map +1 -0
  33. package/dist/managers/index.d.ts +6 -0
  34. package/dist/managers/index.d.ts.map +1 -0
  35. package/dist/plugins/AutosavePlugin.d.ts +18 -0
  36. package/dist/plugins/AutosavePlugin.d.ts.map +1 -0
  37. package/dist/plugins/GridPlugin.d.ts +28 -0
  38. package/dist/plugins/GridPlugin.d.ts.map +1 -0
  39. package/dist/plugins/KeyboardShortcutsPlugin.d.ts +10 -0
  40. package/dist/plugins/KeyboardShortcutsPlugin.d.ts.map +1 -0
  41. package/dist/plugins/Plugin.d.ts +8 -0
  42. package/dist/plugins/Plugin.d.ts.map +1 -0
  43. package/dist/plugins/PluginManager.d.ts +14 -0
  44. package/dist/plugins/PluginManager.d.ts.map +1 -0
  45. package/dist/plugins/UndoRedoPlugin.d.ts +22 -0
  46. package/dist/plugins/UndoRedoPlugin.d.ts.map +1 -0
  47. package/dist/plugins/index.d.ts +10 -0
  48. package/dist/plugins/index.d.ts.map +1 -0
  49. package/dist/selection/MarqueeSelect.d.ts +15 -0
  50. package/dist/selection/MarqueeSelect.d.ts.map +1 -0
  51. package/dist/selection/SelectionBox.d.ts +23 -0
  52. package/dist/selection/SelectionBox.d.ts.map +1 -0
  53. package/dist/selection/SelectionManager.d.ts +51 -0
  54. package/dist/selection/SelectionManager.d.ts.map +1 -0
  55. package/dist/selection/TransformController.d.ts +24 -0
  56. package/dist/selection/TransformController.d.ts.map +1 -0
  57. package/dist/selection/TransformHandle.d.ts +12 -0
  58. package/dist/selection/TransformHandle.d.ts.map +1 -0
  59. package/dist/selection/index.d.ts +7 -0
  60. package/dist/selection/index.d.ts.map +1 -0
  61. package/dist/types.d.ts +43 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/utils/math.d.ts +5 -0
  64. package/dist/utils/math.d.ts.map +1 -0
  65. package/dist/utils/platform.d.ts +3 -0
  66. package/dist/utils/platform.d.ts.map +1 -0
  67. package/dist/utils/uid.d.ts +2 -0
  68. package/dist/utils/uid.d.ts.map +1 -0
  69. package/package.json +70 -0
@@ -0,0 +1,19 @@
1
+ import type { Container } from 'pixi.js';
2
+ import type { BaseElement, EngineRef } from '../elements/BaseElement.ts';
3
+ import type { EventBus } from '../EventBus.ts';
4
+ export declare class ElementManager {
5
+ private elements;
6
+ private engine;
7
+ private eventBus;
8
+ private elementsLayer;
9
+ constructor(engine: EngineRef, eventBus: EventBus);
10
+ /** @internal Set by WatchfaceEngine after init */
11
+ _setLayer(layer: Container): void;
12
+ add(element: BaseElement): void;
13
+ remove(element: BaseElement): void;
14
+ getById(id: string): BaseElement | undefined;
15
+ getAll(): BaseElement[];
16
+ clear(): void;
17
+ get count(): number;
18
+ }
19
+ //# sourceMappingURL=ElementManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElementManager.d.ts","sourceRoot":"","sources":["../../src/managers/ElementManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAA0B;gBAEnC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;IAKjD,kDAAkD;IAClD,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIjC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAY/B,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAYlC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI5C,MAAM,IAAI,WAAW,EAAE;IAIvB,KAAK,IAAI,IAAI;IAUb,IAAI,KAAK,IAAI,MAAM,CAElB;CACF"}
@@ -0,0 +1,21 @@
1
+ import type { FederatedPointerEvent } from 'pixi.js';
2
+ import type { BaseElement } from '../elements/BaseElement.ts';
3
+ import type { EventBus } from '../EventBus.ts';
4
+ import type { ElementManager } from './ElementManager.ts';
5
+ export interface InteractionDelegate {
6
+ handleElementPointerDown(element: BaseElement, event: FederatedPointerEvent): void;
7
+ handleElementPointerMove(element: BaseElement, event: FederatedPointerEvent): void;
8
+ handleElementPointerUp(element: BaseElement, event: FederatedPointerEvent): void;
9
+ }
10
+ export declare class InteractionManager {
11
+ private eventBus;
12
+ private elementManager;
13
+ private delegate;
14
+ private boundHandlers;
15
+ constructor(eventBus: EventBus, elementManager: ElementManager);
16
+ setDelegate(delegate: InteractionDelegate): void;
17
+ private attachListeners;
18
+ private detachListeners;
19
+ destroy(): void;
20
+ }
21
+ //# sourceMappingURL=InteractionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/managers/InteractionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC,wBAAwB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnF,wBAAwB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnF,sBAAsB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAClF;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,aAAa,CAIhB;gBAEO,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc;IAQ9D,WAAW,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAIhD,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,eAAe;IAWvB,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,20 @@
1
+ import type { BaseElement } from '../elements/BaseElement.ts';
2
+ import { ElementRegistry } from '../elements/ElementRegistry.ts';
3
+ import type { EventBus } from '../EventBus.ts';
4
+ import type { ElementManager } from './ElementManager.ts';
5
+ import type { SerializedElement } from '../types.ts';
6
+ export declare class SerializationManager {
7
+ private eventBus;
8
+ private elementManager;
9
+ private registry;
10
+ private getCanvasSize;
11
+ constructor(eventBus: EventBus, elementManager: ElementManager, getCanvasSize: () => {
12
+ width: number;
13
+ height: number;
14
+ });
15
+ serialize(): string;
16
+ deserialize(json: string): void;
17
+ deserializeElement(data: SerializedElement): BaseElement | null;
18
+ getRegistry(): ElementRegistry;
19
+ }
20
+ //# sourceMappingURL=SerializationManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerializationManager.d.ts","sourceRoot":"","sources":["../../src/managers/SerializationManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAIjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,aAAa,CAAC;AAErE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,aAAa,CAA0C;gBAG7D,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,MAAM;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAYxD,SAAS,IAAI,MAAM;IAcnB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc/B,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,WAAW,GAAG,IAAI;IAS/D,WAAW,IAAI,eAAe;CAG/B"}
@@ -0,0 +1,14 @@
1
+ import type { BaseElement } from '../elements/BaseElement.ts';
2
+ import type { ElementManager } from './ElementManager.ts';
3
+ export declare class ZOrderManager {
4
+ private elementManager;
5
+ constructor(elementManager: ElementManager);
6
+ bringToFront(element: BaseElement): void;
7
+ sendToBack(element: BaseElement): void;
8
+ moveForward(element: BaseElement): void;
9
+ moveBackward(element: BaseElement): void;
10
+ private getSortedByZ;
11
+ private getMaxZIndex;
12
+ private getMinZIndex;
13
+ }
14
+ //# sourceMappingURL=ZOrderManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZOrderManager.d.ts","sourceRoot":"","sources":["../../src/managers/ZOrderManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAiB;gBAE3B,cAAc,EAAE,cAAc;IAI1C,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKxC,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKtC,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAUvC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAUxC,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;CAKrB"}
@@ -0,0 +1,6 @@
1
+ export { ElementManager } from './ElementManager.ts';
2
+ export { ZOrderManager } from './ZOrderManager.ts';
3
+ export { InteractionManager } from './InteractionManager.ts';
4
+ export type { InteractionDelegate } from './InteractionManager.ts';
5
+ export { SerializationManager } from './SerializationManager.ts';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Plugin } from './Plugin.ts';
2
+ import type { WatchfaceEngine } from '../WatchfaceEngine.ts';
3
+ export interface AutosavePluginOptions {
4
+ intervalMs?: number;
5
+ onSave: (json: string) => void | Promise<void>;
6
+ }
7
+ export declare class AutosavePlugin implements Plugin {
8
+ readonly name = "autosave";
9
+ private engine;
10
+ private timer;
11
+ private intervalMs;
12
+ private onSave;
13
+ constructor(options: AutosavePluginOptions);
14
+ init(engine: WatchfaceEngine): void;
15
+ saveNow(): void;
16
+ destroy(): void;
17
+ }
18
+ //# sourceMappingURL=AutosavePlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutosavePlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/AutosavePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,qBAAa,cAAe,YAAW,MAAM;IAC3C,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAyC;gBAE3C,OAAO,EAAE,qBAAqB;IAK1C,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAOnC,OAAO,IAAI,IAAI;IAMf,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,28 @@
1
+ import type { Plugin } from './Plugin.ts';
2
+ import type { WatchfaceEngine } from '../WatchfaceEngine.ts';
3
+ export interface GridPluginOptions {
4
+ cellSize?: number;
5
+ color?: number;
6
+ opacity?: number;
7
+ snapEnabled?: boolean;
8
+ visible?: boolean;
9
+ }
10
+ export declare class GridPlugin implements Plugin {
11
+ readonly name = "grid";
12
+ private engine;
13
+ private gridGraphics;
14
+ private options;
15
+ private unsubscribers;
16
+ constructor(options?: GridPluginOptions);
17
+ get cellSize(): number;
18
+ set cellSize(value: number);
19
+ get snapEnabled(): boolean;
20
+ set snapEnabled(value: boolean);
21
+ get visible(): boolean;
22
+ set visible(value: boolean);
23
+ init(engine: WatchfaceEngine): void;
24
+ snapValue(value: number): number;
25
+ private drawGrid;
26
+ destroy(): void;
27
+ }
28
+ //# sourceMappingURL=GridPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GridPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/GridPlugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAUD,qBAAa,UAAW,YAAW,MAAM;IACvC,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,aAAa,CAAsB;gBAE/B,OAAO,CAAC,EAAE,iBAAiB;IAIvC,IAAI,QAAQ,IAAI,MAAM,CAAkC;IACxD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAGzB;IAED,IAAI,WAAW,IAAI,OAAO,CAAqC;IAC/D,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,EAAuC;IAErE,IAAI,OAAO,IAAI,OAAO,CAAiC;IACvD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAmBnC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIhC,OAAO,CAAC,QAAQ;IAsBhB,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,10 @@
1
+ import type { Plugin } from './Plugin.ts';
2
+ import type { WatchfaceEngine } from '../WatchfaceEngine.ts';
3
+ export declare class KeyboardShortcutsPlugin implements Plugin {
4
+ readonly name = "keyboard";
5
+ private engine;
6
+ private boundHandler;
7
+ init(engine: WatchfaceEngine): void;
8
+ destroy(): void;
9
+ }
10
+ //# sourceMappingURL=KeyboardShortcutsPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyboardShortcutsPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/KeyboardShortcutsPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAI7D,qBAAa,uBAAwB,YAAW,MAAM;IACpD,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,YAAY,CAA6C;IAEjE,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAuEnC,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,8 @@
1
+ import type { WatchfaceEngine } from '../WatchfaceEngine.ts';
2
+ export interface Plugin {
3
+ readonly name: string;
4
+ init(engine: WatchfaceEngine): void;
5
+ destroy(): void;
6
+ update?(deltaTime: number): void;
7
+ }
8
+ //# sourceMappingURL=Plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/plugins/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,OAAO,IAAI,IAAI,CAAC;IAChB,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC"}
@@ -0,0 +1,14 @@
1
+ import type { Plugin } from './Plugin.ts';
2
+ import type { WatchfaceEngine } from '../WatchfaceEngine.ts';
3
+ export declare class PluginManager {
4
+ private plugins;
5
+ private engine;
6
+ private tickerCallbacks;
7
+ constructor(engine: WatchfaceEngine);
8
+ register(plugin: Plugin): void;
9
+ unregister(name: string): void;
10
+ get<T extends Plugin>(name: string): T | undefined;
11
+ has(name: string): boolean;
12
+ destroyAll(): void;
13
+ }
14
+ //# sourceMappingURL=PluginManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../src/plugins/PluginManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAA+C;gBAE1D,MAAM,EAAE,eAAe;IAInC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAkB9B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc9B,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIlD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,UAAU,IAAI,IAAI;CAKnB"}
@@ -0,0 +1,22 @@
1
+ import type { Plugin } from './Plugin.ts';
2
+ import type { WatchfaceEngine } from '../WatchfaceEngine.ts';
3
+ export interface UndoRedoPluginOptions {
4
+ maxHistory?: number;
5
+ }
6
+ export declare class UndoRedoPlugin implements Plugin {
7
+ readonly name = "undoredo";
8
+ private engine;
9
+ private undoStack;
10
+ private redoStack;
11
+ private maxHistory;
12
+ private unsubscribers;
13
+ constructor(options?: UndoRedoPluginOptions);
14
+ init(engine: WatchfaceEngine): void;
15
+ undo(): void;
16
+ redo(): void;
17
+ get canUndo(): boolean;
18
+ get canRedo(): boolean;
19
+ clear(): void;
20
+ destroy(): void;
21
+ }
22
+ //# sourceMappingURL=UndoRedoPlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UndoRedoPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/UndoRedoPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAe,YAAW,MAAM;IAC3C,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAsB;gBAE/B,OAAO,CAAC,EAAE,qBAAqB;IAI3C,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAYnC,IAAI,IAAI,IAAI;IASZ,IAAI,IAAI,IAAI;IASZ,IAAI,OAAO,IAAI,OAAO,CAAsC;IAC5D,IAAI,OAAO,IAAI,OAAO,CAAsC;IAE5D,KAAK,IAAI,IAAI;IAKb,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,10 @@
1
+ export type { Plugin } from './Plugin.ts';
2
+ export { PluginManager } from './PluginManager.ts';
3
+ export { GridPlugin } from './GridPlugin.ts';
4
+ export type { GridPluginOptions } from './GridPlugin.ts';
5
+ export { AutosavePlugin } from './AutosavePlugin.ts';
6
+ export type { AutosavePluginOptions } from './AutosavePlugin.ts';
7
+ export { UndoRedoPlugin } from './UndoRedoPlugin.ts';
8
+ export type { UndoRedoPluginOptions } from './UndoRedoPlugin.ts';
9
+ export { KeyboardShortcutsPlugin } from './KeyboardShortcutsPlugin.ts';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Graphics } from 'pixi.js';
2
+ export declare class MarqueeSelect {
3
+ readonly graphics: Graphics;
4
+ constructor();
5
+ draw(startX: number, startY: number, endX: number, endY: number): void;
6
+ getRect(startX: number, startY: number, endX: number, endY: number): {
7
+ x: number;
8
+ y: number;
9
+ width: number;
10
+ height: number;
11
+ };
12
+ clear(): void;
13
+ destroy(): void;
14
+ }
15
+ //# sourceMappingURL=MarqueeSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarqueeSelect.d.ts","sourceRoot":"","sources":["../../src/selection/MarqueeSelect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,qBAAa,aAAa;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;;IAO5B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAetE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;IASlE,KAAK,IAAI,IAAI;IAKb,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,23 @@
1
+ import { Container } from 'pixi.js';
2
+ import { TransformHandle } from './TransformHandle.ts';
3
+ import type { HandleConfig } from '../types.ts';
4
+ export declare class SelectionBox {
5
+ readonly container: Container;
6
+ private outline;
7
+ private rotationLine;
8
+ private handles;
9
+ private rotateHandle;
10
+ constructor();
11
+ show(bounds: {
12
+ x: number;
13
+ y: number;
14
+ width: number;
15
+ height: number;
16
+ }, config: HandleConfig, showRotation: boolean): void;
17
+ hide(): void;
18
+ getHandle(index: number): TransformHandle | undefined;
19
+ getRotateHandle(): TransformHandle;
20
+ getAllHandles(): TransformHandle[];
21
+ destroy(): void;
22
+ }
23
+ //# sourceMappingURL=SelectionBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionBox.d.ts","sourceRoot":"","sources":["../../src/selection/SelectionBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQhD,qBAAa,YAAY;IACvB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,YAAY,CAAkB;;IAqBtC,IAAI,CACF,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC/D,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,OAAO,GACpB,IAAI;IAwCP,IAAI,IAAI,IAAI;IAIZ,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIrD,eAAe,IAAI,eAAe;IAIlC,aAAa,IAAI,eAAe,EAAE;IAIlC,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,51 @@
1
+ import { Container, type FederatedPointerEvent, type Application } from 'pixi.js';
2
+ import type { BaseElement } from '../elements/BaseElement.ts';
3
+ import type { EventBus } from '../EventBus.ts';
4
+ import type { ElementManager } from '../managers/ElementManager.ts';
5
+ import type { SerializationManager } from '../managers/SerializationManager.ts';
6
+ import type { InteractionDelegate } from '../managers/InteractionManager.ts';
7
+ import type { HandleConfig } from '../types.ts';
8
+ export declare class SelectionManager implements InteractionDelegate {
9
+ private eventBus;
10
+ private elementManager;
11
+ private serializationManager;
12
+ private selected;
13
+ private selectionBox;
14
+ private marquee;
15
+ private transformController;
16
+ private clipboard;
17
+ private layer;
18
+ private handleConfig;
19
+ private isMarqueeActive;
20
+ private marqueeStart;
21
+ private isDraggingElement;
22
+ private stageDownHandler;
23
+ private stageMoveHandler;
24
+ private stageUpHandler;
25
+ constructor(eventBus: EventBus, elementManager: ElementManager);
26
+ setSerializationManager(sm: SerializationManager): void;
27
+ init(layer: Container, app: Application, config?: Partial<HandleConfig>): void;
28
+ handleElementPointerDown(element: BaseElement, event: FederatedPointerEvent): void;
29
+ handleElementPointerMove(_element: BaseElement, event: FederatedPointerEvent): void;
30
+ handleElementPointerUp(_element: BaseElement, event: FederatedPointerEvent): void;
31
+ select(element: BaseElement): void;
32
+ addToSelection(element: BaseElement): void;
33
+ deselect(element: BaseElement): void;
34
+ clearSelection(): void;
35
+ selectAll(): void;
36
+ getSelected(): BaseElement[];
37
+ isSelected(element: BaseElement): boolean;
38
+ copySelected(): void;
39
+ pasteClipboard(): void;
40
+ deleteSelected(): void;
41
+ nudgeSelected(dx: number, dy: number): void;
42
+ private updateSelectionVisuals;
43
+ private computeCombinedBounds;
44
+ private wireHandleEvents;
45
+ private onStagePointerDown;
46
+ private onStagePointerMove;
47
+ private onStagePointerUp;
48
+ private boundsOverlap;
49
+ destroy(): void;
50
+ }
51
+ //# sourceMappingURL=SelectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionManager.d.ts","sourceRoot":"","sources":["../../src/selection/SelectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAI7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,oBAAoB,CAAqC;IAEjE,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,SAAS,CAAgB;IAEjC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,YAAY,CAAmE;IAGvF,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAkB;IAGtC,OAAO,CAAC,iBAAiB,CAAS;IAGlC,OAAO,CAAC,gBAAgB,CAAqD;IAC7E,OAAO,CAAC,gBAAgB,CAAqD;IAC7E,OAAO,CAAC,cAAc,CAAqD;gBAE/D,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc;IAQ9D,uBAAuB,CAAC,EAAE,EAAE,oBAAoB,GAAG,IAAI;IAIvD,IAAI,CACF,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,WAAW,EAChB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC7B,IAAI;IA+BP,wBAAwB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAqBlF,wBAAwB,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAOnF,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAUjF,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKlC,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAM1C,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAMpC,cAAc,IAAI,IAAI;IAOtB,SAAS,IAAI,IAAI;IAQjB,WAAW,IAAI,WAAW,EAAE;IAI5B,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;IAMzC,YAAY,IAAI,IAAI;IAIpB,cAAc,IAAI,IAAI;IAkBtB,cAAc,IAAI,IAAI;IAOtB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAU3C,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,gBAAgB;IAiCxB,OAAO,CAAC,aAAa;IAYrB,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,24 @@
1
+ import type { FederatedPointerEvent } from 'pixi.js';
2
+ import type { BaseElement } from '../elements/BaseElement.ts';
3
+ import type { EventBus } from '../EventBus.ts';
4
+ import type { HandlePosition } from './TransformHandle.ts';
5
+ type TransformMode = 'none' | 'move' | 'resize' | 'rotate';
6
+ export declare class TransformController {
7
+ private eventBus;
8
+ private dragState;
9
+ private activeElements;
10
+ constructor(eventBus: EventBus);
11
+ get isDragging(): boolean;
12
+ get currentMode(): TransformMode;
13
+ startMove(elements: BaseElement[], event: FederatedPointerEvent): void;
14
+ startResize(elements: BaseElement[], handlePosition: HandlePosition, event: FederatedPointerEvent): void;
15
+ startRotate(elements: BaseElement[], event: FederatedPointerEvent): void;
16
+ onPointerMove(event: FederatedPointerEvent): void;
17
+ onPointerUp(_event: FederatedPointerEvent): void;
18
+ cancel(): void;
19
+ private handleMove;
20
+ private handleResize;
21
+ private handleRotate;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=TransformController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransformController.d.ts","sourceRoot":"","sources":["../../src/selection/TransformController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAU3D,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,cAAc,CAAqB;gBAE/B,QAAQ,EAAE,QAAQ;IAI9B,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,WAAW,IAAI,aAAa,CAE/B;IAED,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAsBtE,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAoBxG,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAmBxE,aAAa,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAgBjD,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;IAgBhD,MAAM,IAAI,IAAI;IAcd,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,YAAY;CAmBrB"}
@@ -0,0 +1,12 @@
1
+ import { Graphics } from 'pixi.js';
2
+ import type { HandleConfig } from '../types.ts';
3
+ export type HandlePosition = 'top-left' | 'top-center' | 'top-right' | 'middle-right' | 'bottom-right' | 'bottom-center' | 'bottom-left' | 'middle-left' | 'rotate';
4
+ export declare class TransformHandle {
5
+ readonly graphics: Graphics;
6
+ readonly position: HandlePosition;
7
+ constructor(position: HandlePosition);
8
+ show(x: number, y: number, config: HandleConfig): void;
9
+ hide(): void;
10
+ destroy(): void;
11
+ }
12
+ //# sourceMappingURL=TransformHandle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransformHandle.d.ts","sourceRoot":"","sources":["../../src/selection/TransformHandle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,MAAM,cAAc,GACtB,UAAU,GAAG,YAAY,GAAG,WAAW,GACvC,cAAc,GAAG,cAAc,GAAG,eAAe,GACjD,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAC;AAc7C,qBAAa,eAAe;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;gBAEtB,QAAQ,EAAE,cAAc;IAQpC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAqBtD,IAAI,IAAI,IAAI;IAIZ,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,7 @@
1
+ export { SelectionManager } from './SelectionManager.ts';
2
+ export { SelectionBox } from './SelectionBox.ts';
3
+ export { TransformHandle } from './TransformHandle.ts';
4
+ export type { HandlePosition } from './TransformHandle.ts';
5
+ export { MarqueeSelect } from './MarqueeSelect.ts';
6
+ export { TransformController } from './TransformController.ts';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/selection/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,43 @@
1
+ export type FillDirection = 'left-to-right' | 'right-to-left' | 'top-to-bottom' | 'bottom-to-top';
2
+ export type ShapeType = 'line' | 'circle' | 'rectangle' | 'arc';
3
+ export type ElementType = 'text' | 'image' | 'shape';
4
+ export interface SerializedElement {
5
+ type: ElementType;
6
+ id: string;
7
+ x: number;
8
+ y: number;
9
+ width: number;
10
+ height: number;
11
+ rotation: number;
12
+ scaleX: number;
13
+ scaleY: number;
14
+ zIndex: number;
15
+ visible: boolean;
16
+ interactable: boolean;
17
+ opacity: number;
18
+ [key: string]: unknown;
19
+ }
20
+ export interface WatchfaceState {
21
+ version: number;
22
+ width: number;
23
+ height: number;
24
+ elements: SerializedElement[];
25
+ }
26
+ export interface UndoableAction {
27
+ type: string;
28
+ description: string;
29
+ undo(): void;
30
+ redo(): void;
31
+ }
32
+ export interface HandleConfig {
33
+ color: number;
34
+ fillColor: number;
35
+ size: number;
36
+ }
37
+ export interface Bounds {
38
+ x: number;
39
+ y: number;
40
+ width: number;
41
+ height: number;
42
+ }
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,CAAC;AAElG,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;AAEhE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,IAAI,IAAI,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,5 @@
1
+ export declare function clamp(value: number, min: number, max: number): number;
2
+ export declare function angleBetweenPoints(cx: number, cy: number, px: number, py: number): number;
3
+ export declare function distanceBetween(x1: number, y1: number, x2: number, y2: number): number;
4
+ export declare function normalizeAngle(angle: number): number;
5
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GACrB,MAAM,CAER;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GACrB,MAAM,CAIR;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD"}
@@ -0,0 +1,3 @@
1
+ export declare function isMacOS(): boolean;
2
+ export declare function getModKey(): 'metaKey' | 'ctrlKey';
3
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,IAAI,OAAO,CAKjC;AAED,wBAAgB,SAAS,IAAI,SAAS,GAAG,SAAS,CAEjD"}
@@ -0,0 +1,2 @@
1
+ export declare function generateUid(): string;
2
+ //# sourceMappingURL=uid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uid.d.ts","sourceRoot":"","sources":["../../src/utils/uid.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,IAAI,MAAM,CAGpC"}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "pixi-watchface-engine",
3
+ "version": "0.1.0",
4
+ "description": "A PixiJS v8 watchface editor engine with visual editor, plugin system, and intuitive API",
5
+ "author": "Eric Schmar (ericschmar@gmail.com)",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "API.md",
20
+ "LICENSE"
21
+ ],
22
+ "scripts": {
23
+ "typecheck": "tsc --noEmit",
24
+ "build": "bun build src/index.ts --outdir dist --target browser && tsc --emitDeclarationOnly --declaration",
25
+ "prepublishOnly": "bun run typecheck && bun run build"
26
+ },
27
+ "keywords": [
28
+ "pixi",
29
+ "pixijs",
30
+ "watchface",
31
+ "editor",
32
+ "visual-editor",
33
+ "2d-graphics",
34
+ "canvas",
35
+ "svelte",
36
+ "react",
37
+ "typescript",
38
+ "plugin-system",
39
+ "undo-redo",
40
+ "serialization"
41
+ ],
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/ericschmar/pixi-watchface-engine"
46
+ },
47
+ "homepage": "https://github.com/ericschmar/pixi-watchface-engine#readme",
48
+ "bugs": {
49
+ "url": "https://github.com/ericschmar/pixi-watchface-engine/issues"
50
+ },
51
+ "engines": {
52
+ "node": ">=18.0.0",
53
+ "bun": ">=1.0.0"
54
+ },
55
+ "peerDependencies": {
56
+ "pixi.js": "^8.0.0"
57
+ },
58
+ "peerDependenciesMeta": {
59
+ "pixi.js": {
60
+ "optional": false
61
+ }
62
+ },
63
+ "devDependencies": {
64
+ "@types/bun": "latest",
65
+ "typescript": "^5.9.3"
66
+ },
67
+ "dependencies": {
68
+ "pixi.js": "^8.16.0"
69
+ }
70
+ }