@tldraw/tldraw 4.2.0 → 4.2.2

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/dist-cjs/index.js CHANGED
@@ -19,7 +19,7 @@ var import_tldraw = require("tldraw");
19
19
  __reExport(index_exports, require("tldraw"), module.exports);
20
20
  (0, import_tldraw.registerTldrawLibraryVersion)(
21
21
  "@tldraw/tldraw",
22
- "4.2.0",
22
+ "4.2.2",
23
23
  "cjs"
24
24
  );
25
25
  //# sourceMappingURL=index.js.map
@@ -2,7 +2,7 @@ import { registerTldrawLibraryVersion } from "tldraw";
2
2
  export * from "tldraw";
3
3
  registerTldrawLibraryVersion(
4
4
  "@tldraw/tldraw",
5
- "4.2.0",
5
+ "4.2.2",
6
6
  "esm"
7
7
  );
8
8
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tldraw/tldraw",
3
3
  "description": "A tiny little drawing editor.",
4
- "version": "4.2.0",
4
+ "version": "4.2.2",
5
5
  "author": {
6
6
  "name": "tldraw Inc.",
7
7
  "email": "hello@tldraw.com"
@@ -48,18 +48,19 @@
48
48
  "src"
49
49
  ],
50
50
  "dependencies": {
51
- "tldraw": "4.2.0"
51
+ "tldraw": "4.2.2"
52
52
  },
53
53
  "peerDependencies": {
54
- "react": "^18.2.0 || ^19.0.0",
55
- "react-dom": "^18.2.0 || ^19.0.0"
54
+ "react": "^18.2.0 || ^19.2.1",
55
+ "react-dom": "^18.2.0 || ^19.2.1"
56
56
  },
57
57
  "devDependencies": {
58
- "@types/react": "^18.3.18",
58
+ "@types/react": "^19.2.7",
59
+ "@types/react-dom": "^19.2.3",
59
60
  "chokidar-cli": "^3.0.0",
60
61
  "lazyrepo": "0.0.0-alpha.27",
61
- "react": "^18.3.1",
62
- "react-dom": "^18.3.1"
62
+ "react": "^19.2.1",
63
+ "react-dom": "^19.2.1"
63
64
  },
64
65
  "module": "dist-esm/index.mjs",
65
66
  "source": "src/index.ts",
package/tldraw.css CHANGED
@@ -611,7 +611,6 @@ input,
611
611
  pointer-events: all;
612
612
  white-space: pre-wrap;
613
613
  overflow-wrap: break-word;
614
- text-shadow: var(--tl-text-outline);
615
614
  }
616
615
 
617
616
  .tl-text-wrapper[data-font='draw'] {
@@ -713,7 +712,7 @@ input,
713
712
  resize: none;
714
713
  border: none;
715
714
  user-select: none;
716
- contain: style paint;
715
+ contain: layout style paint;
717
716
  /* N.B. This property, while discouraged ("intended for Document Type Definition (DTD) designers") is necessary for ensuring correct mixed RTL/LTR behavior when exporting SVGs. */
718
717
  unicode-bidi: plaintext;
719
718
  -webkit-user-select: none;
@@ -774,7 +773,6 @@ input,
774
773
  justify-content: center;
775
774
  align-items: center;
776
775
  color: var(--tl-color-text);
777
- text-shadow: var(--tl-text-outline);
778
776
  line-height: inherit;
779
777
  position: absolute;
780
778
  inset: 0px;
@@ -974,6 +972,14 @@ input,
974
972
  display: block;
975
973
  }
976
974
 
975
+ .tl-text__outline {
976
+ text-shadow: var(--tl-text-outline);
977
+ }
978
+
979
+ .tl-text__no-outline {
980
+ text-shadow: none;
981
+ }
982
+
977
983
  /* --------------------- Loading -------------------- */
978
984
 
979
985
  .tl-loading {
@@ -1138,14 +1144,12 @@ input,
1138
1144
  fill: none;
1139
1145
  }
1140
1146
 
1141
- @media (pointer: coarse) {
1142
- .tl-handle__bg:active {
1143
- fill: var(--tl-color-selection-fill);
1144
- }
1147
+ .tl-container[data-coarse='true'] .tl-handle__bg:active {
1148
+ fill: var(--tl-color-selection-fill);
1149
+ }
1145
1150
 
1146
- .tl-handle__create {
1147
- opacity: 1;
1148
- }
1151
+ .tl-container[data-coarse='true'] .tl-handle__create {
1152
+ opacity: 1;
1149
1153
  }
1150
1154
 
1151
1155
  .tl-rotate-corner:not(:hover),
@@ -1221,7 +1225,6 @@ input,
1221
1225
  align-items: center;
1222
1226
  text-align: center;
1223
1227
  color: var(--tl-color-text);
1224
- text-shadow: var(--tl-text-outline);
1225
1228
  }
