@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":"spec.d.ts","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
package/dist/spec.js ADDED
@@ -0,0 +1,239 @@
1
+ import { z } from "zod";
2
+ import { layoutTree } from "./rich/layout.js";
3
+ import { extractPorts } from "./rich/ports.js";
4
+ import { extractDropZone } from "./rich/drop-zones.js";
5
+ import { defaultRichRegistry } from "./rich/registry.js";
6
+ /**
7
+ * A `TemplateSpec` is the *serializable* form of a `Template`. Functions
8
+ * cannot be persisted, so the runtime factory is reconstructed from a static
9
+ * shape blueprint plus the host-supplied `TemplateContext`.
10
+ *
11
+ * Use `templateFromSpec(spec)` to turn a spec into a callable `Template`, and
12
+ * `loadTemplateLibrary(input)` to import a whole `.json` file.
13
+ */
14
+ const Vec2Z = z.object({ x: z.number(), y: z.number() });
15
+ const StyleZ = z
16
+ .object({
17
+ fill: z.string().optional(),
18
+ stroke: z.string().optional(),
19
+ strokeWidth: z.number().optional(),
20
+ opacity: z.number().optional(),
21
+ dashArray: z.array(z.number()).readonly().optional(),
22
+ lineCap: z.enum(["butt", "round", "square"]).optional(),
23
+ lineJoin: z.enum(["miter", "round", "bevel"]).optional(),
24
+ })
25
+ .strict();
26
+ const TextStyleZ = StyleZ.extend({
27
+ textAlign: z.enum(["left", "center", "right"]).optional(),
28
+ textBaseline: z.enum(["top", "middle", "bottom"]).optional(),
29
+ }).strict();
30
+ const PathCommandZ = z.discriminatedUnion("kind", [
31
+ z.object({ kind: z.literal("M"), to: Vec2Z }).strict(),
32
+ z.object({ kind: z.literal("L"), to: Vec2Z }).strict(),
33
+ z.object({ kind: z.literal("Q"), control: Vec2Z, to: Vec2Z }).strict(),
34
+ z.object({ kind: z.literal("C"), control1: Vec2Z, control2: Vec2Z, to: Vec2Z }).strict(),
35
+ z.object({ kind: z.literal("Z") }).strict(),
36
+ ]);
37
+ /**
38
+ * Element blueprint — all the shape's fields *except* identity / placement,
39
+ * which come from the runtime `TemplateContext`. Plugin authors describe
40
+ * their shapes here.
41
+ */
42
+ export const ShapeBlueprintZ = z.discriminatedUnion("type", [
43
+ z
44
+ .object({
45
+ type: z.literal("rectangle"),
46
+ style: StyleZ,
47
+ width: z.number(),
48
+ height: z.number(),
49
+ })
50
+ .strict(),
51
+ z
52
+ .object({
53
+ type: z.literal("ellipse"),
54
+ style: StyleZ,
55
+ width: z.number(),
56
+ height: z.number(),
57
+ })
58
+ .strict(),
59
+ z
60
+ .object({
61
+ type: z.literal("polygon"),
62
+ style: StyleZ,
63
+ points: z.array(Vec2Z),
64
+ })
65
+ .strict(),
66
+ z
67
+ .object({
68
+ type: z.literal("path"),
69
+ style: StyleZ,
70
+ commands: z.array(PathCommandZ),
71
+ })
72
+ .strict(),
73
+ z
74
+ .object({
75
+ type: z.literal("text"),
76
+ style: TextStyleZ,
77
+ text: z.string(),
78
+ fontFamily: z.string(),
79
+ fontSize: z.number(),
80
+ maxWidth: z.number().optional(),
81
+ })
82
+ .strict(),
83
+ z
84
+ .object({
85
+ type: z.literal("image"),
86
+ style: StyleZ,
87
+ src: z.string(),
88
+ width: z.number(),
89
+ height: z.number(),
90
+ })
91
+ .strict(),
92
+ // Rich-template blueprint: serializable node tree + default data. Validated
93
+ // loosely here (`root` / `defaults` are `unknown` objects) because the rich
94
+ // tree schema is recursive — full validation runs against the live tree at
95
+ // `templateFromSpec` time via the rich-template renderer's loaders.
96
+ z
97
+ .object({
98
+ type: z.literal("template"),
99
+ root: z.unknown(),
100
+ defaults: z.record(z.string(), z.unknown()).optional(),
101
+ width: z.number(),
102
+ height: z.number(),
103
+ schema: z.record(z.string(), z.enum(["string", "number", "boolean"])).optional(),
104
+ minWidth: z.number().optional(),
105
+ minHeight: z.number().optional(),
106
+ maxWidth: z.number().optional(),
107
+ maxHeight: z.number().optional(),
108
+ noFlip: z.boolean().optional(),
109
+ })
110
+ .strict(),
111
+ ]);
112
+ export const TemplateSpecZ = z
113
+ .object({
114
+ id: z.string().min(1),
115
+ name: z.string().min(1),
116
+ category: z.string().min(1),
117
+ icon: z.string(),
118
+ blueprint: ShapeBlueprintZ,
119
+ tags: z.array(z.string().min(1)).optional(),
120
+ metadata: z.record(z.string(), z.unknown()).optional(),
121
+ })
122
+ .strict();
123
+ /**
124
+ * `.json` library bundle. Authors ship one of these to share templates;
125
+ * editor reads it via `loadTemplateLibrary`.
126
+ */
127
+ export const TemplateLibrarySpecZ = z
128
+ .object({
129
+ format: z.literal("oh-just-another/template-library"),
130
+ version: z.literal(1),
131
+ templates: z.array(TemplateSpecZ),
132
+ })
133
+ .strict();
134
+ const stripUndefined = (obj) => {
135
+ const out = {};
136
+ for (const [k, v] of Object.entries(obj))
137
+ if (v !== undefined)
138
+ out[k] = v;
139
+ return out;
140
+ };
141
+ /**
142
+ * Reconstruct a callable `Template` from a `TemplateSpec`. The factory closes
143
+ * over the blueprint and is otherwise pure.
144
+ *
145
+ * For `type: "template"` blueprints the rich template tree is also registered
146
+ * in `defaultRichRegistry` so the renderer can find it by id. Repeated calls
147
+ * with the same `spec.id` use `replace` to keep the registry consistent with
148
+ * the most recent definition.
149
+ */
150
+ export const templateFromSpec = (spec) => {
151
+ const blueprint = spec.blueprint;
152
+ if (blueprint.type === "template") {
153
+ // Side-effect: register the rich tree so the kernel renderer can resolve
154
+ // `templateId` → tree at draw time. `replace` makes repeated
155
+ // `loadTemplateLibrary` calls idempotent.
156
+ defaultRichRegistry.replace({
157
+ id: spec.id,
158
+ name: spec.name,
159
+ category: spec.category,
160
+ icon: spec.icon,
161
+ root: blueprint.root,
162
+ ...(blueprint.defaults !== undefined ? { defaults: blueprint.defaults } : {}),
163
+ ...(blueprint.minWidth !== undefined ? { minWidth: blueprint.minWidth } : {}),
164
+ ...(blueprint.minHeight !== undefined ? { minHeight: blueprint.minHeight } : {}),
165
+ ...(blueprint.maxWidth !== undefined ? { maxWidth: blueprint.maxWidth } : {}),
166
+ ...(blueprint.maxHeight !== undefined ? { maxHeight: blueprint.maxHeight } : {}),
167
+ ...(blueprint.noFlip !== undefined ? { noFlip: blueprint.noFlip } : {}),
168
+ });
169
+ return {
170
+ id: spec.id,
171
+ name: spec.name,
172
+ category: spec.category,
173
+ icon: spec.icon,
174
+ ...(spec.tags !== undefined ? { tags: spec.tags } : {}),
175
+ ...(spec.metadata !== undefined ? { metadata: spec.metadata } : {}),
176
+ factory: (ctx) => {
177
+ // Lay the template out once at its declared natural size to
178
+ // extract every `port` node into a ratio-anchor map. The ratios
179
+ // survive resize — the editor's anchor-resolve always reads
180
+ // current bounds, then multiplies by `position`.
181
+ // `blueprint.root` is `unknown` per the spec schema (validation
182
+ // happens at instantiation time, not load time). Cast — if the
183
+ // root is malformed `layoutTree` will throw with a useful error.
184
+ const layouted = layoutTree(blueprint.root, {
185
+ available: { width: blueprint.width, height: blueprint.height },
186
+ });
187
+ const portAnchors = extractPorts(layouted);
188
+ // The first drop-zone node in the template tree turns this shape into
189
+ // a container per the @scene container protocol: shapes dragged into
190
+ // this area get `parentId = this.id` and move together with the
191
+ // template.
192
+ const dropZone = extractDropZone(layouted);
193
+ const shape = {
194
+ id: ctx.id,
195
+ layerId: ctx.layerId,
196
+ type: "template",
197
+ templateId: spec.id,
198
+ data: blueprint.defaults ?? {},
199
+ position: ctx.position,
200
+ rotation: 0,
201
+ scale: { x: 1, y: 1 },
202
+ order: ctx.order,
203
+ style: {},
204
+ width: blueprint.width,
205
+ height: blueprint.height,
206
+ ...(Object.keys(portAnchors).length > 0 ? { anchors: portAnchors } : {}),
207
+ ...(blueprint.minWidth !== undefined ? { minWidth: blueprint.minWidth } : {}),
208
+ ...(blueprint.minHeight !== undefined ? { minHeight: blueprint.minHeight } : {}),
209
+ ...(blueprint.maxWidth !== undefined ? { maxWidth: blueprint.maxWidth } : {}),
210
+ ...(blueprint.maxHeight !== undefined ? { maxHeight: blueprint.maxHeight } : {}),
211
+ ...(blueprint.noFlip !== undefined ? { noFlip: blueprint.noFlip } : {}),
212
+ ...(dropZone ? { metadata: { container: { dropZone, padding: 8 } } } : {}),
213
+ };
214
+ return shape;
215
+ },
216
+ };
217
+ }
218
+ // Simple, shape-blueprint case (rectangle / ellipse / polygon / path / text / image).
219
+ return {
220
+ id: spec.id,
221
+ name: spec.name,
222
+ category: spec.category,
223
+ icon: spec.icon,
224
+ ...(spec.tags !== undefined ? { tags: spec.tags } : {}),
225
+ ...(spec.metadata !== undefined ? { metadata: spec.metadata } : {}),
226
+ factory: (ctx) => ({
227
+ ...stripUndefined(blueprint),
228
+ id: ctx.id,
229
+ layerId: ctx.layerId,
230
+ position: ctx.position,
231
+ rotation: 0,
232
+ scale: { x: 1, y: 1 },
233
+ order: ctx.order,
234
+ }),
235
+ };
236
+ };
237
+ // Quiet the unused-var checker for imports kept around for callers' .d.ts.
238
+ void null;
239
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { LayerId, ElementId, Vec2 } from "@oh-just-another/types";
2
+ import type { FractionalIndex } from "fractional-keys";
3
+ import type { Element } from "@oh-just-another/scene";
4
+ /**
5
+ * Built-in template categories. Hosts can pass any string as a custom
6
+ * category, but using one of the built-ins keeps the demo palette tidy.
7
+ */
8
+ export type StandardCategory = "basic" | "flowchart";
9
+ export type Category = StandardCategory | (string & {});
10
+ /**
11
+ * What the factory has to know about the host context: where to place the
12
+ * new shape, which layer it belongs to, and how to spell its `order` key.
13
+ *
14
+ * The factory itself never reads from the scene — it just composes a shape
15
+ * from the spec and these context fields.
16
+ */
17
+ export interface TemplateContext {
18
+ readonly id: ElementId;
19
+ readonly layerId: LayerId;
20
+ /** Top-left in world coordinates where the shape should be placed. */
21
+ readonly position: Vec2;
22
+ /** Pre-allocated z-order key (caller can call `orderForTop`). */
23
+ readonly order: FractionalIndex;
24
+ }
25
+ /**
26
+ * A template is a *factory for a shape*. Given a `TemplateContext` it returns
27
+ * a fully-typed `Element` — no scene mutation, no async work.
28
+ *
29
+ * Plugins extend the system by registering their own `Template`s. Built-ins
30
+ * cover `basic` (rectangle, ellipse, …) and `flowchart` (process, decision,
31
+ * …) categories.
32
+ */
33
+ export interface Template {
34
+ readonly id: string;
35
+ readonly name: string;
36
+ readonly category: Category;
37
+ /**
38
+ * SVG markup or data-URI for the palette thumbnail. The kernel doesn't
39
+ * impose a specific size; consumers usually render the icon at 24 × 24 px.
40
+ */
41
+ readonly icon: string;
42
+ /**
43
+ * Synchronous factory. Returns the shape the host should add to the scene.
44
+ */
45
+ factory(context: TemplateContext): Element;
46
+ /**
47
+ * Free-form keywords for the palette search filter. Match is case-
48
+ * insensitive substring across `name`, `category`, and these tags.
49
+ * Use synonyms the user might actually type (e.g. `["rectangle",
50
+ * "square", "rect", "box"]` for the rectangle template). Optional —
51
+ * a template with no tags still matches by name / category.
52
+ */
53
+ readonly tags?: readonly string[];
54
+ /** Free-form metadata (descriptions, etc). */
55
+ readonly metadata?: Readonly<Record<string, unknown>>;
56
+ }
57
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,WAAW,CAAC;AACrD,MAAM,MAAM,QAAQ,GAAG,gBAAgB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@oh-just-another/templates",
3
+ "version": "0.57.0",
4
+ "description": "templates package",
5
+ "license": "MIT",
6
+ "author": "Rustam Garifulin <rustam@n69.in>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/oh-just-another/diagram.git",
10
+ "directory": "packages/templates"
11
+ },
12
+ "homepage": "https://github.com/oh-just-another/diagram#readme",
13
+ "bugs": "https://github.com/oh-just-another/diagram/issues",
14
+ "keywords": [
15
+ "diagram",
16
+ "canvas",
17
+ "svg",
18
+ "editor",
19
+ "graph",
20
+ "drawing"
21
+ ],
22
+ "type": "module",
23
+ "main": "./dist/index.js",
24
+ "module": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/index.js"
30
+ }
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "README.md",
35
+ "CHANGELOG.md"
36
+ ],
37
+ "sideEffects": false,
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "dependencies": {
42
+ "fractional-keys": "^0.1.1",
43
+ "zod": "^3.24.1",
44
+ "@oh-just-another/types": "0.57.0",
45
+ "@oh-just-another/tokens": "0.57.0",
46
+ "@oh-just-another/scene": "0.57.0",
47
+ "@oh-just-another/renderer-core": "0.57.0"
48
+ },
49
+ "scripts": {
50
+ "build": "tsc -b tsconfig.build.json",
51
+ "typecheck": "tsc --noEmit",
52
+ "test": "vitest run",
53
+ "test:watch": "vitest",
54
+ "lint": "eslint src tests",
55
+ "clean": "rm -rf dist *.tsbuildinfo"
56
+ }
57
+ }