dialkit 1.2.1 → 1.4.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.
Files changed (88) hide show
  1. package/README.md +653 -6
  2. package/dist/dropdown-position.d.ts +15 -0
  3. package/dist/dropdown-position.js +22 -0
  4. package/dist/dropdown-position.js.map +1 -0
  5. package/dist/icons.d.ts +4 -1
  6. package/dist/icons.js +13 -0
  7. package/dist/icons.js.map +1 -1
  8. package/dist/index.cjs +3796 -768
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +315 -10
  11. package/dist/index.d.ts +315 -10
  12. package/dist/index.js +3733 -711
  13. package/dist/index.js.map +1 -1
  14. package/dist/panel-drag.d.ts +19 -0
  15. package/dist/panel-drag.js +72 -0
  16. package/dist/panel-drag.js.map +1 -0
  17. package/dist/solid/index.d.ts +264 -5
  18. package/dist/solid/index.js +5277 -1632
  19. package/dist/solid/index.js.map +1 -1
  20. package/dist/store/index.cjs +329 -57
  21. package/dist/store/index.cjs.map +1 -1
  22. package/dist/store/index.d.cts +43 -4
  23. package/dist/store/index.d.ts +43 -4
  24. package/dist/store/index.js +321 -56
  25. package/dist/store/index.js.map +1 -1
  26. package/dist/styles.css +809 -7
  27. package/dist/svelte/components/ControlRenderer.svelte +5 -2
  28. package/dist/svelte/components/ControlRenderer.svelte.d.ts +2 -0
  29. package/dist/svelte/components/ControlRenderer.svelte.d.ts.map +1 -1
  30. package/dist/svelte/components/DialRoot.svelte +218 -16
  31. package/dist/svelte/components/DialRoot.svelte.d.ts +1 -0
  32. package/dist/svelte/components/DialRoot.svelte.d.ts.map +1 -1
  33. package/dist/svelte/components/Folder.svelte +24 -13
  34. package/dist/svelte/components/Folder.svelte.d.ts +1 -0
  35. package/dist/svelte/components/Folder.svelte.d.ts.map +1 -1
  36. package/dist/svelte/components/Panel.svelte +104 -71
  37. package/dist/svelte/components/Panel.svelte.d.ts +4 -0
  38. package/dist/svelte/components/Panel.svelte.d.ts.map +1 -1
  39. package/dist/svelte/components/PresetManager.svelte +5 -5
  40. package/dist/svelte/components/PresetManager.svelte.d.ts.map +1 -1
  41. package/dist/svelte/components/SelectControl.svelte +6 -14
  42. package/dist/svelte/components/SelectControl.svelte.d.ts.map +1 -1
  43. package/dist/svelte/components/Timeline/ClipPopover.svelte +206 -0
  44. package/dist/svelte/components/Timeline/ClipPopover.svelte.d.ts +26 -0
  45. package/dist/svelte/components/Timeline/ClipPopover.svelte.d.ts.map +1 -0
  46. package/dist/svelte/components/Timeline/DialTimeline.svelte +76 -0
  47. package/dist/svelte/components/Timeline/DialTimeline.svelte.d.ts +13 -0
  48. package/dist/svelte/components/Timeline/DialTimeline.svelte.d.ts.map +1 -0
  49. package/dist/svelte/components/Timeline/TimelineClip.svelte +233 -0
  50. package/dist/svelte/components/Timeline/TimelineClip.svelte.d.ts +24 -0
  51. package/dist/svelte/components/Timeline/TimelineClip.svelte.d.ts.map +1 -0
  52. package/dist/svelte/components/Timeline/TimelineSection.svelte +756 -0
  53. package/dist/svelte/components/Timeline/TimelineSection.svelte.d.ts +12 -0
  54. package/dist/svelte/components/Timeline/TimelineSection.svelte.d.ts.map +1 -0
  55. package/dist/svelte/components/Timeline/TimelineToggleButton.svelte +25 -0
  56. package/dist/svelte/components/Timeline/TimelineToggleButton.svelte.d.ts +4 -0
  57. package/dist/svelte/components/Timeline/TimelineToggleButton.svelte.d.ts.map +1 -0
  58. package/dist/svelte/components/TransitionControl.svelte +26 -11
  59. package/dist/svelte/components/TransitionControl.svelte.d.ts +9 -0
  60. package/dist/svelte/components/TransitionControl.svelte.d.ts.map +1 -1
  61. package/dist/svelte/createDialKit.svelte.d.ts +11 -1
  62. package/dist/svelte/createDialKit.svelte.d.ts.map +1 -1
  63. package/dist/svelte/createDialKit.svelte.js +61 -34
  64. package/dist/svelte/createDialTimeline.svelte.d.ts +4 -0
  65. package/dist/svelte/createDialTimeline.svelte.d.ts.map +1 -0
  66. package/dist/svelte/createDialTimeline.svelte.js +73 -0
  67. package/dist/svelte/index.d.ts +7 -3
  68. package/dist/svelte/index.d.ts.map +1 -1
  69. package/dist/svelte/index.js +4 -1
  70. package/dist/svelte/theme-css.d.ts +1 -1
  71. package/dist/svelte/theme-css.d.ts.map +1 -1
  72. package/dist/svelte/theme-css.js +809 -7
  73. package/dist/timeline/index.cjs +1288 -0
  74. package/dist/timeline/index.cjs.map +1 -0
  75. package/dist/timeline/index.d.cts +443 -0
  76. package/dist/timeline/index.d.ts +443 -0
  77. package/dist/timeline/index.js +1233 -0
  78. package/dist/timeline/index.js.map +1 -0
  79. package/dist/vue/index.d.ts +325 -12
  80. package/dist/vue/index.js +3226 -280
  81. package/dist/vue/index.js.map +1 -1
  82. package/package.json +23 -13
  83. package/dist/solid/index.cjs +0 -3079
  84. package/dist/solid/index.cjs.map +0 -1
  85. package/dist/solid/index.d.cts +0 -258
  86. package/dist/vue/index.cjs +0 -3056
  87. package/dist/vue/index.cjs.map +0 -1
  88. package/dist/vue/index.d.cts +0 -675
