@oh-just-another/scene 0.60.0 → 0.62.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 +63 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/a11y.d.ts +1 -1
- package/dist/a11y.d.ts.map +1 -1
- package/dist/{annotation-geometry.d.ts → annotations/annotation-geometry.d.ts} +1 -1
- package/dist/annotations/annotation-geometry.d.ts.map +1 -0
- package/dist/{annotation-geometry.js → annotations/annotation-geometry.js} +1 -1
- package/dist/annotations/annotation-geometry.js.map +1 -0
- package/dist/annotations/annotation.d.ts.map +1 -0
- package/dist/{annotation.js.map → annotations/annotation.js.map} +1 -1
- package/dist/constants.d.ts +64 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +92 -0
- package/dist/constants.js.map +1 -1
- package/dist/edges/edge-curve.d.ts.map +1 -0
- package/dist/{edge-curve.js → edges/edge-curve.js} +1 -1
- package/dist/edges/edge-curve.js.map +1 -0
- package/dist/{edge-geometry.d.ts → edges/edge-geometry.d.ts} +22 -1
- package/dist/edges/edge-geometry.d.ts.map +1 -0
- package/dist/{edge-geometry.js → edges/edge-geometry.js} +54 -9
- package/dist/{edge-geometry.js.map → edges/edge-geometry.js.map} +1 -1
- package/dist/edges/edge-label.d.ts +55 -0
- package/dist/edges/edge-label.d.ts.map +1 -0
- package/dist/edges/edge-label.js +193 -0
- package/dist/edges/edge-label.js.map +1 -0
- package/dist/{edge.d.ts → edges/edge.d.ts} +1 -1
- package/dist/edges/edge.d.ts.map +1 -0
- package/dist/edges/edge.js.map +1 -0
- package/dist/{elbow-link.d.ts → edges/elbow-link.d.ts} +1 -1
- package/dist/edges/elbow-link.d.ts.map +1 -0
- package/dist/{elbow-link.js → edges/elbow-link.js} +3 -3
- package/dist/edges/elbow-link.js.map +1 -0
- package/dist/edges/elbow-router.d.ts.map +1 -0
- package/dist/{elbow-router.js → edges/elbow-router.js} +1 -1
- package/dist/edges/elbow-router.js.map +1 -0
- package/dist/{heading.d.ts → edges/heading.d.ts} +1 -1
- package/dist/edges/heading.d.ts.map +1 -0
- package/dist/{heading.js → edges/heading.js} +1 -1
- package/dist/edges/heading.js.map +1 -0
- package/dist/{anchors.d.ts → geometry/anchors.d.ts} +2 -2
- package/dist/geometry/anchors.d.ts.map +1 -0
- package/dist/{anchors.js → geometry/anchors.js} +2 -2
- package/dist/geometry/anchors.js.map +1 -0
- package/dist/{outline.d.ts → geometry/outline.d.ts} +1 -1
- package/dist/geometry/outline.d.ts.map +1 -0
- package/dist/{outline.js → geometry/outline.js} +4 -4
- package/dist/geometry/outline.js.map +1 -0
- package/dist/{snap.d.ts → geometry/snap.d.ts} +1 -1
- package/dist/geometry/snap.d.ts.map +1 -0
- package/dist/{snap.js → geometry/snap.js} +1 -1
- package/dist/geometry/snap.js.map +1 -0
- package/dist/index.d.ts +53 -50
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -32
- package/dist/index.js.map +1 -1
- package/dist/{layout-registry.d.ts → layout/layout-registry.d.ts} +2 -2
- package/dist/layout/layout-registry.d.ts.map +1 -0
- package/dist/layout/layout-registry.js.map +1 -0
- package/dist/{layout.d.ts → layout/layout.d.ts} +3 -3
- package/dist/layout/layout.d.ts.map +1 -0
- package/dist/{layout.js → layout/layout.js} +7 -7
- package/dist/layout/layout.js.map +1 -0
- package/dist/model/diff.d.ts.map +1 -0
- package/dist/model/diff.js.map +1 -0
- package/dist/{file.d.ts → model/file.d.ts} +9 -0
- package/dist/model/file.d.ts.map +1 -0
- package/dist/model/file.js +42 -0
- package/dist/model/file.js.map +1 -0
- package/dist/{hydrate.d.ts → model/hydrate.d.ts} +1 -0
- package/dist/model/hydrate.d.ts.map +1 -0
- package/dist/{hydrate.js → model/hydrate.js} +1 -0
- package/dist/model/hydrate.js.map +1 -0
- package/dist/model/layer.d.ts.map +1 -0
- package/dist/model/layer.js.map +1 -0
- package/dist/{operations.d.ts → model/operations.d.ts} +3 -3
- package/dist/model/operations.d.ts.map +1 -0
- package/dist/model/operations.js.map +1 -0
- package/dist/model/order.d.ts.map +1 -0
- package/dist/model/order.js.map +1 -0
- package/dist/{patch.d.ts → model/patch.d.ts} +3 -3
- package/dist/model/patch.d.ts.map +1 -0
- package/dist/model/patch.js.map +1 -0
- package/dist/{scene.d.ts → model/scene.d.ts} +3 -3
- package/dist/model/scene.d.ts.map +1 -0
- package/dist/model/scene.js.map +1 -0
- package/dist/{three-way-merge.d.ts → model/three-way-merge.d.ts} +1 -1
- package/dist/model/three-way-merge.d.ts.map +1 -0
- package/dist/model/three-way-merge.js.map +1 -0
- package/dist/{viewport.d.ts → model/viewport.d.ts} +10 -0
- package/dist/model/viewport.d.ts.map +1 -0
- package/dist/{viewport.js → model/viewport.js} +1 -1
- package/dist/model/viewport.js.map +1 -0
- package/dist/{queries.d.ts → query/queries.d.ts} +12 -7
- package/dist/query/queries.d.ts.map +1 -0
- package/dist/{queries.js → query/queries.js} +20 -10
- package/dist/query/queries.js.map +1 -0
- package/dist/query/spatial.d.ts.map +1 -0
- package/dist/query/spatial.js.map +1 -0
- package/dist/shapes/brush-outline.d.ts.map +1 -0
- package/dist/{brush-outline.js → shapes/brush-outline.js} +1 -1
- package/dist/shapes/brush-outline.js.map +1 -0
- package/dist/{container.d.ts → shapes/container.d.ts} +1 -1
- package/dist/shapes/container.d.ts.map +1 -0
- package/dist/{container.js → shapes/container.js} +1 -1
- package/dist/shapes/container.js.map +1 -0
- package/dist/shapes/ellipse.d.ts.map +1 -0
- package/dist/shapes/ellipse.js.map +1 -0
- package/dist/shapes/render-bounds.d.ts.map +1 -0
- package/dist/shapes/render-bounds.js.map +1 -0
- package/dist/shapes/shape-transform.d.ts.map +1 -0
- package/dist/shapes/shape-transform.js.map +1 -0
- package/dist/{shape.d.ts → shapes/shape.d.ts} +148 -3
- package/dist/shapes/shape.d.ts.map +1 -0
- package/dist/{shape.js → shapes/shape.js} +30 -5
- package/dist/shapes/shape.js.map +1 -0
- package/dist/text/paragraphs.d.ts +44 -0
- package/dist/text/paragraphs.d.ts.map +1 -0
- package/dist/text/paragraphs.js +133 -0
- package/dist/text/paragraphs.js.map +1 -0
- package/dist/text/placeholder.d.ts +9 -0
- package/dist/text/placeholder.d.ts.map +1 -0
- package/dist/text/placeholder.js +29 -0
- package/dist/text/placeholder.js.map +1 -0
- package/dist/{style.d.ts → text/style.d.ts} +6 -0
- package/dist/text/style.d.ts.map +1 -0
- package/dist/{style.js → text/style.js} +1 -1
- package/dist/text/style.js.map +1 -0
- package/dist/text/text-measure.d.ts.map +1 -0
- package/dist/text/text-measure.js.map +1 -0
- package/dist/{text-runs.d.ts → text/text-runs.d.ts} +1 -1
- package/dist/text/text-runs.d.ts.map +1 -0
- package/dist/text/text-runs.js.map +1 -0
- package/package.json +1 -1
- package/dist/anchors.d.ts.map +0 -1
- package/dist/anchors.js.map +0 -1
- package/dist/annotation-geometry.d.ts.map +0 -1
- package/dist/annotation-geometry.js.map +0 -1
- package/dist/annotation.d.ts.map +0 -1
- package/dist/brush-outline.d.ts.map +0 -1
- package/dist/brush-outline.js.map +0 -1
- package/dist/container.d.ts.map +0 -1
- package/dist/container.js.map +0 -1
- package/dist/diff.d.ts.map +0 -1
- package/dist/diff.js.map +0 -1
- package/dist/edge-curve.d.ts.map +0 -1
- package/dist/edge-curve.js.map +0 -1
- package/dist/edge-geometry.d.ts.map +0 -1
- package/dist/edge.d.ts.map +0 -1
- package/dist/edge.js.map +0 -1
- package/dist/elbow-link.d.ts.map +0 -1
- package/dist/elbow-link.js.map +0 -1
- package/dist/elbow-router.d.ts.map +0 -1
- package/dist/elbow-router.js.map +0 -1
- package/dist/ellipse.d.ts.map +0 -1
- package/dist/ellipse.js.map +0 -1
- package/dist/file.d.ts.map +0 -1
- package/dist/file.js +0 -13
- package/dist/file.js.map +0 -1
- package/dist/heading.d.ts.map +0 -1
- package/dist/heading.js.map +0 -1
- package/dist/hydrate.d.ts.map +0 -1
- package/dist/hydrate.js.map +0 -1
- package/dist/layer.d.ts.map +0 -1
- package/dist/layer.js.map +0 -1
- package/dist/layout-registry.d.ts.map +0 -1
- package/dist/layout-registry.js.map +0 -1
- package/dist/layout.d.ts.map +0 -1
- package/dist/layout.js.map +0 -1
- package/dist/operations.d.ts.map +0 -1
- package/dist/operations.js.map +0 -1
- package/dist/order.d.ts.map +0 -1
- package/dist/order.js.map +0 -1
- package/dist/outline.d.ts.map +0 -1
- package/dist/outline.js.map +0 -1
- package/dist/patch.d.ts.map +0 -1
- package/dist/patch.js.map +0 -1
- package/dist/queries.d.ts.map +0 -1
- package/dist/queries.js.map +0 -1
- package/dist/render-bounds.d.ts.map +0 -1
- package/dist/render-bounds.js.map +0 -1
- package/dist/scene.d.ts.map +0 -1
- package/dist/scene.js.map +0 -1
- package/dist/shape-transform.d.ts.map +0 -1
- package/dist/shape-transform.js.map +0 -1
- package/dist/shape.d.ts.map +0 -1
- package/dist/shape.js.map +0 -1
- package/dist/snap.d.ts.map +0 -1
- package/dist/snap.js.map +0 -1
- package/dist/spatial.d.ts.map +0 -1
- package/dist/spatial.js.map +0 -1
- package/dist/style.d.ts.map +0 -1
- package/dist/style.js.map +0 -1
- package/dist/text-measure.d.ts.map +0 -1
- package/dist/text-measure.js.map +0 -1
- package/dist/text-runs.d.ts.map +0 -1
- package/dist/text-runs.js.map +0 -1
- package/dist/three-way-merge.d.ts.map +0 -1
- package/dist/three-way-merge.js.map +0 -1
- package/dist/viewport.d.ts.map +0 -1
- package/dist/viewport.js.map +0 -1
- /package/dist/{annotation.d.ts → annotations/annotation.d.ts} +0 -0
- /package/dist/{annotation.js → annotations/annotation.js} +0 -0
- /package/dist/{edge-curve.d.ts → edges/edge-curve.d.ts} +0 -0
- /package/dist/{edge.js → edges/edge.js} +0 -0
- /package/dist/{elbow-router.d.ts → edges/elbow-router.d.ts} +0 -0
- /package/dist/{layout-registry.js → layout/layout-registry.js} +0 -0
- /package/dist/{diff.d.ts → model/diff.d.ts} +0 -0
- /package/dist/{diff.js → model/diff.js} +0 -0
- /package/dist/{layer.d.ts → model/layer.d.ts} +0 -0
- /package/dist/{layer.js → model/layer.js} +0 -0
- /package/dist/{operations.js → model/operations.js} +0 -0
- /package/dist/{order.d.ts → model/order.d.ts} +0 -0
- /package/dist/{order.js → model/order.js} +0 -0
- /package/dist/{patch.js → model/patch.js} +0 -0
- /package/dist/{scene.js → model/scene.js} +0 -0
- /package/dist/{three-way-merge.js → model/three-way-merge.js} +0 -0
- /package/dist/{spatial.d.ts → query/spatial.d.ts} +0 -0
- /package/dist/{spatial.js → query/spatial.js} +0 -0
- /package/dist/{brush-outline.d.ts → shapes/brush-outline.d.ts} +0 -0
- /package/dist/{ellipse.d.ts → shapes/ellipse.d.ts} +0 -0
- /package/dist/{ellipse.js → shapes/ellipse.js} +0 -0
- /package/dist/{render-bounds.d.ts → shapes/render-bounds.d.ts} +0 -0
- /package/dist/{render-bounds.js → shapes/render-bounds.js} +0 -0
- /package/dist/{shape-transform.d.ts → shapes/shape-transform.d.ts} +0 -0
- /package/dist/{shape-transform.js → shapes/shape-transform.js} +0 -0
- /package/dist/{text-measure.d.ts → text/text-measure.d.ts} +0 -0
- /package/dist/{text-measure.js → text/text-measure.js} +0 -0
- /package/dist/{text-runs.js → text/text-runs.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { vec2 } from "@oh-just-another/math";
|
|
2
2
|
import { req } from "@oh-just-another/types";
|
|
3
|
-
import { BRUSH_OUTLINE_ARC_STEP, BRUSH_OUTLINE_MITER_LIMIT } from "
|
|
3
|
+
import { BRUSH_OUTLINE_ARC_STEP, BRUSH_OUTLINE_MITER_LIMIT } from "../constants.js";
|
|
4
4
|
/**
|
|
5
5
|
* The single closed outline polygon of a variable-width brush stroke: the left
|
|
6
6
|
* offset side forward, a round end cap, the right offset side back, a round start
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brush-outline.js","sourceRoot":"","sources":["../../src/shapes/brush-outline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Bounds, ElementId, Vec2 } from "@oh-just-another/types";
|
|
2
|
-
import type { Scene } from "
|
|
2
|
+
import type { Scene } from "../model/scene.js";
|
|
3
3
|
import type { Element, ElementBase } from "./shape.js";
|
|
4
4
|
/**
|
|
5
5
|
* Container behaviour spec. Carried on a shape via
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/shapes/container.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGvD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,aAAa,GAAG,IAAI,CAAC;AAI7E;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GAAI,UAAU,iBAAiB,KAAG,IAEvE,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,WAAW,GAAI,GAAG,WAAW,KAAG,OAAuC,CAAC;AAErF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,GAAI,GAAG,WAAW,KAAG,aAAa,GAAG,IA2CjE,CAAC;AAYF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,GAAG,WAAW,KAAG,MAAM,GAAG,IAS1D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;AAItF,sEAAsE;AACtE,eAAO,MAAM,8BAA8B,GAAI,UAAU,sBAAsB,KAAG,IAEjF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAAI,GAAG,WAAW,KAAG,SAAS,MAAM,EAcjE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,KAAK,EACZ,YAAY,IAAI,EAChB,UAAS,WAAW,CAAC,SAAS,CAAa,KAC1C,OAAO,GAAG,IAgBZ,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,GAAI,WAAW,WAAW,EAAE,YAAY,MAAM,KAAG,MAAM,GAAG,IAuCzF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,EAC/D,UAAU,MAAM,KACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,IAAI,CAAA;CAcvD,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { bounds as B } from "@oh-just-another/math";
|
|
2
|
-
import { getLayersInOrder, getElementsInLayer } from "
|
|
2
|
+
import { getLayersInOrder, getElementsInLayer } from "../query/queries.js";
|
|
3
3
|
const resolvers = [];
|
|
4
4
|
/**
|
|
5
5
|
* Plug in a resolver. Called in registration order — first non-null
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/shapes/container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAgC3E,MAAM,SAAS,GAAwB,EAAE,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAA2B,EAAQ,EAAE;IAC7E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAc,EAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAErF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAc,EAAwB,EAAE;IACvE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IACD,wEAAwE;IACxE,oEAAoE;IACpE,qEAAqE;IACrE,oEAAoE;IACpE,mEAAmE;IACnE,wCAAwC;IACxC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAkF,CAAC;IAClG,iEAAiE;IACjE,+DAA+D;IAC/D,uCAAuC;IACvC,MAAM,KAAK,GAAG,CAAqD,CAAC;IACpE,IACE,IAAI,EAAE,UAAU,IAAI,IAAI;QACxB,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAChC,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,2BAA2B,CAAC;QACvE,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QACtB,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,OAAO;YACL,QAAQ,EAAE;gBACR,CAAC,EAAE,OAAO;gBACV,CAAC,EAAE,OAAO;gBACV,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;gBACnC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;aACrC;YACD,OAAO;SACR,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC;IAChC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,GAAG,GAAG,CAA4C,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,IAAI,GACR,GAAG,CAAC,OAAO,KAAK,SAAS;QACvB,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;QAClD,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;IACjC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAc,EAAiB,EAAE;IAChE,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO;QACL,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC1B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;KAC7B,CAAC;AACJ,CAAC,CAAC;AAUF,MAAM,cAAc,GAA6B,EAAE,CAAC;AAEpD,sEAAsE;AACtE,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,QAAgC,EAAQ,EAAE;IACvF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAc,EAAqB,EAAE;IACrE,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;aACjB,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAY,EACZ,UAAgB,EAChB,UAAkC,IAAI,GAAG,EAAE,EAC3B,EAAE;IAClB,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE,OAAO;YAAE,SAAS;QAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACnD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,SAAS;gBAAE,SAAS;YAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAE,SAAS;YAChC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;gBAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAsB,EAAE,UAAkB,EAAiB,EAAE;IAC/F,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IAClC,0CAA0C;IAC1C,MAAM,UAAU,GAAW;QACzB,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC;IACF,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;IACxB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;IAC3C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACzB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,iEAAiE;IACjE,mEAAmE;IACnE,4DAA4D;IAC5D,kEAAkE;IAClE,+DAA+D;IAC/D,8DAA8D;IAC9D,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,CAAC,EAAE,OAAO;QACV,CAAC,EAAE,OAAO;QACV,KAAK,EAAE,OAAO,GAAG,OAAO;QACxB,MAAM,EAAE,OAAO,GAAG,OAAO;KAC1B,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAA+D,EAC/D,QAAgB,EACyC,EAAE;IAC3D,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChC,oEAAoE;IACpE,sEAAsE;IACtE,yBAAyB;IACzB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO;QACvC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,KAAK,GAAG,QAAQ;QACzC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;KAC1C,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ellipse.d.ts","sourceRoot":"","sources":["../../src/shapes/ellipse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,IAAI,MAAM,EACV,IAAI,MAAM,EACV,IAAI,MAAM,EACV,IAAI,MAAM,EACV,OAAO,MAAM,KACZ,IAGF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ellipse.js","sourceRoot":"","sources":["../../src/shapes/ellipse.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,EAAU,EACV,EAAU,EACV,EAAU,EACV,EAAU,EACV,KAAa,EACP,EAAE;IACR,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,mBAAmB;IACpE,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-bounds.d.ts","sourceRoot":"","sources":["../../src/shapes/render-bounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAErE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,KAAK,sBAAsB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,cAAc,CAAC;AAIrE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,EAAE,IAAI,sBAAsB,KAAG,IAEjF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,WAAW,KAAG,MAgB3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-bounds.js","sourceRoot":"","sources":["../../src/shapes/render-bounds.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAoB,MAAM,YAAY,CAAC;AAuBrE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAE,EAA0B,EAAQ,EAAE;IACvF,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAkB,EAAU,EAAE;IACnE,MAAM,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACpB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACzB,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACrE,OAAO;QACL,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI;QACb,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK;QAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM;KAChC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape-transform.d.ts","sourceRoot":"","sources":["../../src/shapes/shape-transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,WAAW,EAAE,OAAO,IAAI,KAAG,IAS9D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,WAAW,EAAE,OAAO,IAAI,KAAG,IAY9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape-transform.js","sourceRoot":"","sources":["../../src/shapes/shape-transform.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAE,KAAW,EAAQ,EAAE;IACpE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;QAC3C,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;KAC5C,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAE,KAAW,EAAQ,EAAE;IACpE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,uBAAuB;IACvB,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IAChC,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;KAChD,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Bounds, FileId, LayerId, ElementId, Vec2 } from "@oh-just-another/types";
|
|
2
2
|
import type { FractionalIndex } from "fractional-keys";
|
|
3
|
-
import type { AnchorRef } from "
|
|
4
|
-
import type { Style, TextStyle } from "
|
|
5
|
-
import type { TextRun } from "
|
|
3
|
+
import type { AnchorRef } from "../edges/edge.js";
|
|
4
|
+
import type { Style, TextStyle } from "../text/style.js";
|
|
5
|
+
import type { TextRun } from "../text/text-runs.js";
|
|
6
6
|
/**
|
|
7
7
|
* Fields shared by every shape variant. `order` is a fractional-index string
|
|
8
8
|
* used for z-ordering within the parent layer — insertions are O(1) and never
|
|
@@ -91,6 +91,15 @@ export interface ElementBase {
|
|
|
91
91
|
* shape.
|
|
92
92
|
*/
|
|
93
93
|
readonly hidden?: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Embedded text label — the shape's own text content, drawn inside its
|
|
96
|
+
* bounds (wrapped to the width, aligned via `style.textAlign` /
|
|
97
|
+
* `style.textBaseline`, `middle`+`center` by default). Shares the text
|
|
98
|
+
* element's building blocks (styled runs, list paragraphs) as data;
|
|
99
|
+
* layout is the renderer's job. Double-click opens the inline editor
|
|
100
|
+
* on shapes that support it (see `canCarryLabel`).
|
|
101
|
+
*/
|
|
102
|
+
readonly label?: ShapeLabel;
|
|
94
103
|
/**
|
|
95
104
|
* Element-level hyperlink. Any shape — text, image,
|
|
96
105
|
* rectangle — can carry one. The host opens it on Cmd/Ctrl-click or via
|
|
@@ -154,6 +163,90 @@ export interface TextElement extends ElementBase {
|
|
|
154
163
|
* (renders exactly like a plain text block). See {@link TextRun}.
|
|
155
164
|
*/
|
|
156
165
|
readonly runs?: readonly TextRun[];
|
|
166
|
+
/**
|
|
167
|
+
* Optional per-paragraph attributes (lists / nesting), aligned by index
|
|
168
|
+
* with `text.split("\n")`. A shorter array leaves the trailing
|
|
169
|
+
* paragraphs plain; omitted = every paragraph plain. Numbering for
|
|
170
|
+
* `"numbered"` items is derived at render time (consecutive numbered
|
|
171
|
+
* paragraphs at the same indent count up), never stored.
|
|
172
|
+
*/
|
|
173
|
+
readonly paragraphs?: readonly TextParagraph[];
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Embedded text carried by a non-text shape (see `ElementBase.label`).
|
|
177
|
+
* Field-for-field compatible with the text element's content model so
|
|
178
|
+
* the text pipeline (runs, paragraphs, layout, inline editing) applies
|
|
179
|
+
* unchanged.
|
|
180
|
+
*/
|
|
181
|
+
export interface ShapeLabel {
|
|
182
|
+
readonly text: string;
|
|
183
|
+
readonly fontFamily: string;
|
|
184
|
+
readonly fontSize: number;
|
|
185
|
+
/**
|
|
186
|
+
* Auto-fit mode (sticky notes): the RENDERED font size is derived so
|
|
187
|
+
* the text fills the shape body, scaling with the shape; `fontSize`
|
|
188
|
+
* then only serves as the fallback / upper hint. Picking an explicit
|
|
189
|
+
* size in the toolbar clears the flag.
|
|
190
|
+
*/
|
|
191
|
+
readonly autoFit?: boolean;
|
|
192
|
+
/** Optional style overlay; `textAlign`/`textBaseline` default to center/middle. */
|
|
193
|
+
readonly style?: TextStyle;
|
|
194
|
+
readonly runs?: readonly TextRun[];
|
|
195
|
+
readonly paragraphs?: readonly TextParagraph[];
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Sticky note — a bounded card whose text lives in the shared embedded
|
|
199
|
+
* `label` (double-click to edit). Background comes from `style.fill`;
|
|
200
|
+
* `authorName` renders along the bottom edge when `showAuthor` is on.
|
|
201
|
+
* Registered as a plugin-style type: not part of the built-in `Element`
|
|
202
|
+
* union, handled through the renderer / bounder registries and the
|
|
203
|
+
* custom-element wire schema.
|
|
204
|
+
*/
|
|
205
|
+
export interface StickyElement extends ElementBase {
|
|
206
|
+
readonly type: "sticky";
|
|
207
|
+
readonly width: number;
|
|
208
|
+
readonly height: number;
|
|
209
|
+
readonly authorName?: string;
|
|
210
|
+
readonly showAuthor?: boolean;
|
|
211
|
+
/** Free-form tags, rendered as small pills along the bottom edge. */
|
|
212
|
+
readonly tags?: readonly string[];
|
|
213
|
+
/**
|
|
214
|
+
* Emoji reactions. Each glyph tracks WHO reacted (`users` — collab
|
|
215
|
+
* user ids); the visible counter is `users.length`. A user's click on
|
|
216
|
+
* a glyph they already reacted with removes their reaction (toggle),
|
|
217
|
+
* anyone else's click adds theirs. The add button lives in the host
|
|
218
|
+
* UI at the sticky's bottom-left corner.
|
|
219
|
+
*/
|
|
220
|
+
readonly reactions?: readonly {
|
|
221
|
+
readonly glyph: string;
|
|
222
|
+
readonly users: readonly string[];
|
|
223
|
+
}[];
|
|
224
|
+
}
|
|
225
|
+
/** True when the shape is a sticky note. */
|
|
226
|
+
export declare const isSticky: (shape: ElementBase) => shape is StickyElement;
|
|
227
|
+
/**
|
|
228
|
+
* Emoji element — a single glyph drawn at `size` world units. The glyph
|
|
229
|
+
* is replaced via the toolbar picker. Plugin-style type like `sticky`.
|
|
230
|
+
*/
|
|
231
|
+
export interface EmojiElement extends ElementBase {
|
|
232
|
+
readonly type: "emoji";
|
|
233
|
+
readonly glyph: string;
|
|
234
|
+
readonly size: number;
|
|
235
|
+
}
|
|
236
|
+
/** True when the shape is an emoji element. */
|
|
237
|
+
export declare const isEmoji: (shape: ElementBase) => shape is EmojiElement;
|
|
238
|
+
/** True when the shape's type supports an embedded text label. */
|
|
239
|
+
export declare const canCarryLabel: (shape: ElementBase) => boolean;
|
|
240
|
+
/**
|
|
241
|
+
* Paragraph-level attributes for a {@link TextElement}. Both fields are
|
|
242
|
+
* optional so plain paragraphs serialize as `{}` (or are omitted entirely
|
|
243
|
+
* via a short array).
|
|
244
|
+
*/
|
|
245
|
+
export interface TextParagraph {
|
|
246
|
+
/** List marker kind; omitted = plain paragraph. */
|
|
247
|
+
readonly list?: "bullet" | "numbered";
|
|
248
|
+
/** 0-based nesting level. Omitted = 0. */
|
|
249
|
+
readonly indent?: number;
|
|
157
250
|
}
|
|
158
251
|
/**
|
|
159
252
|
* Normalised crop rectangle for an {@link ImageElement}. All four
|
|
@@ -171,6 +264,29 @@ export interface ImageCrop {
|
|
|
171
264
|
readonly width: number;
|
|
172
265
|
readonly height: number;
|
|
173
266
|
}
|
|
267
|
+
/**
|
|
268
|
+
* Shape mask applied to an image element's BOX (after crop): pixels
|
|
269
|
+
* outside the mask are clipped away by the renderer (`RenderTarget.clip`
|
|
270
|
+
* — canvas2d clip / svg clipPath / webgl2 stencil). Coordinates are
|
|
271
|
+
* normalised to the element box (0..1 on both axes), so the mask scales
|
|
272
|
+
* with the shape. Additive: scenes and renderers that predate masks
|
|
273
|
+
* ignore it and draw the full box.
|
|
274
|
+
*
|
|
275
|
+
* - `ellipse` — inscribed ellipse (circle on a square box).
|
|
276
|
+
* - `round-rect` — rounded rectangle; `radius` is a fraction of the
|
|
277
|
+
* SHORTER box side (0..0.5; 0.5 = capsule).
|
|
278
|
+
* - `polygon` — arbitrary closed ring of normalised points (≥ 3). The
|
|
279
|
+
* built-in presets live in {@link IMAGE_MASK_POLYGON_PRESETS}.
|
|
280
|
+
*/
|
|
281
|
+
export type ImageMask = {
|
|
282
|
+
readonly kind: "ellipse";
|
|
283
|
+
} | {
|
|
284
|
+
readonly kind: "round-rect";
|
|
285
|
+
readonly radius: number;
|
|
286
|
+
} | {
|
|
287
|
+
readonly kind: "polygon";
|
|
288
|
+
readonly points: readonly Vec2[];
|
|
289
|
+
};
|
|
174
290
|
export interface ImageElement extends ElementBase {
|
|
175
291
|
readonly type: "image";
|
|
176
292
|
/**
|
|
@@ -185,6 +301,11 @@ export interface ImageElement extends ElementBase {
|
|
|
185
301
|
* cropping simply ignore it and draw the full bitmap.
|
|
186
302
|
*/
|
|
187
303
|
readonly crop?: ImageCrop;
|
|
304
|
+
/**
|
|
305
|
+
* Optional shape mask clipping the drawn box. Omitted = no mask.
|
|
306
|
+
* Independent of (and applied after) `crop`. See {@link ImageMask}.
|
|
307
|
+
*/
|
|
308
|
+
readonly mask?: ImageMask;
|
|
188
309
|
/**
|
|
189
310
|
* Id of the `BinaryFile` in `Scene.files` that backs this image.
|
|
190
311
|
* When present, hosts should resolve through the file registry
|
|
@@ -194,6 +315,12 @@ export interface ImageElement extends ElementBase {
|
|
|
194
315
|
readonly fileId?: FileId;
|
|
195
316
|
readonly width: number;
|
|
196
317
|
readonly height: number;
|
|
318
|
+
/**
|
|
319
|
+
* Accessible description of the image content. Surfaced as `<title>`
|
|
320
|
+
* in SVG output and available to hosts for `aria` wiring. Omitted =
|
|
321
|
+
* decorative / undescribed.
|
|
322
|
+
*/
|
|
323
|
+
readonly alt?: string;
|
|
197
324
|
/**
|
|
198
325
|
* Animated-content hint (opt-in). When set, the
|
|
199
326
|
* renderer's image path consults `getAnimationAdapter(kind)`
|
|
@@ -250,6 +377,24 @@ export interface BrushElement extends ElementBase {
|
|
|
250
377
|
* on itself. Omitted (undefined) for ordinary open strokes.
|
|
251
378
|
*/
|
|
252
379
|
readonly closed?: boolean;
|
|
380
|
+
/**
|
|
381
|
+
* Raw input pressure (0–1) per point, aligned 1:1 with `points`. The baked
|
|
382
|
+
* `width` is derived from it (base width × pressure curve × taper), so a
|
|
383
|
+
* stroke can be regenerated with a different base width / thinning without
|
|
384
|
+
* re-capturing. Omitted on strokes committed before pressures were stored.
|
|
385
|
+
*/
|
|
386
|
+
readonly pressures?: readonly number[];
|
|
387
|
+
/**
|
|
388
|
+
* True when `pressures` were synthesised from pointer speed (mouse / touch
|
|
389
|
+
* without a real pressure channel) rather than read from the device. Lets a
|
|
390
|
+
* regeneration pass know whether re-simulating is appropriate.
|
|
391
|
+
*/
|
|
392
|
+
readonly simulatePressure?: boolean;
|
|
393
|
+
/**
|
|
394
|
+
* The brush base half-width (local px) the stroke was committed with — the
|
|
395
|
+
* value the pressure curve scaled toward. Omitted on legacy strokes.
|
|
396
|
+
*/
|
|
397
|
+
readonly baseWidth?: number;
|
|
253
398
|
}
|
|
254
399
|
/**
|
|
255
400
|
* Container shape that holds children via the shared `parentId` link.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../../src/shapes/shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import { bounds as B } from "@oh-just-another/math";
|
|
2
|
-
import { TEXT_APPROX_CHAR_WIDTH_FACTOR, TEXT_LINE_HEIGHT_FACTOR } from "
|
|
3
|
-
import { getTextMeasurer } from "
|
|
2
|
+
import { TEXT_APPROX_CHAR_WIDTH_FACTOR, TEXT_LINE_HEIGHT_FACTOR } from "../constants.js";
|
|
3
|
+
import { getTextMeasurer } from "../text/text-measure.js";
|
|
4
|
+
import { pickTextPlaceholder } from "../text/placeholder.js";
|
|
5
|
+
/** True when the shape is a sticky note. */
|
|
6
|
+
export const isSticky = (shape) => shape.type === "sticky";
|
|
7
|
+
/** True when the shape is an emoji element. */
|
|
8
|
+
export const isEmoji = (shape) => shape.type === "emoji";
|
|
9
|
+
/** Shape types whose body can host an embedded label. */
|
|
10
|
+
const LABELABLE_TYPES = new Set([
|
|
11
|
+
"rectangle",
|
|
12
|
+
"ellipse",
|
|
13
|
+
"polygon",
|
|
14
|
+
"block-arrow",
|
|
15
|
+
"sticky",
|
|
16
|
+
]);
|
|
17
|
+
/** True when the shape's type supports an embedded text label. */
|
|
18
|
+
export const canCarryLabel = (shape) => LABELABLE_TYPES.has(shape.type);
|
|
4
19
|
// --- type guards ---
|
|
5
20
|
export const isRectangle = (s) => s.type === "rectangle";
|
|
6
21
|
export const isEllipse = (s) => s.type === "ellipse";
|
|
@@ -81,6 +96,13 @@ registerBounder("ellipse", (s) => ({
|
|
|
81
96
|
height: s.height,
|
|
82
97
|
}));
|
|
83
98
|
registerBounder("polygon", (s) => B.fromPoints(s.points));
|
|
99
|
+
registerBounder("sticky", (s) => ({
|
|
100
|
+
x: 0,
|
|
101
|
+
y: 0,
|
|
102
|
+
width: s.width,
|
|
103
|
+
height: s.height,
|
|
104
|
+
}));
|
|
105
|
+
registerBounder("emoji", (s) => ({ x: 0, y: 0, width: s.size, height: s.size }));
|
|
84
106
|
registerBounder("path", (s) => {
|
|
85
107
|
const points = [];
|
|
86
108
|
let cursor = { x: 0, y: 0 };
|
|
@@ -114,7 +136,11 @@ registerBounder("text", (s) => {
|
|
|
114
136
|
// estimate (`chars × fontSize × factor`) headless / in tests. Height
|
|
115
137
|
// is line count × line-height; hard newlines honoured in both modes.
|
|
116
138
|
const lineHeight = s.fontSize * TEXT_LINE_HEIGHT_FACTOR;
|
|
117
|
-
|
|
139
|
+
// An empty element is sized by its placeholder prompt (the renderer draws
|
|
140
|
+
// it while the text is being written), so the selection box and the
|
|
141
|
+
// dirty rect cover exactly what is on screen; the box snaps to the real
|
|
142
|
+
// text from the first keystroke.
|
|
143
|
+
const paragraphs = (s.text === "" ? pickTextPlaceholder(s.id) : s.text).split("\n");
|
|
118
144
|
const measurer = getTextMeasurer();
|
|
119
145
|
// Pass weight/style so the measured width matches the rendered (bold /
|
|
120
146
|
// italic) glyphs — otherwise the box wouldn't grow when text is bolded.
|
|
@@ -132,8 +158,7 @@ registerBounder("text", (s) => {
|
|
|
132
158
|
};
|
|
133
159
|
if (s.maxWidth === undefined) {
|
|
134
160
|
// Auto-width: widest paragraph drives width, one visual line per
|
|
135
|
-
// paragraph.
|
|
136
|
-
// selectable / editable.
|
|
161
|
+
// paragraph.
|
|
137
162
|
let width = 0;
|
|
138
163
|
for (const p of paragraphs)
|
|
139
164
|
width = Math.max(width, measureLine(p));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape.js","sourceRoot":"","sources":["../../src/shapes/shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { TextParagraph } from "../shapes/shape.js";
|
|
2
|
+
/**
|
|
3
|
+
* Paragraph-attribute helpers for text lists. A "paragraph" is a
|
|
4
|
+
* `\n`-separated block of a text element's flat `text`; attributes
|
|
5
|
+
* (`TextParagraph`) are stored in an array aligned by paragraph index.
|
|
6
|
+
* These helpers keep that array consistent as the text is edited and
|
|
7
|
+
* answer range queries for the toolbar.
|
|
8
|
+
*/
|
|
9
|
+
/** Number of paragraphs in `text` (always ≥ 1; empty text = one empty paragraph). */
|
|
10
|
+
export declare const paragraphCount: (text: string) => number;
|
|
11
|
+
/**
|
|
12
|
+
* Paragraph index range `[first, last]` (inclusive) covered by the source
|
|
13
|
+
* offset range `[from, to]`. Offsets outside the text are clamped.
|
|
14
|
+
*/
|
|
15
|
+
export declare const paragraphRangeForOffsets: (text: string, from: number, to: number) => {
|
|
16
|
+
readonly first: number;
|
|
17
|
+
readonly last: number;
|
|
18
|
+
};
|
|
19
|
+
/** Attrs for a paragraph index (missing / short array → plain). */
|
|
20
|
+
export declare const paragraphAt: (paragraphs: readonly TextParagraph[] | undefined, index: number) => TextParagraph;
|
|
21
|
+
/**
|
|
22
|
+
* Canonical form: trailing plain paragraphs are dropped; an all-plain
|
|
23
|
+
* array collapses to `undefined` so plain text stays byte-identical on
|
|
24
|
+
* the wire.
|
|
25
|
+
*/
|
|
26
|
+
export declare const normalizeParagraphs: (paragraphs: readonly TextParagraph[]) => readonly TextParagraph[] | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Re-align the paragraph-attribute array after a text change. Paragraphs
|
|
29
|
+
* are matched by the longest common prefix and suffix of the old / new
|
|
30
|
+
* paragraph lists; the edited middle keeps the first edited paragraph's
|
|
31
|
+
* attrs and lets inserted paragraphs inherit them — so pressing Enter
|
|
32
|
+
* inside a list item continues the list, and deleting a line drops its
|
|
33
|
+
* attrs with it. Pure and heuristic by design: it has no caret input, so
|
|
34
|
+
* pathological multi-paragraph pastes may inherit conservatively (plain).
|
|
35
|
+
*/
|
|
36
|
+
export declare const remapParagraphsForTextChange: (oldText: string, newText: string, paragraphs: readonly TextParagraph[] | undefined) => readonly TextParagraph[] | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Derived list markers, one per paragraph: `"•"` for bullets, `"N."` for
|
|
39
|
+
* numbered items (consecutive numbered paragraphs at the SAME indent
|
|
40
|
+
* count up; any other paragraph kind resets the counter), `null` for
|
|
41
|
+
* plain paragraphs.
|
|
42
|
+
*/
|
|
43
|
+
export declare const listMarkers: (paragraphs: readonly TextParagraph[] | undefined, count: number) => readonly (string | null)[];
|
|
44
|
+
//# sourceMappingURL=paragraphs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paragraphs.d.ts","sourceRoot":"","sources":["../../src/text/paragraphs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;GAMG;AAEH,qFAAqF;AACrF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAI7C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,IAAI,MAAM,KACT;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAajD,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,WAAW,GACtB,YAAY,SAAS,aAAa,EAAE,GAAG,SAAS,EAChD,OAAO,MAAM,KACZ,aAA0C,CAAC;AAI9C;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,YAAY,SAAS,aAAa,EAAE,KACnC,SAAS,aAAa,EAAE,GAAG,SAK7B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,GACvC,SAAS,MAAM,EACf,SAAS,MAAM,EACf,YAAY,SAAS,aAAa,EAAE,GAAG,SAAS,KAC/C,SAAS,aAAa,EAAE,GAAG,SAoC7B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,YAAY,SAAS,aAAa,EAAE,GAAG,SAAS,EAChD,OAAO,MAAM,KACZ,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAoB1B,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paragraph-attribute helpers for text lists. A "paragraph" is a
|
|
3
|
+
* `\n`-separated block of a text element's flat `text`; attributes
|
|
4
|
+
* (`TextParagraph`) are stored in an array aligned by paragraph index.
|
|
5
|
+
* These helpers keep that array consistent as the text is edited and
|
|
6
|
+
* answer range queries for the toolbar.
|
|
7
|
+
*/
|
|
8
|
+
/** Number of paragraphs in `text` (always ≥ 1; empty text = one empty paragraph). */
|
|
9
|
+
export const paragraphCount = (text) => {
|
|
10
|
+
let n = 1;
|
|
11
|
+
for (const ch of text)
|
|
12
|
+
if (ch === "\n")
|
|
13
|
+
n++;
|
|
14
|
+
return n;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Paragraph index range `[first, last]` (inclusive) covered by the source
|
|
18
|
+
* offset range `[from, to]`. Offsets outside the text are clamped.
|
|
19
|
+
*/
|
|
20
|
+
export const paragraphRangeForOffsets = (text, from, to) => {
|
|
21
|
+
const lo = Math.max(0, Math.min(from, to));
|
|
22
|
+
const hi = Math.min(text.length, Math.max(from, to));
|
|
23
|
+
// Paragraph index = newlines before the offset; `hi` may equal `text.length`
|
|
24
|
+
// (caret at the very end), so the count runs over `[0, hi)` only.
|
|
25
|
+
let idx = 0;
|
|
26
|
+
let first = 0;
|
|
27
|
+
for (let i = 0; i < hi; i++) {
|
|
28
|
+
if (i === lo)
|
|
29
|
+
first = idx;
|
|
30
|
+
if (text[i] === "\n")
|
|
31
|
+
idx++;
|
|
32
|
+
}
|
|
33
|
+
if (lo >= hi)
|
|
34
|
+
first = idx;
|
|
35
|
+
return { first, last: idx };
|
|
36
|
+
};
|
|
37
|
+
/** Attrs for a paragraph index (missing / short array → plain). */
|
|
38
|
+
export const paragraphAt = (paragraphs, index) => paragraphs?.[index] ?? {};
|
|
39
|
+
const isPlain = (p) => p.list === undefined && (p.indent ?? 0) === 0;
|
|
40
|
+
/**
|
|
41
|
+
* Canonical form: trailing plain paragraphs are dropped; an all-plain
|
|
42
|
+
* array collapses to `undefined` so plain text stays byte-identical on
|
|
43
|
+
* the wire.
|
|
44
|
+
*/
|
|
45
|
+
export const normalizeParagraphs = (paragraphs) => {
|
|
46
|
+
let end = paragraphs.length;
|
|
47
|
+
while (end > 0 && isPlain(paragraphs[end - 1] ?? {}))
|
|
48
|
+
end--;
|
|
49
|
+
if (end === 0)
|
|
50
|
+
return undefined;
|
|
51
|
+
return paragraphs.slice(0, end);
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Re-align the paragraph-attribute array after a text change. Paragraphs
|
|
55
|
+
* are matched by the longest common prefix and suffix of the old / new
|
|
56
|
+
* paragraph lists; the edited middle keeps the first edited paragraph's
|
|
57
|
+
* attrs and lets inserted paragraphs inherit them — so pressing Enter
|
|
58
|
+
* inside a list item continues the list, and deleting a line drops its
|
|
59
|
+
* attrs with it. Pure and heuristic by design: it has no caret input, so
|
|
60
|
+
* pathological multi-paragraph pastes may inherit conservatively (plain).
|
|
61
|
+
*/
|
|
62
|
+
export const remapParagraphsForTextChange = (oldText, newText, paragraphs) => {
|
|
63
|
+
if (paragraphs === undefined || paragraphs.length === 0)
|
|
64
|
+
return undefined;
|
|
65
|
+
if (oldText === newText)
|
|
66
|
+
return paragraphs;
|
|
67
|
+
const oldParas = oldText.split("\n");
|
|
68
|
+
const newParas = newText.split("\n");
|
|
69
|
+
if (oldParas.length === newParas.length)
|
|
70
|
+
return paragraphs; // in-line edit — indices stable
|
|
71
|
+
// Longest common prefix / suffix of the paragraph LISTS (exact match).
|
|
72
|
+
let prefix = 0;
|
|
73
|
+
while (prefix < oldParas.length &&
|
|
74
|
+
prefix < newParas.length &&
|
|
75
|
+
oldParas[prefix] === newParas[prefix]) {
|
|
76
|
+
prefix++;
|
|
77
|
+
}
|
|
78
|
+
let suffix = 0;
|
|
79
|
+
while (suffix < oldParas.length - prefix &&
|
|
80
|
+
suffix < newParas.length - prefix &&
|
|
81
|
+
oldParas[oldParas.length - 1 - suffix] === newParas[newParas.length - 1 - suffix]) {
|
|
82
|
+
suffix++;
|
|
83
|
+
}
|
|
84
|
+
const out = [];
|
|
85
|
+
for (let i = 0; i < prefix; i++)
|
|
86
|
+
out.push(paragraphAt(paragraphs, i));
|
|
87
|
+
// The edited middle: inherit the first edited old paragraph's attrs
|
|
88
|
+
// (falls back to the last prefix paragraph when the middle was empty —
|
|
89
|
+
// a pure insertion continues whatever precedes it).
|
|
90
|
+
const inheritFrom = Math.min(prefix, oldParas.length - 1);
|
|
91
|
+
const inherited = paragraphAt(paragraphs, inheritFrom);
|
|
92
|
+
const newMiddle = newParas.length - prefix - suffix;
|
|
93
|
+
for (let i = 0; i < newMiddle; i++)
|
|
94
|
+
out.push(inherited);
|
|
95
|
+
for (let i = suffix; i > 0; i--)
|
|
96
|
+
out.push(paragraphAt(paragraphs, oldParas.length - i));
|
|
97
|
+
return normalizeParagraphs(out);
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Derived list markers, one per paragraph: `"•"` for bullets, `"N."` for
|
|
101
|
+
* numbered items (consecutive numbered paragraphs at the SAME indent
|
|
102
|
+
* count up; any other paragraph kind resets the counter), `null` for
|
|
103
|
+
* plain paragraphs.
|
|
104
|
+
*/
|
|
105
|
+
export const listMarkers = (paragraphs, count) => {
|
|
106
|
+
const out = [];
|
|
107
|
+
const counters = new Map();
|
|
108
|
+
for (let i = 0; i < count; i++) {
|
|
109
|
+
const p = paragraphAt(paragraphs, i);
|
|
110
|
+
const level = p.indent ?? 0;
|
|
111
|
+
if (p.list === "numbered") {
|
|
112
|
+
const n = (counters.get(level) ?? 0) + 1;
|
|
113
|
+
counters.set(level, n);
|
|
114
|
+
// A deeper-or-equal reset boundary: nested lists restart when the
|
|
115
|
+
// chain is interrupted at their own level (handled below).
|
|
116
|
+
for (const key of [...counters.keys()])
|
|
117
|
+
if (key > level)
|
|
118
|
+
counters.delete(key);
|
|
119
|
+
out.push(`${String(n)}.`);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
if (p.list === undefined)
|
|
123
|
+
counters.clear();
|
|
124
|
+
else
|
|
125
|
+
for (const key of [...counters.keys()])
|
|
126
|
+
if (key >= level)
|
|
127
|
+
counters.delete(key);
|
|
128
|
+
out.push(p.list === "bullet" ? "•" : null);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return out;
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=paragraphs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paragraphs.js","sourceRoot":"","sources":["../../src/text/paragraphs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type TextPlaceholder } from "../constants.js";
|
|
2
|
+
/**
|
|
3
|
+
* Pick the placeholder for an empty text element. Weighted by
|
|
4
|
+
* `TextPlaceholder.weight`, and DETERMINISTIC in `seed` (the element id):
|
|
5
|
+
* the same element always shows the same prompt — no reshuffling between
|
|
6
|
+
* frames or re-renders — while different elements spread across the list.
|
|
7
|
+
*/
|
|
8
|
+
export declare const pickTextPlaceholder: (seed: string, placeholders?: readonly TextPlaceholder[]) => string;
|
|
9
|
+
//# sourceMappingURL=placeholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../src/text/placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAY1E;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,MAAM,EACZ,eAAc,SAAS,eAAe,EAAsB,KAC3D,MASF,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TEXT_PLACEHOLDERS } from "../constants.js";
|
|
2
|
+
/** FNV-1a 32-bit hash — stable across runs, cheap, good spread for short ids. */
|
|
3
|
+
const fnv1a = (s) => {
|
|
4
|
+
let h = 0x811c9dc5;
|
|
5
|
+
for (let i = 0; i < s.length; i++) {
|
|
6
|
+
h ^= s.charCodeAt(i);
|
|
7
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
8
|
+
}
|
|
9
|
+
return h;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Pick the placeholder for an empty text element. Weighted by
|
|
13
|
+
* `TextPlaceholder.weight`, and DETERMINISTIC in `seed` (the element id):
|
|
14
|
+
* the same element always shows the same prompt — no reshuffling between
|
|
15
|
+
* frames or re-renders — while different elements spread across the list.
|
|
16
|
+
*/
|
|
17
|
+
export const pickTextPlaceholder = (seed, placeholders = TEXT_PLACEHOLDERS) => {
|
|
18
|
+
const total = placeholders.reduce((sum, p) => sum + Math.max(1, p.weight), 0);
|
|
19
|
+
if (total <= 0 || placeholders.length === 0)
|
|
20
|
+
return "";
|
|
21
|
+
let ticket = fnv1a(seed) % total;
|
|
22
|
+
for (const p of placeholders) {
|
|
23
|
+
ticket -= Math.max(1, p.weight);
|
|
24
|
+
if (ticket < 0)
|
|
25
|
+
return p.text;
|
|
26
|
+
}
|
|
27
|
+
return placeholders[placeholders.length - 1]?.text ?? "";
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=placeholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../src/text/placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,iBAAiB,CAAC;AAE1E,iFAAiF;AACjF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE;IAClC,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,IAAY,EACZ,eAA2C,iBAAiB,EACpD,EAAE;IACV,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,IAAI,KAAK,IAAI,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvD,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IAChC,CAAC;IACD,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;AAC3D,CAAC,CAAC"}
|