@tldraw/editor 3.12.0-canary.5530d0bb35f4 → 3.12.0-canary.5642859790c2

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.
@@ -73,7 +73,7 @@ class Group2d extends Geometry2d {
73
73
  return this.children.reduce((a, c) => c.isLabel ? a : a + c.length, 0);
74
74
  }
75
75
  getSvgPathData() {
76
- return this.children.map((c, i) => c.isLabel ? "" : c.getSvgPathData(i === 0)).join(" ");
76
+ return this.children.map((c) => c.isLabel ? "" : c.getSvgPathData(true)).join(" ");
77
77
  }
78
78
  }
79
79
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/primitives/geometry/Group2d.ts"],
4
- "sourcesContent": ["import { Box } from '../Box'\nimport { Vec } from '../Vec'\nimport { Geometry2d, Geometry2dOptions } from './Geometry2d'\n\n/** @public */\nexport class Group2d extends Geometry2d {\n\tchildren: Geometry2d[] = []\n\tignoredChildren: Geometry2d[] = []\n\n\tconstructor(\n\t\tconfig: Omit<Geometry2dOptions, 'isClosed' | 'isFilled'> & {\n\t\t\tchildren: Geometry2d[]\n\t\t}\n\t) {\n\t\tsuper({ ...config, isClosed: true, isFilled: false })\n\n\t\tfor (const child of config.children) {\n\t\t\tif (child.ignore) {\n\t\t\t\tthis.ignoredChildren.push(child)\n\t\t\t} else {\n\t\t\t\tthis.children.push(child)\n\t\t\t}\n\t\t}\n\n\t\tif (this.children.length === 0) throw Error('Group2d must have at least one child')\n\t}\n\n\toverride getVertices(): Vec[] {\n\t\treturn this.children.filter((c) => !c.isLabel).flatMap((c) => c.vertices)\n\t}\n\n\toverride nearestPoint(point: Vec): Vec {\n\t\tlet dist = Infinity\n\t\tlet nearest: Vec | undefined\n\n\t\tconst { children } = this\n\n\t\tif (children.length === 0) {\n\t\t\tthrow Error('no children')\n\t\t}\n\n\t\tlet p: Vec\n\t\tlet d: number\n\t\tfor (const child of children) {\n\t\t\tp = child.nearestPoint(point)\n\t\t\td = Vec.Dist2(p, point)\n\t\t\tif (d < dist) {\n\t\t\t\tdist = d\n\t\t\t\tnearest = p\n\t\t\t}\n\t\t}\n\t\tif (!nearest) throw Error('nearest point not found')\n\t\treturn nearest\n\t}\n\n\toverride distanceToPoint(point: Vec, hitInside = false) {\n\t\treturn Math.min(...this.children.map((c, i) => c.distanceToPoint(point, hitInside || i > 0)))\n\t}\n\n\toverride hitTestPoint(point: Vec, margin: number, hitInside: boolean): boolean {\n\t\treturn !!this.children\n\t\t\t.filter((c) => !c.isLabel)\n\t\t\t.find((c) => c.hitTestPoint(point, margin, hitInside))\n\t}\n\n\toverride hitTestLineSegment(A: Vec, B: Vec, zoom: number): boolean {\n\t\treturn !!this.children.filter((c) => !c.isLabel).find((c) => c.hitTestLineSegment(A, B, zoom))\n\t}\n\n\tgetArea() {\n\t\t// todo: this is a temporary solution, assuming that the first child defines the group size; we would want to flatten the group and then find the area of the hull polygon\n\t\treturn this.children[0].area\n\t}\n\n\ttoSimpleSvgPath() {\n\t\tlet path = ''\n\t\tfor (const child of this.children) {\n\t\t\tpath += child.toSimpleSvgPath()\n\t\t}\n\n\t\tconst corners = Box.FromPoints(this.vertices).corners\n\t\t// draw just a few pixels around each corner, e.g. an L shape for the bottom left\n\n\t\tfor (let i = 0, n = corners.length; i < n; i++) {\n\t\t\tconst corner = corners[i]\n\t\t\tconst prevCorner = corners[(i - 1 + n) % n]\n\t\t\tconst prevDist = corner.dist(prevCorner)\n\t\t\tconst nextCorner = corners[(i + 1) % n]\n\t\t\tconst nextDist = corner.dist(nextCorner)\n\n\t\t\tconst A = corner.clone().lrp(prevCorner, 4 / prevDist)\n\t\t\tconst B = corner\n\t\t\tconst C = corner.clone().lrp(nextCorner, 4 / nextDist)\n\n\t\t\tpath += `M${A.x},${A.y} L${B.x},${B.y} L${C.x},${C.y} `\n\t\t}\n\t\treturn path\n\t}\n\n\tgetLength(): number {\n\t\treturn this.children.reduce((a, c) => (c.isLabel ? a : a + c.length), 0)\n\t}\n\n\tgetSvgPathData(): string {\n\t\treturn this.children.map((c, i) => (c.isLabel ? '' : c.getSvgPathData(i === 0))).join(' ')\n\t}\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Box } from '../Box'\nimport { Vec } from '../Vec'\nimport { Geometry2d, Geometry2dOptions } from './Geometry2d'\n\n/** @public */\nexport class Group2d extends Geometry2d {\n\tchildren: Geometry2d[] = []\n\tignoredChildren: Geometry2d[] = []\n\n\tconstructor(\n\t\tconfig: Omit<Geometry2dOptions, 'isClosed' | 'isFilled'> & {\n\t\t\tchildren: Geometry2d[]\n\t\t}\n\t) {\n\t\tsuper({ ...config, isClosed: true, isFilled: false })\n\n\t\tfor (const child of config.children) {\n\t\t\tif (child.ignore) {\n\t\t\t\tthis.ignoredChildren.push(child)\n\t\t\t} else {\n\t\t\t\tthis.children.push(child)\n\t\t\t}\n\t\t}\n\n\t\tif (this.children.length === 0) throw Error('Group2d must have at least one child')\n\t}\n\n\toverride getVertices(): Vec[] {\n\t\treturn this.children.filter((c) => !c.isLabel).flatMap((c) => c.vertices)\n\t}\n\n\toverride nearestPoint(point: Vec): Vec {\n\t\tlet dist = Infinity\n\t\tlet nearest: Vec | undefined\n\n\t\tconst { children } = this\n\n\t\tif (children.length === 0) {\n\t\t\tthrow Error('no children')\n\t\t}\n\n\t\tlet p: Vec\n\t\tlet d: number\n\t\tfor (const child of children) {\n\t\t\tp = child.nearestPoint(point)\n\t\t\td = Vec.Dist2(p, point)\n\t\t\tif (d < dist) {\n\t\t\t\tdist = d\n\t\t\t\tnearest = p\n\t\t\t}\n\t\t}\n\t\tif (!nearest) throw Error('nearest point not found')\n\t\treturn nearest\n\t}\n\n\toverride distanceToPoint(point: Vec, hitInside = false) {\n\t\treturn Math.min(...this.children.map((c, i) => c.distanceToPoint(point, hitInside || i > 0)))\n\t}\n\n\toverride hitTestPoint(point: Vec, margin: number, hitInside: boolean): boolean {\n\t\treturn !!this.children\n\t\t\t.filter((c) => !c.isLabel)\n\t\t\t.find((c) => c.hitTestPoint(point, margin, hitInside))\n\t}\n\n\toverride hitTestLineSegment(A: Vec, B: Vec, zoom: number): boolean {\n\t\treturn !!this.children.filter((c) => !c.isLabel).find((c) => c.hitTestLineSegment(A, B, zoom))\n\t}\n\n\tgetArea() {\n\t\t// todo: this is a temporary solution, assuming that the first child defines the group size; we would want to flatten the group and then find the area of the hull polygon\n\t\treturn this.children[0].area\n\t}\n\n\ttoSimpleSvgPath() {\n\t\tlet path = ''\n\t\tfor (const child of this.children) {\n\t\t\tpath += child.toSimpleSvgPath()\n\t\t}\n\n\t\tconst corners = Box.FromPoints(this.vertices).corners\n\t\t// draw just a few pixels around each corner, e.g. an L shape for the bottom left\n\n\t\tfor (let i = 0, n = corners.length; i < n; i++) {\n\t\t\tconst corner = corners[i]\n\t\t\tconst prevCorner = corners[(i - 1 + n) % n]\n\t\t\tconst prevDist = corner.dist(prevCorner)\n\t\t\tconst nextCorner = corners[(i + 1) % n]\n\t\t\tconst nextDist = corner.dist(nextCorner)\n\n\t\t\tconst A = corner.clone().lrp(prevCorner, 4 / prevDist)\n\t\t\tconst B = corner\n\t\t\tconst C = corner.clone().lrp(nextCorner, 4 / nextDist)\n\n\t\t\tpath += `M${A.x},${A.y} L${B.x},${B.y} L${C.x},${C.y} `\n\t\t}\n\t\treturn path\n\t}\n\n\tgetLength(): number {\n\t\treturn this.children.reduce((a, c) => (c.isLabel ? a : a + c.length), 0)\n\t}\n\n\tgetSvgPathData(): string {\n\t\treturn this.children.map((c) => (c.isLabel ? '' : c.getSvgPathData(true))).join(' ')\n\t}\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,8 +1,8 @@
1
- const version = "3.12.0-canary.5530d0bb35f4";
1
+ const version = "3.12.0-canary.5642859790c2";
2
2
  const publishDates = {
3
3
  major: "2024-09-13T14:36:29.063Z",
4
- minor: "2025-03-20T16:22:24.879Z",
5
- patch: "2025-03-20T16:22:24.879Z"
4
+ minor: "2025-03-24T12:27:14.291Z",
5
+ patch: "2025-03-24T12:27:14.291Z"
6
6
  };
7
7
  export {
8
8
  publishDates,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/version.ts"],
4
- "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\nexport const version = '3.12.0-canary.5530d0bb35f4'\nexport const publishDates = {\n\tmajor: '2024-09-13T14:36:29.063Z',\n\tminor: '2025-03-20T16:22:24.879Z',\n\tpatch: '2025-03-20T16:22:24.879Z',\n}\n"],
4
+ "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\nexport const version = '3.12.0-canary.5642859790c2'\nexport const publishDates = {\n\tmajor: '2024-09-13T14:36:29.063Z',\n\tminor: '2025-03-24T12:27:14.291Z',\n\tpatch: '2025-03-24T12:27:14.291Z',\n}\n"],
5
5
  "mappings": "AAGO,MAAM,UAAU;AAChB,MAAM,eAAe;AAAA,EAC3B,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACR;",
