@jamesyong42/infinite-canvas 1.2.0 → 1.3.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 (56) hide show
  1. package/README.md +65 -0
  2. package/dist/advanced.cjs +61 -24
  3. package/dist/advanced.cjs.map +1 -1
  4. package/dist/advanced.d.cts +180 -64
  5. package/dist/advanced.d.cts.map +1 -1
  6. package/dist/advanced.d.mts +180 -64
  7. package/dist/advanced.d.mts.map +1 -1
  8. package/dist/advanced.mjs +29 -12
  9. package/dist/advanced.mjs.map +1 -1
  10. package/dist/devtools.cjs +22 -22
  11. package/dist/devtools.cjs.map +1 -1
  12. package/dist/devtools.d.cts +2 -2
  13. package/dist/devtools.d.cts.map +1 -1
  14. package/dist/devtools.d.mts +2 -2
  15. package/dist/devtools.d.mts.map +1 -1
  16. package/dist/devtools.mjs +2 -2
  17. package/dist/devtools.mjs.map +1 -1
  18. package/dist/{hooks-BwY7rRHg.mjs → ecs-3kimUV5Z.mjs} +238 -74
  19. package/dist/ecs-3kimUV5Z.mjs.map +1 -0
  20. package/dist/{hooks-DHShH86C.cjs → ecs-B4QrqfvQ.cjs} +320 -108
  21. package/dist/ecs-B4QrqfvQ.cjs.map +1 -0
  22. package/dist/hooks-CtP02JNt.cjs +3762 -0
  23. package/dist/hooks-CtP02JNt.cjs.map +1 -0
  24. package/dist/hooks-gsQDDE56.mjs +3494 -0
  25. package/dist/hooks-gsQDDE56.mjs.map +1 -0
  26. package/dist/index-3GY7T8JM.d.mts +480 -0
  27. package/dist/index-3GY7T8JM.d.mts.map +1 -0
  28. package/dist/index-B7B1tRPl.d.cts +480 -0
  29. package/dist/index-B7B1tRPl.d.cts.map +1 -0
  30. package/dist/index-DSdbSQ_t.d.cts +1451 -0
  31. package/dist/index-DSdbSQ_t.d.cts.map +1 -0
  32. package/dist/index-Dj9odADH.d.mts +1451 -0
  33. package/dist/index-Dj9odADH.d.mts.map +1 -0
  34. package/dist/index.cjs +3865 -643
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +315 -138
  37. package/dist/index.d.cts.map +1 -1
  38. package/dist/index.d.mts +315 -138
  39. package/dist/index.d.mts.map +1 -1
  40. package/dist/index.mjs +3767 -571
  41. package/dist/index.mjs.map +1 -1
  42. package/package.json +1 -1
  43. package/dist/SelectionRenderer-CR2PBQwx.d.cts +0 -105
  44. package/dist/SelectionRenderer-CR2PBQwx.d.cts.map +0 -1
  45. package/dist/SelectionRenderer-DlsBstAq.d.mts +0 -105
  46. package/dist/SelectionRenderer-DlsBstAq.d.mts.map +0 -1
  47. package/dist/WebGLWidgetLayer-BBMuwzHq.cjs +0 -3560
  48. package/dist/WebGLWidgetLayer-BBMuwzHq.cjs.map +0 -1
  49. package/dist/WebGLWidgetLayer-C3p1tnpm.mjs +0 -3375
  50. package/dist/WebGLWidgetLayer-C3p1tnpm.mjs.map +0 -1
  51. package/dist/engine-BfbvWXSk.d.mts +0 -982
  52. package/dist/engine-BfbvWXSk.d.mts.map +0 -1
  53. package/dist/engine-CCjuFMC-.d.cts +0 -982
  54. package/dist/engine-CCjuFMC-.d.cts.map +0 -1
  55. package/dist/hooks-BwY7rRHg.mjs.map +0 -1
  56. package/dist/hooks-DHShH86C.cjs.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jamesyong42/infinite-canvas",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Infinite canvas library with ECS layout engine, React components, and WebGL rendering",
5
5
  "license": "MIT",
6
6
  "author": "James Yong",
