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