@sgummalla-works/sketchon 0.1.0 → 0.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.
- package/README.md +40 -4
- package/dist/adapters/assets.browser.d.ts +4 -0
- package/dist/adapters/assets.browser.d.ts.map +1 -0
- package/dist/adapters/assets.browser.js +64 -0
- package/dist/adapters/assets.browser.js.map +1 -0
- package/dist/adapters/assets.d.ts +34 -0
- package/dist/adapters/assets.d.ts.map +1 -0
- package/dist/adapters/assets.js +36 -0
- package/dist/adapters/assets.js.map +1 -0
- package/dist/adapters/assets.node.d.ts +4 -0
- package/dist/adapters/assets.node.d.ts.map +1 -0
- package/dist/adapters/assets.node.js +16 -0
- package/dist/adapters/assets.node.js.map +1 -0
- package/dist/adapters/baseline.d.ts.map +1 -1
- package/dist/adapters/baseline.js +9 -7
- package/dist/adapters/baseline.js.map +1 -1
- package/dist/adapters/elk.d.ts.map +1 -1
- package/dist/adapters/elk.js +11 -9
- package/dist/adapters/elk.js.map +1 -1
- package/dist/adapters/emoji-code.d.ts +8 -0
- package/dist/adapters/emoji-code.d.ts.map +1 -0
- package/dist/adapters/emoji-code.js +41 -0
- package/dist/adapters/emoji-code.js.map +1 -0
- package/dist/adapters/emoji.d.ts +2 -4
- package/dist/adapters/emoji.d.ts.map +1 -1
- package/dist/adapters/emoji.js +8 -34
- package/dist/adapters/emoji.js.map +1 -1
- package/dist/adapters/fonts.d.ts +3 -8
- package/dist/adapters/fonts.d.ts.map +1 -1
- package/dist/adapters/fonts.js +7 -4
- package/dist/adapters/fonts.js.map +1 -1
- package/dist/adapters/satori.d.ts.map +1 -1
- package/dist/adapters/satori.js +36 -33
- package/dist/adapters/satori.js.map +1 -1
- package/dist/adapters/sequence.d.ts.map +1 -1
- package/dist/adapters/sequence.js +19 -13
- package/dist/adapters/sequence.js.map +1 -1
- package/dist/adapters/svg.d.ts +7 -6
- package/dist/adapters/svg.d.ts.map +1 -1
- package/dist/adapters/svg.js +12 -11
- package/dist/adapters/svg.js.map +1 -1
- package/dist/composition.d.ts +54 -0
- package/dist/composition.d.ts.map +1 -0
- package/dist/composition.js +68 -0
- package/dist/composition.js.map +1 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -0
- package/dist/constants.js.map +1 -1
- package/dist/domain/theme.d.ts +26 -0
- package/dist/domain/theme.d.ts.map +1 -1
- package/dist/domain/theme.js +52 -0
- package/dist/domain/theme.js.map +1 -1
- package/dist/index.browser.d.ts +15 -0
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.browser.js +19 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.d.ts +13 -55
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -76
- package/dist/index.js.map +1 -1
- package/dist/ports/AssetProvider.d.ts +45 -0
- package/dist/ports/AssetProvider.d.ts.map +1 -0
- package/dist/ports/AssetProvider.js +14 -0
- package/dist/ports/AssetProvider.js.map +1 -0
- package/package.json +16 -4
package/dist/adapters/svg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/adapters/svg.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/adapters/svg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared COMPOSITION ROOT — wires the engine registry + router and re-exports
|
|
3
|
+
* the environment-agnostic public API.
|
|
4
|
+
*
|
|
5
|
+
* ── HEXAGONAL ARCHITECTURE — COMPOSITION ROOT RULES ──────────────────────────
|
|
6
|
+
* This module (together with the thin entry points that import it) is the ONLY
|
|
7
|
+
* place that may import concrete adapters. All other application/domain files
|
|
8
|
+
* stay free of adapter imports — enforced by the architecture guard tests
|
|
9
|
+
* (src/application/architecture.test.ts).
|
|
10
|
+
*
|
|
11
|
+
* Dependency flow (all arrows point inward):
|
|
12
|
+
* adapters/ ──► application/ ──► domain/
|
|
13
|
+
* adapters/ ──► ports/
|
|
14
|
+
*
|
|
15
|
+
* It deliberately does NOT bind an AssetProvider. Each entry point binds the
|
|
16
|
+
* one for its environment:
|
|
17
|
+
* - index.ts → Node: disk-backed provider
|
|
18
|
+
* - index.browser.ts → browser: fetch-backed provider
|
|
19
|
+
* Keeping the binding out of here is what lets the browser entry stay free of
|
|
20
|
+
* any `node:` import.
|
|
21
|
+
*/
|
|
22
|
+
export * from './domain/spec.js';
|
|
23
|
+
export * from './domain/validate.js';
|
|
24
|
+
export * from './domain/theme.js';
|
|
25
|
+
export type { Technique, RenderResult, PlacedBox, PlacedEdge, StructuralFeatures, } from './ports/Technique.js';
|
|
26
|
+
export type { AssetProvider, SketchonFont } from './ports/AssetProvider.js';
|
|
27
|
+
export { TechniqueRegistry } from './application/registry.js';
|
|
28
|
+
export { type EngineKey } from './application/router.js';
|
|
29
|
+
export * from './constants.js';
|
|
30
|
+
export { esc, estimateTextWidth, wrapText, palette, PALETTE, arrowDefs, svgDocument, } from './adapters/svg.js';
|
|
31
|
+
export { emojiCode } from './adapters/emoji-code.js';
|
|
32
|
+
export { configureAssets, setAssetProvider } from './adapters/assets.js';
|
|
33
|
+
export { satoriTechnique } from './adapters/satori.js';
|
|
34
|
+
export { elkTechnique } from './adapters/elk.js';
|
|
35
|
+
export { sequenceTechnique } from './adapters/sequence.js';
|
|
36
|
+
export { baselineTechnique } from './adapters/baseline.js';
|
|
37
|
+
import { TechniqueRegistry } from './application/registry.js';
|
|
38
|
+
/**
|
|
39
|
+
* The application-wide registry, pre-populated with all built-in engines.
|
|
40
|
+
* Consumers may call `.register()` to add custom engines.
|
|
41
|
+
*/
|
|
42
|
+
export declare const REGISTRY: TechniqueRegistry;
|
|
43
|
+
/** All registered techniques — used by the lab harness. */
|
|
44
|
+
export declare const TECHNIQUES: import("./ports/Technique.js").Technique[];
|
|
45
|
+
/** Select the engine key that would render a spec (logging / debugging). */
|
|
46
|
+
export declare const selectEngineKey: (spec: import("./domain/spec.js").DiagramSpec) => import("./application/router.js").EngineKey;
|
|
47
|
+
/** Resolve the Technique that will render a spec. */
|
|
48
|
+
export declare const selectEngine: (spec: import("./domain/spec.js").DiagramSpec) => import("./ports/Technique.js").Technique;
|
|
49
|
+
/**
|
|
50
|
+
* Production render entry point. Validates routing and delegates to the chosen
|
|
51
|
+
* layout engine. Fonts + emoji come from the entry-bound AssetProvider.
|
|
52
|
+
*/
|
|
53
|
+
export declare const renderDiagram: (spec: import("./domain/spec.js").DiagramSpec) => import("./ports/Technique.js").RenderResult | Promise<import("./ports/Technique.js").RenderResult>;
|
|
54
|
+
//# sourceMappingURL=composition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAGlC,YAAY,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGzD,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,GAAG,EACH,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,SAAS,EACT,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAO9D;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,iBAImB,CAAC;AAI3C,2DAA2D;AAC3D,eAAO,MAAM,UAAU,4CAAwB,CAAC;AAEhD,4EAA4E;AAC5E,eAAO,MAAM,eAAe,+FAAsC,CAAC;AAEnE,qDAAqD;AACrD,eAAO,MAAM,YAAY,4FAAmC,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,aAAa,sJAAoC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared COMPOSITION ROOT — wires the engine registry + router and re-exports
|
|
3
|
+
* the environment-agnostic public API.
|
|
4
|
+
*
|
|
5
|
+
* ── HEXAGONAL ARCHITECTURE — COMPOSITION ROOT RULES ──────────────────────────
|
|
6
|
+
* This module (together with the thin entry points that import it) is the ONLY
|
|
7
|
+
* place that may import concrete adapters. All other application/domain files
|
|
8
|
+
* stay free of adapter imports — enforced by the architecture guard tests
|
|
9
|
+
* (src/application/architecture.test.ts).
|
|
10
|
+
*
|
|
11
|
+
* Dependency flow (all arrows point inward):
|
|
12
|
+
* adapters/ ──► application/ ──► domain/
|
|
13
|
+
* adapters/ ──► ports/
|
|
14
|
+
*
|
|
15
|
+
* It deliberately does NOT bind an AssetProvider. Each entry point binds the
|
|
16
|
+
* one for its environment:
|
|
17
|
+
* - index.ts → Node: disk-backed provider
|
|
18
|
+
* - index.browser.ts → browser: fetch-backed provider
|
|
19
|
+
* Keeping the binding out of here is what lets the browser entry stay free of
|
|
20
|
+
* any `node:` import.
|
|
21
|
+
*/
|
|
22
|
+
// ── Domain (pure — zero external deps) ───────────────────────────────────────
|
|
23
|
+
export * from './domain/spec.js';
|
|
24
|
+
export * from './domain/validate.js';
|
|
25
|
+
export * from './domain/theme.js';
|
|
26
|
+
// ── Application (registry + router — no adapter imports) ──────────────────────
|
|
27
|
+
export { TechniqueRegistry } from './application/registry.js';
|
|
28
|
+
export {} from './application/router.js';
|
|
29
|
+
// ── Constants + shared render helpers ────────────────────────────────────────
|
|
30
|
+
export * from './constants.js';
|
|
31
|
+
export { esc, estimateTextWidth, wrapText, palette, PALETTE, arrowDefs, svgDocument, } from './adapters/svg.js';
|
|
32
|
+
// ── Browser-safe helpers + the public asset-injection point ───────────────────
|
|
33
|
+
export { emojiCode } from './adapters/emoji-code.js';
|
|
34
|
+
export { configureAssets, setAssetProvider } from './adapters/assets.js';
|
|
35
|
+
// ── Concrete adapters (exported for advanced use + the lab) ───────────────────
|
|
36
|
+
export { satoriTechnique } from './adapters/satori.js';
|
|
37
|
+
export { elkTechnique } from './adapters/elk.js';
|
|
38
|
+
export { sequenceTechnique } from './adapters/sequence.js';
|
|
39
|
+
export { baselineTechnique } from './adapters/baseline.js';
|
|
40
|
+
// ── Registry + router wiring ──────────────────────────────────────────────────
|
|
41
|
+
import { TechniqueRegistry } from './application/registry.js';
|
|
42
|
+
import { Router } from './application/router.js';
|
|
43
|
+
import { satoriTechnique } from './adapters/satori.js';
|
|
44
|
+
import { elkTechnique } from './adapters/elk.js';
|
|
45
|
+
import { sequenceTechnique } from './adapters/sequence.js';
|
|
46
|
+
import { baselineTechnique } from './adapters/baseline.js';
|
|
47
|
+
/**
|
|
48
|
+
* The application-wide registry, pre-populated with all built-in engines.
|
|
49
|
+
* Consumers may call `.register()` to add custom engines.
|
|
50
|
+
*/
|
|
51
|
+
export const REGISTRY = new TechniqueRegistry()
|
|
52
|
+
.register('baseline', baselineTechnique)
|
|
53
|
+
.register('satori', satoriTechnique)
|
|
54
|
+
.register('elk', elkTechnique)
|
|
55
|
+
.register('sequence', sequenceTechnique);
|
|
56
|
+
const router = new Router(REGISTRY);
|
|
57
|
+
/** All registered techniques — used by the lab harness. */
|
|
58
|
+
export const TECHNIQUES = REGISTRY.techniques();
|
|
59
|
+
/** Select the engine key that would render a spec (logging / debugging). */
|
|
60
|
+
export const selectEngineKey = router.selectEngineKey.bind(router);
|
|
61
|
+
/** Resolve the Technique that will render a spec. */
|
|
62
|
+
export const selectEngine = router.selectEngine.bind(router);
|
|
63
|
+
/**
|
|
64
|
+
* Production render entry point. Validates routing and delegates to the chosen
|
|
65
|
+
* layout engine. Fonts + emoji come from the entry-bound AssetProvider.
|
|
66
|
+
*/
|
|
67
|
+
export const renderDiagram = router.renderDiagram.bind(router);
|
|
68
|
+
//# sourceMappingURL=composition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,gFAAgF;AAChF,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAYlC,iFAAiF;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAkB,MAAM,yBAAyB,CAAC;AAEzD,gFAAgF;AAChF,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,GAAG,EACH,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,SAAS,EACT,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,iFAAiF;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEzE,iFAAiF;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,iFAAiF;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAsB,IAAI,iBAAiB,EAAE;KAC/D,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;KACvC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;KACnC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;KAC7B,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAE3C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEpC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;AAEhD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEnE,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -16,6 +16,9 @@ export declare const NODE_MAX_WIDTH = 240;
|
|
|
16
16
|
export declare const LAYER_GAP = 90;
|
|
17
17
|
export declare const NODE_GAP = 36;
|
|
18
18
|
export declare const CANVAS_PADDING = 40;
|
|
19
|
+
export declare const INTER_FONT_CDN_BASE = "https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.1/files";
|
|
20
|
+
export declare const INTER_FONT_WEIGHTS: readonly [400, 600, 700];
|
|
21
|
+
export declare const TWEMOJI_SVG_CDN_BASE = "https://cdn.jsdelivr.net/gh/jdecked/twemoji@latest/assets/svg";
|
|
19
22
|
export declare const SCORE_START = 100;
|
|
20
23
|
export declare const PENALTY_PER_OVERLAP_PAIR = 12;
|
|
21
24
|
export declare const PENALTY_PER_OFFCANVAS_BOX = 10;
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAGvC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,cAAc,MAAM,CAAC;AAGlC,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,cAAc,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAGvC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,cAAc,MAAM,CAAC;AAGlC,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,cAAc,KAAK,CAAC;AASjC,eAAO,MAAM,mBAAmB,+DAA+D,CAAC;AAChG,eAAO,MAAM,kBAAkB,0BAA2B,CAAC;AAG3D,eAAO,MAAM,oBAAoB,kEAAkE,CAAC;AAKpG,eAAO,MAAM,WAAW,MAAM,CAAC;AAC/B,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,0BAA0B,IAAI,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -23,6 +23,18 @@ export const NODE_MAX_WIDTH = 240;
|
|
|
23
23
|
export const LAYER_GAP = 90; // gap between layers (rank direction)
|
|
24
24
|
export const NODE_GAP = 36; // gap between siblings within a layer
|
|
25
25
|
export const CANVAS_PADDING = 40; // margin around the whole drawing
|
|
26
|
+
// ── Browser asset sources (CDN) ─────────────────────────────────────────────
|
|
27
|
+
// The browser AssetProvider has no disk, so it fetches the same assets the Node
|
|
28
|
+
// provider reads from `assets/`. Pinned to specific versions so a CDN change
|
|
29
|
+
// cannot silently alter rendering. Consumers go fully offline by injecting
|
|
30
|
+
// bundled fonts via `configureAssets()`.
|
|
31
|
+
// - @fontsource ships Satori-compatible `.woff` (NOT `.woff2`, which Satori
|
|
32
|
+
// cannot decode); file names follow `inter-latin-<weight>-normal.woff`.
|
|
33
|
+
export const INTER_FONT_CDN_BASE = 'https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.1/files';
|
|
34
|
+
export const INTER_FONT_WEIGHTS = [400, 600, 700];
|
|
35
|
+
// jdecked's maintained Twemoji fork — shared by the Node disk provider and the
|
|
36
|
+
// browser fetch provider so the asset code is derived identically.
|
|
37
|
+
export const TWEMOJI_SVG_CDN_BASE = 'https://cdn.jsdelivr.net/gh/jdecked/twemoji@latest/assets/svg';
|
|
26
38
|
// ── Eval thresholds + scoring weights ───────────────────────────────────────
|
|
27
39
|
// Composite score starts at 100; each problem subtracts its weight (clamped
|
|
28
40
|
// at 0). Weights encode "how bad is this for a reader."
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAC/E,4EAA4E;AAC5E,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,sCAAsC;AACnE,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,sCAAsC;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,CAAC,kCAAkC;AAEpE,+EAA+E;AAC/E,4EAA4E;AAC5E,wDAAwD;AACxD,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAC/B,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC,CAAC,+BAA+B;AAC3E,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC,CAAC,0BAA0B;AACvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,CAAC,2BAA2B;AACvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,CAAC,qBAAqB;AACjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,CAAC,4BAA4B"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAC/E,4EAA4E;AAC5E,gFAAgF;AAChF,2EAA2E;AAC3E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,+EAA+E;AAC/E,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,sCAAsC;AACnE,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,sCAAsC;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,CAAC,kCAAkC;AAEpE,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAC7E,2EAA2E;AAC3E,yCAAyC;AACzC,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,4DAA4D,CAAC;AAChG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAC3D,+EAA+E;AAC/E,mEAAmE;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,+DAA+D,CAAC;AAEpG,+EAA+E;AAC/E,4EAA4E;AAC5E,wDAAwD;AACxD,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAC/B,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC,CAAC,+BAA+B;AAC3E,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC,CAAC,0BAA0B;AACvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,CAAC,2BAA2B;AACvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,CAAC,qBAAqB;AACjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,CAAC,4BAA4B"}
|
package/dist/domain/theme.d.ts
CHANGED
|
@@ -65,4 +65,30 @@ export declare const CHECKPOINT_TEXT = "#ffd98a";
|
|
|
65
65
|
export declare const CONNECTOR_COLOR = "#cbd5e1";
|
|
66
66
|
export declare const ARROW_FILL = "#475569";
|
|
67
67
|
export declare const ARROW_STROKE = "#475569";
|
|
68
|
+
import type { Emphasis } from './spec.js';
|
|
69
|
+
/** The resolved colour set for one render, selected from `spec.theme.mode`. */
|
|
70
|
+
export interface DiagramTheme {
|
|
71
|
+
mode: 'light' | 'dark';
|
|
72
|
+
bg: string;
|
|
73
|
+
textPrimary: string;
|
|
74
|
+
textBody: string;
|
|
75
|
+
textMuted: string;
|
|
76
|
+
textWhite: string;
|
|
77
|
+
borderLight: string;
|
|
78
|
+
borderDefault: string;
|
|
79
|
+
edgeDefault: string;
|
|
80
|
+
edgeDashed: string;
|
|
81
|
+
connector: string;
|
|
82
|
+
arrow: string;
|
|
83
|
+
/** Node fill + border per emphasis. `text` is always the mono colour. */
|
|
84
|
+
palette: Record<Emphasis, {
|
|
85
|
+
fill: string;
|
|
86
|
+
stroke: string;
|
|
87
|
+
text: string;
|
|
88
|
+
}>;
|
|
89
|
+
}
|
|
90
|
+
export declare const LIGHT_THEME: DiagramTheme;
|
|
91
|
+
export declare const DARK_THEME: DiagramTheme;
|
|
92
|
+
/** Resolve the colour set for a render. Defaults to light when unset. */
|
|
93
|
+
export declare function resolveTheme(mode: 'light' | 'dark' | undefined): DiagramTheme;
|
|
68
94
|
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/domain/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,eAAO,MAAM,kBAAkB,YAAe,CAAC;AAC/C,eAAO,MAAM,eAAe,YAAkB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,YAAiB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,YAAiB,CAAC;AAE/C,eAAO,MAAM,kBAAkB,YAAe,CAAC;AAC/C,eAAO,MAAM,oBAAoB,YAAa,CAAC;AAC/C,eAAO,MAAM,kBAAkB,YAAe,CAAC;AAC/C,eAAO,MAAM,iBAAiB,YAAgB,CAAC;AAI/C,eAAO,MAAM,cAAc;;;;CAAoE,CAAC;AAChG,eAAO,MAAM,eAAe;;;;CAA0D,CAAC;AACvF,eAAO,MAAM,cAAc;;;;CAA2D,CAAC;AACvF,eAAO,MAAM,aAAa;;;;CAA4D,CAAC;AACvF,eAAO,MAAM,cAAc;;;;CAA2D,CAAC;AACvF,eAAO,MAAM,eAAe;;;;CAA0D,CAAC;AAGvF,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,WAAW,YAAa,CAAC;AACtC,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,WAAW,YAAa,CAAC;AACtC,eAAO,MAAM,WAAW,YAAa,CAAC;AACtC,eAAO,MAAM,UAAU,YAAc,CAAC;AAGtC,eAAO,MAAM,iBAAiB,6EAOpB,CAAC;AAGX,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,mBAAmB,YAAa,CAAC;AAC9C,eAAO,MAAM,mBAAmB,YAAa,CAAC;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,mBAAmB,YAAa,CAAC;AAC9C,eAAO,MAAM,kBAAkB,YAAc,CAAC;AAG9C,eAAO,MAAM,eAAe,YAAc,CAAC;AAC3C,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,eAAe,YAAc,CAAC;AAG3C,eAAO,MAAM,eAAe,YAAY,CAAC;AAGzC,eAAO,MAAM,UAAU,YAAc,CAAC;AACtC,eAAO,MAAM,YAAY,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/domain/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,eAAO,MAAM,kBAAkB,YAAe,CAAC;AAC/C,eAAO,MAAM,eAAe,YAAkB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,YAAiB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,YAAiB,CAAC;AAE/C,eAAO,MAAM,kBAAkB,YAAe,CAAC;AAC/C,eAAO,MAAM,oBAAoB,YAAa,CAAC;AAC/C,eAAO,MAAM,kBAAkB,YAAe,CAAC;AAC/C,eAAO,MAAM,iBAAiB,YAAgB,CAAC;AAI/C,eAAO,MAAM,cAAc;;;;CAAoE,CAAC;AAChG,eAAO,MAAM,eAAe;;;;CAA0D,CAAC;AACvF,eAAO,MAAM,cAAc;;;;CAA2D,CAAC;AACvF,eAAO,MAAM,aAAa;;;;CAA4D,CAAC;AACvF,eAAO,MAAM,cAAc;;;;CAA2D,CAAC;AACvF,eAAO,MAAM,eAAe;;;;CAA0D,CAAC;AAGvF,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,WAAW,YAAa,CAAC;AACtC,eAAO,MAAM,YAAY,YAAY,CAAC;AACtC,eAAO,MAAM,WAAW,YAAa,CAAC;AACtC,eAAO,MAAM,WAAW,YAAa,CAAC;AACtC,eAAO,MAAM,UAAU,YAAc,CAAC;AAGtC,eAAO,MAAM,iBAAiB,6EAOpB,CAAC;AAGX,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,mBAAmB,YAAa,CAAC;AAC9C,eAAO,MAAM,mBAAmB,YAAa,CAAC;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,mBAAmB,YAAa,CAAC;AAC9C,eAAO,MAAM,kBAAkB,YAAc,CAAC;AAG9C,eAAO,MAAM,eAAe,YAAc,CAAC;AAC3C,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,eAAe,YAAc,CAAC;AAG3C,eAAO,MAAM,eAAe,YAAY,CAAC;AAGzC,eAAO,MAAM,UAAU,YAAc,CAAC;AACtC,eAAO,MAAM,YAAY,YAAY,CAAC;AAOtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAK1C,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3E;AAED,eAAO,MAAM,WAAW,EAAE,YAsBzB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,YAsBxB,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,YAAY,CAE7E"}
|
package/dist/domain/theme.js
CHANGED
|
@@ -57,4 +57,56 @@ export const CONNECTOR_COLOR = '#cbd5e1';
|
|
|
57
57
|
// ── Arrow markers (graph edges) ───────────────────────────────────────────────
|
|
58
58
|
export const ARROW_FILL = '#475569'; // filled arrowhead
|
|
59
59
|
export const ARROW_STROKE = '#475569'; // open arrowhead stroke
|
|
60
|
+
const TEXT_DARK_ON_LIGHT = COLOR_TEXT_PRIMARY; // near-black, light mode
|
|
61
|
+
const TEXT_WHITE_ON_DARK = '#ffffff'; // white, dark mode
|
|
62
|
+
export const LIGHT_THEME = {
|
|
63
|
+
mode: 'light',
|
|
64
|
+
bg: '#ffffff',
|
|
65
|
+
textPrimary: TEXT_DARK_ON_LIGHT,
|
|
66
|
+
textBody: COLOR_TEXT_BODY,
|
|
67
|
+
textMuted: COLOR_TEXT_MUTED,
|
|
68
|
+
textWhite: COLOR_TEXT_WHITE,
|
|
69
|
+
borderLight: COLOR_BORDER_LIGHT, // subtle dividers stay light
|
|
70
|
+
borderDefault: '#1e293b', // lifelines — mono (black-ish) in light mode
|
|
71
|
+
edgeDefault: '#1e293b', // connectors/edges — black in light mode
|
|
72
|
+
edgeDashed: '#475569', // dashed/return edges — a softer mono grey
|
|
73
|
+
connector: '#1e293b', // satori connector — black in light mode
|
|
74
|
+
arrow: '#1e293b', // arrowheads — black in light mode
|
|
75
|
+
// Light pastel fills so black text reads; emphasis lives in fill+border hue.
|
|
76
|
+
palette: {
|
|
77
|
+
normal: { fill: '#f1f5f9', stroke: '#94a3b8', text: TEXT_DARK_ON_LIGHT },
|
|
78
|
+
primary: { fill: '#dbeafe', stroke: '#3b82f6', text: TEXT_DARK_ON_LIGHT },
|
|
79
|
+
accent: { fill: '#ede9fe', stroke: '#8b5cf6', text: TEXT_DARK_ON_LIGHT },
|
|
80
|
+
muted: { fill: '#f8fafc', stroke: '#cbd5e1', text: TEXT_DARK_ON_LIGHT },
|
|
81
|
+
danger: { fill: '#fee2e2', stroke: '#ef4444', text: TEXT_DARK_ON_LIGHT },
|
|
82
|
+
success: { fill: '#dcfce7', stroke: '#22c55e', text: TEXT_DARK_ON_LIGHT },
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
export const DARK_THEME = {
|
|
86
|
+
mode: 'dark',
|
|
87
|
+
bg: '#0f172a', // slate-900 — the diagram surface in dark mode
|
|
88
|
+
textPrimary: TEXT_WHITE_ON_DARK,
|
|
89
|
+
textBody: '#cbd5e1', // slate-300 (still monochrome — a lighter shade)
|
|
90
|
+
textMuted: '#94a3b8', // slate-400
|
|
91
|
+
textWhite: TEXT_WHITE_ON_DARK,
|
|
92
|
+
borderLight: '#334155', // subtle dividers (slate-700)
|
|
93
|
+
borderDefault: '#e2e8f0', // lifelines — mono (white-ish) in dark mode
|
|
94
|
+
edgeDefault: '#e2e8f0', // connectors/edges — white in dark mode
|
|
95
|
+
edgeDashed: '#94a3b8', // dashed/return edges — a softer mono grey
|
|
96
|
+
connector: '#e2e8f0', // satori connector — white in dark mode
|
|
97
|
+
arrow: '#e2e8f0', // arrowheads — white in dark mode
|
|
98
|
+
// Dark fills so white text reads; emphasis lives in fill+border hue.
|
|
99
|
+
palette: {
|
|
100
|
+
normal: { fill: '#1e293b', stroke: '#475569', text: TEXT_WHITE_ON_DARK },
|
|
101
|
+
primary: { fill: '#1e3a5f', stroke: '#3b82f6', text: TEXT_WHITE_ON_DARK },
|
|
102
|
+
accent: { fill: '#3730a3', stroke: '#8b5cf6', text: TEXT_WHITE_ON_DARK },
|
|
103
|
+
muted: { fill: '#1e293b', stroke: '#334155', text: TEXT_WHITE_ON_DARK },
|
|
104
|
+
danger: { fill: '#7f1d1d', stroke: '#f87171', text: TEXT_WHITE_ON_DARK },
|
|
105
|
+
success: { fill: '#14532d', stroke: '#4ade80', text: TEXT_WHITE_ON_DARK },
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
/** Resolve the colour set for a render. Defaults to light when unset. */
|
|
109
|
+
export function resolveTheme(mode) {
|
|
110
|
+
return mode === 'dark' ? DARK_THEME : LIGHT_THEME;
|
|
111
|
+
}
|
|
60
112
|
//# sourceMappingURL=theme.js.map
|
package/dist/domain/theme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/domain/theme.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/domain/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sgummalla-works/sketchon — BROWSER entry point.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the shared public API (see composition.ts) and binds the
|
|
5
|
+
* fetch-backed AssetProvider (Inter weights + Twemoji SVGs from a CDN, cached in
|
|
6
|
+
* memory). NO `node:` import is reachable from here, so this entry is safe to
|
|
7
|
+
* bundle for the browser. Bundlers pick it automatically via the package's
|
|
8
|
+
* "browser" export condition.
|
|
9
|
+
*
|
|
10
|
+
* To avoid the network at render time, inject bundled fonts:
|
|
11
|
+
* import { configureAssets } from '@sgummalla-works/sketchon';
|
|
12
|
+
* configureAssets({ loadFonts: () => myBundledInterFaces });
|
|
13
|
+
*/
|
|
14
|
+
export * from './composition.js';
|
|
15
|
+
//# sourceMappingURL=index.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sgummalla-works/sketchon — BROWSER entry point.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the shared public API (see composition.ts) and binds the
|
|
5
|
+
* fetch-backed AssetProvider (Inter weights + Twemoji SVGs from a CDN, cached in
|
|
6
|
+
* memory). NO `node:` import is reachable from here, so this entry is safe to
|
|
7
|
+
* bundle for the browser. Bundlers pick it automatically via the package's
|
|
8
|
+
* "browser" export condition.
|
|
9
|
+
*
|
|
10
|
+
* To avoid the network at render time, inject bundled fonts:
|
|
11
|
+
* import { configureAssets } from '@sgummalla-works/sketchon';
|
|
12
|
+
* configureAssets({ loadFonts: () => myBundledInterFaces });
|
|
13
|
+
*/
|
|
14
|
+
export * from './composition.js';
|
|
15
|
+
// ── Bind the fetch-backed provider as the default for this environment ────────
|
|
16
|
+
import { setAssetProvider } from './adapters/assets.js';
|
|
17
|
+
import { browserAssetProvider } from './adapters/assets.browser.js';
|
|
18
|
+
setAssetProvider(browserAssetProvider);
|
|
19
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,cAAc,kBAAkB,CAAC;AAEjC,iFAAiF;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,62 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @sgummalla-works/sketchon —
|
|
2
|
+
* @sgummalla-works/sketchon — NODE entry point.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* The dependency rules are enforced by architecture guard tests
|
|
8
|
-
* (src/application/architecture.test.ts).
|
|
4
|
+
* Re-exports the shared public API (see composition.ts) and binds the
|
|
5
|
+
* disk-backed AssetProvider (bundled Inter fonts + disk-cached Twemoji). This is
|
|
6
|
+
* the default entry for Node + the lab. The browser build is index.browser.ts.
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* validateSpec(spec) → ValidationIssue[] (pure, zero deps)
|
|
18
|
-
* selectEngineKey(spec) → EngineKey
|
|
19
|
-
* selectEngine(spec) → Technique
|
|
20
|
-
* TECHNIQUES → all registered engines (for the lab)
|
|
8
|
+
* ── STABLE PUBLIC API (shared by both entries) ───────────────────────────────
|
|
9
|
+
* renderDiagram(spec) → SVG + metadata (auto-routes engine)
|
|
10
|
+
* validateSpec(spec) → ValidationIssue[] (pure, zero deps)
|
|
11
|
+
* selectEngineKey(spec) → EngineKey
|
|
12
|
+
* selectEngine(spec) → Technique
|
|
13
|
+
* configureAssets(over) → override fonts/emoji (dependency injection)
|
|
14
|
+
* TECHNIQUES → all registered engines (for the lab)
|
|
21
15
|
* DiagramSpec + all spec types
|
|
22
16
|
*/
|
|
23
|
-
export * from './
|
|
24
|
-
export * from './domain/validate.js';
|
|
25
|
-
export * from './domain/theme.js';
|
|
26
|
-
export type { Technique, RenderResult, PlacedBox, PlacedEdge, StructuralFeatures, } from './ports/Technique.js';
|
|
27
|
-
export { TechniqueRegistry } from './application/registry.js';
|
|
28
|
-
export { type EngineKey } from './application/router.js';
|
|
29
|
-
export * from './constants.js';
|
|
30
|
-
export { esc, estimateTextWidth, wrapText, palette, PALETTE, arrowDefs, svgDocument, } from './adapters/svg.js';
|
|
17
|
+
export * from './composition.js';
|
|
31
18
|
export { loadFonts } from './adapters/fonts.js';
|
|
32
|
-
export { emojiToDataUri
|
|
33
|
-
export { satoriTechnique } from './adapters/satori.js';
|
|
34
|
-
export { elkTechnique } from './adapters/elk.js';
|
|
35
|
-
export { sequenceTechnique } from './adapters/sequence.js';
|
|
36
|
-
export { baselineTechnique } from './adapters/baseline.js';
|
|
37
|
-
import { TechniqueRegistry } from './application/registry.js';
|
|
38
|
-
/**
|
|
39
|
-
* The application-wide registry. Pre-populated with all built-in engines.
|
|
40
|
-
* Consumers may call `.register()` to add custom engines.
|
|
41
|
-
*/
|
|
42
|
-
export declare const REGISTRY: TechniqueRegistry;
|
|
43
|
-
/** All registered techniques — used by the lab harness. */
|
|
44
|
-
export declare const TECHNIQUES: import("./ports/Technique.js").Technique[];
|
|
45
|
-
/**
|
|
46
|
-
* Select the engine key that would render a spec.
|
|
47
|
-
* Useful for logging / debugging which engine was chosen.
|
|
48
|
-
*/
|
|
49
|
-
export declare const selectEngineKey: (spec: import("./domain/spec.js").DiagramSpec) => import("./application/router.js").EngineKey;
|
|
50
|
-
/**
|
|
51
|
-
* Resolve the Technique that will render a spec.
|
|
52
|
-
*/
|
|
53
|
-
export declare const selectEngine: (spec: import("./domain/spec.js").DiagramSpec) => import("./ports/Technique.js").Technique;
|
|
54
|
-
/**
|
|
55
|
-
* Production render entry point.
|
|
56
|
-
* Validates routing and delegates to the chosen layout engine.
|
|
57
|
-
*
|
|
58
|
-
* @param spec the coordinate-free diagram spec
|
|
59
|
-
* @returns the rendered SVG + width/height/metadata
|
|
60
|
-
*/
|
|
61
|
-
export declare const renderDiagram: (spec: import("./domain/spec.js").DiagramSpec) => import("./ports/Technique.js").RenderResult | Promise<import("./ports/Technique.js").RenderResult>;
|
|
19
|
+
export { emojiToDataUri } from './adapters/emoji.js';
|
|
62
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,83 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @sgummalla-works/sketchon —
|
|
2
|
+
* @sgummalla-works/sketchon — NODE entry point.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* The dependency rules are enforced by architecture guard tests
|
|
8
|
-
* (src/application/architecture.test.ts).
|
|
4
|
+
* Re-exports the shared public API (see composition.ts) and binds the
|
|
5
|
+
* disk-backed AssetProvider (bundled Inter fonts + disk-cached Twemoji). This is
|
|
6
|
+
* the default entry for Node + the lab. The browser build is index.browser.ts.
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* validateSpec(spec) → ValidationIssue[] (pure, zero deps)
|
|
18
|
-
* selectEngineKey(spec) → EngineKey
|
|
19
|
-
* selectEngine(spec) → Technique
|
|
20
|
-
* TECHNIQUES → all registered engines (for the lab)
|
|
8
|
+
* ── STABLE PUBLIC API (shared by both entries) ───────────────────────────────
|
|
9
|
+
* renderDiagram(spec) → SVG + metadata (auto-routes engine)
|
|
10
|
+
* validateSpec(spec) → ValidationIssue[] (pure, zero deps)
|
|
11
|
+
* selectEngineKey(spec) → EngineKey
|
|
12
|
+
* selectEngine(spec) → Technique
|
|
13
|
+
* configureAssets(over) → override fonts/emoji (dependency injection)
|
|
14
|
+
* TECHNIQUES → all registered engines (for the lab)
|
|
21
15
|
* DiagramSpec + all spec types
|
|
22
16
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
export * from './domain/validate.js';
|
|
26
|
-
export * from './domain/theme.js';
|
|
27
|
-
// ── Application (registry + router — no adapter imports) ──────────────────────
|
|
28
|
-
export { TechniqueRegistry } from './application/registry.js';
|
|
29
|
-
export {} from './application/router.js';
|
|
30
|
-
// ── Constants + shared render helpers ────────────────────────────────────────
|
|
31
|
-
export * from './constants.js';
|
|
32
|
-
export { esc, estimateTextWidth, wrapText, palette, PALETTE, arrowDefs, svgDocument, } from './adapters/svg.js';
|
|
33
|
-
// ── Node-only loaders (filesystem — not browser-safe) ────────────────────────
|
|
17
|
+
export * from './composition.js';
|
|
18
|
+
// ── Node-only loaders (filesystem — not available in the browser build) ───────
|
|
34
19
|
export { loadFonts } from './adapters/fonts.js';
|
|
35
|
-
export { emojiToDataUri
|
|
36
|
-
// ──
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
export { baselineTechnique } from './adapters/baseline.js';
|
|
41
|
-
// ── COMPOSITION ROOT ──────────────────────────────────────────────────────────
|
|
42
|
-
// Wire all adapters into the registry. This is the only place that is allowed
|
|
43
|
-
// to import adapters. Everything below is infrastructure glue.
|
|
44
|
-
import { TechniqueRegistry } from './application/registry.js';
|
|
45
|
-
import { Router } from './application/router.js';
|
|
46
|
-
import { satoriTechnique } from './adapters/satori.js';
|
|
47
|
-
import { elkTechnique } from './adapters/elk.js';
|
|
48
|
-
import { sequenceTechnique } from './adapters/sequence.js';
|
|
49
|
-
import { baselineTechnique } from './adapters/baseline.js';
|
|
50
|
-
/**
|
|
51
|
-
* The application-wide registry. Pre-populated with all built-in engines.
|
|
52
|
-
* Consumers may call `.register()` to add custom engines.
|
|
53
|
-
*/
|
|
54
|
-
export const REGISTRY = new TechniqueRegistry()
|
|
55
|
-
.register('baseline', baselineTechnique)
|
|
56
|
-
.register('satori', satoriTechnique)
|
|
57
|
-
.register('elk', elkTechnique)
|
|
58
|
-
.register('sequence', sequenceTechnique);
|
|
59
|
-
/**
|
|
60
|
-
* The application-wide router, wired to the shared registry.
|
|
61
|
-
* Exposes the primary use-case functions as bound methods.
|
|
62
|
-
*/
|
|
63
|
-
const router = new Router(REGISTRY);
|
|
64
|
-
/** All registered techniques — used by the lab harness. */
|
|
65
|
-
export const TECHNIQUES = REGISTRY.techniques();
|
|
66
|
-
/**
|
|
67
|
-
* Select the engine key that would render a spec.
|
|
68
|
-
* Useful for logging / debugging which engine was chosen.
|
|
69
|
-
*/
|
|
70
|
-
export const selectEngineKey = router.selectEngineKey.bind(router);
|
|
71
|
-
/**
|
|
72
|
-
* Resolve the Technique that will render a spec.
|
|
73
|
-
*/
|
|
74
|
-
export const selectEngine = router.selectEngine.bind(router);
|
|
75
|
-
/**
|
|
76
|
-
* Production render entry point.
|
|
77
|
-
* Validates routing and delegates to the chosen layout engine.
|
|
78
|
-
*
|
|
79
|
-
* @param spec the coordinate-free diagram spec
|
|
80
|
-
* @returns the rendered SVG + width/height/metadata
|
|
81
|
-
*/
|
|
82
|
-
export const renderDiagram = router.renderDiagram.bind(router);
|
|
20
|
+
export { emojiToDataUri } from './adapters/emoji.js';
|
|
21
|
+
// ── Bind the disk-backed provider as the default for this environment ─────────
|
|
22
|
+
import { setAssetProvider } from './adapters/assets.js';
|
|
23
|
+
import { nodeAssetProvider } from './adapters/assets.node.js';
|
|
24
|
+
setAssetProvider(nodeAssetProvider);
|
|
83
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,cAAc,kBAAkB,CAAC;AAEjC,iFAAiF;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,iFAAiF;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,gBAAgB,CAAC,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AssetProvider — the port through which the Satori engine obtains the binary
|
|
3
|
+
* assets it cannot compute: font faces and emoji images.
|
|
4
|
+
*
|
|
5
|
+
* Satori has no filesystem and no font access of its own, so SOMETHING must
|
|
6
|
+
* hand it font bytes and resolve each emoji grapheme to an image. WHERE those
|
|
7
|
+
* bytes come from differs by environment — Node reads them off disk, the
|
|
8
|
+
* browser fetches them — so the source is inverted behind this interface and
|
|
9
|
+
* bound by the composition root (dependency inversion). Consumers may override
|
|
10
|
+
* it via `configureAssets` to supply their own fonts or emoji resolver (e.g. a
|
|
11
|
+
* bundled, fully-offline font set).
|
|
12
|
+
*/
|
|
13
|
+
/** A font face handed to Satori. `data` is the raw font-file bytes. */
|
|
14
|
+
export interface SketchonFont {
|
|
15
|
+
/** Font-family name referenced by the rendered CSS (always "Inter" today). */
|
|
16
|
+
name: string;
|
|
17
|
+
/** Raw font bytes — ttf/otf/woff. NOT woff2 (Satori cannot decode it). */
|
|
18
|
+
data: ArrayBuffer | Uint8Array;
|
|
19
|
+
/** Weight this face provides. */
|
|
20
|
+
weight: 400 | 600 | 700;
|
|
21
|
+
/** Style this face provides. */
|
|
22
|
+
style: 'normal';
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Supplies the fonts + emoji images the Satori engine needs. Bound per
|
|
26
|
+
* environment by the composition root; overridable by consumers.
|
|
27
|
+
*/
|
|
28
|
+
export interface AssetProvider {
|
|
29
|
+
/**
|
|
30
|
+
* Load the font faces Satori renders text with.
|
|
31
|
+
*
|
|
32
|
+
* @returns the font faces — synchronous in Node (disk), async in the browser
|
|
33
|
+
* (fetch).
|
|
34
|
+
*/
|
|
35
|
+
loadFonts(): SketchonFont[] | Promise<SketchonFont[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Resolve a single emoji grapheme to an image data-URI for Satori.
|
|
38
|
+
*
|
|
39
|
+
* @param emoji a single emoji grapheme (e.g. "🔍").
|
|
40
|
+
* @returns an `image/svg+xml` data-URI, or a transparent pixel if the emoji
|
|
41
|
+
* cannot be resolved (offline / 404).
|
|
42
|
+
*/
|
|
43
|
+
emojiToDataUri(emoji: string): string | Promise<string>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=AssetProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetProvider.d.ts","sourceRoot":"","sources":["../../src/ports/AssetProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;IAC/B,iCAAiC;IACjC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,gCAAgC;IAChC,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,SAAS,IAAI,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEtD;;;;;;OAMG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD"}
|