@@ -1,105 +0,0 @@
1
- import { F as DomWidgetProps, L as R3FWidgetProps, b as EqualSpacingIndicator, n as LayoutEngine, x as SnapGuide } from "./engine-CCjuFMC-.cjs";
2
- import { EntityId } from "@jamesyong42/reactive-ecs";
3
- import * as _$react from "react";
4
- import * as THREE from "three";
5
-
6
- //#region src/react/context.d.ts
7
- declare const EngineProvider: _$react.Provider<LayoutEngine | null>;
8
- declare const ContainerRefProvider: _$react.Provider<_$react.RefObject<HTMLDivElement | null> | null>;
9
- declare function useContainerRef(): React.RefObject<HTMLDivElement | null> | null;
10
- /**
11
- * Returns the LayoutEngine instance from the nearest InfiniteCanvas context.
12
- * Throws if used outside an InfiniteCanvas provider.
13
- */
14
- declare function useLayoutEngine(): LayoutEngine;
15
- /**
16
- * Discriminated resolution of a widget by type. The surface determines which
17
- * layer renders the component and with what prop shape.
18
- */
19
- type ResolvedWidget = {
20
- surface: 'dom';
21
- component: React.ComponentType<DomWidgetProps>;
22
- } | {
23
- surface: 'webgl';
24
- component: React.ComponentType<R3FWidgetProps>;
25
- };
26
- type WidgetResolver = (entityId: EntityId, widgetType: string) => ResolvedWidget | null;
27
- declare const WidgetResolverProvider: _$react.Provider<WidgetResolver | null>;
28
- declare function useWidgetResolver(): WidgetResolver | null;
29
- //#endregion
30
- //#region src/react/webgl/GridRenderer.d.ts
31
- interface GridConfig {
32
- /** World-unit spacings for up to 3 grid levels [fine, medium, coarse]. */
33
- spacings: [number, number, number];
34
- /** Dot RGB color as [r, g, b] in 0–1 range. */
35
- dotColor: [number, number, number];
36
- /** Base dot opacity multiplier (0–1). */
37
- dotAlpha: number;
38
- /** CSS-pixel range where a grid level fades in: [start, end]. */
39
- fadeIn: [number, number];
40
- /** CSS-pixel range where a grid level fades out: [start, end]. */
41
- fadeOut: [number, number];
42
- /** Dot radius range in CSS pixels [min, max]. Scaled by DPR internally. */
43
- dotRadius: [number, number];
44
- /** Per-level opacity weight: level i gets (base + i * step). */
45
- levelWeight: [number, number];
46
- }
47
- declare const DEFAULT_GRID_CONFIG: GridConfig;
48
- declare class GridRenderer {
49
- private renderer;
50
- private scene;
51
- private camera;
52
- private material;
53
- private mesh;
54
- constructor(canvas: HTMLCanvasElement);
55
- /** Apply a (partial) grid config. Only provided fields are updated. */
56
- setConfig(config: Partial<GridConfig>): void;
57
- setSize(width: number, height: number, dpr?: number): void;
58
- render(cameraX: number, cameraY: number, zoom: number): void;
59
- dispose(): void;
60
- /** Expose for future WebGL widget rendering */
61
- getWebGLRenderer(): THREE.WebGLRenderer;
62
- }
63
- //#endregion
64
- //#region src/react/webgl/SelectionRenderer.d.ts
65
- interface SelectionConfig {
66
- /** Selection outline color [r,g,b] 0-1. Default: Figma blue. */
67
- outlineColor: [number, number, number];
68
- /** Selection outline width in screen px. */
69
- outlineWidth: number;
70
- /** Hover outline color [r,g,b] 0-1. */
71
- hoverColor: [number, number, number];
72
- /** Hover outline width in screen px. */
73
- hoverWidth: number;
74
- /** Handle size in screen px. */
75
- handleSize: number;
76
- /** Handle fill color [r,g,b] 0-1 (white). */
77
- handleFill: [number, number, number];
78
- /** Handle border color [r,g,b] 0-1 (same as outline). */
79
- handleBorder: [number, number, number];
80
- /** Handle border width in screen px. */
81
- handleBorderWidth: number;
82
- /** Group bbox dash length in screen px (0 = solid). */
83
- groupDash: number;
84
- }
85
- declare const DEFAULT_SELECTION_CONFIG: SelectionConfig;
86
- interface SelectionBounds {
87
- x: number;
88
- y: number;
89
- width: number;
90
- height: number;
91
- }
92
- declare class SelectionRenderer {
93
- private material;
94
- private mesh;
95
- private scene;
96
- private camera;
97
- constructor();
98
- setConfig(config: Partial<SelectionConfig>): void;
99
- setSize(resolution: THREE.Vector2, dpr: number): void;
100
- render(renderer: THREE.WebGLRenderer, cameraX: number, cameraY: number, zoom: number, selected: SelectionBounds[], hovered: SelectionBounds | null, guides?: SnapGuide[], spacings?: EqualSpacingIndicator[]): void;
101
- dispose(): void;
102
- }
103
- //#endregion
104
- export { DEFAULT_GRID_CONFIG as a, ContainerRefProvider as c, WidgetResolverProvider as d, useContainerRef as f, SelectionRenderer as i, EngineProvider as l, useWidgetResolver as m, SelectionBounds as n, GridConfig as o, useLayoutEngine as p, SelectionConfig as r, GridRenderer as s, DEFAULT_SELECTION_CONFIG as t, ResolvedWidget as u };
105
- //# sourceMappingURL=SelectionRenderer-CR2PBQwx.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectionRenderer-CR2PBQwx.d.cts","names":[],"sources":["../src/react/context.ts","../src/react/webgl/GridRenderer.ts","../src/react/webgl/SelectionRenderer.ts"],"mappings":";;;;;;cASa,cAAA,EAAc,OAAA,CAAA,QAAA,CAAA,YAAA;AAAA,cAOd,oBAAA,EAAoB,OAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAAA,cAAA;AAAA,iBAEjB,eAAA,CAAA,GAAmB,KAAA,CAAM,SAAA,CAAU,cAAA;AATnD;;;;AAAA,iBAiBgB,eAAA,CAAA,GAAmB,YAAA;;;;;KAgBvB,cAAA;EACP,OAAA;EAAgB,SAAA,EAAW,KAAA,CAAM,aAAA,CAAc,cAAA;AAAA;EAC/C,OAAA;EAAkB,SAAA,EAAW,KAAA,CAAM,aAAA,CAAc,cAAA;AAAA;AAAA,KAE1C,cAAA,IAAkB,QAAA,EAAU,QAAA,EAAU,UAAA,aAAuB,cAAA;AAAA,cAI5D,sBAAA,EAAsB,OAAA,CAAA,QAAA,CAAA,cAAA;AAAA,iBAEnB,iBAAA,CAAA,GAAqB,cAAA;;;UChDpB,UAAA;;EAEhB,QAAA;;EAEA,QAAA;EDCY;ECCZ,QAAA;;EAEA,MAAA;EDH0B;ECK1B,OAAA;EDE+D;ECA/D,SAAA;EDAgC;ECEhC,WAAA;AAAA;AAAA,cAGY,mBAAA,EAAqB,UAAA;AAAA,cAoFrB,YAAA;EAAA,QACJ,QAAA;EAAA,QACA,KAAA;EAAA,QACA,MAAA;EAAA,QACA,QAAA;EAAA,QACA,IAAA;cAEI,MAAA,EAAQ,iBAAA;ED9FU;EC8I9B,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,UAAA;EAW1B,OAAA,CAAQ,KAAA,UAAe,MAAA,UAAgB,GAAA;EAQvC,MAAA,CAAO,OAAA,UAAiB,OAAA,UAAiB,IAAA;EAOzC,OAAA,CAAA;EDxKkD;EC+KlD,gBAAA,CAAA,GAAoB,KAAA,CAAM,aAAA;AAAA;;;UC3LV,eAAA;;EAEhB,YAAA;;EAEA,YAAA;EFDmD;EEGnD,UAAA;EFH0B;EEK1B,UAAA;EFEY;EEAZ,UAAA;;EAEA,UAAA;EFFgC;EEIhC,YAAA;EFJgC;EEMhC,iBAAA;EFNgC;EEQhC,SAAA;AAAA;AAAA,cAGY,wBAAA,EAA0B,eAAA;AAAA,UActB,eAAA;EAChB,CAAA;EACA,CAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,cAoOY,iBAAA;EAAA,QACJ,QAAA;EAAA,QACA,IAAA;EAAA,QACA,KAAA;EAAA,QACA,MAAA;;EAsDR,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,eAAA;EAc1B,OAAA,CAAQ,UAAA,EAAY,KAAA,CAAM,OAAA,EAAS,GAAA;EAKnC,MAAA,CACC,QAAA,EAAU,KAAA,CAAM,aAAA,EAChB,OAAA,UACA,OAAA,UACA,IAAA,UACA,QAAA,EAAU,eAAA,IACV,OAAA,EAAS,eAAA,SACT,MAAA,GAAQ,SAAA,IACR,QAAA,GAAU,qBAAA;EAiFX,OAAA,CAAA;AAAA"}
@@ -1,105 +0,0 @@
1
- import { F as DomWidgetProps, L as R3FWidgetProps, b as EqualSpacingIndicator, n as LayoutEngine, x as SnapGuide } from "./engine-BfbvWXSk.mjs";
2
- import { EntityId } from "@jamesyong42/reactive-ecs";
3
- import * as _$react from "react";
4
- import * as THREE from "three";
5
-
6
- //#region src/react/context.d.ts
7
- declare const EngineProvider: _$react.Provider<LayoutEngine | null>;
8
- declare const ContainerRefProvider: _$react.Provider<_$react.RefObject<HTMLDivElement | null> | null>;
9
- declare function useContainerRef(): React.RefObject<HTMLDivElement | null> | null;
10
- /**
11
- * Returns the LayoutEngine instance from the nearest InfiniteCanvas context.
12
- * Throws if used outside an InfiniteCanvas provider.
13
- */
14
- declare function useLayoutEngine(): LayoutEngine;
15
- /**
16
- * Discriminated resolution of a widget by type. The surface determines which
17
- * layer renders the component and with what prop shape.
18
- */
19
- type ResolvedWidget = {
20
- surface: 'dom';
21
- component: React.ComponentType<DomWidgetProps>;
22
- } | {
23
- surface: 'webgl';
24
- component: React.ComponentType<R3FWidgetProps>;
25
- };
26
- type WidgetResolver = (entityId: EntityId, widgetType: string) => ResolvedWidget | null;
27
- declare const WidgetResolverProvider: _$react.Provider<WidgetResolver | null>;
28
- declare function useWidgetResolver(): WidgetResolver | null;
29
- //#endregion
30
- //#region src/react/webgl/GridRenderer.d.ts
31
- interface GridConfig {
32
- /** World-unit spacings for up to 3 grid levels [fine, medium, coarse]. */
33
- spacings: [number, number, number];
34
- /** Dot RGB color as [r, g, b] in 0–1 range. */
35
- dotColor: [number, number, number];
36
- /** Base dot opacity multiplier (0–1). */
37
- dotAlpha: number;
38
- /** CSS-pixel range where a grid level fades in: [start, end]. */
39
- fadeIn: [number, number];
40
- /** CSS-pixel range where a grid level fades out: [start, end]. */
41
- fadeOut: [number, number];
42
- /** Dot radius range in CSS pixels [min, max]. Scaled by DPR internally. */
43
- dotRadius: [number, number];
44
- /** Per-level opacity weight: level i gets (base + i * step). */
45
- levelWeight: [number, number];
46
- }
47
- declare const DEFAULT_GRID_CONFIG: GridConfig;
48
- declare class GridRenderer {
49
- private renderer;
50
- private scene;
51
- private camera;
52
- private material;
53
- private mesh;
54
- constructor(canvas: HTMLCanvasElement);
55
- /** Apply a (partial) grid config. Only provided fields are updated. */
56
- setConfig(config: Partial<GridConfig>): void;
57
- setSize(width: number, height: number, dpr?: number): void;
58
- render(cameraX: number, cameraY: number, zoom: number): void;
59
- dispose(): void;
60
- /** Expose for future WebGL widget rendering */
61
- getWebGLRenderer(): THREE.WebGLRenderer;
62
- }
63
- //#endregion
64
- //#region src/react/webgl/SelectionRenderer.d.ts
65
- interface SelectionConfig {
66
- /** Selection outline color [r,g,b] 0-1. Default: Figma blue. */
67
- outlineColor: [number, number, number];
68
- /** Selection outline width in screen px. */
69
- outlineWidth: number;
70
- /** Hover outline color [r,g,b] 0-1. */
71
- hoverColor: [number, number, number];
72
- /** Hover outline width in screen px. */
73
- hoverWidth: number;
74
- /** Handle size in screen px. */
75
- handleSize: number;
76
- /** Handle fill color [r,g,b] 0-1 (white). */
77
- handleFill: [number, number, number];
78
- /** Handle border color [r,g,b] 0-1 (same as outline). */
79
- handleBorder: [number, number, number];
80
- /** Handle border width in screen px. */
81
- handleBorderWidth: number;
82
- /** Group bbox dash length in screen px (0 = solid). */
83
- groupDash: number;
84
- }
85
- declare const DEFAULT_SELECTION_CONFIG: SelectionConfig;
86
- interface SelectionBounds {
87
- x: number;
88
- y: number;
89
- width: number;
90
- height: number;
91
- }
92
- declare class SelectionRenderer {
93
- private material;
94
- private mesh;
95
- private scene;
96
- private camera;
97
- constructor();
98
- setConfig(config: Partial<SelectionConfig>): void;
99
- setSize(resolution: THREE.Vector2, dpr: number): void;
100
- render(renderer: THREE.WebGLRenderer, cameraX: number, cameraY: number, zoom: number, selected: SelectionBounds[], hovered: SelectionBounds | null, guides?: SnapGuide[], spacings?: EqualSpacingIndicator[]): void;
101
- dispose(): void;
102
- }
103
- //#endregion
104
- export { DEFAULT_GRID_CONFIG as a, ContainerRefProvider as c, WidgetResolverProvider as d, useContainerRef as f, SelectionRenderer as i, EngineProvider as l, useWidgetResolver as m, SelectionBounds as n, GridConfig as o, useLayoutEngine as p, SelectionConfig as r, GridRenderer as s, DEFAULT_SELECTION_CONFIG as t, ResolvedWidget as u };
105
- //# sourceMappingURL=SelectionRenderer-DlsBstAq.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectionRenderer-DlsBstAq.d.mts","names":[],"sources":["../src/react/context.ts","../src/react/webgl/GridRenderer.ts","../src/react/webgl/SelectionRenderer.ts"],"mappings":";;;;;;cASa,cAAA,EAAc,OAAA,CAAA,QAAA,CAAA,YAAA;AAAA,cAOd,oBAAA,EAAoB,OAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAAA,cAAA;AAAA,iBAEjB,eAAA,CAAA,GAAmB,KAAA,CAAM,SAAA,CAAU,cAAA;AATnD;;;;AAAA,iBAiBgB,eAAA,CAAA,GAAmB,YAAA;;;;;KAgBvB,cAAA;EACP,OAAA;EAAgB,SAAA,EAAW,KAAA,CAAM,aAAA,CAAc,cAAA;AAAA;EAC/C,OAAA;EAAkB,SAAA,EAAW,KAAA,CAAM,aAAA,CAAc,cAAA;AAAA;AAAA,KAE1C,cAAA,IAAkB,QAAA,EAAU,QAAA,EAAU,UAAA,aAAuB,cAAA;AAAA,cAI5D,sBAAA,EAAsB,OAAA,CAAA,QAAA,CAAA,cAAA;AAAA,iBAEnB,iBAAA,CAAA,GAAqB,cAAA;;;UChDpB,UAAA;;EAEhB,QAAA;;EAEA,QAAA;EDCY;ECCZ,QAAA;;EAEA,MAAA;EDH0B;ECK1B,OAAA;EDE+D;ECA/D,SAAA;EDAgC;ECEhC,WAAA;AAAA;AAAA,cAGY,mBAAA,EAAqB,UAAA;AAAA,cAoFrB,YAAA;EAAA,QACJ,QAAA;EAAA,QACA,KAAA;EAAA,QACA,MAAA;EAAA,QACA,QAAA;EAAA,QACA,IAAA;cAEI,MAAA,EAAQ,iBAAA;ED9FU;EC8I9B,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,UAAA;EAW1B,OAAA,CAAQ,KAAA,UAAe,MAAA,UAAgB,GAAA;EAQvC,MAAA,CAAO,OAAA,UAAiB,OAAA,UAAiB,IAAA;EAOzC,OAAA,CAAA;EDxKkD;EC+KlD,gBAAA,CAAA,GAAoB,KAAA,CAAM,aAAA;AAAA;;;UC3LV,eAAA;;EAEhB,YAAA;;EAEA,YAAA;EFDmD;EEGnD,UAAA;EFH0B;EEK1B,UAAA;EFEY;EEAZ,UAAA;;EAEA,UAAA;EFFgC;EEIhC,YAAA;EFJgC;EEMhC,iBAAA;EFNgC;EEQhC,SAAA;AAAA;AAAA,cAGY,wBAAA,EAA0B,eAAA;AAAA,UActB,eAAA;EAChB,CAAA;EACA,CAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,cAoOY,iBAAA;EAAA,QACJ,QAAA;EAAA,QACA,IAAA;EAAA,QACA,KAAA;EAAA,QACA,MAAA;;EAsDR,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,eAAA;EAc1B,OAAA,CAAQ,UAAA,EAAY,KAAA,CAAM,OAAA,EAAS,GAAA;EAKnC,MAAA,CACC,QAAA,EAAU,KAAA,CAAM,aAAA,EAChB,OAAA,UACA,OAAA,UACA,IAAA,UACA,QAAA,EAAU,eAAA,IACV,OAAA,EAAS,eAAA,SACT,MAAA,GAAQ,SAAA,IACR,QAAA,GAAU,qBAAA;EAiFX,OAAA,CAAA;AAAA"}