package/dist/styles.css CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  /* Dialkit Theme - Dark glassmorphic design */
4
4
  .dialkit-root {
5
+ position: relative;
6
+
5
7
  /* Surfaces */
6
8
  --dial-surface: rgba(255, 255, 255, 0.05);
7
9
  --dial-surface-hover: rgba(255, 255, 255, 0.1);
@@ -48,15 +50,15 @@
48
50
 
49
51
  /* Inline mode */
50
52
  .dialkit-root[data-mode="inline"] {
51
- height: 100%;
53
+ max-height: 100%;
52
54
  }
53
55
 
54
56
  .dialkit-panel[data-mode="inline"] {
55
57
  position: static;
56
58
  z-index: auto;
57
- max-height: 100%;
58
- height: 100%;
59
- overflow: hidden;
59
+ max-height: inherit;
60
+ height: auto;
61
+ overflow: visible;
60
62
  }
61
63
 
62
64
  .dialkit-panel-inner {
@@ -70,6 +72,14 @@
70
72
  transform-origin: top right;
71
73
  }
72
74
 
75
+ .dialkit-panel[data-origin-x="left"] .dialkit-panel-inner {
76
+ transform-origin: top left;
77
+ }
78
+
79
+ .dialkit-panel[data-origin-x="right"] .dialkit-panel-inner {
80
+ transform-origin: top right;
81
+ }
82
+
73
83
  .dialkit-panel[data-position="top-left"] .dialkit-panel-inner {
74
84
  transform-origin: top left;
75
85
  max-height: calc(100vh - 80px);
@@ -109,8 +119,8 @@
109
119
 
110
120
  .dialkit-panel-inline {
111
121
  width: 100%;
112
- height: 100%;
113
- max-height: none;
122
+ height: auto;
123
+ max-height: inherit;
114
124
  overflow-y: auto;
115
125
  box-shadow: none;
116
126
  border-radius: 0;
@@ -122,7 +132,8 @@
122
132
  display: flex;
123
133
  flex-direction: column;
124
134
  width: 100%;
125
- height: 100%;
135
+ max-height: inherit;
136
+ height: auto;
126
137
  }
127
138
 
128
139
  /* Position variants */
@@ -170,6 +181,18 @@
170
181
  border-bottom: 1px solid var(--dial-surface-subtle);
171
182
  }
172
183
 
184
+ .dialkit-panel:not([data-mode="inline"]) .dialkit-panel-inner:not([data-collapsed="true"]) > .dialkit-folder-root > .dialkit-panel-header {
185
+ cursor: grab;
186
+ }
187
+
188
+ .dialkit-panel:not([data-mode="inline"]) .dialkit-panel-inner:not([data-collapsed="true"]) > .dialkit-folder-root > .dialkit-panel-header:active {
189
+ cursor: grabbing;
190
+ }
191
+
192
+ .dialkit-panel:not([data-mode="inline"]) .dialkit-panel-icon {
193
+ cursor: pointer;
194
+ }
195
+
173
196
  .dialkit-folder-header {
174
197
  cursor: pointer;
175
198
  user-select: none;
@@ -266,6 +289,11 @@
266
289
  padding-bottom: 0;
267
290
  }
268
291
 
292
+ .dialkit-folder:not(.dialkit-folder-root):last-child {
293
+ border-bottom: none;
294
+ margin-bottom: 0;
295
+ }
296
+
269
297
  /* Adjacent non-root folders collapse gap and share a single divider */
270
298
  .dialkit-folder:not(.dialkit-folder-root) + .dialkit-folder:not(.dialkit-folder-root) {
271
299
  margin-top: -10px;
@@ -288,6 +316,66 @@
288
316
  padding-bottom: 0;
289
317
  }
290
318
 
319
+ .dialkit-panel[data-multiple="true"] .dialkit-panel-inner:not([data-collapsed="true"]) {
320
+ padding: 0 12px;
321
+ }
322
+
323
+ .dialkit-panel[data-multiple="true"] .dialkit-panel-inner:not([data-collapsed="true"]) .dialkit-panel-icon {
324
+ top: 14px;
325
+ }
326
+
327
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-panel-header {
328
+ padding-bottom: 0;
329
+ margin-bottom: 0;
330
+ }
331
+
332
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-panel-header > .dialkit-folder-header-top,
333
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-folder-content > .dialkit-folder-inner > .dialkit-folder > .dialkit-folder-header > .dialkit-folder-header-top {
334
+ height: 44px;
335
+ padding: 0;
336
+ }
337
+
338
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-folder-content > .dialkit-folder-inner > .dialkit-folder > .dialkit-folder-header {
339
+ height: 44px;
340
+ }
341
+
342
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-folder-content > .dialkit-folder-inner {
343
+ gap: 0;
344
+ }
345
+
346
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-folder-content > .dialkit-folder-inner > .dialkit-folder {
347
+ margin: 0;
348
+ padding-bottom: 0;
349
+ border-top: 1px solid var(--dial-surface-subtle);
350
+ border-bottom: none;
351
+ }
352
+
353
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-folder-content > .dialkit-folder-inner > .dialkit-folder > .dialkit-folder-header .dialkit-folder-title {
354
+ font-size: 15px;
355
+ font-weight: 600;
356
+ line-height: 20px;
357
+ color: var(--dial-text-root);
358
+ transform: translateZ(0);
359
+ }
360
+
361
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-title-root {
362
+ line-height: 20px;
363
+ }
364
+
365
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-folder-content > .dialkit-folder-inner > .dialkit-folder:first-child {
366
+ border-top: none;
367
+ margin-top: 0;
368
+ }
369
+
370
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-folder-content > .dialkit-folder-inner > .dialkit-folder + .dialkit-folder {
371
+ margin-top: 0;
372
+ }
373
+
374
+ .dialkit-panel[data-multiple="true"] .dialkit-folder-root > .dialkit-folder-content > .dialkit-folder-inner > .dialkit-folder > .dialkit-folder-content > .dialkit-folder-inner {
375
+ padding-top: 4px;
376
+ padding-bottom: 12px;
377
+ }
378
+
291
379
  /* Content spacing handled by folder-inner gap */
292
380
 
293
381
 
@@ -630,6 +718,16 @@
630
718
  overflow: hidden;
631
719
  }
