pixi-watchface-engine 0.1.1 → 0.1.3

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.
@@ -5,6 +5,7 @@ import { ZOrderManager } from './managers/ZOrderManager.ts';
5
5
  import { SerializationManager } from './managers/SerializationManager.ts';
6
6
  import { SelectionManager } from './selection/SelectionManager.ts';
7
7
  import { PluginManager } from './plugins/PluginManager.ts';
8
+ import type { CoordinateOrigin } from './types.ts';
8
9
  export interface WatchfaceEngineOptions {
9
10
  width: number;
10
11
  height: number;
@@ -12,6 +13,13 @@ export interface WatchfaceEngineOptions {
12
13
  selectionHandleColor?: number;
13
14
  selectionHandleFillColor?: number;
14
15
  selectionHandleSize?: number;
16
+ /**
17
+ * Where (0, 0) is placed on the canvas.
18
+ * - `'top-left'` (default) — standard screen coordinates.
19
+ * - `'center'` — origin is the center of the canvas; useful for watchface
20
+ * layouts where elements are positioned relative to the watch center.
21
+ */
22
+ coordinateOrigin?: CoordinateOrigin;
15
23
  }
16
24
  export declare class WatchfaceEngine {
17
25
  readonly app: Application;
@@ -25,6 +33,12 @@ export declare class WatchfaceEngine {
25
33
  private elementsLayer;
26
34
  private selectionLayer;
27
35
  private overlayLayer;
36
+ /**
37
+ * Single container that holds all four layers. Plugins (e.g. ViewportPlugin)
38
+ * should move this container rather than individual layers.
39
+ * @internal
40
+ */
41
+ private _contentRoot;
28
42
  private interaction;
29
43
  private _options;
30
44
  private _initialized;
@@ -34,6 +48,16 @@ export declare class WatchfaceEngine {
34
48
  init(container: HTMLDivElement, options: WatchfaceEngineOptions): Promise<void>;
35
49
  get options(): Readonly<WatchfaceEngineOptions>;
36
50
  get initialized(): boolean;
51
+ /**
52
+ * The offset applied to the content root based on `coordinateOrigin`.
53
+ * `{ x: 0, y: 0 }` for `'top-left'`, `{ x: width/2, y: height/2 }` for `'center'`.
54
+ */
55
+ get originOffset(): {
56
+ x: number;
57
+ y: number;
58
+ };
59
+ /** The container that holds all layers. Plugins should add this to viewports. */
60
+ getContentRoot(): Container;
37
61
  getBackgroundLayer(): Container;
38
62
  getElementsLayer(): Container;
39
63
  getSelectionLayer(): Container;
@@ -1 +1 @@
1
- {"version":3,"file":"WatchfaceEngine.d.ts","sourceRoot":"","sources":["../src/WatchfaceEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,eAAe;IAC1B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAE/B,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,WAAW,CAAqB;IAExC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,YAAY,CAAS;IAE7B,qFAAqF;IACrF,gBAAgB,UAAS;;IAqBnB,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CrF,IAAI,OAAO,IAAI,QAAQ,CAAC,sBAAsB,CAAC,CAE9C;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,kBAAkB,IAAI,SAAS;IAI/B,gBAAgB,IAAI,SAAS;IAI7B,iBAAiB,IAAI,SAAS;IAI9B,eAAe,IAAI,SAAS;IAI5B,OAAO,IAAI,IAAI;CAUhB"}
1
+ {"version":3,"file":"WatchfaceEngine.d.ts","sourceRoot":"","sources":["../src/WatchfaceEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,qBAAa,eAAe;IAC1B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAE/B,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,YAAY,CAAa;IAEjC;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAa;IAEjC,OAAO,CAAC,WAAW,CAAqB;IAExC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,YAAY,CAAS;IAE7B,qFAAqF;IACrF,gBAAgB,UAAS;;IAqBnB,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuDrF,IAAI,OAAO,IAAI,QAAQ,CAAC,sBAAsB,CAAC,CAE9C;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;OAGG;IACH,IAAI,YAAY,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAK3C;IAED,iFAAiF;IACjF,cAAc,IAAI,SAAS;IAI3B,kBAAkB,IAAI,SAAS;IAI/B,gBAAgB,IAAI,SAAS;IAI7B,iBAAiB,IAAI,SAAS;IAI9B,eAAe,IAAI,SAAS;IAI5B,OAAO,IAAI,IAAI;CAUhB"}
package/dist/index.d.ts CHANGED
@@ -22,7 +22,7 @@ export { ElementManager } from './managers/ElementManager.ts';
22
22
  export { ZOrderManager } from './managers/ZOrderManager.ts';
23
23
  export { SelectionManager } from './selection/SelectionManager.ts';
24
24
  export { SerializationManager } from './managers/SerializationManager.ts';
25
- export type { FillDirection, ShapeType, ElementType, SerializedElement, WatchfaceState, UndoableAction, HandleConfig, Bounds, } from './types.ts';
25
+ export type { FillDirection, ShapeType, ElementType, CoordinateOrigin, SerializedElement, WatchfaceState, UndoableAction, HandleConfig, Bounds, } from './types.ts';
26
26
  export { EventBus } from './EventBus.ts';
27
27
  export type { EngineEventMap } from './EventBus.ts';
28
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAG1E,YAAY,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,MAAM,GACP,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAG1E,YAAY,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,MAAM,GACP,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -34676,6 +34676,7 @@ class WatchfaceEngine {
34676
34676
  elementsLayer;
34677
34677
  selectionLayer;
34678
34678
  overlayLayer;
34679
+ _contentRoot;
34679
34680
  interaction;
34680
34681
  _options;
34681
34682
  _initialized = false;
@@ -34703,12 +34704,18 @@ class WatchfaceEngine {
34703
34704
  autoDensity: true
34704
34705
  });
34705
34706
  container.appendChild(this.app.canvas);
34707
+ this._contentRoot = new Container;
34708
+ if (options.coordinateOrigin === "center") {
34709
+ this._contentRoot.x = options.width / 2;
34710
+ this._contentRoot.y = options.height / 2;
34711
+ }
34706
34712
  this.backgroundLayer = new Container;
34707
34713
  this.elementsLayer = new Container;
34708
34714
  this.elementsLayer.sortableChildren = true;
34709
34715
  this.selectionLayer = new Container;
34710
34716
  this.overlayLayer = new Container;
34711
- this.app.stage.addChild(this.backgroundLayer, this.elementsLayer, this.selectionLayer, this.overlayLayer);
34717
+ this._contentRoot.addChild(this.backgroundLayer, this.elementsLayer, this.selectionLayer, this.overlayLayer);
34718
+ this.app.stage.addChild(this._contentRoot);
34712
34719
  this.app.stage.eventMode = "static";
34713
34720
  this.app.stage.hitArea = this.app.screen;
34714
34721
  this.elements._setLayer(this.elementsLayer);
@@ -34729,6 +34736,15 @@ class WatchfaceEngine {
34729
34736
  get initialized() {
34730
34737
  return this._initialized;
34731
34738
  }
34739
+ get originOffset() {
34740
+ if (this._options?.coordinateOrigin === "center") {
34741
+ return { x: this._options.width / 2, y: this._options.height / 2 };
34742
+ }
34743
+ return { x: 0, y: 0 };
34744
+ }
34745
+ getContentRoot() {
34746
+ return this._contentRoot;
34747
+ }
34732
34748
  getBackgroundLayer() {
34733
34749
  return this.backgroundLayer;
34734
34750
  }
@@ -34813,12 +34829,19 @@ class GridPlugin {
34813
34829
  drawGrid() {
34814
34830
  this.gridGraphics.clear();
34815
34831
  const { width, height } = this.engine.options;
34832
+ const { x: ox, y: oy } = this.engine.originOffset;
34816
34833
  const { cellSize, color } = this.options;
34817
- for (let x2 = 0;x2 <= width; x2 += cellSize) {
34818
- this.gridGraphics.moveTo(x2, 0).lineTo(x2, height).stroke({ color, width: 0.5 });
34834
+ const left = -ox;
34835
+ const top = -oy;
34836
+ const right = width - ox;
34837
+ const bottom = height - oy;
34838
+ const startX = Math.ceil(left / cellSize) * cellSize;
34839
+ const startY = Math.ceil(top / cellSize) * cellSize;
34840
+ for (let x2 = startX;x2 <= right; x2 += cellSize) {
34841
+ this.gridGraphics.moveTo(x2, top).lineTo(x2, bottom).stroke({ color, width: 0.5 });
34819
34842
  }
34820
- for (let y2 = 0;y2 <= height; y2 += cellSize) {
34821
- this.gridGraphics.moveTo(0, y2).lineTo(width, y2).stroke({ color, width: 0.5 });
34843
+ for (let y2 = startY;y2 <= bottom; y2 += cellSize) {
34844
+ this.gridGraphics.moveTo(left, y2).lineTo(right, y2).stroke({ color, width: 0.5 });
34822
34845
  }
34823
34846
  }
34824
34847
  destroy() {
@@ -36514,16 +36537,9 @@ class ViewportPlugin {
36514
36537
  this._viewport.wheel({ smooth: 3 });
36515
36538
  if (this.options.decelerate)
36516
36539
  this._viewport.decelerate();
36517
- const layers = [
36518
- engine.getBackgroundLayer(),
36519
- engine.getElementsLayer(),
36520
- engine.getSelectionLayer(),
36521
- engine.getOverlayLayer()
36522
- ];
36523
- for (const layer of layers) {
36524
- layer.parent?.removeChild(layer);
36525
- this._viewport.addChild(layer);
36526
- }
36540
+ const contentRoot = engine.getContentRoot();
36541
+ contentRoot.parent?.removeChild(contentRoot);
36542
+ this._viewport.addChild(contentRoot);
36527
36543
  app.stage.addChildAt(this._viewport, 0);
36528
36544
  this._viewport.on("zoomed", () => {
36529
36545
  this.engine.eventBus.emit("viewport:zoomed", { zoom: this._viewport.scale.x });
@@ -36539,16 +36555,9 @@ class ViewportPlugin {
36539
36555
  if (!this._viewport)
36540
36556
  return;
36541
36557
  const { app } = this.engine;
36542
- const layers = [
36543
- this.engine.getBackgroundLayer(),
36544
- this.engine.getElementsLayer(),
36545
- this.engine.getSelectionLayer(),
36546
- this.engine.getOverlayLayer()
36547
- ];
36548
- for (const layer of layers) {
36549
- this._viewport.removeChild(layer);
36550
- app.stage.addChild(layer);
36551
- }
36558
+ const contentRoot = this.engine.getContentRoot();
36559
+ this._viewport.removeChild(contentRoot);
36560
+ app.stage.addChild(contentRoot);
36552
36561
  this._viewport.destroy();
36553
36562
  }
36554
36563
  }
@@ -1 +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"}
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;IAgChB,OAAO,IAAI,IAAI;CAIhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewportPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/ViewportPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAaD,qBAAa,cAAe,YAAW,MAAM;IAC3C,QAAQ,CAAC,IAAI,cAAc;IAE3B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAY;gBAEjB,OAAO,CAAC,EAAE,qBAAqB;IAI3C,2DAA2D;IAC3D,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAKrB;IAED,IAAI,IAAI,IAAI,OAAO,CAA8B;IACjD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAQtB;IAED,IAAI,KAAK,IAAI,OAAO,CAA+B;IACnD,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAQvB;IAED,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IA4DnC,OAAO,IAAI,IAAI;CAoBhB"}
1
+ {"version":3,"file":"ViewportPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/ViewportPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAaD,qBAAa,cAAe,YAAW,MAAM;IAC3C,QAAQ,CAAC,IAAI,cAAc;IAE3B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAY;gBAEjB,OAAO,CAAC,EAAE,qBAAqB;IAI3C,2DAA2D;IAC3D,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAKrB;IAED,IAAI,IAAI,IAAI,OAAO,CAA8B;IACjD,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAQtB;IAED,IAAI,KAAK,IAAI,OAAO,CAA+B;IACnD,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAQvB;IAED,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAmDnC,OAAO,IAAI,IAAI;CAWhB"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,9 @@
1
1
  export type FillDirection = 'left-to-right' | 'right-to-left' | 'top-to-bottom' | 'bottom-to-top';
2
+ /** Where (0, 0) is placed on the canvas.
3
+ * - `'top-left'` — default; origin is the top-left corner.
4
+ * - `'center'` — origin is the center of the canvas.
5
+ */
6
+ export type CoordinateOrigin = 'top-left' | 'center';
2
7
  export type ShapeType = 'line' | 'circle' | 'rectangle' | 'arc';
3
8
  export type ElementType = 'text' | 'image' | 'shape';
4
9
  export interface SerializedElement {
@@ -1 +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"}
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;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAErD,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixi-watchface-engine",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "A PixiJS v8 watchface editor engine with visual editor, plugin system, and intuitive API",
5
5
  "author": "Eric Schmar (ericschmar@gmail.com)",
6
6
  "type": "module",