@tldraw/tldraw 5.0.1 → 5.1.0-canary.138ec8e1a0c7

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
- "5.0.1",
22
+ "5.1.0-canary.138ec8e1a0c7",
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
- "5.0.1",
5
+ "5.1.0-canary.138ec8e1a0c7",
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": "5.0.1",
4
+ "version": "5.1.0-canary.138ec8e1a0c7",
5
5
  "author": {
6
6
  "name": "tldraw Inc.",
7
7
  "email": "hello@tldraw.com"
@@ -47,7 +47,7 @@
47
47
  "src"
48
48
  ],
49
49
  "dependencies": {
50
- "tldraw": "5.0.1"
50
+ "tldraw": "5.1.0-canary.138ec8e1a0c7"
51
51
  },
52
52
  "peerDependencies": {
53
53
  "react": "^18.2.0 || ^19.2.1",
package/tldraw.css CHANGED
@@ -1634,6 +1634,10 @@ it from receiving any pointer events or affecting the cursor. */
1634
1634
  font-size: 12px;
1635
1635
  flex-grow: 2;
1636
1636
  text-align: start;
1637
+ min-width: 0;
1638
+ overflow: hidden;
1639
+ text-overflow: ellipsis;
1640
+ white-space: nowrap;
1637
1641
  }
1638
1642
 
1639
1643
  /*
@@ -2337,237 +2341,231 @@ it from receiving any pointer events or affecting the cursor. */
2337
2341
  /* ------------------- Page Select ------------------ */
2338
2342
 
2339
2343
  .tlui-page-menu__wrapper {
2340
- position: relative;
2341
2344
  display: flex;
2342
2345
  flex-direction: column;
2343
- width: 260px;
2344
- height: fit-content;
2345
- max-height: 50vh;
2346
+ width: 220px;
2346
2347
  }
2347
2348
 
2348
2349
  .tlui-page-menu__trigger {
2349
2350
  width: auto;
2350
2351
  }
2351
2352
 
