@oh-just-another/templates 0.57.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 (97) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +21 -0
  3. package/README.md +73 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/built-in.d.ts +16 -0
  6. package/dist/built-in.d.ts.map +1 -0
  7. package/dist/built-in.js +204 -0
  8. package/dist/built-in.js.map +1 -0
  9. package/dist/constants.d.ts +11 -0
  10. package/dist/constants.d.ts.map +1 -0
  11. package/dist/constants.js +11 -0
  12. package/dist/constants.js.map +1 -0
  13. package/dist/icons.d.ts +21 -0
  14. package/dist/icons.d.ts.map +1 -0
  15. package/dist/icons.js +24 -0
  16. package/dist/icons.js.map +1 -0
  17. package/dist/index.d.ts +10 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +10 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/library.d.ts +29 -0
  22. package/dist/library.d.ts.map +1 -0
  23. package/dist/library.js +60 -0
  24. package/dist/library.js.map +1 -0
  25. package/dist/registry.d.ts +27 -0
  26. package/dist/registry.d.ts.map +1 -0
  27. package/dist/registry.js +48 -0
  28. package/dist/registry.js.map +1 -0
  29. package/dist/rich/binding.d.ts +10 -0
  30. package/dist/rich/binding.d.ts.map +1 -0
  31. package/dist/rich/binding.js +42 -0
  32. package/dist/rich/binding.js.map +1 -0
  33. package/dist/rich/bounds.d.ts +16 -0
  34. package/dist/rich/bounds.d.ts.map +1 -0
  35. package/dist/rich/bounds.js +13 -0
  36. package/dist/rich/bounds.js.map +1 -0
  37. package/dist/rich/define.d.ts +44 -0
  38. package/dist/rich/define.d.ts.map +1 -0
  39. package/dist/rich/define.js +3 -0
  40. package/dist/rich/define.js.map +1 -0
  41. package/dist/rich/drop-zones.d.ts +25 -0
  42. package/dist/rich/drop-zones.d.ts.map +1 -0
  43. package/dist/rich/drop-zones.js +63 -0
  44. package/dist/rich/drop-zones.js.map +1 -0
  45. package/dist/rich/extends.d.ts +35 -0
  46. package/dist/rich/extends.d.ts.map +1 -0
  47. package/dist/rich/extends.js +46 -0
  48. package/dist/rich/extends.js.map +1 -0
  49. package/dist/rich/hit-test.d.ts +14 -0
  50. package/dist/rich/hit-test.d.ts.map +1 -0
  51. package/dist/rich/hit-test.js +53 -0
  52. package/dist/rich/hit-test.js.map +1 -0
  53. package/dist/rich/index.d.ts +22 -0
  54. package/dist/rich/index.d.ts.map +1 -0
  55. package/dist/rich/index.js +15 -0
  56. package/dist/rich/index.js.map +1 -0
  57. package/dist/rich/interactive.d.ts +44 -0
  58. package/dist/rich/interactive.d.ts.map +1 -0
  59. package/dist/rich/interactive.js +80 -0
  60. package/dist/rich/interactive.js.map +1 -0
  61. package/dist/rich/layout.d.ts +44 -0
  62. package/dist/rich/layout.d.ts.map +1 -0
  63. package/dist/rich/layout.js +418 -0
  64. package/dist/rich/layout.js.map +1 -0
  65. package/dist/rich/node.d.ts +96 -0
  66. package/dist/rich/node.d.ts.map +1 -0
  67. package/dist/rich/node.js +7 -0
  68. package/dist/rich/node.js.map +1 -0
  69. package/dist/rich/ports.d.ts +19 -0
  70. package/dist/rich/ports.d.ts.map +1 -0
  71. package/dist/rich/ports.js +52 -0
  72. package/dist/rich/ports.js.map +1 -0
  73. package/dist/rich/registry.d.ts +19 -0
  74. package/dist/rich/registry.d.ts.map +1 -0
  75. package/dist/rich/registry.js +35 -0
  76. package/dist/rich/registry.js.map +1 -0
  77. package/dist/rich/render.d.ts +19 -0
  78. package/dist/rich/render.d.ts.map +1 -0
  79. package/dist/rich/render.js +306 -0
  80. package/dist/rich/render.js.map +1 -0
  81. package/dist/rich/style.d.ts +126 -0
  82. package/dist/rich/style.d.ts.map +1 -0
  83. package/dist/rich/style.js +35 -0
  84. package/dist/rich/style.js.map +1 -0
  85. package/dist/rich/svg.d.ts +90 -0
  86. package/dist/rich/svg.d.ts.map +1 -0
  87. package/dist/rich/svg.js +415 -0
  88. package/dist/rich/svg.js.map +1 -0
  89. package/dist/spec.d.ts +2789 -0
  90. package/dist/spec.d.ts.map +1 -0
  91. package/dist/spec.js +239 -0
  92. package/dist/spec.js.map +1 -0
  93. package/dist/types.d.ts +57 -0
  94. package/dist/types.d.ts.map +1 -0
  95. package/dist/types.js +2 -0
  96. package/dist/types.js.map +1 -0
  97. package/package.json +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/rich/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import type { LayoutStyle, NodeStyle } from "./style.js";
