@bendyline/squisq-editor-react 2.3.4 → 2.4.1

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.
@@ -8766,7 +8766,7 @@
8766
8766
  border-color: color-mix(in oklch, currentColor 42%, transparent);
8767
8767
  outline: none;
8768
8768
  }
8769
- :is(.squisq-block-props-popover, .squisq-transition-picker, .squisq-transition-flyout) {
8769
+ :is(.squisq-block-props-popover, .squisq-transition-picker, .squisq-transition-flyout, .squisq-timeline-item-menu) {
8770
8770
  --squisq-block-props-surface: #ffffff;
8771
8771
  --squisq-block-props-surface-hover: #f3f4f6;
8772
8772
  --squisq-block-props-input: #ffffff;
@@ -8776,7 +8776,7 @@
8776
8776
  --squisq-block-props-border: #d1d5db;
8777
8777
  --squisq-block-props-divider: #e5e7eb;
8778
8778
  }
8779
- :is(.squisq-block-props-popover, .squisq-transition-picker, .squisq-transition-flyout)[data-theme=dark] {
8779
+ :is(.squisq-block-props-popover, .squisq-transition-picker, .squisq-transition-flyout, .squisq-timeline-item-menu)[data-theme=dark] {
8780
8780
  --squisq-block-props-surface: #1f2937;
8781
8781
  --squisq-block-props-surface-hover: #374151;
8782
8782
  --squisq-block-props-input: #111827;
@@ -8886,11 +8886,93 @@
8886
8886
  color: var(--squisq-theme-text, #1f2937);
8887
8887
  background: var(--squisq-theme-bg, #fff);
8888
8888
  box-shadow: 0 2px 14px rgba(0, 0, 0, 0.12);
8889
- font-family: var(--squisq-theme-body-font, inherit);
8889
+ font-family: var(--squisq-theme-body-font, var(--squisq-write-body-font, inherit));
8890
8890
  font-size: var(--squisq-write-text-size, inherit);
8891
8891
  caret-color: var(--squisq-theme-text, #1f2937);
8892
8892
  cursor: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='22' viewBox='0 0 16 22'><g fill='none' stroke-linecap='round'><path d='M5 3 L11 3 M5 19 L11 19 M8 3 L8 19' stroke='white' stroke-width='3.2'/><path d='M5 3 L11 3 M5 19 L11 19 M8 3 L8 19' stroke='%231f2937' stroke-width='1.4'/></g></svg>") 8 11, text;
8893
8893
  }
8894
+ .squisq-wysiwyg-editor .squisq-video-node {
8895
+ display: block;
8896
+ width: min(100%, 640px);
8897
+ max-width: 640px;
8898
+ margin: 0.75em auto;
8899
+ overflow: hidden;
8900
+ border: 1px solid #d1d5db;
8901
+ border-radius: 8px;
8902
+ background: #111827;
8903
+ box-shadow: 0 2px 8px rgba(15, 23, 42, 0.12);
8904
+ }
8905
+ .squisq-wysiwyg-editor .squisq-video-node--selected {
8906
+ border-color: #3b82f6;
8907
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.24);
8908
+ }
8909
+ .squisq-video-placement-toolbar {
8910
+ display: flex;
8911
+ align-items: center;
8912
+ gap: 4px;
8913
+ min-height: 34px;
8914
+ padding: 4px 6px;
8915
+ border-bottom: 1px solid #d1d5db;
8916
+ background: #f9fafb;
8917
+ color: #374151;
8918
+ font-family: var(--squisq-ux-font, system-ui, sans-serif);
8919
+ user-select: none;
8920
+ }
8921
+ .squisq-video-placement-label {
8922
+ margin: 0 4px 0 2px;
8923
+ color: #6b7280;
8924
+ font-size: 11px;
8925
+ font-weight: 600;
8926
+ letter-spacing: 0.03em;
8927
+ text-transform: uppercase;
8928
+ }
8929
+ .squisq-video-placement-button {
8930
+ min-height: 24px;
8931
+ padding: 2px 8px;
8932
+ border: 1px solid transparent;
8933
+ border-radius: 5px;
8934
+ background: transparent;
8935
+ color: #4b5563;
8936
+ font: 500 11px/1 var(--squisq-ux-font, system-ui, sans-serif);
8937
+ cursor: pointer;
8938
+ }
8939
+ .squisq-video-placement-button:hover {
8940
+ background: #e5e7eb;
8941
+ color: #111827;
8942
+ }
8943
+ .squisq-video-placement-button[aria-pressed=true] {
8944
+ border-color: #60a5fa;
8945
+ background: #dbeafe;
8946
+ color: #1d4ed8;
8947
+ }
8948
+ .squisq-video-placement-button--lock {
8949
+ margin-left: auto;
8950
+ border-color: #d1d5db;
8951
+ }
8952
+ .squisq-wysiwyg-editor .squisq-video-node video {
8953
+ margin: 0;
8954
+ border-radius: 0;
8955
+ }
8956
+ .squisq-editor-shell[data-theme=dark] .squisq-video-placement-toolbar {
8957
+ border-bottom-color: #374151;
8958
+ background: #111827;
8959
+ color: #d1d5db;
8960
+ }
8961
+ .squisq-editor-shell[data-theme=dark] .squisq-video-placement-label {
8962
+ color: #9ca3af;
8963
+ }
8964
+ .squisq-editor-shell[data-theme=dark] .squisq-video-placement-button {
8965
+ color: #d1d5db;
8966
+ }
8967
+ .squisq-editor-shell[data-theme=dark] .squisq-video-placement-button:hover {
8968
+ background: #1f2937;
8969
+ color: #f9fafb;
8970
+ }
8971
+ .squisq-editor-shell[data-theme=dark] .squisq-video-placement-button[aria-pressed=true] {
8972
+ border-color: #60a5fa;
8973
+ background: #172554;
8974
+ color: #93c5fd;
8975
+ }
8894
8976
  .squisq-wysiwyg-editor .prosemirror-dropcursor-block,
8895
8977
  .squisq-wysiwyg-editor .prosemirror-dropcursor-inline {
8896
8978
  background: var(--squisq-editor-accent, #4a9eff) !important;
@@ -8908,7 +8990,7 @@
8908
8990
  .squisq-wysiwyg-editor h4,
8909
8991
  .squisq-wysiwyg-editor h5,
8910
8992
  .squisq-wysiwyg-editor h6 {
8911
- font-family: var(--squisq-theme-title-font, var(--squisq-theme-body-font, inherit));
8993
+ font-family: var( --squisq-theme-title-font, var( --squisq-write-header-font, var(--squisq-theme-body-font, var(--squisq-write-body-font, inherit)) ) );
8912
8994
  }
8913
8995
  .squisq-wysiwyg-editor h1 {
8914
8996
  font-size: 2em;
@@ -9539,7 +9621,19 @@
9539
9621
  .squisq-editor-shell[data-presentation-mode=control],
9540
9622
  .squisq-editor-shell[data-presentation-mode=fullscreen] {
9541
9623
  position: relative;
9542
- background: #000;
9624
+ background: var(--squisq-bg, #f5f5f5);
9625
+ }
9626
+ .squisq-editor-shell[data-presentation-mode=control] {
9627
+ position: fixed !important;
9628
+ z-index: 2147483000 !important;
9629
+ inset: 0 !important;
9630
+ width: 100vw !important;
9631
+ height: 100vh !important;
9632
+ height: 100dvh !important;
9633
+ min-width: 0 !important;
9634
+ min-height: 0 !important;
9635
+ max-width: none !important;
9636
+ max-height: none !important;
9543
9637
  }
9544
9638
  .squisq-editor-shell[data-presentation-mode=control] > .squisq-editor-header,
9545
9639
  .squisq-editor-shell[data-presentation-mode=fullscreen] > .squisq-editor-header,
@@ -9558,7 +9652,7 @@
9558
9652
  .squisq-editor-shell[data-presentation-mode=control] .squisq-preview-player,
9559
9653
  .squisq-editor-shell[data-presentation-mode=fullscreen] .squisq-preview-player {
9560
9654
  padding: 0;
9561
- background: #000;
9655
+ background: var(--squisq-bg, #f5f5f5);
9562
9656
  }
9563
9657
  .squisq-editor-shell[data-presentation-mode=fullscreen]:fullscreen {
9564
9658
  width: 100vw !important;
@@ -9571,27 +9665,33 @@
9571
9665
  .squisq-presentation-exit {
9572
9666
  position: absolute;
9573
9667
  z-index: 1001;
9574
- top: 12px;
9575
- right: 12px;
9668
+ bottom: max(16px, env(safe-area-inset-bottom));
9669
+ left: 50%;
9576
9670
  display: inline-flex;
9577
9671
  align-items: center;
9578
9672
  gap: 7px;
9579
9673
  min-height: 34px;
9580
9674
  padding: 7px 11px;
9581
- border: 1px solid rgba(255, 255, 255, 0.35);
9675
+ border: 1px solid var(--squisq-presentation-control-border, var(--squisq-border, #d1d5db));
9582
9676
  border-radius: 7px;
9583
- background: rgba(15, 23, 42, 0.78);
9584
- color: #fff;
9677
+ background: color-mix(in srgb, var(--squisq-presentation-control-bg, var(--squisq-input-bg, #fff)) 88%, transparent);
9678
+ color: var(--squisq-presentation-control-text, var(--squisq-text, #1f2937));
9679
+ box-shadow: 0 8px 24px rgba(15, 23, 42, 0.2);
9585
9680
  font: 600 12px/1 var(--squisq-ux-font, sans-serif);
9586
9681
  cursor: pointer;
9587
9682
  opacity: 0.72;
9588
9683
  backdrop-filter: blur(8px);
9589
- transition: opacity 0.12s ease, background 0.12s ease;
9684
+ transform: translateX(-50%);
9685
+ transition:
9686
+ opacity 0.12s ease,
9687
+ background 0.12s ease,
9688
+ border-color 0.12s ease;
9590
9689
  }
9591
9690
  .squisq-presentation-exit:hover,
9592
9691
  .squisq-presentation-exit:focus-visible {
9593
9692
  outline: none;
9594
- background: rgba(15, 23, 42, 0.94);
9693
+ border-color: var( --squisq-presentation-control-border, var(--squisq-accent, var(--squisq-text, #1f2937)) );
9694
+ background: var(--squisq-presentation-control-bg, var(--squisq-input-bg, #fff));
9595
9695
  opacity: 1;
9596
9696
  }
9597
9697
  .squisq-presentation-window {
@@ -9599,7 +9699,7 @@
9599
9699
  height: 100%;
9600
9700
  display: flex;
9601
9701
  overflow: hidden;
9602
- background: #000;
9702
+ background: inherit;
9603
9703
  }
9604
9704
  .squisq-presentation-window-preview,
9605
9705
  .squisq-presentation-window-surface,
@@ -9614,7 +9714,7 @@
9614
9714
  }
9615
9715
  .squisq-presentation-window-surface {
9616
9716
  padding: 0;
9617
- background: #000;
9717
+ background: inherit;
9618
9718
  pointer-events: none;
9619
9719
  }
9620
9720
  .squisq-presentation-teleprompter {
@@ -9623,7 +9723,7 @@
9623
9723
  pointer-events: none;
9624
9724
  }
9625
9725
  .squisq-presentation-connecting {
9626
- color: rgba(255, 255, 255, 0.72);
9726
+ color: var(--squisq-text-muted, #6b7280);
9627
9727
  font: 500 14px/1.4 var(--squisq-ux-font, sans-serif);
9628
9728
  }
9629
9729
  .squisq-presentation-error {
@@ -10181,7 +10281,17 @@
10181
10281
  text-transform: uppercase;
10182
10282
  letter-spacing: 0.05em;
10183
10283
  }
10284
+ .squisq-media-bin-actions {
10285
+ display: flex;
10286
+ align-items: center;
10287
+ gap: 5px;
10288
+ }
10289
+ .squisq-media-bin-record,
10184
10290
  .squisq-media-bin-upload {
10291
+ display: inline-flex;
10292
+ align-items: center;
10293
+ justify-content: center;
10294
+ gap: 4px;
10185
10295
  font-size: 11px;
10186
10296
  padding: 2px 8px;
10187
10297
  cursor: pointer;
@@ -10190,9 +10300,24 @@
10190
10300
  border: 1px solid #d1d5db;
10191
10301
  border-radius: 4px;
10192
10302
  }
10303
+ .squisq-media-bin-record-dot {
10304
+ width: 7px;
10305
+ height: 7px;
10306
+ flex: 0 0 auto;
10307
+ border-radius: 50%;
10308
+ background: #dc2626;
10309
+ box-shadow: 0 0 0 1px rgba(127, 29, 29, 0.24);
10310
+ }
10311
+ .squisq-media-bin-record:hover,
10193
10312
  .squisq-media-bin-upload:hover {
10194
10313
  background: #d1d5db;
10195
10314
  }
10315
+ .squisq-media-bin-record:focus-visible,
10316
+ .squisq-media-bin-upload:focus-visible {
10317
+ outline: 2px solid #93c5fd;
10318
+ outline-offset: 1px;
10319
+ }
10320
+ .squisq-media-bin-record:disabled,
10196
10321
  .squisq-media-bin-upload:disabled {
10197
10322
  cursor: default;
10198
10323
  opacity: 0.5;
@@ -10250,6 +10375,36 @@
10250
10375
  min-width: 0;
10251
10376
  flex: 1;
10252
10377
  }
10378
+ .squisq-media-bin-download {
10379
+ width: 24px;
10380
+ height: 24px;
10381
+ display: inline-flex;
10382
+ align-items: center;
10383
+ justify-content: center;
10384
+ flex: 0 0 auto;
10385
+ padding: 0;
10386
+ border: 1px solid transparent;
10387
+ border-radius: 4px;
10388
+ background: transparent;
10389
+ color: #4b5563;
10390
+ cursor: pointer;
10391
+ font: inherit;
10392
+ font-size: 16px;
10393
+ line-height: 1;
10394
+ }
10395
+ .squisq-media-bin-download:hover {
10396
+ border-color: #d1d5db;
10397
+ background: #e5e7eb;
10398
+ }
10399
+ .squisq-media-bin-download:focus-visible {
10400
+ border-color: #93c5fd;
10401
+ outline: 2px solid #93c5fd;
10402
+ outline-offset: 1px;
10403
+ }
10404
+ .squisq-media-bin-download:disabled {
10405
+ cursor: default;
10406
+ opacity: 0.5;
10407
+ }
10253
10408
  .squisq-media-bin-name {
10254
10409
  overflow: hidden;
10255
10410
  text-overflow: ellipsis;
@@ -10343,14 +10498,14 @@
10343
10498
  .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-title {
10344
10499
  color: #d1d5db;
10345
10500
  }
10346
- .squisq-media-bin--dark .squisq-media-bin-upload,
10347
- .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-upload {
10501
+ .squisq-media-bin--dark :is(.squisq-media-bin-record, .squisq-media-bin-upload),
10502
+ .squisq-editor-shell[data-theme=dark] .squisq-media-bin :is(.squisq-media-bin-record, .squisq-media-bin-upload) {
10348
10503
  background: #374151;
10349
10504
  color: #d1d5db;
10350
10505
  border-color: #4b5563;
10351
10506
  }
10352
- .squisq-media-bin--dark .squisq-media-bin-upload:hover,
10353
- .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-upload:hover {
10507
+ .squisq-media-bin--dark :is(.squisq-media-bin-record, .squisq-media-bin-upload):hover,
10508
+ .squisq-editor-shell[data-theme=dark] .squisq-media-bin :is(.squisq-media-bin-record, .squisq-media-bin-upload):hover {
10354
10509
  background: #4b5563;
10355
10510
  }
10356
10511
  .squisq-media-bin--dark .squisq-media-bin-item,
@@ -10376,6 +10531,15 @@
10376
10531
  .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-size {
10377
10532
  color: #6b7280;
10378
10533
  }
10534
+ .squisq-media-bin--dark .squisq-media-bin-download,
10535
+ .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-download {
10536
+ color: #d1d5db;
10537
+ }
10538
+ .squisq-media-bin--dark .squisq-media-bin-download:hover,
10539
+ .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-download:hover {
10540
+ border-color: #4b5563;
10541
+ background: #374151;
10542
+ }
10379
10543
  .squisq-media-bin--dark .squisq-media-bin-unused-badge,
10380
10544
  .squisq-editor-shell[data-theme=dark] .squisq-media-bin .squisq-media-bin-unused-badge {
10381
10545
  background: #78350f;
@@ -11422,7 +11586,26 @@
11422
11586
  flex: 0 0 auto;
11423
11587
  min-height: 0;
11424
11588
  }
11425
- .squisq-editor-with-gutter > .squisq-block-card {
11589
+ .squisq-editor-with-gutter > .squisq-block-card-frame {
11590
+ flex: 1 1 auto;
11591
+ min-width: 0;
11592
+ min-height: 0;
11593
+ }
11594
+ .squisq-block-card-frame {
11595
+ display: flex;
11596
+ flex-direction: column;
11597
+ height: 100%;
11598
+ min-height: 0;
11599
+ }
11600
+ .squisq-block-card-frame-body {
11601
+ flex: 1 1 auto;
11602
+ min-width: 0;
11603
+ min-height: 0;
11604
+ position: relative;
11605
+ display: flex;
11606
+ }
11607
+ .squisq-block-card-frame-body > .squisq-raw-editor-container,
11608
+ .squisq-block-card-frame-body > .squisq-wysiwyg-container {
11426
11609
  flex: 1 1 auto;
11427
11610
  min-width: 0;
11428
11611
  min-height: 0;
@@ -11606,10 +11789,216 @@
11606
11789
  height: 0;
11607
11790
  overflow: hidden;
11608
11791
  }
11792
+ .squisq-timeline-toolbar {
11793
+ flex: 0 0 auto;
11794
+ display: flex;
11795
+ align-items: center;
11796
+ gap: 6px;
11797
+ min-height: 36px;
11798
+ padding: 4px 10px;
11799
+ border-bottom: 1px solid #b0a99a;
11800
+ background: #efece6;
11801
+ color: #374151;
11802
+ font-family: var(--squisq-ux-font, system-ui, sans-serif);
11803
+ }
11804
+ .squisq-timeline-toolbar-title {
11805
+ margin-right: 3px;
11806
+ color: #6b7280;
11807
+ font-size: 11px;
11808
+ font-weight: 600;
11809
+ letter-spacing: 0.02em;
11810
+ text-transform: uppercase;
11811
+ }
11812
+ .squisq-timeline-pane-toggle {
11813
+ display: inline-flex;
11814
+ align-items: center;
11815
+ gap: 6px;
11816
+ min-height: 27px;
11817
+ padding: 3px 9px;
11818
+ border: 1px solid #c8c2b7;
11819
+ border-radius: 6px;
11820
+ background: #ffffff;
11821
+ color: #374151;
11822
+ font: inherit;
11823
+ font-size: 12px;
11824
+ cursor: pointer;
11825
+ }
11826
+ .squisq-timeline-pane-toggle:hover:not(:disabled) {
11827
+ border-color: #9ca3af;
11828
+ background: #f9fafb;
11829
+ }
11830
+ .squisq-timeline-pane-toggle[aria-pressed=true] {
11831
+ border-color: #2563eb;
11832
+ background: #dbeafe;
11833
+ color: #1d4ed8;
11834
+ }
11835
+ .squisq-timeline-pane-toggle:disabled {
11836
+ opacity: 0.45;
11837
+ cursor: default;
11838
+ }
11839
+ .squisq-editor-primary {
11840
+ min-width: 0;
11841
+ }
11842
+ .squisq-timeline-preview-panel {
11843
+ flex: 1 1 0;
11844
+ min-width: 220px;
11845
+ min-height: 0;
11846
+ display: flex;
11847
+ flex-direction: column;
11848
+ background: #171717;
11849
+ border-left: 1px solid #b0a99a;
11850
+ }
11851
+ .squisq-timeline-video-header {
11852
+ display: flex;
11853
+ align-items: center;
11854
+ gap: 8px;
11855
+ min-height: 34px;
11856
+ padding: 0 8px 0 12px;
11857
+ background: #f9fafb;
11858
+ border-bottom: 1px solid #d1d5db;
11859
+ color: #374151;
11860
+ font-size: 12px;
11861
+ }
11862
+ .squisq-timeline-video-title {
11863
+ font-weight: 600;
11864
+ }
11865
+ .squisq-timeline-composition-panel .squisq-preview-controls {
11866
+ padding-left: 0;
11867
+ }
11868
+ .squisq-timeline-video-label {
11869
+ min-width: 0;
11870
+ overflow: hidden;
11871
+ text-overflow: ellipsis;
11872
+ white-space: nowrap;
11873
+ color: #6b7280;
11874
+ }
11875
+ .squisq-timeline-video-time {
11876
+ margin-left: auto;
11877
+ color: #6b7280;
11878
+ font-variant-numeric: tabular-nums;
11879
+ }
11880
+ .squisq-timeline-video-close {
11881
+ display: inline-flex;
11882
+ align-items: center;
11883
+ justify-content: center;
11884
+ width: 24px;
11885
+ height: 24px;
11886
+ padding: 0;
11887
+ border: 0;
11888
+ border-radius: 4px;
11889
+ background: transparent;
11890
+ color: #6b7280;
11891
+ font-size: 18px;
11892
+ cursor: pointer;
11893
+ }
11894
+ .squisq-timeline-video-close:hover {
11895
+ background: #e5e7eb;
11896
+ color: #111827;
11897
+ }
11898
+ .squisq-timeline-video-body {
11899
+ flex: 1 1 auto;
11900
+ min-height: 0;
11901
+ display: flex;
11902
+ align-items: center;
11903
+ justify-content: center;
11904
+ padding: 16px;
11905
+ overflow: auto;
11906
+ }
11907
+ .squisq-timeline-video-stage {
11908
+ position: relative;
11909
+ width: 100%;
11910
+ max-width: 900px;
11911
+ aspect-ratio: 16 / 9;
11912
+ overflow: hidden;
11913
+ background: #000000;
11914
+ border: 1px solid #374151;
11915
+ border-radius: 6px;
11916
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.32);
11917
+ }
11918
+ .squisq-timeline-composition-stage {
11919
+ position: relative;
11920
+ display: flex;
11921
+ align-items: center;
11922
+ justify-content: center;
11923
+ width: 100%;
11924
+ max-width: 900px;
11925
+ aspect-ratio: 16 / 9;
11926
+ overflow: hidden;
11927
+ background: #000000;
11928
+ border: 1px solid #374151;
11929
+ border-radius: 6px;
11930
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.32);
11931
+ }
11932
+ .squisq-timeline-composition-stage > .doc-player {
11933
+ width: 100%;
11934
+ height: 100%;
11935
+ }
11936
+ .squisq-timeline-video-stage .doc-player__media-clips {
11937
+ position: absolute;
11938
+ inset: 0;
11939
+ }
11940
+ .squisq-timeline-video-stage .doc-player__media-video {
11941
+ opacity: 0;
11942
+ visibility: hidden;
11943
+ }
11944
+ .squisq-timeline-video-stage .doc-player__media-video--active {
11945
+ opacity: 1;
11946
+ visibility: visible;
11947
+ }
11948
+ .squisq-timeline-video-empty {
11949
+ position: absolute;
11950
+ inset: 0;
11951
+ display: flex;
11952
+ align-items: center;
11953
+ justify-content: center;
11954
+ padding: 20px;
11955
+ color: #9ca3af;
11956
+ font-size: 12px;
11957
+ text-align: center;
11958
+ }
11959
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-video-header {
11960
+ background: #111827;
11961
+ border-bottom-color: #2a3144;
11962
+ color: #e5e7eb;
11963
+ }
11964
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-preview-panel {
11965
+ border-left-color: #2a3144;
11966
+ }
11967
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-video-label,
11968
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-video-time,
11969
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-video-close {
11970
+ color: #9ca3af;
11971
+ }
11972
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-video-close:hover {
11973
+ background: #1f2937;
11974
+ color: #f9fafb;
11975
+ }
11976
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-toolbar {
11977
+ border-bottom-color: #2a3144;
11978
+ background: #151923;
11979
+ color: #d1d5db;
11980
+ }
11981
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-toolbar-title {
11982
+ color: #9ca3af;
11983
+ }
11984
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-pane-toggle {
11985
+ border-color: #374151;
11986
+ background: #111827;
11987
+ color: #d1d5db;
11988
+ }
11989
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-pane-toggle:hover:not(:disabled) {
11990
+ background: #1f2937;
11991
+ }
11992
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-pane-toggle[aria-pressed=true] {
11993
+ border-color: #60a5fa;
11994
+ background: #172554;
11995
+ color: #93c5fd;
11996
+ }
11609
11997
  .squisq-timeline-scroll {
11610
11998
  flex: 1;
11611
- overflow-x: auto;
11612
- overflow-y: hidden;
11999
+ overflow: auto;
12000
+ scrollbar-gutter: stable;
12001
+ overscroll-behavior: contain;
11613
12002
  padding: 8px 0 0;
11614
12003
  min-width: 0;
11615
12004
  min-height: 0;
@@ -11663,7 +12052,14 @@
11663
12052
  }
11664
12053
  .squisq-timeline-row--media {
11665
12054
  height: 26px;
11666
- margin-bottom: 0;
12055
+ margin: 0;
12056
+ flex: 0 0 26px;
12057
+ }
12058
+ .squisq-timeline-media-tracks {
12059
+ display: flex;
12060
+ flex: 0 0 auto;
12061
+ flex-direction: column;
12062
+ gap: 4px;
11667
12063
  }
11668
12064
  .squisq-timeline-block {
11669
12065
  position: absolute;
@@ -11713,6 +12109,55 @@
11713
12109
  border-radius: 3px;
11714
12110
  padding: 0 4px;
11715
12111
  }
12112
+ .squisq-timeline-item-menu-trigger {
12113
+ position: absolute;
12114
+ top: 50%;
12115
+ right: 8px;
12116
+ z-index: 4;
12117
+ display: inline-flex;
12118
+ align-items: center;
12119
+ justify-content: center;
12120
+ width: 22px;
12121
+ height: 22px;
12122
+ padding: 0;
12123
+ translate: 0 -50%;
12124
+ border: 1px solid rgba(107, 114, 128, 0.45);
12125
+ border-radius: 5px;
12126
+ background: rgba(255, 255, 255, 0.92);
12127
+ color: #374151;
12128
+ font: 700 15px/1 var(--squisq-ux-font, system-ui, sans-serif);
12129
+ cursor: pointer;
12130
+ opacity: 0;
12131
+ pointer-events: none;
12132
+ }
12133
+ .squisq-timeline-block:hover .squisq-timeline-item-menu-trigger,
12134
+ .squisq-timeline-block--active .squisq-timeline-item-menu-trigger,
12135
+ .squisq-timeline-clip:hover .squisq-timeline-item-menu-trigger,
12136
+ .squisq-timeline-item-menu-trigger:focus-visible,
12137
+ .squisq-timeline-item-menu-trigger[aria-expanded=true] {
12138
+ opacity: 1;
12139
+ pointer-events: auto;
12140
+ }
12141
+ .squisq-timeline-item-menu-trigger:hover,
12142
+ .squisq-timeline-item-menu-trigger:focus-visible {
12143
+ border-color: var(--squisq-outline-accent, #6c5ce7);
12144
+ outline: none;
12145
+ }
12146
+ .squisq-timeline-item-menu-trigger--clip {
12147
+ right: 6px;
12148
+ width: 18px;
12149
+ height: 18px;
12150
+ border-color: rgba(255, 255, 255, 0.55);
12151
+ background: rgba(15, 23, 42, 0.62);
12152
+ color: #ffffff;
12153
+ font-size: 13px;
12154
+ }
12155
+ @media (hover: none) {
12156
+ .squisq-timeline-item-menu-trigger {
12157
+ opacity: 1;
12158
+ pointer-events: auto;
12159
+ }
12160
+ }
11716
12161
  .squisq-timeline-clip {
11717
12162
  position: absolute;
11718
12163
  top: 0;
@@ -11733,6 +12178,35 @@
11733
12178
  .squisq-timeline-clip--video {
11734
12179
  background: #2b6cb0;
11735
12180
  }
12181
+ .squisq-timeline-video-filmstrip {
12182
+ position: absolute;
12183
+ inset: 0;
12184
+ z-index: 0;
12185
+ display: flex;
12186
+ pointer-events: none;
12187
+ background: #1e3a5f;
12188
+ }
12189
+ .squisq-timeline-video-filmstrip video {
12190
+ display: block;
12191
+ min-width: 0;
12192
+ flex: 1 1 0;
12193
+ height: 100%;
12194
+ border-right: 1px solid rgba(255, 255, 255, 0.18);
12195
+ object-fit: cover;
12196
+ opacity: 0.78;
12197
+ }
12198
+ .squisq-timeline-video-filmstrip video:last-child {
12199
+ border-right: 0;
12200
+ }
12201
+ .squisq-timeline-clip--video .squisq-timeline-clip-label {
12202
+ position: relative;
12203
+ z-index: 2;
12204
+ max-width: calc(100% - 4px);
12205
+ padding: 1px 4px;
12206
+ border-radius: 3px;
12207
+ background: rgba(15, 23, 42, 0.72);
12208
+ text-shadow: 0 1px 1px rgba(0, 0, 0, 0.7);
12209
+ }
11736
12210
  .squisq-timeline-clip--embedded {
11737
12211
  opacity: 0.8;
11738
12212
  border: 1px dashed rgba(255, 255, 255, 0.7);
@@ -11747,6 +12221,10 @@
11747
12221
  transparent 6px,
11748
12222
  transparent 12px);
11749
12223
  }
12224
+ .squisq-timeline-clip--locked {
12225
+ cursor: default;
12226
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.5);
12227
+ }
11750
12228
  .squisq-timeline-clip-label {
11751
12229
  white-space: nowrap;
11752
12230
  overflow: hidden;
@@ -11756,6 +12234,7 @@
11756
12234
  .squisq-timeline-edge {
11757
12235
  position: absolute;
11758
12236
  top: 0;
12237
+ z-index: 3;
11759
12238
  width: 7px;
11760
12239
  height: 100%;
11761
12240
  cursor: ew-resize;
@@ -11798,6 +12277,11 @@
11798
12277
  .squisq-editor-shell[data-theme=dark] .squisq-timeline-block-label {
11799
12278
  background: rgba(17, 24, 39, 0.82);
11800
12279
  }
12280
+ .squisq-editor-shell[data-theme=dark] .squisq-timeline-block .squisq-timeline-item-menu-trigger {
12281
+ border-color: #4b5563;
12282
+ background: rgba(17, 24, 39, 0.92);
12283
+ color: #e5e7eb;
12284
+ }
11801
12285
  .squisq-editor-shell[data-theme=dark] .squisq-timeline-zoom-button {
11802
12286
  border-color: #374151;
11803
12287
  background: #111827;
@@ -11819,6 +12303,145 @@
11819
12303
  .squisq-editor-shell[data-theme=dark] .squisq-timeline-tick-label {
11820
12304
  color: #9ca3af;
11821
12305
  }
12306
+ .squisq-timeline-item-menu {
12307
+ box-sizing: border-box;
12308
+ width: 320px;
12309
+ max-width: calc(100vw - 16px);
12310
+ overflow: auto;
12311
+ color: var(--squisq-block-props-text);
12312
+ background: var(--squisq-block-props-surface);
12313
+ border: 1px solid var(--squisq-block-props-divider);
12314
+ border-radius: 10px;
12315
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18), 0 3px 8px rgba(0, 0, 0, 0.1);
12316
+ font-family: var(--squisq-ux-font, system-ui, sans-serif);
12317
+ user-select: none;
12318
+ }
12319
+ .squisq-timeline-item-menu-header {
12320
+ display: flex;
12321
+ align-items: center;
12322
+ gap: 7px;
12323
+ min-width: 0;
12324
+ padding: 9px 12px;
12325
+ border-bottom: 1px solid var(--squisq-block-props-divider);
12326
+ }
12327
+ .squisq-timeline-item-menu-kind {
12328
+ flex: 0 0 auto;
12329
+ color: var(--squisq-block-props-muted);
12330
+ font-size: 10px;
12331
+ font-weight: 700;
12332
+ letter-spacing: 0.04em;
12333
+ text-transform: uppercase;
12334
+ }
12335
+ .squisq-timeline-item-menu-title {
12336
+ min-width: 0;
12337
+ overflow: hidden;
12338
+ color: var(--squisq-block-props-text);
12339
+ font-size: 12px;
12340
+ font-weight: 600;
12341
+ text-overflow: ellipsis;
12342
+ white-space: nowrap;
12343
+ }
12344
+ .squisq-timeline-item-menu-body {
12345
+ display: flex;
12346
+ flex-direction: column;
12347
+ gap: 10px;
12348
+ padding: 11px 12px 12px;
12349
+ }
12350
+ .squisq-timeline-item-menu-row,
12351
+ .squisq-timeline-item-menu-field,
12352
+ .squisq-timeline-item-menu-check {
12353
+ display: flex;
12354
+ align-items: center;
12355
+ justify-content: space-between;
12356
+ gap: 10px;
12357
+ margin: 0;
12358
+ }
12359
+ .squisq-timeline-item-menu-check {
12360
+ justify-content: flex-start;
12361
+ color: var(--squisq-block-props-text);
12362
+ font-size: 12px;
12363
+ cursor: pointer;
12364
+ }
12365
+ .squisq-timeline-item-menu-check input {
12366
+ accent-color: var(--squisq-block-props-accent, #6366f1);
12367
+ }
12368
+ .squisq-timeline-item-menu-hint {
12369
+ margin: -5px 0 0 24px;
12370
+ color: var(--squisq-block-props-quiet);
12371
+ font-size: 10px;
12372
+ line-height: 1.35;
12373
+ }
12374
+ .squisq-timeline-item-menu-label {
12375
+ flex: 0 0 auto;
12376
+ color: var(--squisq-block-props-muted);
12377
+ font-size: 11px;
12378
+ font-weight: 600;
12379
+ }
12380
+ .squisq-timeline-item-menu-number {
12381
+ display: inline-flex;
12382
+ align-items: center;
12383
+ gap: 6px;
12384
+ }
12385
+ .squisq-timeline-item-menu-number input,
12386
+ .squisq-timeline-item-menu-field select {
12387
+ box-sizing: border-box;
12388
+ min-width: 0;
12389
+ padding: 5px 7px;
12390
+ color: var(--squisq-block-props-text);
12391
+ background: var(--squisq-block-props-input);
12392
+ border: 1px solid var(--squisq-block-props-border);
12393
+ border-radius: 5px;
12394
+ font: inherit;
12395
+ font-size: 12px;
12396
+ outline: none;
12397
+ }
12398
+ .squisq-timeline-item-menu-number input {
12399
+ width: 78px;
12400
+ }
12401
+ .squisq-timeline-item-menu-field select {
12402
+ max-width: 205px;
12403
+ }
12404
+ .squisq-timeline-item-menu-number input:focus,
12405
+ .squisq-timeline-item-menu-field select:focus {
12406
+ border-color: var(--squisq-block-props-accent, #6366f1);
12407
+ }
12408
+ .squisq-timeline-item-menu-number input:disabled {
12409
+ opacity: 0.55;
12410
+ }
12411
+ .squisq-timeline-item-menu-number > span {
12412
+ color: var(--squisq-block-props-quiet);
12413
+ font-size: 11px;
12414
+ }
12415
+ .squisq-timeline-item-menu-row .squisq-transition-picker-trigger-label {
12416
+ display: none;
12417
+ }
12418
+ .squisq-timeline-item-menu-segments {
12419
+ display: inline-flex;
12420
+ overflow: hidden;
12421
+ border: 1px solid var(--squisq-block-props-border);
12422
+ border-radius: 6px;
12423
+ }
12424
+ .squisq-timeline-item-menu-segments button {
12425
+ padding: 5px 8px;
12426
+ color: var(--squisq-block-props-muted);
12427
+ background: var(--squisq-block-props-surface);
12428
+ border: 0;
12429
+ border-right: 1px solid var(--squisq-block-props-border);
12430
+ font: inherit;
12431
+ font-size: 11px;
12432
+ cursor: pointer;
12433
+ }
12434
+ .squisq-timeline-item-menu-segments button:last-child {
12435
+ border-right: 0;
12436
+ }
12437
+ .squisq-timeline-item-menu-segments button:hover {
12438
+ background: var(--squisq-block-props-surface-hover);
12439
+ }
12440
+ .squisq-timeline-item-menu-segments button[aria-pressed=true] {
12441
+ color: var(--squisq-block-props-accent, #4338ca);
12442
+ background: color-mix(in oklch, var(--squisq-block-props-accent, #6366f1) 14%, transparent);
12443
+ font-weight: 600;
12444
+ }
11822
12445
  .squisq-editor-shell {
11823
12446
  --squisq-preview-accent: #6366f1;
11824
12447
  --squisq-preview-accent-muted: #94a3b8;
@@ -13104,6 +13727,202 @@
13104
13727
  .squisq-transition-flyout[data-theme=dark] {
13105
13728
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4), 0 2px 6px rgba(0, 0, 0, 0.2);
13106
13729
  }
13730
+ .squisq-transform-menu {
13731
+ position: relative;
13732
+ flex-shrink: 0;
13733
+ margin-left: 2px;
13734
+ }
13735
+ .squisq-transform-menu-popover {
13736
+ position: absolute;
13737
+ top: 100%;
13738
+ right: 0;
13739
+ z-index: 90;
13740
+ min-width: 280px;
13741
+ margin-top: 4px;
13742
+ padding: 6px 0;
13743
+ background: var(--squisq-bg, #fff);
13744
+ border: 1px solid var(--squisq-border, #e5e7eb);
13745
+ border-radius: 6px;
13746
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
13747
+ color: var(--squisq-text, #1f2937);
13748
+ }
13749
+ .squisq-transform-menu-state {
13750
+ padding: 4px 12px 8px;
13751
+ font-size: 11px;
13752
+ color: var(--squisq-text-muted, #6b7280);
13753
+ text-transform: uppercase;
13754
+ letter-spacing: 0.04em;
13755
+ border-bottom: 1px solid var(--squisq-border, #e5e7eb);
13756
+ margin-bottom: 4px;
13757
+ }
13758
+ .squisq-transform-menu-item {
13759
+ padding: 2px 6px;
13760
+ }
13761
+ .squisq-transform-menu-action {
13762
+ box-sizing: border-box;
13763
+ display: flex;
13764
+ align-items: center;
13765
+ gap: 8px;
13766
+ width: 100%;
13767
+ padding: 6px;
13768
+ font: inherit;
13769
+ text-align: left;
13770
+ background: var(--squisq-input-bg, #fff);
13771
+ border: 1px solid var(--squisq-border, #d1d5db);
13772
+ border-radius: 4px;
13773
+ box-shadow: 0 1px 2px rgba(15, 23, 42, 0.08);
13774
+ color: inherit;
13775
+ cursor: pointer;
13776
+ }
13777
+ .squisq-transform-menu-action:hover:not(:disabled) {
13778
+ background: var(--squisq-row-hover, #f3f4f6);
13779
+ border-color: var(--squisq-accent, #4f46e5);
13780
+ }
13781
+ .squisq-transform-menu-action:focus-visible {
13782
+ border-color: var(--squisq-accent, #4f46e5);
13783
+ outline: 2px solid var(--squisq-accent, #4f46e5);
13784
+ outline-offset: 1px;
13785
+ }
13786
+ .squisq-transform-menu-action:active:not(:disabled) {
13787
+ box-shadow: none;
13788
+ transform: translateY(1px);
13789
+ }
13790
+ .squisq-transform-menu-action--current {
13791
+ border-color: var(--squisq-accent, #4f46e5);
13792
+ background: color-mix(in oklch, var(--squisq-accent, #4f46e5) 8%, var(--squisq-input-bg, #fff));
13793
+ }
13794
+ .squisq-transform-menu-action-icon {
13795
+ display: inline-flex;
13796
+ align-items: center;
13797
+ justify-content: center;
13798
+ flex: 0 0 auto;
13799
+ width: 24px;
13800
+ height: 24px;
13801
+ color: #111827;
13802
+ font-size: 15px;
13803
+ line-height: 1;
13804
+ text-align: center;
13805
+ }
13806
+ .squisq-transform-menu-action-icon > svg {
13807
+ width: 22px;
13808
+ height: 22px;
13809
+ overflow: visible;
13810
+ fill: none;
13811
+ stroke: currentColor;
13812
+ stroke-width: 1.65;
13813
+ stroke-linecap: round;
13814
+ stroke-linejoin: round;
13815
+ }
13816
+ .squisq-transform-menu-action-icon > i {
13817
+ line-height: 1;
13818
+ }
13819
+ .squisq-transform-menu-action-copy {
13820
+ display: flex;
13821
+ min-width: 0;
13822
+ flex: 1;
13823
+ flex-direction: column;
13824
+ align-items: flex-start;
13825
+ gap: 2px;
13826
+ }
13827
+ .squisq-transform-menu-action-heading {
13828
+ display: flex;
13829
+ align-items: baseline;
13830
+ gap: 6px;
13831
+ }
13832
+ .squisq-transform-menu-current-badge {
13833
+ padding: 1px 5px;
13834
+ color: var(--squisq-accent, #4f46e5);
13835
+ border: 1px solid currentColor;
13836
+ border-radius: 999px;
13837
+ font-size: 9px;
13838
+ font-weight: 700;
13839
+ letter-spacing: 0.02em;
13840
+ line-height: 1.35;
13841
+ white-space: nowrap;
13842
+ }
13843
+ .squisq-transform-menu-action:disabled {
13844
+ opacity: 0.5;
13845
+ cursor: default;
13846
+ }
13847
+ .squisq-transform-menu-action-label {
13848
+ font-size: 13px;
13849
+ font-weight: 600;
13850
+ }
13851
+ .squisq-transform-menu-action-desc {
13852
+ font-size: 11.5px;
13853
+ color: var(--squisq-text-muted, #6b7280);
13854
+ }
13855
+ .squisq-transform-menu-widths {
13856
+ display: flex;
13857
+ align-items: center;
13858
+ gap: 4px;
13859
+ margin-top: 2px;
13860
+ padding: 0 6px 6px;
13861
+ }
13862
+ .squisq-transform-menu-width {
13863
+ padding: 2px 8px;
13864
+ font: inherit;
13865
+ font-size: 12px;
13866
+ background: var(--squisq-input-bg, #fff);
13867
+ color: inherit;
13868
+ border: 1px solid var(--squisq-border, #d1d5db);
13869
+ border-radius: 4px;
13870
+ cursor: pointer;
13871
+ }
13872
+ .squisq-transform-menu-width--active {
13873
+ border-color: var(--squisq-accent, #4f46e5);
13874
+ color: var(--squisq-accent, #4f46e5);
13875
+ font-weight: 600;
13876
+ }
13877
+ .squisq-transform-menu-width:disabled {
13878
+ opacity: 0.5;
13879
+ cursor: default;
13880
+ }
13881
+ .squisq-transform-menu-width-input {
13882
+ width: 64px;
13883
+ padding: 2px 6px;
13884
+ font: inherit;
13885
+ font-size: 12px;
13886
+ background: var(--squisq-input-bg, #fff);
13887
+ color: var(--squisq-text, #1f2937);
13888
+ border: 1px solid var(--squisq-border, #d1d5db);
13889
+ border-radius: 4px;
13890
+ }
13891
+ .squisq-transform-menu-note {
13892
+ padding: 6px 12px 2px;
13893
+ font-size: 11.5px;
13894
+ color: var(--squisq-text-muted, #6b7280);
13895
+ }
13896
+ .squisq-transform-menu-status {
13897
+ min-height: 16px;
13898
+ padding: 4px 12px 2px;
13899
+ font-size: 11.5px;
13900
+ color: var(--squisq-text-muted, #6b7280);
13901
+ }
13902
+ .squisq-editor-shell[data-theme=dark] .squisq-transform-menu-popover {
13903
+ background: #1f2937;
13904
+ border-color: #374151;
13905
+ color: #d1d5db;
13906
+ }
13907
+ .squisq-editor-shell[data-theme=dark] .squisq-transform-menu-state {
13908
+ border-bottom-color: #374151;
13909
+ }
13910
+ .squisq-editor-shell[data-theme=dark] .squisq-transform-menu-action-icon {
13911
+ color: #fff;
13912
+ }
13913
+ .squisq-editor-shell[data-theme=dark] .squisq-transform-menu-action:hover:not(:disabled) {
13914
+ background: #4b5563;
13915
+ }
13916
+ .squisq-editor-shell[data-theme=dark] .squisq-transform-menu-width,
13917
+ .squisq-editor-shell[data-theme=dark] .squisq-transform-menu-width-input {
13918
+ background: #111827;
13919
+ border-color: #374151;
13920
+ color: #d1d5db;
13921
+ }
13922
+ .squisq-editor-shell[data-theme=dark] .squisq-transform-menu-width--active {
13923
+ border-color: var(--squisq-accent, #818cf8);
13924
+ color: var(--squisq-accent, #818cf8);
13925
+ }
13107
13926
 
13108
13927
  /* src/styles/code-context.css */
13109
13928
  .squisq-ccx-zone {
@@ -14504,7 +15323,7 @@
14504
15323
  border: 1px solid var(--squisq-border, #e2e8f0);
14505
15324
  border-radius: 8px;
14506
15325
  overflow: hidden;
14507
- background: var(--squisq-surface, #ffffff);
15326
+ background: var(--squisq-surface, var(--squisq-bg, #ffffff));
14508
15327
  }
14509
15328
  .squisq-diagram-canvas {
14510
15329
  position: relative;
@@ -14613,7 +15432,7 @@
14613
15432
  position: relative;
14614
15433
  flex: 1;
14615
15434
  margin: 24px;
14616
- background: var(--squisq-surface, #ffffff);
15435
+ background: var(--squisq-surface, var(--squisq-bg, #ffffff));
14617
15436
  border-radius: 12px;
14618
15437
  overflow: hidden;
14619
15438
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);