632
720
 
721
+ .dialkit-panel-section-toolbar {
722
+ display: flex;
723
+ align-items: center;
724
+ gap: 6px;
725
+ width: 100%;
726
+ height: var(--dial-row-height);
727
+ min-width: 0;
728
+ overflow: hidden;
729
+ }
730
+
633
731
  .dialkit-toolbar-add {
634
732
  display: flex;
635
733
  align-items: center;
@@ -649,12 +747,28 @@
649
747
  background: var(--dial-surface-hover);
650
748
  }
651
749
 
750
+ .dialkit-timeline-toolbar-toggle[data-active] {
751
+ background: var(--dial-surface-active);
752
+ color: var(--dial-text-root);
753
+ }
754
+
652
755
  .dialkit-toolbar-add svg {
653
756
  width: 16px;
654
757
  height: 16px;
655
758
  color: var(--dial-text-label);
656
759
  }
657
760
 
761
+ .dialkit-timeline-toolkit-only {
762
+ height: var(--dial-row-height);
763
+ display: flex;
764
+ align-items: center;
765
+ padding: 0 12px;
766
+ border-radius: var(--dial-radius);
767
+ background: var(--dial-surface-subtle);
768
+ color: var(--dial-text-secondary);
769
+ font-size: 12px;
770
+ }
771
+
658
772
  .dialkit-toolbar-copy {
659
773
  position: relative;
660
774
  display: flex;
@@ -1324,3 +1438,691 @@
1324
1438
  }
1325
1439
 
1326
1440
  }