2
+ /**
3
+ * Data binding: either a literal value or `{ bind: "<key>" }` that resolves
4
+ * to `data[key]` at render time.
5
+ */
6
+ export type Binding<T> = T | {
7
+ readonly bind: string;
8
+ };
9
+ export interface NodeBase {
10
+ /**
11
+ * Stable identifier within the template tree. Optional but recommended —
12
+ * `id` is what hit-test events report back to the host.
13
+ */
14
+ readonly id?: string;
15
+ readonly style?: NodeStyle;
16
+ readonly layout?: LayoutStyle;
17
+ }
18
+ export interface ContainerNode extends NodeBase {
19
+ readonly type: "container";
20
+ readonly children?: readonly TemplateNode[];
21
+ }
22
+ export interface TextNode extends NodeBase {
23
+ readonly type: "text";
24
+ readonly text: Binding<string>;
25
+ }
26
+ export interface IconNode extends NodeBase {
27
+ readonly type: "icon";
28
+ /**
29
+ * Inline SVG markup as a string. The renderer parses + paints it; for
30
+ * `<svg>` markup, `style.fill` / `style.color` are not auto-propagated.
31
+ */
32
+ readonly svg: Binding<string>;
33
+ }
34
+ export interface ImageNode extends NodeBase {
35
+ readonly type: "image";
36
+ readonly src: Binding<string>;
37
+ }
38
+ /**
39
+ * Clickable area. The host's `Editor` listens for `TEMPLATE_TAP` emits with
40
+ * the node `id` and the host-defined `action` string and routes them.
41
+ */
42
+ export interface ButtonNode extends NodeBase {
43
+ readonly type: "button";
44
+ readonly label?: Binding<string>;
45
+ /** Free-form action identifier; the host decides what to do with it. */
46
+ readonly action: string;
47
+ }
48
+ /**
49
+ * Region that accepts dropped shapes / templates. Fires `TEMPLATE_DROP` for
50
+ * this kind of node.
51
+ */
52
+ export interface DropZoneNode extends NodeBase {
53
+ readonly type: "drop-zone";
54
+ /** Whitelist of template ids or shape `type`s that may be dropped here. */
55
+ readonly accepts?: readonly string[];
56
+ readonly label?: Binding<string>;
57
+ }
58
+ /**
59
+ * Connection port — a named anchor on the rendered template shape. Links
60
+ * snap to ports during draw / re-bind. Visible-on-hover is up to the host.
61
+ *
62
+ * Position the port the same way as any other node: typically with
63
+ * `layout.position = "spot"` + `anchor` / `anchorFocus` / `offset`.
64
+ * The port's `id` becomes the key in `shape.anchors`.
65
+ *
66
+ * `system` picks which coordinate system the port resolves to in
67
+ * `shape.anchors` (see `extractPorts`):
68
+ * - `"ratio"` (default) — bounds-relative `{x,y}` in 0..1; scales with
69
+ * the template under resize. Ports without `system` use this.
70
+ * - `"absolute"` — fixed local-px offset from the template's origin;
71
+ * stays put (does not scale) when the template is resized.
72
+ * - `"edge"` — pinned to polygon edge `index` at parameter `t` (0..1);
73
+ * stays on the real sloped edge. Requires `edge`; meaningful only
74
+ * when the instantiated shape is a polygon (falls back to centre on
75
+ * non-polygons, per the scene anchor resolver).
76
+ */
77
+ export interface PortNode extends NodeBase {
78
+ readonly type: "port";
79
+ /** Required for ports — used as `shape.anchors[id]` lookup key. */
80
+ readonly id: string;
81
+ /** Coordinate system for the resulting anchor. Default `"ratio"`. */
82
+ readonly system?: "ratio" | "absolute" | "edge";
83
+ /** Edge index + parameter — required when `system` is `"edge"`. */
84
+ readonly edge?: {
85
+ readonly index: number;
86
+ readonly t: number;
87
+ };
88
+ }
89
+ export type TemplateNode = ContainerNode | TextNode | IconNode | ImageNode | ButtonNode | DropZoneNode | PortNode;
90
+ /** Type guard: a node is a container (has `children`). */
91
+ export declare const isContainer: (n: TemplateNode) => n is ContainerNode;
92
+ /** True if a node should react to pointer input. */
93
+ export declare const isInteractive: (n: TemplateNode) => n is ButtonNode | DropZoneNode;
94
+ /** Iterate every child of `n` lazily, regardless of node kind. */
95
+ export declare const childrenOf: (n: TemplateNode) => readonly TemplateNode[];
96
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/rich/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IAChD,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,UAAU,GACV,YAAY,GACZ,QAAQ,CAAC;AAEb,0DAA0D;AAC1D,eAAO,MAAM,WAAW,GAAI,GAAG,YAAY,KAAG,CAAC,IAAI,aAAuC,CAAC;AAE3F,oDAAoD;AACpD,eAAO,MAAM,aAAa,GAAI,GAAG,YAAY,KAAG,CAAC,IAAI,UAAU,GAAG,YACnB,CAAC;AAEhD,kEAAkE;AAClE,eAAO,MAAM,UAAU,GAAI,GAAG,YAAY,KAAG,SAAS,YAAY,EACxB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Type guard: a node is a container (has `children`). */
2
+ export const isContainer = (n) => n.type === "container";
3
+ /** True if a node should react to pointer input. */
4
+ export const isInteractive = (n) => n.type === "button" || n.type === "drop-zone";
5
+ /** Iterate every child of `n` lazily, regardless of node kind. */
6
+ export const childrenOf = (n) => isContainer(n) ? (n.children ?? []) : [];
7
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/rich/node.ts"],"names":[],"mappings":"AAsGA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAe,EAAsB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;AAE3F,oDAAoD;AACpD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAe,EAAkC,EAAE,CAC/E,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;AAEhD,kEAAkE;AAClE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAe,EAA2B,EAAE,CACrE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { AnchorRef } from "@oh-just-another/scene";
2
+ import type { LayoutedNode } from "./layout.js";
3
+ /**
4
+ * Walk a layouted template tree and collect every `PortNode` as a map
5
+ * from `port.id` → `AnchorRef`, populated onto `shape.anchors` by the
6
+ * template-instance factory. Link endpoints can then reference ports by
7
+ * id (via `{ kind: "anchor", anchor: { kind: "named", name: <port.id> } }`);
8
+ * the snap engine + nearest-anchor lookup picks them up automatically.
9
+ *
10
+ * The port's `system` field (default `"ratio"`) chooses the coordinate
11
+ * system the ref resolves to (all three round-trip through `shape.anchors`):
12
+ * - `"ratio"` — bounds-relative `{x,y}` in 0..1; scales with resize.
13
+ * - `"absolute"` — local-px offset from the template origin; fixed.
14
+ * - `"edge"` — polygon edge `index` + parameter `t` (from `port.edge`);
15
+ * stays on the real edge. Missing `edge` → falls back to `ratio` so a
16
+ * malformed port still yields a usable anchor instead of being dropped.
17
+ */
18
+ export declare const extractPorts: (root: LayoutedNode) => Record<string, AnchorRef>;
19
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/rich/ports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,YAAY,KAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAgCzE,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Walk a layouted template tree and collect every `PortNode` as a map
3
+ * from `port.id` → `AnchorRef`, populated onto `shape.anchors` by the
4
+ * template-instance factory. Link endpoints can then reference ports by
5
+ * id (via `{ kind: "anchor", anchor: { kind: "named", name: <port.id> } }`);
6
+ * the snap engine + nearest-anchor lookup picks them up automatically.
7
+ *
8
+ * The port's `system` field (default `"ratio"`) chooses the coordinate
9
+ * system the ref resolves to (all three round-trip through `shape.anchors`):
10
+ * - `"ratio"` — bounds-relative `{x,y}` in 0..1; scales with resize.
11
+ * - `"absolute"` — local-px offset from the template origin; fixed.
12
+ * - `"edge"` — polygon edge `index` + parameter `t` (from `port.edge`);
13
+ * stays on the real edge. Missing `edge` → falls back to `ratio` so a
14
+ * malformed port still yields a usable anchor instead of being dropped.
15
+ */
16
+ export const extractPorts = (root) => {
17
+ const out = {};
18
+ const rootBounds = root.bounds;
19
+ if (rootBounds.width === 0 || rootBounds.height === 0)
20
+ return out;
21
+ const visit = (l) => {
22
+ if (l.node.type === "port") {
23
+ const port = l.node;
24
+ // Port bounds are 0×0 — the layout pass already placed its
25
+ // top-left at the resolved spot position. `dx`/`dy` are the
26
+ // resolved local-px offset from the template origin.
27
+ const dx = l.bounds.x - rootBounds.x;
28
+ const dy = l.bounds.y - rootBounds.y;
29
+ const system = port.system ?? "ratio";
30
+ if (system === "edge" && port.edge) {
31
+ out[port.id] = { kind: "edge", index: port.edge.index, t: port.edge.t };
32
+ }
33
+ else if (system === "absolute") {
34
+ out[port.id] = { kind: "absolute", offset: { x: dx, y: dy } };
35
+ }
36
+ else {
37
+ // "ratio" (default) and the malformed-"edge" fallback: convert
38
+ // the resolved point into a ratio of the root bounds so it
39
+ // resolves the same regardless of the template's final size.
40
+ out[port.id] = {
41
+ kind: "ratio",
42
+ position: { x: dx / rootBounds.width, y: dy / rootBounds.height },
43
+ };
44
+ }
45
+ }
46
+ for (const child of l.children)
47
+ visit(child);
48
+ };
49
+ visit(root);
50
+ return out;
51
+ };
52
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/rich/ports.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAkB,EAA6B,EAAE;IAC5E,MAAM,GAAG,GAA8B,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,IAAI,UAAU,CAAC,KAAK,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAElE,MAAM,KAAK,GAAG,CAAC,CAAe,EAAQ,EAAE;QACtC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YACpB,2DAA2D;YAC3D,4DAA4D;YAC5D,qDAAqD;YACrD,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC;YACtC,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC1E,CAAC;iBAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,+DAA+D;gBAC/D,2DAA2D;gBAC3D,6DAA6D;gBAC7D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;oBACb,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE;iBAClE,CAAC;YACJ,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,QAAQ;YAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { RichTemplate } from "./define.js";
2
+ /**
3
+ * Registry of rich templates, keyed by id. The render layer and the host UI
4
+ * both read from this registry; the host typically installs templates at
5
+ * startup and rarely mutates it afterwards.
6
+ */
7
+ export declare class RichTemplateRegistry {
8
+ private readonly items;
9
+ register(template: RichTemplate): void;
10
+ replace(template: RichTemplate): void;
11
+ get(id: string): RichTemplate | undefined;
12
+ has(id: string): boolean;
13
+ list(): readonly RichTemplate[];
14
+ byCategory(category: string): readonly RichTemplate[];
15
+ clear(): void;
16
+ }
17
+ /** Singleton used by the kernel renderer + most hosts. */
18
+ export declare const defaultRichRegistry: RichTemplateRegistry;
19
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/rich/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IAEzD,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAOtC,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIrC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,IAAI,IAAI,SAAS,YAAY,EAAE;IAI/B,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE;IAIrD,KAAK,IAAI,IAAI;CAGd;AAED,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB,sBAA6B,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Registry of rich templates, keyed by id. The render layer and the host UI
3
+ * both read from this registry; the host typically installs templates at
4
+ * startup and rarely mutates it afterwards.
5
+ */
6
+ export class RichTemplateRegistry {
7
+ items = new Map();
8
+ register(template) {
9
+ if (this.items.has(template.id)) {
10
+ throw new Error(`Rich template already registered: ${template.id}`);
11
+ }
12
+ this.items.set(template.id, template);
13
+ }
14
+ replace(template) {
15
+ this.items.set(template.id, template);
16
+ }
17
+ get(id) {
18
+ return this.items.get(id);
19
+ }
20
+ has(id) {
21
+ return this.items.has(id);
22
+ }
23
+ list() {
24
+ return [...this.items.values()];
25
+ }
26
+ byCategory(category) {
27
+ return this.list().filter((t) => t.category === category);
28
+ }
29
+ clear() {
30
+ this.items.clear();
31
+ }
32
+ }
33
+ /** Singleton used by the kernel renderer + most hosts. */
34
+ export const defaultRichRegistry = new RichTemplateRegistry();
35
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/rich/registry.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,oBAAoB;IACd,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEzD,QAAQ,CAAC,QAAsB;QAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,QAAsB;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type TemplateElement as SceneTemplateElement } from "@oh-just-another/scene";
2
+ import { type ElementRenderer } from "@oh-just-another/renderer-core";
3
+ /**
4
+ * Render a `TemplateElement` onto a `RenderTarget`:
5
+ * 1. looks up the template in the rich registry by `shape.templateId`,
6
+ * 2. resolves data bindings against `shape.data`,
7
+ * 3. runs the layout engine with a measurer backed by `target.measureText`,
8
+ * 4. walks the layouted tree and paints each node into `target`.
9
+ *
10
+ * The caller is expected to have already translated `target` to the shape's
11
+ * `position` (via `renderScene`'s per-shape TRS push).
12
+ */
13
+ export declare const renderTemplateElement: ElementRenderer<SceneTemplateElement>;
14
+ /**
15
+ * Wire the rich-template renderer + bounder into the global registries. Call
16
+ * once at app startup, alongside `installBuiltinRenderers()`.
17
+ */
18
+ export declare const installTemplateShapeRenderer: () => void;
19
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/rich/render.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,eAAe,IAAI,oBAAoB,EAC7C,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,gCAAgC,CAAC;AAgBxC;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,eAAe,CAAC,oBAAoB,CA0BvE,CAAC;AA2MF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAAO,IAgD/C,CAAC"}
@@ -0,0 +1,306 @@
1
+ import { registerBounder, registerContainerResolver, registerContainerZonesResolver, } from "@oh-just-another/scene";
2
+ import { extractDropZone, extractAllDropZones } from "./drop-zones.js";
3
+ import { registerElementRenderer, } from "@oh-just-another/renderer-core";
4
+ import { resolveBindings } from "./binding.js";
5
+ import { layoutTree } from "./layout.js";
6
+ import { defaultRichRegistry } from "./registry.js";
7
+ import { paintSvgIcon, parseSvg } from "./svg.js";
8
+ /**
9
+ * Render a `TemplateElement` onto a `RenderTarget`:
10
+ * 1. looks up the template in the rich registry by `shape.templateId`,
11
+ * 2. resolves data bindings against `shape.data`,
12
+ * 3. runs the layout engine with a measurer backed by `target.measureText`,
13
+ * 4. walks the layouted tree and paints each node into `target`.
14
+ *
15
+ * The caller is expected to have already translated `target` to the shape's
16
+ * `position` (via `renderScene`'s per-shape TRS push).
17
+ */
18
+ export const renderTemplateElement = (shape, target) => {
19
+ const template = defaultRichRegistry.get(shape.templateId);
20
+ if (!template) {
21
+ paintMissing(target, shape.width, shape.height, shape.templateId);
22
+ return;
23
+ }
24
+ const root = resolveBindings(template.root, { ...template.defaults, ...shape.data });
25
+ // Force the root to fill the shape's box, which is what makes a template
26
+ // resizable: the user-defined `width/height` on the root layout are
27
+ // overridden with the shape's current width/height so the layout engine
28
+ // distributes the remaining space to children.
29
+ const rootWithSize = {
30
+ ...root,
31
+ layout: {
32
+ ...(root.layout ?? {}),
33
+ width: shape.width,
34
+ height: shape.height,
35
+ },
36
+ };
37
+ const measure = makeMeasureText(target);
38
+ const layouted = layoutTree(rootWithSize, {
39
+ measureText: measure,
40
+ available: { width: shape.width, height: shape.height },
41
+ });
42
+ paintNode(layouted, target);
43
+ };
44
+ const makeMeasureText = (target) => {
45
+ // measureText reads the current font on the target. Set/restore around the
46
+ // measurement so the caller's style is not stomped on.
47
+ return (text, fontFamily, fontSize) => {
48
+ target.save();
49
+ try {
50
+ target.setFont(fontFamily, fontSize);
51
+ return target.measureText(text).width;
52
+ }
53
+ finally {
54
+ target.restore();
55
+ }
56
+ };
57
+ };
58
+ const paintNode = (l, target) => {
59
+ paintBox(l.node, l.bounds, target);
60
+ switch (l.node.type) {
61
+ case "container":
62
+ for (const c of l.children)
63
+ paintNode(c, target);
64
+ break;
65
+ case "text":
66
+ paintText(l.node, l.bounds, target);
67
+ break;
68
+ case "button":
69
+ paintButton(l.node, l.bounds, target);
70
+ break;
71
+ case "drop-zone":
72
+ paintDropZone(l.node, l.bounds, target);
73
+ break;
74
+ case "icon":
75
+ paintIcon(l.node, l.bounds, target);
76
+ break;
77
+ case "image":
78
+ paintImagePlaceholder(l.node, l.bounds, target);
79
+ break;
80
+ case "port":
81
+ // Ports are dimensionless — nothing to paint. Hosts paint port-dot
82
+ // overlays from `shape.anchors`.
83
+ break;
84
+ }
85
+ };
86
+ const paintBox = (node, b, target) => {
87
+ const style = node.style;
88
+ if (!style)
89
+ return;
90
+ const hasFill = style.fill !== undefined && style.fill !== "transparent";
91
+ const hasStroke = style.stroke !== undefined && style.stroke !== "transparent" && (style.strokeWidth ?? 1) > 0;
92
+ if (!hasFill && !hasStroke)
93
+ return;
94
+ if (style.opacity !== undefined)
95
+ target.setOpacity(style.opacity);
96
+ if (hasFill && style.fill)
97
+ target.setFill(style.fill);
98
+ if (hasStroke && style.stroke) {
99
+ target.setStroke(style.stroke);
100
+ target.setStrokeWidth(style.strokeWidth ?? 1);
101
+ }
102
+ target.beginPath();
103
+ target.rect(b.x, b.y, b.width, b.height);
104
+ if (hasFill)
105
+ target.fill();
106
+ if (hasStroke)
107
+ target.stroke();
108
+ };
109
+ const paintText = (node, b, target) => {
110
+ const color = node.style?.color ?? node.style?.fill ?? "#000";
111
+ const fontFamily = node.style?.fontFamily ?? "system-ui, sans-serif";
112
+ const fontSize = node.style?.fontSize ?? 14;
113
+ const align = node.style?.textAlign ?? "left";
114
+ target.setFont(fontFamily, fontSize);
115
+ target.setTextAlign(align);
116
+ target.setTextBaseline("top");
117
+ target.setFill(color);
118
+ const raw = typeof node.text === "string" ? node.text : "";
119
+ const text = truncateToWidth(raw, b.width, target);
120
+ // X anchor for alignment within the box.
121
+ let x = b.x;
122
+ if (align === "center")
123
+ x = b.x + b.width / 2;
124
+ else if (align === "right")
125
+ x = b.x + b.width;
126
+ target.fillText(text, x, b.y);
127
+ };
128
+ const paintButton = (node, b, target) => {
129
+ const fill = node.style?.fill ?? "#f4f4f4";
130
+ const stroke = node.style?.stroke ?? "#888";
131
+ const color = node.style?.color ?? "#222";
132
+ target.setFill(fill);
133
+ target.setStroke(stroke);
134
+ target.setStrokeWidth(node.style?.strokeWidth ?? 1);
135
+ target.beginPath();
136
+ target.rect(b.x, b.y, b.width, b.height);
137
+ target.fill();
138
+ target.stroke();
139
+ if (node.label !== undefined) {
140
+ const rawLabel = typeof node.label === "string" ? node.label : "";
141
+ const fontFamily = node.style?.fontFamily ?? "system-ui, sans-serif";
142
+ const fontSize = node.style?.fontSize ?? 13;
143
+ target.setFont(fontFamily, fontSize);
144
+ target.setTextAlign("center");
145
+ target.setTextBaseline("middle");
146
+ target.setFill(color);
147
+ const labelText = truncateToWidth(rawLabel, Math.max(0, b.width - 12), target);
148
+ target.fillText(labelText, b.x + b.width / 2, b.y + b.height / 2);
149
+ }
150
+ };
151
+ const paintDropZone = (node, b, target) => {
152
+ target.setStroke(node.style?.stroke ?? "#888");
153
+ target.setStrokeWidth(node.style?.strokeWidth ?? 1);
154
+ target.setDashArray([4, 4]);
155
+ target.beginPath();
156
+ target.rect(b.x, b.y, b.width, b.height);
157
+ target.stroke();
158
+ target.setDashArray(null);
159
+ if (node.label !== undefined) {
160
+ const labelText = typeof node.label === "string" ? node.label : "Drop here";
161
+ const color = node.style?.color ?? "#999";
162
+ target.setFont(node.style?.fontFamily ?? "system-ui", node.style?.fontSize ?? 12);
163
+ target.setTextAlign("center");
164
+ target.setTextBaseline("middle");
165
+ target.setFill(color);
166
+ target.fillText(labelText, b.x + b.width / 2, b.y + b.height / 2);
167
+ }
168
+ };
169
+ const paintIcon = (node, b, target) => {
170
+ const svg = typeof node.svg === "string" ? node.svg : "";
171
+ if (!svg)
172
+ return;
173
+ const tint = node.style?.color ?? node.style?.stroke ?? node.style?.fill ?? "#222";
174
+ const cached = getCachedSvg(svg, tint);
175
+ if (!cached) {
176
+ // Couldn't parse — fall back to a hairline placeholder so the layout
177
+ // slot still shows.
178
+ target.setStroke(tint);
179
+ target.setStrokeWidth(1);
180
+ target.beginPath();
181
+ target.rect(b.x, b.y, b.width, b.height);
182
+ target.stroke();
183
+ return;
184
+ }
185
+ paintSvgIcon(cached, b, target);
186
+ };
187
+ // Parsed-SVG cache keyed by `markup|tint`. SVG strings in templates are
188
+ // repeated for every instance — parse once, reuse.
189
+ const svgCache = new Map();
190
+ const getCachedSvg = (markup, tint) => {
191
+ const key = `${markup}|${tint}`;
192
+ if (svgCache.has(key))
193
+ return svgCache.get(key) ?? null;
194
+ const parsed = parseSvg(markup, tint);
195
+ svgCache.set(key, parsed);
196
+ return parsed;
197
+ };
198
+ const paintImagePlaceholder = (_node, b, target) => {
199
+ target.setStroke("#888");
200
+ target.setStrokeWidth(1);
201
+ target.setFill("#eee");
202
+ target.beginPath();
203
+ target.rect(b.x, b.y, b.width, b.height);
204
+ target.fill();
205
+ target.stroke();
206
+ };
207
+ /**
208
+ * Truncate `text` with a trailing `…` so the painted run fits within
209
+ * `maxWidth`. Reads the target's current font (the caller is expected to
210
+ * have set it).
211
+ */
212
+ const truncateToWidth = (text, maxWidth, target) => {
213
+ if (maxWidth <= 0)
214
+ return "";
215
+ if (target.measureText(text).width <= maxWidth)
216
+ return text;
217
+ const ellipsis = "…";
218
+ if (target.measureText(ellipsis).width > maxWidth)
219
+ return "";
220
+ let lo = 0;
221
+ let hi = text.length;
222
+ // Largest prefix that, plus the ellipsis, still fits.
223
+ while (lo < hi) {
224
+ const mid = (lo + hi + 1) >>> 1;
225
+ const candidate = text.slice(0, mid) + ellipsis;
226
+ if (target.measureText(candidate).width <= maxWidth)
227
+ lo = mid;
228
+ else
229
+ hi = mid - 1;
230
+ }
231
+ return text.slice(0, lo) + ellipsis;
232
+ };
233
+ const paintMissing = (target, width, height, id) => {
234
+ target.setStroke("#c00");
235
+ target.setStrokeWidth(1);
236
+ target.setDashArray([4, 4]);
237
+ target.beginPath();
238
+ target.rect(0, 0, width, height);
239
+ target.stroke();
240
+ target.setDashArray(null);
241
+ target.setFill("#c00");
242
+ target.setFont("system-ui", 11);
243
+ target.setTextAlign("center");
244
+ target.setTextBaseline("middle");
245
+ target.fillText(`missing template: ${id}`, width / 2, height / 2);
246
+ };
247
+ void null; // appease unused-import checks
248
+ /**
249
+ * Wire the rich-template renderer + bounder into the global registries. Call
250
+ * once at app startup, alongside `installBuiltinRenderers()`.
251
+ */
252
+ export const installTemplateShapeRenderer = () => {
253
+ registerElementRenderer("template", renderTemplateElement);
254
+ registerBounder("template", (shape) => {
255
+ // The shape's width/height drives both the bounder and the renderer so
256
+ // the user's resize gesture changes both the AABB and the painted layout.
257
+ return { x: 0, y: 0, width: shape.width, height: shape.height };
258
+ });
259
+ // Re-layout a template shape's tree against its current width/height so the
260
+ // drop-zone bounds stay in sync with the visible body after the user resizes
261
+ // it (e.g. growing a swim-lane). Returns the layouted root, or null when the
262
+ // shape isn't a known template.
263
+ //
264
+ // Same trick as renderTemplateElement: inject the shape's current
265
+ // width/height into the root layout, otherwise the root container collapses
266
+ // to its intrinsic size (~80×60 driven by the drop-zone's intrinsic) and the
267
+ // resolver returns a tiny box.
268
+ const layoutTemplateShape = (shape) => {
269
+ if (shape.type !== "template")
270
+ return null;
271
+ const tmpl = shape;
272
+ const template = defaultRichRegistry.get(tmpl.templateId);
273
+ if (!template)
274
+ return null;
275
+ const rootWithSize = {
276
+ ...template.root,
277
+ layout: { ...(template.root.layout ?? {}), width: tmpl.width, height: tmpl.height },
278
+ };
279
+ return layoutTree(rootWithSize, {
280
+ available: { width: tmpl.width, height: tmpl.height },
281
+ });
282
+ };
283
+ // Live single-zone resolver — the container-attach protocol's drop target.
284
+ registerContainerResolver((shape) => {
285
+ const layouted = layoutTemplateShape(shape);
286
+ if (!layouted)
287
+ return null;
288
+ const dropZone = extractDropZone(layouted);
289
+ if (!dropZone)
290
+ return null;
291
+ // Read padding from the shape's static metadata fallback (if any)
292
+ // so authors can tune it per-template; default 8.
293
+ const staticMeta = shape.metadata?.container ?? {};
294
+ return { dropZone, padding: staticMeta.padding ?? 8 };
295
+ });
296
+ // Live multi-zone resolver — every lane of a multi-lane template, for the
297
+ // debug hit-zone overlay (the attach protocol still uses the single zone).
298
+ registerContainerZonesResolver((shape) => {
299
+ const layouted = layoutTemplateShape(shape);
300
+ if (!layouted)
301
+ return null;
302
+ const zones = extractAllDropZones(layouted);
303
+ return zones.length > 0 ? zones : null;
304
+ });
305
+ };
306
+ //# sourceMappingURL=render.js.map