6
6
  "names": []
7
7
  }
package/editor.css CHANGED
@@ -897,16 +897,17 @@ input,
897
897
  cursor: var(--tl-cursor-default);
898
898
  }
899
899
 
900
+ .tl-rich-text[data-is-ready-for-editing='true'],
901
+ .tl-text-wrapper[data-is-ready-for-editing='true'] .tl-text-input {
902
+ cursor: var(--tl-cursor-text);
903
+ }
904
+
900
905
  .tl-text-input::selection {
901
906
  background: var(--color-selected);
902
907
  color: var(--color-selected-contrast);
903
908
  text-shadow: none;
904
909
  }
905
910
 
906
- .tl-rich-text[data-iseditinganything='true'] {
907
- cursor: var(--tl-cursor-text);
908
- }
909
-
910
911
  .tl-rich-text .ProseMirror {
911
912
  word-wrap: break-word;
912
913
  overflow-wrap: break-word;
@@ -1421,13 +1422,17 @@ input,
1421
1422
  }
1422
1423
 
1423
1424
  .tl-frame-heading {
1425
+ --frame-padding-x: 6px;
1426
+ --frame-height: 24px;
1427
+ --frame-minimum-width: 32px;
1428
+ --frame-offset-width: 16px;
1424
1429
  display: flex;
1425
1430
  align-items: center;
1426
1431
  position: absolute;
1427
1432
  transform-origin: 0% 100%;
1428
1433
  overflow: hidden;
1429
1434
  max-width: 100%;
1430
- min-width: 32px;
1435
+ min-width: var(--frame-minimum-width);
1431
1436
  height: auto;
1432
1437
  font-size: 12px;
1433
1438
  padding-bottom: 4px;
@@ -1439,32 +1444,33 @@ input,
1439
1444
  /* scale from bottom left corner so we can pin it to the top left corner of the frame */
1440
1445
  transform-origin: 0% 100%;
1441
1446
  display: flex;
1442
- height: 100%;
1447
+ height: var(--frame-height);
1443
1448
  width: 100%;
1444
1449
  align-items: center;
1445
1450
  border-radius: var(--radius-1);
1446
- background-color: var(--color-background);
1447
1451
  }
