@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.
- package/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/built-in.d.ts +16 -0
- package/dist/built-in.d.ts.map +1 -0
- package/dist/built-in.js +204 -0
- package/dist/built-in.js.map +1 -0
- package/dist/constants.d.ts +11 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +11 -0
- package/dist/constants.js.map +1 -0
- package/dist/icons.d.ts +21 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +24 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/library.d.ts +29 -0
- package/dist/library.d.ts.map +1 -0
- package/dist/library.js +60 -0
- package/dist/library.js.map +1 -0
- package/dist/registry.d.ts +27 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +48 -0
- package/dist/registry.js.map +1 -0
- package/dist/rich/binding.d.ts +10 -0
- package/dist/rich/binding.d.ts.map +1 -0
- package/dist/rich/binding.js +42 -0
- package/dist/rich/binding.js.map +1 -0
- package/dist/rich/bounds.d.ts +16 -0
- package/dist/rich/bounds.d.ts.map +1 -0
- package/dist/rich/bounds.js +13 -0
- package/dist/rich/bounds.js.map +1 -0
- package/dist/rich/define.d.ts +44 -0
- package/dist/rich/define.d.ts.map +1 -0
- package/dist/rich/define.js +3 -0
- package/dist/rich/define.js.map +1 -0
- package/dist/rich/drop-zones.d.ts +25 -0
- package/dist/rich/drop-zones.d.ts.map +1 -0
- package/dist/rich/drop-zones.js +63 -0
- package/dist/rich/drop-zones.js.map +1 -0
- package/dist/rich/extends.d.ts +35 -0
- package/dist/rich/extends.d.ts.map +1 -0
- package/dist/rich/extends.js +46 -0
- package/dist/rich/extends.js.map +1 -0
- package/dist/rich/hit-test.d.ts +14 -0
- package/dist/rich/hit-test.d.ts.map +1 -0
- package/dist/rich/hit-test.js +53 -0
- package/dist/rich/hit-test.js.map +1 -0
- package/dist/rich/index.d.ts +22 -0
- package/dist/rich/index.d.ts.map +1 -0
- package/dist/rich/index.js +15 -0
- package/dist/rich/index.js.map +1 -0
- package/dist/rich/interactive.d.ts +44 -0
- package/dist/rich/interactive.d.ts.map +1 -0
- package/dist/rich/interactive.js +80 -0
- package/dist/rich/interactive.js.map +1 -0
- package/dist/rich/layout.d.ts +44 -0
- package/dist/rich/layout.d.ts.map +1 -0
- package/dist/rich/layout.js +418 -0
- package/dist/rich/layout.js.map +1 -0
- package/dist/rich/node.d.ts +96 -0
- package/dist/rich/node.d.ts.map +1 -0
- package/dist/rich/node.js +7 -0
- package/dist/rich/node.js.map +1 -0
- package/dist/rich/ports.d.ts +19 -0
- package/dist/rich/ports.d.ts.map +1 -0
- package/dist/rich/ports.js +52 -0
- package/dist/rich/ports.js.map +1 -0
- package/dist/rich/registry.d.ts +19 -0
- package/dist/rich/registry.d.ts.map +1 -0
- package/dist/rich/registry.js +35 -0
- package/dist/rich/registry.js.map +1 -0
- package/dist/rich/render.d.ts +19 -0
- package/dist/rich/render.d.ts.map +1 -0
- package/dist/rich/render.js +306 -0
- package/dist/rich/render.js.map +1 -0
- package/dist/rich/style.d.ts +126 -0
- package/dist/rich/style.d.ts.map +1 -0
- package/dist/rich/style.js +35 -0
- package/dist/rich/style.js.map +1 -0
- package/dist/rich/svg.d.ts +90 -0
- package/dist/rich/svg.d.ts.map +1 -0
- package/dist/rich/svg.js +415 -0
- package/dist/rich/svg.js.map +1 -0
- package/dist/spec.d.ts +2789 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +239 -0
- package/dist/spec.js.map +1 -0
- package/dist/types.d.ts +57 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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
|
package/dist/spec.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|