1226
1229
 
1227
1230
  .tl-shape[data-shape-type='arrow'] .tl-text-label__inner {
@@ -1450,7 +1453,6 @@ input,
1450
1453
  }
1451
1454
 
1452
1455
  .tl-note__container > .tl-text-label {
1453
- text-shadow: none;
1454
1456
  color: currentColor;
1455
1457
  }
1456
1458
 
@@ -2315,12 +2317,10 @@ it from receiving any pointer events or affecting the cursor. */
2315
2317
  /* If mobile use 16px as font size */
2316
2318
  /* On iOS, font size under 16px in an input will make the page zoom into the input 🤦‍♂️ */
2317
2319
  /* https://css-tricks.com/16px-or-larger-text-prevents-ios-form-zoom/ */
2318
- @media (max-width: 600px) {
2319
- @supports (-webkit-touch-callout: none) {
2320
- /* CSS specific to iOS devices */
2321
- .tlui-input {
2322
- font-size: 16px;
2323
- }
2320
+ @supports (-webkit-touch-callout: none) {
2321
+ /* CSS specific to iOS devices */
2322
+ .tlui-input {
2323
+ font-size: 16px;
2324
2324
  }
2325
2325
  }
2326
2326
 
@@ -2412,25 +2412,31 @@ it from receiving any pointer events or affecting the cursor. */
2412
2412
 
2413
2413
  /* Submenu triggers */
2414
2414
 
2415
- .tlui-menu__submenu__trigger[data-state='open']::after {
2416
- opacity: 1;
2417
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2415
+ .tlui-menu__submenu__trigger {
2416
+ --gradient-angle: 90deg;
2418
2417
  }
2419
2418
 
2420
- .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']::after {
2419
+ .tlui-menu__submenu__trigger[data-direction='left'] {
2420
+ --gradient-angle: 270deg;
2421
+ }
2422
+
2423
+ .tlui-menu__submenu__trigger[data-state='open']::after {
2421
2424
  opacity: 1;
2422
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2425
+ background: linear-gradient(
2426
+ var(--gradient-angle),
2427
+ rgba(144, 144, 144, 0) 0%,
2428
+ var(--tl-color-muted-2) 100%
2429
+ );
2423
2430
  }
2424
2431
 
2425
2432
  @media (hover: hover) {
2426
- .tlui-menu__submenu__trigger[data-state='open']:not(:hover)::after {
2433
+ .tlui-menu__submenu__trigger:is(:hover, [data-state='open'])::after {
2427
2434
  opacity: 1;
2428
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2429
- }
2430
-
2431
- .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']:not(:hover)::after {
2432
- opacity: 1;
2433
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2435
+ background: linear-gradient(
2436
+ var(--gradient-angle),
2437
+ rgba(144, 144, 144, 0) 0%,
2438
+ var(--tl-color-muted-2) 100%
2439
+ );
2434
2440
  }
2435
2441
  }
2436
2442
 
@@ -2709,10 +2715,8 @@ it from receiving any pointer events or affecting the cursor. */
2709
2715
  }
2710
2716
  }
2711
2717
 
2712
- @media (any-pointer: coarse) {
2713
- .tlui-page_menu__item__submenu > .tlui-button {
2714
- opacity: 1;
2715
- }
2718
+ .tl-container[data-coarse='true'] .tlui-page_menu__item__submenu > .tlui-button {
2719
+ opacity: 1;
2716
2720
  }
2717
2721
 
2718
2722
  .tlui-button__icon {
@@ -2751,16 +2755,15 @@ it from receiving any pointer events or affecting the cursor. */
2751
2755
 
2752
2756
  .tlui-offline-indicator {
2753
2757
  display: flex;
2754
- flex-direction: row;
2755
- gap: var(--tl-space-3);
2756
- color: var(--tl-color-text);
2757
- background-color: var(--tl-color-low);
2758
- border: 3px solid var(--tl-color-background);
2759
- padding: 0px var(--tl-space-5);
2760
- height: 42px;
2758
+ color: var(--tl-color-background);
2759
+ background-color: var(--tl-color-text);
2760
+ border: none;
2761
+ width: 32px;
2762
+ height: 32px;
2761
2763
  align-items: center;
2762
2764
  justify-content: center;
2763
2765
  border-radius: 99px;
2766
+ cursor: default;
2764
2767
  opacity: 0;
2765
2768
  animation: tl-fade-in;
2766
2769
  animation-duration: 0.12s;
@@ -3078,6 +3081,7 @@ tldraw? probably.
3078
3081
  position: relative;
3079
3082
  background: var(--tl-color-panel);
3080
3083
  box-shadow: var(--tl-shadow-2);
3084
+ contain: layout style paint;
3081
3085
  }
3082
3086
 
3083
3087
  .tlui-main-toolbar--horizontal .tlui-main-toolbar__mobile-style-panel {