1448
1452
 
1449
1453
  .tl-frame-label {
1450
1454
  pointer-events: all;
1451
1455
  overflow: hidden;
1452
1456
  text-overflow: ellipsis;
1453
- padding: var(--space-3) var(--space-3);
1457
+ padding: 0px var(--frame-padding-x);
1458
+ border-radius: var(--radius-1);
1454
1459
  position: relative;
1455
1460
  font-size: inherit;
1456
1461
  white-space: pre;
1457
- border: 1px solid transparent;
1458
1462
  }
1459
1463
 
1460
1464
  .tl-frame-label__editing {
1461
1465
  color: transparent;
1462
1466
  white-space: pre;
1463
1467
  width: auto;
1468
+ min-width: var(--frame-minimum-width);
1469
+ height: 100%;
1464
1470
  overflow: visible;
1465
1471
  background-color: var(--color-panel);
1466
- border-radius: var(--radius-1);
1467
1472
  border-color: var(--color-selected);
1473
+ box-shadow: inset 0px 0px 0px 1.5px var(--color-selected);
1468
1474
  }
1469
1475
 
1470
1476
  .tl-frame-name-input {
@@ -1472,7 +1478,7 @@ input,
1472
1478
  border: none;
1473
1479
  background: none;
1474
1480
  outline: none;
1475
- padding: var(--space-3) var(--space-3);
1481
+ padding: 0px var(--frame-padding-x);
1476
1482
  inset: 0px;
1477
1483
  height: 100%;
1478
1484
  width: 100%;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tldraw/editor",
3
3
  "description": "A tiny little drawing app (editor).",
4
- "version": "3.12.0-canary.5530d0bb35f4",
4
+ "version": "3.12.0-canary.5642859790c2",
5
5
  "author": {
6
6
  "name": "tldraw Inc.",
7
7
  "email": "hello@tldraw.com"
@@ -48,12 +48,12 @@
48
48
  "@tiptap/core": "^2.9.1",
49
49
  "@tiptap/pm": "^2.9.1",
50
50
  "@tiptap/react": "^2.9.1",
51
- "@tldraw/state": "3.12.0-canary.5530d0bb35f4",
52
- "@tldraw/state-react": "3.12.0-canary.5530d0bb35f4",
53
- "@tldraw/store": "3.12.0-canary.5530d0bb35f4",
54
- "@tldraw/tlschema": "3.12.0-canary.5530d0bb35f4",
55
- "@tldraw/utils": "3.12.0-canary.5530d0bb35f4",
56
- "@tldraw/validate": "3.12.0-canary.5530d0bb35f4",
51
+ "@tldraw/state": "3.12.0-canary.5642859790c2",
52
+ "@tldraw/state-react": "3.12.0-canary.5642859790c2",
53
+ "@tldraw/store": "3.12.0-canary.5642859790c2",
54
+ "@tldraw/tlschema": "3.12.0-canary.5642859790c2",
55
+ "@tldraw/utils": "3.12.0-canary.5642859790c2",
56
+ "@tldraw/validate": "3.12.0-canary.5642859790c2",
57
57
  "@types/core-js": "^2.5.8",
58
58
  "@use-gesture/react": "^10.3.1",
59
59
  "classnames": "^2.5.1",
@@ -44,10 +44,10 @@ export const Shape = memo(function Shape({
44
44
 
45
45
  useEffect(() => {
46
46
  return react('load fonts', () => {
47
- const fonts = editor.fonts.getShapeFontFaces(shape)
47
+ const fonts = editor.fonts.getShapeFontFaces(id)
48
48
  editor.fonts.requestFonts(fonts)
49
49
  })
50
- }, [editor, shape])
50
+ }, [editor, id])
51
51
 
52
52
  const memoizedStuffRef = useRef({
53
53
  transform: '',
@@ -8139,8 +8139,18 @@ export class Editor extends EventEmitter<TLEventMap> {
8139
8139
  if (!currentTool) return styles
8140
8140
 
8141
8141
  if (currentTool.shapeType) {
8142
- for (const style of this.styleProps[currentTool.shapeType].keys()) {
8143
- styles.applyValue(style, this.getStyleForNextShape(style))
8142
+ if (
8143
+ currentTool.shapeType === 'frame' &&
8144
+ !(this.getShapeUtil('frame')!.options as any).showColors
8145
+ ) {
8146
+ for (const style of this.styleProps[currentTool.shapeType].keys()) {
8147
+ if (style.id === 'tldraw:color') continue
8148
+ styles.applyValue(style, this.getStyleForNextShape(style))
8149
+ }
8150
+ } else {
8151
+ for (const style of this.styleProps[currentTool.shapeType].keys()) {
8152
+ styles.applyValue(style, this.getStyleForNextShape(style))
8153
+ }
8144
8154
  }
8145
8155
  }
8146
8156
 
@@ -102,6 +102,6 @@ export class Group2d extends Geometry2d {
102
102
  }
103
103
 
104
104
  getSvgPathData(): string {
105
- return this.children.map((c, i) => (c.isLabel ? '' : c.getSvgPathData(i === 0))).join(' ')
105
+ return this.children.map((c) => (c.isLabel ? '' : c.getSvgPathData(true))).join(' ')
106
106
  }
107
107
  }
package/src/version.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  // This file is automatically generated by internal/scripts/refresh-assets.ts.
2
2
  // Do not edit manually. Or do, I'm a comment, not a cop.
3
3
 
4
- export const version = '3.12.0-canary.5530d0bb35f4'
4
+ export const version = '3.12.0-canary.5642859790c2'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2025-03-20T16:22:24.879Z',
8
- patch: '2025-03-20T16:22:24.879Z',
7
+ minor: '2025-03-24T12:27:14.291Z',
8
+ patch: '2025-03-24T12:27:14.291Z',
9
9
  }