1441
+
1442
+ /* ── Timeline dock ── */
1443
+ .dialkit-timeline {
1444
+ position: fixed;
1445
+ left: 12px;
1446
+ right: 12px;
1447
+ bottom: 12px;
1448
+ z-index: 9998;
1449
+ }
1450
+
1451
+ .dialkit-timeline[hidden] {
1452
+ display: none;
1453
+ }
1454
+
1455
+ .dialkit-timeline-dock {
1456
+ background: var(--dial-glass-bg);
1457
+ border: 1px solid var(--dial-border);
1458
+ border-radius: 14px;
1459
+ backdrop-filter: blur(var(--dial-backdrop-blur));
1460
+ -webkit-backdrop-filter: blur(var(--dial-backdrop-blur));
1461
+ padding: 10px 12px;
1462
+ display: flex;
1463
+ flex-direction: column;
1464
+ gap: 10px;
1465
+ max-height: calc(100vh - 24px);
1466
+ overflow-y: auto;
1467
+ overscroll-behavior: contain;
1468
+ scrollbar-width: none;
1469
+ -ms-overflow-style: none;
1470
+ }
1471
+
1472
+ .dialkit-timeline-dock::-webkit-scrollbar {
1473
+ display: none;
1474
+ }
1475
+
1476
+ .dialkit-timeline-section {
1477
+ --dial-timeline-label-w: 96px;
1478
+ --dial-timeline-actions-w: 284px;
1479
+ }
1480
+
1481
+ .dialkit-timeline-section + .dialkit-timeline-section {
1482
+ border-top: 1px solid var(--dial-border);
1483
+ padding-top: 10px;
1484
+ }
1485
+
1486
+ .dialkit-timeline-header {
1487
+ display: grid;
1488
+ grid-template-columns: auto minmax(100px, 1fr) auto;
1489
+ align-items: center;
1490
+ gap: 12px;
1491
+ position: sticky;
1492
+ top: -10px;
1493
+ z-index: 4;
1494
+ padding: 6px 0 0;
1495
+ margin-top: -6px;
1496
+ background: var(--dial-glass-bg);
1497
+ backdrop-filter: blur(var(--dial-backdrop-blur));
1498
+ -webkit-backdrop-filter: blur(var(--dial-backdrop-blur));
1499
+ }
1500
+
1501
+ .dialkit-timeline-header[data-open] {
1502
+ grid-template-columns: minmax(0, 1fr) auto;
1503
+ gap: 12px;
1504
+ }
1505
+
1506
+ .dialkit-timeline-header:not([data-open]) {
1507
+ grid-template-columns: var(--dial-timeline-label-w) minmax(0, 1fr) auto;
1508
+ gap: 0;
1509
+ }
1510
+
1511
+ .dialkit-timeline-header:not([data-open]) .dialkit-timeline-identity {
1512
+ width: var(--dial-timeline-label-w);
1513
+ box-sizing: border-box;
1514
+ padding-right: 10px;
1515
+ overflow: hidden;
1516
+ }
1517
+
1518
+ .dialkit-timeline-header:not([data-open]) .dialkit-timeline-title {
1519
+ overflow: hidden;
1520
+ text-overflow: ellipsis;
1521
+ }
1522
+
1523
+ .dialkit-timeline-header:not([data-open]) .dialkit-timeline-overview {
1524
+ margin-right: 12px;
1525
+ }
1526
+
1527
+ .dialkit-timeline-identity {
1528
+ min-width: 0;
1529
+ display: flex;
1530
+ align-items: center;
1531
+ gap: 10px;
1532
+ }
1533
+
1534
+ .dialkit-timeline-title {
1535
+ display: block;
1536
+ min-width: 0;
1537
+ font-size: 15px;
1538
+ font-weight: 600;
1539
+ color: var(--dial-text-root);
1540
+ letter-spacing: -0.01em;
1541
+ white-space: nowrap;
1542
+ }
1543
+
1544
+ .dialkit-timeline-header[data-open] .dialkit-timeline-identity {
1545
+ width: 100%;
1546
+ overflow: hidden;
1547
+ }
1548
+
1549
+ .dialkit-timeline-header[data-open] .dialkit-timeline-title {
1550
+ display: inline-block;
1551
+ flex: 0 1 auto;
1552
+ width: fit-content;
1553
+ max-width: 100%;
1554
+ overflow: hidden;
1555
+ text-overflow: ellipsis;
1556
+ }
1557
+
1558
+ .dialkit-timeline-time {
1559
+ font-family: 'Geist Mono', ui-monospace, monospace;
1560
+ font-size: 13px;
1561
+ font-weight: 500;
1562
+ font-variant-numeric: tabular-nums;
1563
+ color: var(--dial-text-label);
1564
+ white-space: nowrap;
1565
+ }
1566
+
1567
+ .dialkit-timeline-overview {
1568
+ position: relative;
1569
+ min-width: 60px;
1570
+ height: 12px;
1571
+ border-radius: 999px;
1572
+ background: var(--dial-surface-subtle);
1573
+ overflow: hidden;
1574
+ cursor: col-resize;
1575
+ touch-action: none;
1576
+ user-select: none;
1577
+ -webkit-user-select: none;
1578
+ }
1579
+
1580
+ .dialkit-timeline-overview-viewport {
1581
+ position: absolute;
1582
+ inset-block: 0;
1583
+ border-radius: inherit;
1584
+ pointer-events: none;
1585
+ }
1586
+
1587
+ .dialkit-timeline-overview-viewport[data-zoomed] {
1588
+ background: color-mix(in srgb, var(--dial-text-tertiary) 18%, transparent);
1589
+ box-shadow: inset 0 0 0 1px var(--dial-border);
1590
+ }
1591
+
1592
+ .dialkit-timeline-overview-progress {
1593
+ position: absolute;
1594
+ inset: 0 auto 0 0;
1595
+ border-radius: 999px 0 0 999px;
1596
+ background: var(--dial-text-tertiary);
1597
+ opacity: 0.35;
1598
+ pointer-events: none;
1599
+ }
1600
+
1601
+ .dialkit-timeline-overview-playhead {
1602
+ position: absolute;
1603
+ top: 0;
1604
+ bottom: 0;
1605
+ width: 2px;
1606
+ border-radius: 2px;
1607
+ background: var(--dial-text-root);
1608
+ transform: translateX(-1px);
1609
+ pointer-events: none;
1610
+ }
1611
+
1612
+ .dialkit-timeline-actions {
1613
+ display: flex;
1614
+ align-items: center;
1615
+ gap: 6px;
1616
+ }
1617
+
1618
+ .dialkit-timeline-header[data-open] .dialkit-timeline-actions {
1619
+ width: auto;
1620
+ box-sizing: border-box;
1621
+ justify-content: flex-end;
1622
+ padding-left: 0;
1623
+ }
1624
+
1625
+ .dialkit-timeline-actions .dialkit-preset-manager {
1626
+ flex: 0 0 120px;
1627
+ width: 120px;
1628
+ }
1629
+
1630
+ .dialkit-timeline-chevron {
1631
+ background: none;
1632
+ border: none;
1633
+ width: 20px;
1634
+ height: var(--dial-row-height);
1635
+ padding: 2px;
1636
+ cursor: pointer;
1637
+ color: var(--dial-text-label);
1638
+ opacity: 0.6;
1639
+ display: flex;
1640
+ align-items: center;
1641
+ justify-content: center;
1642
+ transition: opacity 0.15s;
1643
+ }
1644
+
1645
+ .dialkit-timeline-chevron:hover {
1646
+ opacity: 1;
1647
+ }
1648
+
1649
+ .dialkit-timeline-chevron svg {
1650
+ width: 16px;
1651
+ height: 16px;
1652
+ transition: transform 0.18s ease;
1653
+ }
1654
+
1655
+ .dialkit-timeline-chevron[data-open="true"] svg {
1656
+ transform: rotate(180deg);
1657
+ }
1658
+
1659
+ .dialkit-timeline-body {
1660
+ margin-top: 6px;
1661
+ overflow: visible;
1662
+ }
1663
+
1664
+ .dialkit-timeline-grid {
1665
+ position: relative;
1666
+ display: flex;
1667
+ flex-direction: column;
1668
+ gap: 6px;
1669
+ }
1670
+
1671
+ .dialkit-timeline-row {
1672
+ display: grid;
1673
+ grid-template-columns: var(--dial-timeline-label-w) minmax(0, 1fr);
1674
+ align-items: stretch;
1675
+ }
1676
+
1677
+ .dialkit-timeline-label {
1678
+ flex: 0 0 var(--dial-timeline-label-w);
1679
+ box-sizing: border-box; /* indent padding must not widen the column — every lane starts at the same x */
1680
+ display: flex;
1681
+ align-items: center;
1682
+ gap: 4px;
1683
+ font-size: 13px;
1684
+ font-weight: 500;
1685
+ color: var(--dial-text-label);
1686
+ padding-right: 10px;
1687
+ overflow: hidden;
1688
+ text-overflow: ellipsis;
1689
+ white-space: nowrap;
1690
+ user-select: none;
1691
+ -webkit-user-select: none;
1692
+ }
1693
+
1694
+ .dialkit-timeline-ruler {
1695
+ position: relative;
1696
+ min-width: 0;
1697
+ height: 28px;
1698
+ cursor: col-resize;
1699
+ touch-action: none;
1700
+ overflow: visible;
1701
+ user-select: none;
1702
+ -webkit-user-select: none;
1703
+ z-index: 5;
1704
+ }
1705
+
1706
+ .dialkit-timeline-ruler-row {
1707
+ height: 28px;
1708
+ }
1709
+
1710
+ .dialkit-timeline-tick {
1711
+ position: absolute;
1712
+ top: 50%;
1713
+ width: 1px;
1714
+ height: 100%;
1715
+ background: var(--dial-text-tertiary);
1716
+ transform: translateY(-50%);
1717
+ pointer-events: none;
1718
+ }
1719
+
1720
+ .dialkit-timeline-tick-medium {
1721
+ height: 16px;
1722
+ background: var(--dial-border-hover);
1723
+ }
1724
+
1725
+ .dialkit-timeline-tick-fine {
1726
+ height: 8px;
1727
+ background: var(--dial-border);
1728
+ }
1729
+
1730
+ .dialkit-timeline-tick-label {
1731
+ position: absolute;
1732
+ top: 50%;
1733
+ left: 4px;
1734
+ display: flex;
1735
+ align-items: center;
1736
+ height: 18px;
1737
+ transform: translateY(-50%);
1738
+ font-family: 'Geist Mono', ui-monospace, monospace;
1739
+ font-size: 9.5px;
1740
+ line-height: 18px;
1741
+ font-variant-numeric: tabular-nums;
1742
+ color: var(--dial-text-tertiary);
1743
+ white-space: nowrap;
1744
+ }
1745
+
1746
+ .dialkit-timeline-row {
1747
+ height: 28px;
1748
+ }
1749
+
1750
+ /* ── Layer groups ── */
1751
+
1752
+ .dialkit-timeline-group-row {
1753
+ height: 22px;
1754
+ }
1755
+
1756
+ .dialkit-timeline-group-row .dialkit-timeline-label {
1757
+ gap: 4px;
1758
+ font-weight: 600;
1759
+ color: var(--dial-text-root);
1760
+ }
1761
+
1762
+ .dialkit-timeline-group-row .dialkit-timeline-lane {
1763
+ background: none;
1764
+ }
1765
+
1766
+ .dialkit-timeline-group-toggle {
1767
+ display: flex;
1768
+ align-items: center;
1769
+ justify-content: center;
1770
+ background: none;
1771
+ border: none;
1772
+ padding: 0;
1773
+ margin-left: -2px;
1774
+ cursor: pointer;
1775
+ color: var(--dial-text-tertiary);
1776
+ }
1777
+
1778
+ .dialkit-timeline-group-toggle svg {
1779
+ width: 10px;
1780
+ height: 10px;
1781
+ transform: rotate(-90deg);
1782
+ transition: transform 0.15s ease;
1783
+ }
1784
+
1785
+ .dialkit-timeline-group-toggle[data-open="true"] svg {
1786
+ transform: rotate(0deg);
1787
+ }
1788
+
1789
+ .dialkit-timeline-row[data-grouped] .dialkit-timeline-label {
1790
+ padding-left: 14px;
1791
+ }
1792
+
1793
+ .dialkit-timeline-lane {
1794
+ position: relative;
1795
+ flex: 1;
1796
+ background: var(--dial-surface-subtle);
1797
+ border-radius: 8px;
1798
+ overflow: hidden;
1799
+ }
1800
+
1801
+ .dialkit-timeline-clip {
1802
+ position: absolute;
1803
+ top: 3px;
1804
+ bottom: 3px;
1805
+ border-radius: 6px;
1806
+ display: flex;
1807
+ align-items: center;
1808
+ justify-content: flex-end;
1809
+ padding: 0 9px;
1810
+ cursor: grab;
1811
+ user-select: none;
1812
+ -webkit-user-select: none;
1813
+ touch-action: none;
1814
+ box-sizing: border-box;
1815
+ overflow: hidden;
1816
+ z-index: 1;
1817
+ }
1818
+
1819
+ .dialkit-timeline-clip-ghost {
1820
+ position: absolute;
1821
+ top: 4px;
1822
+ bottom: 4px;
1823
+ display: flex;
1824
+ border-radius: 5px;
1825
+ box-sizing: border-box;
1826
+ overflow: hidden;
1827
+ opacity: 0.18;
1828
+ pointer-events: none;
1829
+ user-select: none;
1830
+ -webkit-user-select: none;
1831
+ }
1832
+
1833
+ .dialkit-timeline-clip-ghost-segment {
1834
+ height: 100%;
1835
+ flex-shrink: 0;
1836
+ box-sizing: border-box;
1837
+ }
1838
+
1839
+ .dialkit-timeline-clip-ghost-segment + .dialkit-timeline-clip-ghost-segment {
1840
+ box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.5);
1841
+ }
1842
+
1843
+ .dialkit-timeline-loop-infinity {
1844
+ position: absolute;
1845
+ top: 50%;
1846
+ right: 7px;
1847
+ z-index: 2;
1848
+ color: var(--dial-text-tertiary);
1849
+ font-family: 'Geist Mono', ui-monospace, monospace;
1850
+ font-size: 13px;
1851
+ font-weight: 600;
1852
+ line-height: 1;
1853
+ transform: translateY(-50%);
1854
+ pointer-events: none;
1855
+ user-select: none;
1856
+ -webkit-user-select: none;
1857
+ }
1858
+
1859
+ .dialkit-timeline-clip[data-dragging] {
1860
+ cursor: grabbing;
1861
+ }
1862
+
1863
+ .dialkit-timeline-clip[data-selected] {
1864
+ box-shadow: 0 0 0 2px var(--dial-text-root);
1865
+ }
1866
+
1867
+ .dialkit-timeline-clip-duration {
1868
+ font-family: 'Geist Mono', ui-monospace, monospace;
1869
+ font-size: 9.5px;
1870
+ font-variant-numeric: tabular-nums;
1871
+ color: rgba(0, 0, 0, 0.55);
1872
+ white-space: nowrap;
1873
+ pointer-events: none;
1874
+ }
1875
+
1876
+ /* ── Sequence segments ──
1877
+ A steps clip is one bar sliced into legs; boundaries between legs are
1878
+ drag handles that retime the leg to their left. */
1879
+
1880
+ .dialkit-timeline-clip[data-steps] {
1881
+ padding: 0;
1882
+ justify-content: flex-start;
1883
+ }
1884
+
1885
+ .dialkit-timeline-clip-segment {
1886
+ position: relative;
1887
+ height: 100%;
1888
+ flex-shrink: 0;
1889
+ display: flex;
1890
+ align-items: center;
1891
+ justify-content: flex-end;
1892
+ padding: 0 8px;
1893
+ box-sizing: border-box;
1894
+ overflow: hidden;
1895
+ }
1896
+
1897
+ .dialkit-timeline-clip-segment + .dialkit-timeline-clip-segment {
1898
+ box-shadow: inset 1.5px 0 0 rgba(0, 0, 0, 0.25);
1899
+ }
1900
+
1901
+ .dialkit-timeline-clip-segment:hover {
1902
+ background: rgba(0, 0, 0, 0.06);
1903
+ }
1904
+
1905
+ .dialkit-timeline-clip-segment[data-selected] {
1906
+ background: rgba(0, 0, 0, 0.12);
1907
+ }
1908
+
1909
+ /* ── Property tracks ──
1910
+ A props clip's row is a read-only composite — click to expand. Each
1911
+ property expands into a full track row: a complete clip bar whose
1912
+ position is the track's delay. */
1913
+
1914
+ .dialkit-timeline-clip[data-composite] {
1915
+ cursor: pointer;
1916
+ }
1917
+
1918
+ .dialkit-timeline-track-row .dialkit-timeline-label {
1919
+ font-size: 13px;
1920
+ color: var(--dial-text-tertiary);
1921
+ padding-left: 26px;
1922
+ }
1923
+
1924
+ .dialkit-timeline-track-row[data-grouped] .dialkit-timeline-label {
1925
+ padding-left: 32px;
1926
+ }
1927
+
1928
+ .dialkit-timeline-clip-handle {
1929
+ position: absolute;
1930
+ top: 0;
1931
+ bottom: 0;
1932
+ width: 8px;
1933
+ cursor: ew-resize;
1934
+ }
1935
+
1936
+ .dialkit-timeline-clip-handle[data-edge="start"] {
1937
+ left: 0;
1938
+ }
1939
+
1940
+ .dialkit-timeline-clip-handle[data-edge="end"] {
1941
+ right: 0;
1942
+ }
1943
+
1944
+ .dialkit-timeline-playhead-control {
1945
+ position: absolute;
1946
+ top: 0;
1947
+ bottom: 0;
1948
+ width: 12px;
1949
+ margin-left: -6px;
1950
+ z-index: 5;
1951
+ cursor: ew-resize;
1952
+ touch-action: none;
1953
+ }
1954
+
1955
+ .dialkit-timeline-playhead-flag {
1956
+ position: absolute;
1957
+ top: 14px;
1958
+ left: 50%;
1959
+ width: 52px;
1960
+ height: 18px;
1961
+ padding: 0 7px;
1962
+ box-sizing: border-box;
1963
+ border: 1px solid rgba(255, 255, 255, 0.75);
1964
+ border-radius: 6px;
1965
+ background: #f3f3f3;
1966
+ color: #414141;
1967
+ font-family: 'Geist Mono', ui-monospace, monospace;
1968
+ font-size: 9.5px;
1969
+ font-weight: 600;
1970
+ font-variant-numeric: tabular-nums;
1971
+ font-feature-settings: 'tnum' 1;
1972
+ line-height: 16px;
1973
+ text-align: center;
1974
+ white-space: nowrap;
1975
+ transform: translate(-50%, -50%);
1976
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);
1977
+ transition: top 0.12s ease;
1978
+ }
1979
+
1980
+ .dialkit-timeline-playhead-control[data-placement="raised"] .dialkit-timeline-playhead-flag {
1981
+ top: -24px;
1982
+ }
1983
+
1984
+ .dialkit-timeline-playhead-stem {
1985
+ position: absolute;
1986
+ top: 23px;
1987
+ bottom: 0;
1988
+ left: 5.25px;
1989
+ width: 1.5px;
1990
+ border-radius: 1px;
1991
+ background: var(--dial-text-root);
1992
+ pointer-events: none;
1993
+ transition: top 0.12s ease;
1994
+ }
1995
+
1996
+ .dialkit-timeline-playhead-control[data-placement="raised"] .dialkit-timeline-playhead-stem {
1997
+ top: -15px;
1998
+ }
1999
+
2000
+ /* ── Timeline clip popover ── */
2001
+ .dialkit-timeline-popover {
2002
+ position: fixed;
2003
+ z-index: 10000;
2004
+ background: var(--dial-glass-bg);
2005
+ border: 1px solid var(--dial-border);
2006
+ border-radius: 14px;
2007
+ backdrop-filter: blur(var(--dial-backdrop-blur));
2008
+ -webkit-backdrop-filter: blur(var(--dial-backdrop-blur));
2009
+ box-shadow: var(--dial-shadow);
2010
+ padding: 10px 12px;
2011
+ box-sizing: border-box;
2012
+ max-height: 60vh;
2013
+ overflow-y: auto;
2014
+ scrollbar-width: none;
2015
+ -ms-overflow-style: none;
2016
+ }
2017
+
2018
+ .dialkit-timeline-popover::-webkit-scrollbar {
2019
+ display: none;
2020
+ }
2021
+
2022
+ .dialkit-timeline-popover-header {
2023
+ display: flex;
2024
+ align-items: center;
2025
+ gap: 8px;
2026
+ padding: 2px 2px 8px;
2027
+ margin-bottom: 6px;
2028
+ border-bottom: 1px solid var(--dial-border);
2029
+ }
2030
+
2031
+ .dialkit-timeline-popover-title {
2032
+ font-size: 15px;
2033
+ font-weight: 600;
2034
+ color: var(--dial-text-root);
2035
+ letter-spacing: -0.01em;
2036
+ }
2037
+
2038
+ .dialkit-timeline-popover-close {
2039
+ width: 24px;
2040
+ height: 24px;
2041
+ margin-left: auto;
2042
+ padding: 5px;
2043
+ display: flex;
2044
+ align-items: center;
2045
+ justify-content: center;
2046
+ border: none;
2047
+ border-radius: 6px;
2048
+ background: none;
2049
+ color: var(--dial-text-tertiary);
2050
+ cursor: pointer;
2051
+ }
2052
+
2053
+ .dialkit-timeline-popover-close:hover {
2054
+ color: var(--dial-text-root);
2055
+ background: var(--dial-surface-hover);
2056
+ }
2057
+
2058
+ .dialkit-timeline-popover-close svg {
2059
+ width: 14px;
2060
+ height: 14px;
2061
+ }
2062
+
2063
+ .dialkit-timeline-popover-body {
2064
+ display: flex;
2065
+ flex-direction: column;
2066
+ gap: 6px;
2067
+ }
2068
+
2069
+ .dialkit-timeline-popover-body > .dialkit-folder:first-child {
2070
+ margin-top: 0;
2071
+ border-top: none;
2072
+ }
2073
+
2074
+ @media (max-width: 720px) {
2075
+ .dialkit-timeline-dock {
2076
+ padding: 10px;
2077
+ }
2078
+
2079
+ .dialkit-timeline-header {
2080
+ grid-template-columns: auto minmax(40px, 1fr) auto;
2081
+ gap: 8px;
2082
+ top: -10px;
2083
+ }
2084
+
2085
+ .dialkit-timeline-section {
2086
+ --dial-timeline-label-w: 76px;
2087
+ --dial-timeline-actions-w: 270px;
2088
+ }
2089
+
2090
+ .dialkit-timeline-identity {
2091
+ overflow: hidden;
2092
+ gap: 7px;
2093
+ }
2094
+
2095
+ .dialkit-timeline-title {
2096
+ font-size: 13px;
2097
+ overflow: hidden;
2098
+ text-overflow: ellipsis;
2099
+ }
2100
+
2101
+ .dialkit-timeline-time {
2102
+ font-size: 11px;
2103
+ }
2104
+
2105
+ .dialkit-timeline-overview {
2106
+ height: 12px;
2107
+ }
2108
+
2109
+ .dialkit-timeline-actions {
2110
+ min-width: 0;
2111
+ }
2112
+
2113
+ .dialkit-timeline-actions .dialkit-preset-manager {
2114
+ flex-basis: 100px;
2115
+ width: 100px;
2116
+ }
2117
+
2118
+ .dialkit-timeline-chevron {
2119
+ width: 26px;
2120
+ height: 28px;
2121
+ justify-content: center;
2122
+ padding: 0;
2123
+ }
2124
+
2125
+ .dialkit-timeline-grid {
2126
+ min-width: 0;
2127
+ }
2128
+ }