2352
- .tlui-page-menu__header {
2353
- display: flex;
2354
- flex-direction: row;
2355
- align-items: center;
2356
- width: 100%;
2357
- height: 40px;
2358
- padding-inline-start: var(--tl-space-4);
2359
- border-bottom: 1px solid var(--tl-color-divider);
2360
- }
2361
-
2362
- .tlui-page-menu__header > .tlui-button:nth-of-type(1) {
2363
- margin-right: -4px;
2364
- }
2365
-
2366
- .tlui-page-menu__header__title {
2367
- color: var(--tl-color-text);
2368
- font-size: 12px;
2369
- flex-grow: 2;
2353
+ .tlui-page-menu__list {
2354
+ flex: 0 0 auto;
2355
+ overflow-x: hidden;
2356
+ overflow-y: auto;
2357
+ scrollbar-width: none;
2358
+ -ms-overflow-style: none;
2370
2359
  }
2371
2360
 
2372
- .tlui-page-menu__name {
2373
- flex-grow: 2;
2374
- text-align: start;
2375
- overflow: hidden;
2376
- text-overflow: ellipsis;
2377
- white-space: nowrap;
2361
+ .tlui-page-menu__list::-webkit-scrollbar {
2362
+ display: none;
2378
2363
  }
2379
2364
 
2380
- .tlui-page-menu__list {
2365
+ .tlui-page-menu__list__content {
2381
2366
  position: relative;
2382
- touch-action: auto;
2383
- flex-direction: column;
2384
- max-height: 100%;
2385
- overflow-x: hidden;
2386
- overflow-y: auto;
2387
- touch-action: auto;
2388
2367
  }
2389
2368
 
2390
- .tlui-page-menu__item {
2369
+ .tlui-page-menu__resize-handle {
2370
+ flex: 0 0 auto;
2391
2371
  position: relative;
2372
+ height: 7px;
2373
+ margin-bottom: -3px;
2374
+ cursor: ns-resize;
2375
+ touch-action: none;
2376
+ z-index: 999;
2392
2377
  }
2393
2378
 
2394
- .tlui-page_menu__item__submenu[data-isediting='true'] > .tlui-button[data-state='open'] {
2395
- opacity: 1;
2379
+ .tlui-page-menu__resize-handle::before {
2380
+ content: '';
2381
+ position: absolute;
2382
+ top: 3px;
2383
+ left: 0;
2384
+ right: 0;
2385
+ height: 1px;
2386
+ background: var(--tl-color-divider);
2387
+ transition: background-color 100ms;
2396
2388
  }
2397
2389
 
2398
- @media (hover: hover) {
2399
- .tlui-page-menu__item:hover > .tlui-page_menu__item__submenu > .tlui-button {
2400
- opacity: 1;
2401
- }
2390
+ .tlui-page-menu__resize-handle[data-resizing='true']::before {
2391
+ background: var(--tl-color-selected);
2392
+ transition: none;
2402
2393
  }
2403
2394
 
2404
- .tlui-page-menu__item:nth-of-type(n + 2) {
2405
- margin-top: -4px;
2395
+ .tlui-page-menu__create-button {
2396
+ flex: 0 0 auto;
2397
+ margin: 0;
2406
2398
  }
2407
2399
 
2408
2400
  .tlui-page-menu__item__button {
2409
- width: 100%;
2401
+ flex: 1 1 auto;
2402
+ min-width: 0px;
2410
2403
  }
2411
2404
 
2412
- .tlui-page-menu__item__button:not(:only-child) {
2413
- flex-grow: 2;
2414
- margin-inline-end: -2px;
2405
+ .tlui-page-menu__item__button::after,
2406
+ .tlui-page-menu__item__drag-handle::after {
2407
+ content: none;
2415
2408
  }
2416
2409
 
2417
- .tlui-page-menu__item__button > span {
2418
- display: block;
2419
- flex-grow: 2;
2420
- text-align: start;
2421
- overflow: hidden;
2422
- text-overflow: ellipsis;
2423
- white-space: nowrap;
2424
- }
2425
-
2426
- .tlui-page-menu__item__button > span {
2410
+ .tlui-page-menu__item__button > .tlui-button__label {
2427
2411
  padding-inline-end: calc(40px - 12px);
2428
2412
  }
2429
2413
 
2430
- @media (hover: hover) {
2431
- .tlui-page-menu__item__button > span {
2432
- padding-inline-end: 0px;
2433
- }
2434
-
2435
- .tlui-page-menu__item:hover > .tlui-page-menu__item__button > span {
2436
- padding-inline-end: calc(40px - 12px);
2437
- }
2438
- }
2439
-
2440
- .tlui-page-menu__item__button__checkbox {
2441
- padding-inline-start: 35px;
2442
- }
2443
-
2444
- .tlui-page-menu__item__button__check {
2445
- position: absolute;
2446
- inset-inline-start: 0px;
2447
- width: 24px;
2448
- padding-inline-start: 10px;
2449
- display: inline-flex;
2450
- align-items: center;
2451
- justify-content: center;
2452
- color: var(--tl-color-text);
2453
- }
2454
-
2455
- .tlui-page_menu__item__sortable {
2414
+ .tlui-page-menu__item {
2456
2415
  position: absolute;
2457
2416
  top: 0px;
2458
2417
  inset-inline-start: 0px;
2459
2418
  width: 100%;
2460
- height: fit-content;
2419
+ height: 40px;
2461
2420
  display: flex;
2462
2421
  flex-direction: row;
2463
2422
  align-items: center;
2464
2423
  overflow: hidden;
2424
+ transition: transform 0.08s ease-out;
2425
+ }
2426
+
2427
+ .tlui-page-menu__item::before {
2428
+ content: '';
2429
+ position: absolute;
2430
+ inset: 4px;
2431
+ border-radius: var(--tl-radius-2);
2432
+ background: var(--tl-color-muted-2);
2433
+ opacity: 0;
2434
+ pointer-events: none;
2435
+ }
2436
+
2437
+ .tlui-page-menu__item > * {
2438
+ position: relative;
2465
2439
  z-index: var(--tl-layer-above);
2466
2440
  }
2467
2441
 
2468
- .tlui-page_menu__item__sortable__title {
2442
+ .tlui-page-menu__item[data-iscurrent='true']:not([data-editing='true'])::before {
2443
+ background: var(--tl-color-hint);
2444
+ opacity: 1;
2445
+ }
2446
+
2447
+ .tlui-page-menu__item__title {
2469
2448
  flex: 1;
2449
+ height: 40px;
2450
+ position: relative;
2451
+ }
2452
+
2453
+ .tlui-page-menu__item__title::before {
2454
+ content: '';
2455
+ position: absolute;
2456
+ inset: 4px;
2457
+ border-radius: var(--tl-radius-2);
2458
+ border: 1px solid var(--tl-color-primary);
2459
+ pointer-events: none;
2470
2460
  }
2471
2461
 
2472
- .tlui-page_menu__item__sortable__title > .tlui-input__wrapper {
2462
+ .tlui-page-menu__item__title > .tlui-input__wrapper {
2473
2463
  height: 100%;
2474
2464
  }
2475
2465
 
2476
- .tlui-page_menu__item__sortable:focus-visible {
2477
- z-index: var(--tl-layer-focused-input);
2466
+ .tlui-page-menu__item[data-dragging='true'],
2467
+ .tlui-page-menu__item[data-dragging='true'] .tlui-page-menu__item__button,
2468
+ .tlui-page-menu__item[data-dragging='true'] .tlui-page-menu__item__drag-handle {
2469
+ cursor: grabbing;
2470
+ transition: none;
2471
+ }
2472
+
2473
+ .tlui-page-menu__item[data-dragging='true'] {
2474
+ background: var(--tl-color-panel);
2475
+ opacity: 1;
2478
2476
  }
2479
2477
 
2480
- .tlui-page_menu__item__sortable__handle {
2481
- touch-action: none;
2482
- width: 32px;
2483
- min-width: 0px;
2484
- height: 40px;
2485
- cursor: grab;
2478
+ .tlui-page-menu__item__drag-handle {
2479
+ flex: 0 0 32px;
2480
+ min-width: 32px;
2481
+ padding: 0px;
2486
2482
  color: var(--tl-color-text-3);
2487
- flex-shrink: 0;
2488
- margin-inline-end: -9px;
2483
+ cursor: grab;
2484
+ touch-action: none;
2489
2485
  }
2490
2486
 
2491
- .tlui-page_menu__item__sortable__handle:active {
2492
- cursor: grabbing;
2487
+ .tlui-page-menu__item__drag-handle > .tlui-icon {
2488
+ position: relative;
2489
+ inset-inline-start: 1px;
2490
+ }
2491
+
2492
+ .tlui-page-menu__item__drag-handle + .tlui-page-menu__item__button {
2493
+ padding-inline-start: 0px;
2493
2494
  }
2494
2495
 
2495
2496
  .tlui-page-menu__item__input {
2496
2497
  margin-inline-start: 12px;
2497
- height: 100%;
2498
2498
  }
2499
2499
 
2500
- /* The more menu has complex CSS here: */
2501
- /* If the user can hover, then visible but opacity zero until hover */
2502
- /* If the user cannot hover, then not displayed unless editing, and then opacity 1 */
2503
-
2504
- .tlui-page_menu__item__submenu {
2505
- pointer-events: all;
2500
+ .tlui-page-menu__item__submenu {
2506
2501
  position: absolute;
2507
2502
  inset-inline-end: 0px;
2508
2503
  top: 0px;
2509
2504
  height: 100%;
2510
- cursor: pointer;
2511
- margin: 0px;
2512
- margin-inline-start: -2px;
2513
2505
  z-index: 10;
2514
2506
  }
2515
2507
 
2516
- .tlui-page_menu__item__submenu > .tlui-button {
2508
+ .tlui-page-menu__item__submenu > .tlui-button {
2517
2509
  opacity: 0;
2510
+ color: var(--tl-color-text-3);
2518
2511
  }
2519
2512
 
2520
- .tlui-page_menu__item__sortable:focus-visible > .tlui-page_menu__item__submenu > .tlui-button,
2521
- .tlui-page_menu__item__submenu[data-isediting='true'],
2522
- .tlui-page_menu__item__submenu > .tlui-button[data-state='open'],
2523
- .tlui-page_menu__item__submenu > .tlui-button:focus-visible {
2513
+ .tlui-page-menu__item__submenu > .tlui-button::after {
2514
+ content: none;
2515
+ }
2516
+
2517
+ .tlui-page-menu__item:has(.tlui-button:focus-visible)
2518
+ > .tlui-page-menu__item__submenu
2519
+ > .tlui-button,
2520
+ .tlui-page-menu__item__submenu > .tlui-button[data-state='open'],
2521
+ .tlui-page-menu__item__submenu > .tlui-button:focus-visible {
2524
2522
  opacity: 1;
2525
2523
  }
2526
2524
 
2527
- .tlui-page_menu__item__submenu > .tlui-button[data-state='open']::after {
2528
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2525
+ /* Hide the kebab while any row is being dragged: :hover sticks during pointer */
2526
+ /* capture, which would otherwise leave the kebab visible mid-drag. */
2527
+ .tlui-page-menu__list__content[data-dragging='true']
2528
+ .tlui-page-menu__item
2529
+ > .tlui-page-menu__item__submenu
2530
+ > .tlui-button {
2531
+ opacity: 0;
2532
+ }
2533
+
2534
+ .tl-container[data-coarse='true'] .tlui-page-menu__item__submenu > .tlui-button {
2529
2535
  opacity: 1;
2530
2536
  }
2531
2537
 
2532
- .tl-container[dir='rtl'] .tlui-page_menu__item__submenu > .tlui-button[data-state='open']::after {
2533
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2538
+ .tl-container[data-coarse='true'] .tlui-page-menu__item__button > .tlui-button__label {
2539
+ padding-inline-end: calc(40px - 12px);
2534
2540
  }
2535
2541
 
2536
2542
  @media (hover: hover) {
2537
- .tlui-page_menu__item__submenu > .tlui-button[data-state='open']:not(:hover)::after {
2538
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2539
- opacity: 1;
2543
+ .tlui-page-menu__resize-handle:hover::before {
2544
+ background: var(--tl-color-selected);
2545
+ height: 2px;
2546
+ transition: background-color 150ms 80ms;
2540
2547
  }
2541
2548
 
2542
- .tl-container[dir='rtl']
2543
- .tlui-page_menu__item__submenu
2544
- > .tlui-button[data-state='open']:not(:hover)::after {
2545
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2549
+ .tlui-page-menu__item:not([data-editing='true']):hover::before {
2550
+ opacity: 1;
2546
2551
  }
2547
- }
2548
2552
 
2549
- .tl-container[data-coarse='true'] .tlui-page_menu__item__submenu > .tlui-button {
2550
- opacity: 1;
2551
- }
2552
-
2553
- .tlui-button__icon {
2554
- padding: 0px;
2555
- }
2553
+ .tlui-page-menu__item:hover > .tlui-page-menu__item__submenu > .tlui-button {
2554
+ opacity: 1;
2555
+ }
2556
2556
 
2557
- .tlui-page-menu__item__button .tlui-button__icon {
2558
- margin-inline-end: 4px;
2559
- }
2557
+ .tlui-page-menu__item__button > .tlui-button__label {
2558
+ padding-inline-end: 0px;
2559
+ }
2560
2560
 
2561
- @media (hover: hover) {
2562
- .tlui-page_menu__item__submenu[data-isediting='true'] > .tlui-button {
2563
- opacity: 0;
2561
+ .tlui-page-menu__item:hover > .tlui-page-menu__item__button > .tlui-button__label {
2562
+ padding-inline-end: calc(40px - 12px);
2564
2563
  }
2565
2564
 
2566
- .tlui-page_menu__item__submenu:hover > .tlui-button {
2567
- opacity: 1;
2565
+ .tlui-page-menu__item__submenu > .tlui-button:hover {
2566
+ color: var(--tl-color-text);
2568
2567
  }
2569
2568
  }
2570
-
2571
2569
  /* -------------- Skip to main content -------------- */
2572
2570
 
2573
2571
  .tl-skip-to-main-content {