@brett_lamy/docstream 1.11.0 → 1.13.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.
- package/README.md +5 -1
- package/dist/strudel/RackGrid.d.ts +23 -0
- package/dist/strudel/RackGrid.d.ts.map +1 -0
- package/dist/strudel/RackGrid.js +182 -0
- package/dist/strudel/RackGrid.js.map +1 -0
- package/dist/strudel/StrudelRack.d.ts +5 -1
- package/dist/strudel/StrudelRack.d.ts.map +1 -1
- package/dist/strudel/StrudelRack.js +35 -4
- package/dist/strudel/StrudelRack.js.map +1 -1
- package/dist/strudel/controls.d.ts +2 -0
- package/dist/strudel/controls.d.ts.map +1 -1
- package/dist/strudel/controls.js +27 -21
- package/dist/strudel/controls.js.map +1 -1
- package/dist/strudel/index.d.ts +2 -0
- package/dist/strudel/index.d.ts.map +1 -1
- package/dist/strudel/index.js +1 -0
- package/dist/strudel/index.js.map +1 -1
- package/dist/styles.css +456 -118
- package/package.json +1 -1
- package/src/strudel/RackGrid.tsx +231 -0
- package/src/strudel/StrudelRack.tsx +80 -16
- package/src/strudel/controls.tsx +65 -28
- package/src/strudel/index.ts +2 -0
- package/src/styles.css +456 -118
package/src/styles.css
CHANGED
|
@@ -661,65 +661,157 @@
|
|
|
661
661
|
cursor: pointer;
|
|
662
662
|
}
|
|
663
663
|
|
|
664
|
+
/* The rack is hardware, so it is dark in both themes: a brushed-steel 19" frame with screwed rack ears,
|
|
665
|
+
anodized modules with silkscreened labels, rubber knobs with LED rings, channel faders, backlit pads,
|
|
666
|
+
TR-style step keys and green LCDs. */
|
|
664
667
|
.strudel-rack {
|
|
665
|
-
--strudel-accent:
|
|
668
|
+
--strudel-accent: #36d6ff;
|
|
669
|
+
--strudel-amber: #ff9d1c;
|
|
670
|
+
--strudel-red: #ff4433;
|
|
671
|
+
--strudel-lcd: #9dff9a;
|
|
672
|
+
--strudel-silk: #d9dde4;
|
|
673
|
+
--strudel-ear: 22px;
|
|
674
|
+
position: relative;
|
|
666
675
|
display: flex;
|
|
667
676
|
flex-direction: column;
|
|
668
|
-
gap:
|
|
669
|
-
padding: 10px;
|
|
670
|
-
border:
|
|
671
|
-
|
|
672
|
-
background: var(--gb-muted, #f4f4f5);
|
|
677
|
+
gap: 10px;
|
|
678
|
+
padding: 12px calc(var(--strudel-ear) + 10px);
|
|
679
|
+
border-radius: 8px;
|
|
680
|
+
color: var(--strudel-silk);
|
|
673
681
|
font-size: 12px;
|
|
682
|
+
font-family: "Helvetica Neue", Arial, system-ui, sans-serif;
|
|
683
|
+
background:
|
|
684
|
+
/* rack ears: four screws */
|
|
685
|
+
radial-gradient(circle at calc(var(--strudel-ear) / 2) 18px, #e7e9ee 0 2px, #6b7079 2.5px 4px, transparent 4.5px),
|
|
686
|
+
radial-gradient(circle at calc(var(--strudel-ear) / 2) calc(100% - 18px), #e7e9ee 0 2px, #6b7079 2.5px 4px, transparent 4.5px),
|
|
687
|
+
radial-gradient(circle at calc(100% - var(--strudel-ear) / 2) 18px, #e7e9ee 0 2px, #6b7079 2.5px 4px, transparent 4.5px),
|
|
688
|
+
radial-gradient(circle at calc(100% - var(--strudel-ear) / 2) calc(100% - 18px), #e7e9ee 0 2px, #6b7079 2.5px 4px, transparent 4.5px),
|
|
689
|
+
/* ear plates */
|
|
690
|
+
linear-gradient(90deg, #9da2ab 0, #c9ccd2 9px, #8e939c var(--strudel-ear), rgb(0 0 0 / 0.5) var(--strudel-ear), transparent calc(var(--strudel-ear) + 2px)) left / calc(var(--strudel-ear) + 2px) 100% no-repeat,
|
|
691
|
+
linear-gradient(270deg, #9da2ab 0, #c9ccd2 9px, #8e939c var(--strudel-ear), rgb(0 0 0 / 0.5) var(--strudel-ear), transparent calc(var(--strudel-ear) + 2px)) right / calc(var(--strudel-ear) + 2px) 100% no-repeat,
|
|
692
|
+
/* brushed steel */
|
|
693
|
+
repeating-linear-gradient(0deg, rgb(255 255 255 / 0.025) 0 1px, transparent 1px 3px),
|
|
694
|
+
linear-gradient(180deg, #3a3d44, #24262b 30%, #1b1c20);
|
|
695
|
+
box-shadow:
|
|
696
|
+
inset 0 1px 0 rgb(255 255 255 / 0.18),
|
|
697
|
+
inset 0 -1px 0 rgb(0 0 0 / 0.6),
|
|
698
|
+
0 1px 0 rgb(255 255 255 / 0.4),
|
|
699
|
+
0 10px 24px -8px rgb(0 0 0 / 0.55);
|
|
674
700
|
}
|
|
675
701
|
|
|
676
702
|
.strudel-rack__master {
|
|
677
703
|
display: flex;
|
|
678
704
|
align-items: center;
|
|
679
705
|
gap: 14px;
|
|
680
|
-
padding:
|
|
706
|
+
padding: 10px 14px;
|
|
707
|
+
border-radius: 6px;
|
|
708
|
+
background: linear-gradient(180deg, #2c2f35, #17181c);
|
|
709
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.1), inset 0 0 0 1px rgb(0 0 0 / 0.7), 0 2px 3px rgb(0 0 0 / 0.5);
|
|
681
710
|
}
|
|
682
711
|
|
|
683
712
|
.strudel-rack__title {
|
|
684
|
-
|
|
713
|
+
display: flex;
|
|
714
|
+
flex-direction: column;
|
|
715
|
+
font-weight: 800;
|
|
685
716
|
font-size: 13px;
|
|
717
|
+
letter-spacing: 0.14em;
|
|
718
|
+
text-transform: uppercase;
|
|
719
|
+
color: #fff;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.strudel-rack__title small {
|
|
723
|
+
font-weight: 500;
|
|
724
|
+
font-size: 9px;
|
|
725
|
+
letter-spacing: 0.3em;
|
|
726
|
+
color: var(--strudel-accent);
|
|
727
|
+
text-shadow: 0 0 6px color-mix(in srgb, var(--strudel-accent) 60%, transparent);
|
|
686
728
|
}
|
|
687
729
|
|
|
688
730
|
.strudel-rack__summary {
|
|
689
731
|
margin-left: auto;
|
|
690
|
-
|
|
732
|
+
font-size: 9px;
|
|
733
|
+
letter-spacing: 0.18em;
|
|
734
|
+
text-transform: uppercase;
|
|
735
|
+
color: #8b9099;
|
|
691
736
|
}
|
|
692
737
|
|
|
693
738
|
.strudel-rack__error,
|
|
694
739
|
.strudel-device__error {
|
|
695
740
|
margin: 0;
|
|
696
|
-
color: var(--
|
|
741
|
+
color: var(--strudel-red);
|
|
697
742
|
font-size: 12px;
|
|
698
743
|
}
|
|
699
744
|
|
|
700
|
-
.
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
745
|
+
/* LCD: recessed green glass with a faint pixel grid. */
|
|
746
|
+
.strudel-lcd {
|
|
747
|
+
padding: 6px 10px;
|
|
748
|
+
border-radius: 4px;
|
|
749
|
+
background:
|
|
750
|
+
repeating-linear-gradient(0deg, rgb(0 0 0 / 0.18) 0 1px, transparent 1px 2px),
|
|
751
|
+
linear-gradient(180deg, #0c1a10, #10261a);
|
|
752
|
+
box-shadow: inset 0 2px 4px rgb(0 0 0 / 0.8), inset 0 0 0 1px rgb(0 0 0 / 0.9), 0 1px 0 rgb(255 255 255 / 0.12);
|
|
753
|
+
color: var(--strudel-lcd);
|
|
754
|
+
font-family: "SF Mono", ui-monospace, Menlo, monospace;
|
|
755
|
+
text-shadow: 0 0 6px color-mix(in srgb, var(--strudel-lcd) 55%, transparent);
|
|
706
756
|
}
|
|
707
757
|
|
|
708
|
-
.strudel-
|
|
709
|
-
|
|
758
|
+
.strudel-lcd--bpm {
|
|
759
|
+
display: inline-flex;
|
|
760
|
+
align-items: baseline;
|
|
761
|
+
gap: 4px;
|
|
762
|
+
min-width: 92px;
|
|
763
|
+
justify-content: flex-end;
|
|
764
|
+
font-size: 24px;
|
|
765
|
+
font-weight: 600;
|
|
766
|
+
font-variant-numeric: tabular-nums;
|
|
767
|
+
letter-spacing: 0.04em;
|
|
710
768
|
}
|
|
711
769
|
|
|
770
|
+
.strudel-lcd--bpm small {
|
|
771
|
+
font-size: 9px;
|
|
772
|
+
letter-spacing: 0.15em;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
/* Modules: anodized faceplates with a top bevel and corner screws. */
|
|
776
|
+
.strudel-device {
|
|
777
|
+
position: relative;
|
|
778
|
+
border-radius: 6px;
|
|
779
|
+
background:
|
|
780
|
+
radial-gradient(circle at 8px 8px, #c4c8cf 0 1.5px, #555a62 2px 3px, transparent 3.5px),
|
|
781
|
+
radial-gradient(circle at calc(100% - 8px) 8px, #c4c8cf 0 1.5px, #555a62 2px 3px, transparent 3.5px),
|
|
782
|
+
radial-gradient(circle at 8px calc(100% - 8px), #c4c8cf 0 1.5px, #555a62 2px 3px, transparent 3.5px),
|
|
783
|
+
radial-gradient(circle at calc(100% - 8px) calc(100% - 8px), #c4c8cf 0 1.5px, #555a62 2px 3px, transparent 3.5px),
|
|
784
|
+
repeating-linear-gradient(90deg, rgb(255 255 255 / 0.018) 0 1px, transparent 1px 2px),
|
|
785
|
+
linear-gradient(180deg, #33363d, #212328);
|
|
786
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.14), inset 0 0 0 1px rgb(0 0 0 / 0.75), 0 3px 5px rgb(0 0 0 / 0.5);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
.strudel-device[data-kind="drums"] { --strudel-key: var(--strudel-amber); }
|
|
790
|
+
.strudel-device[data-kind="melodic"],
|
|
791
|
+
.strudel-device[data-kind="other"] { --strudel-key: var(--strudel-accent); }
|
|
792
|
+
|
|
712
793
|
.strudel-device__head {
|
|
713
794
|
display: flex;
|
|
714
795
|
align-items: center;
|
|
715
796
|
gap: 8px;
|
|
716
|
-
padding:
|
|
717
|
-
border-bottom: 1px solid
|
|
718
|
-
|
|
797
|
+
padding: 7px 16px 7px 18px;
|
|
798
|
+
border-bottom: 1px solid rgb(0 0 0 / 0.6);
|
|
799
|
+
box-shadow: 0 1px 0 rgb(255 255 255 / 0.06);
|
|
800
|
+
color: var(--strudel-key);
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
.strudel-device__led {
|
|
804
|
+
width: 7px;
|
|
805
|
+
height: 7px;
|
|
806
|
+
border-radius: 999px;
|
|
807
|
+
background: radial-gradient(circle at 35% 35%, #d8ffd6, #2fe05a 45%, #0d6a26);
|
|
808
|
+
box-shadow: 0 0 6px #2fe05a, 0 0 0 1px rgb(0 0 0 / 0.7);
|
|
719
809
|
}
|
|
720
810
|
|
|
721
|
-
.strudel-device[data-
|
|
722
|
-
|
|
811
|
+
.strudel-device[data-audible="false"] .strudel-device__led {
|
|
812
|
+
background: radial-gradient(circle at 35% 35%, #4b524c, #1f2420);
|
|
813
|
+
box-shadow: 0 0 0 1px rgb(0 0 0 / 0.7);
|
|
814
|
+
}
|
|
723
815
|
|
|
724
816
|
.strudel-device__name {
|
|
725
817
|
flex: 1;
|
|
@@ -727,30 +819,54 @@
|
|
|
727
819
|
overflow: hidden;
|
|
728
820
|
text-overflow: ellipsis;
|
|
729
821
|
white-space: nowrap;
|
|
730
|
-
font-weight:
|
|
731
|
-
|
|
822
|
+
font-weight: 700;
|
|
823
|
+
font-size: 11px;
|
|
824
|
+
letter-spacing: 0.14em;
|
|
825
|
+
text-transform: uppercase;
|
|
826
|
+
color: var(--strudel-silk);
|
|
732
827
|
}
|
|
733
828
|
|
|
829
|
+
/* Backlit rubber pads. */
|
|
734
830
|
.strudel-device__toggle {
|
|
735
|
-
width:
|
|
736
|
-
height:
|
|
737
|
-
border:
|
|
738
|
-
border-radius:
|
|
739
|
-
background:
|
|
740
|
-
|
|
831
|
+
width: 26px;
|
|
832
|
+
height: 20px;
|
|
833
|
+
border: 0;
|
|
834
|
+
border-radius: 4px;
|
|
835
|
+
background: linear-gradient(180deg, #4a4e56, #2b2e34);
|
|
836
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.18), 0 2px 0 #0d0e10, 0 3px 4px rgb(0 0 0 / 0.5);
|
|
837
|
+
color: #9aa0a9;
|
|
741
838
|
font: inherit;
|
|
742
|
-
font-size:
|
|
743
|
-
font-weight:
|
|
839
|
+
font-size: 10px;
|
|
840
|
+
font-weight: 800;
|
|
744
841
|
cursor: pointer;
|
|
842
|
+
transition: transform 60ms, box-shadow 60ms;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
.strudel-device__toggle:active {
|
|
846
|
+
transform: translateY(2px);
|
|
847
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.12), 0 0 0 #0d0e10, 0 1px 2px rgb(0 0 0 / 0.5);
|
|
745
848
|
}
|
|
746
849
|
|
|
747
|
-
.strudel-device__toggle[data-kind="mute"][aria-pressed="true"] {
|
|
748
|
-
|
|
850
|
+
.strudel-device__toggle[data-kind="mute"][aria-pressed="true"] {
|
|
851
|
+
background: linear-gradient(180deg, #ffc266, var(--strudel-amber));
|
|
852
|
+
color: #3a1d00;
|
|
853
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.5), 0 2px 0 #7a4300, 0 0 12px color-mix(in srgb, var(--strudel-amber) 70%, transparent);
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
.strudel-device__toggle[data-kind="solo"][aria-pressed="true"] {
|
|
857
|
+
background: linear-gradient(180deg, #a6f0ff, var(--strudel-accent));
|
|
858
|
+
color: #002a36;
|
|
859
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.5), 0 2px 0 #00657d, 0 0 12px color-mix(in srgb, var(--strudel-accent) 70%, transparent);
|
|
860
|
+
}
|
|
749
861
|
|
|
750
862
|
.strudel-device__body {
|
|
751
863
|
display: flex;
|
|
752
|
-
gap:
|
|
753
|
-
padding:
|
|
864
|
+
gap: 14px;
|
|
865
|
+
padding: 12px 18px 16px;
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
.strudel-device[data-audible="false"] .strudel-device__main {
|
|
869
|
+
filter: saturate(0.2) brightness(0.7);
|
|
754
870
|
}
|
|
755
871
|
|
|
756
872
|
.strudel-device__main {
|
|
@@ -758,38 +874,57 @@
|
|
|
758
874
|
min-width: 0;
|
|
759
875
|
display: flex;
|
|
760
876
|
flex-direction: column;
|
|
761
|
-
gap:
|
|
877
|
+
gap: 10px;
|
|
762
878
|
}
|
|
763
879
|
|
|
764
880
|
.strudel-device__selects {
|
|
765
881
|
display: flex;
|
|
766
882
|
flex-wrap: wrap;
|
|
767
|
-
|
|
883
|
+
align-items: center;
|
|
884
|
+
gap: 4px 16px;
|
|
885
|
+
align-self: flex-start;
|
|
768
886
|
}
|
|
769
887
|
|
|
770
888
|
.strudel-device__selects label {
|
|
771
889
|
display: inline-flex;
|
|
772
890
|
align-items: center;
|
|
773
891
|
gap: 6px;
|
|
774
|
-
|
|
892
|
+
font-size: 9px;
|
|
893
|
+
letter-spacing: 0.18em;
|
|
894
|
+
text-transform: uppercase;
|
|
895
|
+
opacity: 0.85;
|
|
775
896
|
}
|
|
776
897
|
|
|
777
|
-
.strudel-device__selects select
|
|
778
|
-
|
|
898
|
+
.strudel-device__selects select {
|
|
899
|
+
appearance: none;
|
|
900
|
+
padding: 0 2px;
|
|
901
|
+
border: 0;
|
|
902
|
+
background: transparent;
|
|
903
|
+
color: var(--strudel-lcd);
|
|
779
904
|
font: inherit;
|
|
780
|
-
font-size:
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
905
|
+
font-size: 13px;
|
|
906
|
+
letter-spacing: 0.04em;
|
|
907
|
+
text-transform: none;
|
|
908
|
+
text-shadow: inherit;
|
|
909
|
+
cursor: pointer;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.strudel-device__selects select:focus-visible {
|
|
913
|
+
outline: 1px solid var(--strudel-lcd);
|
|
914
|
+
border-radius: 2px;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
.strudel-device__selects option,
|
|
918
|
+
.strudel-device__add option {
|
|
919
|
+
background: #111;
|
|
920
|
+
color: #eee;
|
|
786
921
|
}
|
|
787
922
|
|
|
788
923
|
.strudel-device__knobs {
|
|
789
924
|
display: flex;
|
|
790
925
|
flex-wrap: wrap;
|
|
791
926
|
align-items: flex-start;
|
|
792
|
-
gap:
|
|
927
|
+
gap: 6px 10px;
|
|
793
928
|
}
|
|
794
929
|
|
|
795
930
|
.strudel-device__knob {
|
|
@@ -798,8 +933,8 @@
|
|
|
798
933
|
|
|
799
934
|
.strudel-device__remove {
|
|
800
935
|
position: absolute;
|
|
801
|
-
top:
|
|
802
|
-
right:
|
|
936
|
+
top: 0;
|
|
937
|
+
right: 0;
|
|
803
938
|
display: none;
|
|
804
939
|
place-items: center;
|
|
805
940
|
width: 14px;
|
|
@@ -807,8 +942,8 @@
|
|
|
807
942
|
padding: 0;
|
|
808
943
|
border: 0;
|
|
809
944
|
border-radius: 999px;
|
|
810
|
-
background: var(--
|
|
811
|
-
color:
|
|
945
|
+
background: var(--strudel-red);
|
|
946
|
+
color: #fff;
|
|
812
947
|
cursor: pointer;
|
|
813
948
|
}
|
|
814
949
|
|
|
@@ -818,126 +953,296 @@
|
|
|
818
953
|
}
|
|
819
954
|
|
|
820
955
|
.strudel-device__add {
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
align-self:
|
|
825
|
-
|
|
956
|
+
position: relative;
|
|
957
|
+
display: inline-grid;
|
|
958
|
+
place-items: center;
|
|
959
|
+
align-self: flex-start;
|
|
960
|
+
width: 40px;
|
|
961
|
+
height: 40px;
|
|
962
|
+
margin-top: 6px;
|
|
963
|
+
border-radius: 999px;
|
|
964
|
+
border: 1px dashed #5d626b;
|
|
965
|
+
color: #8b9099;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
.strudel-device__add select {
|
|
969
|
+
position: absolute;
|
|
970
|
+
inset: 0;
|
|
971
|
+
opacity: 0;
|
|
972
|
+
cursor: pointer;
|
|
826
973
|
}
|
|
827
974
|
|
|
975
|
+
.strudel-device__add:focus-within {
|
|
976
|
+
outline: 2px solid var(--strudel-accent);
|
|
977
|
+
outline-offset: 2px;
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
/* Knob: LED ring, rubber skirt, machined cap. */
|
|
828
981
|
.strudel-knob {
|
|
829
982
|
display: flex;
|
|
830
983
|
flex-direction: column;
|
|
831
984
|
align-items: center;
|
|
832
|
-
width:
|
|
985
|
+
width: 58px;
|
|
833
986
|
user-select: none;
|
|
834
987
|
}
|
|
835
988
|
|
|
836
989
|
.strudel-knob__dial {
|
|
837
|
-
width:
|
|
838
|
-
height:
|
|
990
|
+
width: 52px;
|
|
991
|
+
height: 52px;
|
|
839
992
|
border-radius: 999px;
|
|
840
993
|
cursor: ns-resize;
|
|
841
994
|
touch-action: none;
|
|
842
995
|
}
|
|
843
996
|
|
|
997
|
+
.strudel-knob[data-size="lg"] {
|
|
998
|
+
width: 70px;
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
.strudel-knob[data-size="lg"] .strudel-knob__dial {
|
|
1002
|
+
width: 64px;
|
|
1003
|
+
height: 64px;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
844
1006
|
.strudel-knob__dial:focus-visible,
|
|
845
1007
|
.strudel-fader__track:focus-visible {
|
|
846
|
-
outline: 2px solid var(--strudel-accent
|
|
1008
|
+
outline: 2px solid var(--strudel-accent);
|
|
847
1009
|
outline-offset: 2px;
|
|
848
1010
|
}
|
|
849
1011
|
|
|
850
|
-
.strudel-knob__dial svg { width: 100%; height: 100%; display: block; }
|
|
851
|
-
.strudel-
|
|
852
|
-
.strudel-
|
|
853
|
-
.strudel-
|
|
854
|
-
.strudel-
|
|
1012
|
+
.strudel-knob__dial svg { width: 100%; height: 100%; display: block; overflow: visible; }
|
|
1013
|
+
.strudel-knob__led { fill: #2a2d33; stroke: rgb(0 0 0 / 0.6); stroke-width: 0.5; }
|
|
1014
|
+
.strudel-knob__led[data-on] { fill: var(--strudel-key, var(--strudel-accent)); filter: drop-shadow(0 0 1.6px var(--strudel-key, var(--strudel-accent))); }
|
|
1015
|
+
.strudel-knob__shadow { fill: rgb(0 0 0 / 0.55); filter: blur(1.4px); }
|
|
1016
|
+
.strudel-knob__skirt { stroke: #050506; stroke-width: 0.8; }
|
|
1017
|
+
.strudel-knob__ridge { stroke: rgb(255 255 255 / 0.12); stroke-width: 1.2; stroke-linecap: round; }
|
|
1018
|
+
.strudel-knob__cap { stroke: rgb(0 0 0 / 0.5); stroke-width: 0.6; }
|
|
1019
|
+
.strudel-knob__brush { fill: none; stroke: rgb(255 255 255 / 0.35); stroke-width: 0.5; stroke-dasharray: 0.6 1.4; }
|
|
1020
|
+
.strudel-knob__pointer { stroke: #111; stroke-width: 2.4; stroke-linecap: round; }
|
|
855
1021
|
|
|
856
1022
|
.strudel-knob__value,
|
|
857
1023
|
.strudel-fader__value {
|
|
1024
|
+
font-family: "SF Mono", ui-monospace, Menlo, monospace;
|
|
858
1025
|
font-variant-numeric: tabular-nums;
|
|
859
|
-
font-size:
|
|
860
|
-
line-height: 1.
|
|
1026
|
+
font-size: 10px;
|
|
1027
|
+
line-height: 1.5;
|
|
1028
|
+
color: #fff;
|
|
861
1029
|
}
|
|
862
1030
|
|
|
863
1031
|
.strudel-knob__label,
|
|
864
1032
|
.strudel-fader__label {
|
|
865
|
-
font-size:
|
|
866
|
-
|
|
1033
|
+
font-size: 8.5px;
|
|
1034
|
+
font-weight: 700;
|
|
1035
|
+
color: var(--strudel-silk);
|
|
867
1036
|
text-transform: uppercase;
|
|
868
|
-
letter-spacing: 0.
|
|
1037
|
+
letter-spacing: 0.16em;
|
|
869
1038
|
white-space: nowrap;
|
|
870
1039
|
}
|
|
871
1040
|
|
|
872
1041
|
.strudel-knob[data-disabled] .strudel-knob__dial,
|
|
873
1042
|
.strudel-fader[data-disabled] .strudel-fader__track {
|
|
874
1043
|
cursor: not-allowed;
|
|
875
|
-
opacity: 0.6;
|
|
876
1044
|
}
|
|
877
1045
|
|
|
1046
|
+
.strudel-knob[data-disabled] .strudel-knob__value {
|
|
1047
|
+
color: var(--strudel-accent);
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
/* Channel fader: tick scale, slotted track, chunky ribbed cap. */
|
|
878
1051
|
.strudel-fader {
|
|
879
1052
|
display: flex;
|
|
880
1053
|
flex-direction: column;
|
|
881
1054
|
align-items: center;
|
|
882
1055
|
gap: 4px;
|
|
883
|
-
width: 36px;
|
|
884
1056
|
user-select: none;
|
|
885
1057
|
}
|
|
886
1058
|
|
|
1059
|
+
.strudel-fader__body {
|
|
1060
|
+
display: flex;
|
|
1061
|
+
gap: 4px;
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
.strudel-fader__scale {
|
|
1065
|
+
display: flex;
|
|
1066
|
+
flex-direction: column;
|
|
1067
|
+
justify-content: space-between;
|
|
1068
|
+
padding: 8px 0;
|
|
1069
|
+
font-size: 7px;
|
|
1070
|
+
line-height: 1;
|
|
1071
|
+
color: #8b9099;
|
|
1072
|
+
text-align: right;
|
|
1073
|
+
}
|
|
1074
|
+
|
|
887
1075
|
.strudel-fader__track {
|
|
888
1076
|
position: relative;
|
|
889
|
-
width:
|
|
890
|
-
height:
|
|
891
|
-
border-radius: 999px;
|
|
892
|
-
background: var(--gb-border);
|
|
1077
|
+
width: 26px;
|
|
1078
|
+
height: 118px;
|
|
893
1079
|
cursor: ns-resize;
|
|
894
1080
|
touch-action: none;
|
|
1081
|
+
border-radius: 4px;
|
|
1082
|
+
background: repeating-linear-gradient(180deg, transparent 0 9px, rgb(255 255 255 / 0.12) 9px 10px) 0 6px / 5px calc(100% - 12px) no-repeat,
|
|
1083
|
+
repeating-linear-gradient(180deg, transparent 0 9px, rgb(255 255 255 / 0.12) 9px 10px) 100% 6px / 5px calc(100% - 12px) no-repeat;
|
|
895
1084
|
}
|
|
896
1085
|
|
|
897
|
-
.strudel-
|
|
1086
|
+
.strudel-fader__slot {
|
|
898
1087
|
position: absolute;
|
|
899
|
-
inset:
|
|
900
|
-
border-radius:
|
|
901
|
-
background:
|
|
1088
|
+
inset: 4px calc(50% - 2.5px);
|
|
1089
|
+
border-radius: 3px;
|
|
1090
|
+
background: #050506;
|
|
1091
|
+
box-shadow: inset 0 1px 2px rgb(0 0 0 / 0.9), 0 1px 0 rgb(255 255 255 / 0.1);
|
|
902
1092
|
}
|
|
903
1093
|
|
|
904
|
-
.strudel-
|
|
1094
|
+
.strudel-fader__cap {
|
|
905
1095
|
position: absolute;
|
|
906
|
-
left:
|
|
907
|
-
|
|
908
|
-
height:
|
|
1096
|
+
left: 1px;
|
|
1097
|
+
right: 1px;
|
|
1098
|
+
height: 22px;
|
|
909
1099
|
border-radius: 3px;
|
|
910
|
-
background:
|
|
911
|
-
|
|
912
|
-
|
|
1100
|
+
background:
|
|
1101
|
+
linear-gradient(180deg, transparent 10px, #fff 10px 12px, transparent 12px),
|
|
1102
|
+
repeating-linear-gradient(180deg, rgb(0 0 0 / 0.25) 0 1px, transparent 1px 3px),
|
|
1103
|
+
linear-gradient(180deg, #a3a8b1, #5b6069 48%, #3e4249 52%, #7c818a);
|
|
1104
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.5), 0 3px 5px rgb(0 0 0 / 0.7), 0 0 0 1px rgb(0 0 0 / 0.6);
|
|
913
1105
|
}
|
|
914
1106
|
|
|
915
|
-
|
|
1107
|
+
.strudel-rack__mode {
|
|
1108
|
+
display: inline-flex;
|
|
1109
|
+
padding: 2px;
|
|
1110
|
+
border-radius: 5px;
|
|
1111
|
+
background: #0a0b0d;
|
|
1112
|
+
box-shadow: inset 0 1px 2px rgb(0 0 0 / 0.9), 0 1px 0 rgb(255 255 255 / 0.08);
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
.strudel-rack__mode button {
|
|
1116
|
+
padding: 3px 9px;
|
|
1117
|
+
border: 0;
|
|
1118
|
+
border-radius: 3px;
|
|
1119
|
+
background: transparent;
|
|
1120
|
+
color: #8b9099;
|
|
1121
|
+
font: inherit;
|
|
1122
|
+
font-size: 9px;
|
|
1123
|
+
font-weight: 700;
|
|
1124
|
+
letter-spacing: 0.16em;
|
|
1125
|
+
text-transform: uppercase;
|
|
1126
|
+
cursor: pointer;
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
.strudel-rack__mode button[aria-checked="true"] {
|
|
1130
|
+
background: linear-gradient(180deg, #4a4e56, #2b2e34);
|
|
1131
|
+
color: var(--strudel-accent);
|
|
1132
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.18);
|
|
1133
|
+
text-shadow: 0 0 6px color-mix(in srgb, var(--strudel-accent) 60%, transparent);
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
/* Grid mode: a Eurorack-style case — rails behind, modules dropped in a masonry grid. */
|
|
1137
|
+
.strudel-rack[data-mode="grid"] {
|
|
1138
|
+
padding-block: 14px;
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
.strudel-grid {
|
|
1142
|
+
display: grid;
|
|
1143
|
+
grid-auto-flow: row dense;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
.strudel-grid__item {
|
|
1147
|
+
position: relative;
|
|
1148
|
+
min-width: 0;
|
|
1149
|
+
transition: transform 0s;
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
.strudel-grid__item[data-dragging] {
|
|
1153
|
+
z-index: 5;
|
|
1154
|
+
filter: drop-shadow(0 18px 22px rgb(0 0 0 / 0.6));
|
|
1155
|
+
cursor: grabbing;
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
.strudel-grid__content {
|
|
1159
|
+
display: flex;
|
|
1160
|
+
flex-direction: column;
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
.strudel-grid__content > * {
|
|
1164
|
+
flex: 1;
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1167
|
+
.strudel-grid__content > .strudel-rack__master {
|
|
1168
|
+
flex-wrap: wrap;
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
/* The grip: an invisible handle over the module's title (left of its pads). */
|
|
1172
|
+
.strudel-grid__grip {
|
|
1173
|
+
position: absolute;
|
|
1174
|
+
top: 0;
|
|
1175
|
+
left: 0;
|
|
1176
|
+
width: calc(100% - 84px);
|
|
1177
|
+
height: 34px;
|
|
1178
|
+
padding: 0;
|
|
1179
|
+
border: 0;
|
|
1180
|
+
border-radius: 6px 0 0 0;
|
|
1181
|
+
background: transparent;
|
|
1182
|
+
cursor: grab;
|
|
1183
|
+
touch-action: none;
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
.strudel-grid__item[data-grid-key="master"] .strudel-grid__grip {
|
|
1187
|
+
width: 140px;
|
|
1188
|
+
height: 100%;
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
.strudel-grid__grip:focus-visible,
|
|
1192
|
+
.strudel-grid__corner:focus-visible {
|
|
1193
|
+
outline: 2px solid var(--strudel-accent);
|
|
1194
|
+
outline-offset: -2px;
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
/* The corner: three engraved ribs. */
|
|
1198
|
+
.strudel-grid__corner {
|
|
1199
|
+
position: absolute;
|
|
1200
|
+
right: 0;
|
|
1201
|
+
bottom: 0;
|
|
1202
|
+
width: 18px;
|
|
1203
|
+
height: 18px;
|
|
1204
|
+
padding: 0;
|
|
1205
|
+
border: 0;
|
|
1206
|
+
border-radius: 0 0 6px 0;
|
|
1207
|
+
background: linear-gradient(135deg, transparent 0 45%, #7d828b 45% 52%, transparent 52% 62%, #7d828b 62% 69%, transparent 69% 79%, #7d828b 79% 86%, transparent 86%);
|
|
1208
|
+
cursor: nwse-resize;
|
|
1209
|
+
touch-action: none;
|
|
1210
|
+
opacity: 0.7;
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
.strudel-grid__item:hover .strudel-grid__corner {
|
|
1214
|
+
opacity: 1;
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
/* Steps: TR-style keys that light up. */
|
|
916
1218
|
.strudel-steps {
|
|
917
1219
|
display: flex;
|
|
918
1220
|
flex-direction: column;
|
|
919
1221
|
gap: 4px;
|
|
920
|
-
padding
|
|
1222
|
+
padding: 8px;
|
|
1223
|
+
border-radius: 5px;
|
|
1224
|
+
background: rgb(0 0 0 / 0.35);
|
|
1225
|
+
box-shadow: inset 0 1px 3px rgb(0 0 0 / 0.8), 0 1px 0 rgb(255 255 255 / 0.06);
|
|
921
1226
|
overflow-x: auto;
|
|
922
1227
|
}
|
|
923
1228
|
|
|
924
1229
|
.strudel-step__layers {
|
|
925
1230
|
display: flex;
|
|
926
1231
|
flex-direction: column;
|
|
927
|
-
gap:
|
|
1232
|
+
gap: 4px;
|
|
928
1233
|
flex: 1;
|
|
929
1234
|
}
|
|
930
1235
|
|
|
931
1236
|
.strudel-step__row {
|
|
932
1237
|
display: flex;
|
|
933
|
-
gap:
|
|
1238
|
+
gap: 4px;
|
|
934
1239
|
min-width: 0;
|
|
935
1240
|
}
|
|
936
1241
|
|
|
937
1242
|
.strudel-step {
|
|
938
1243
|
position: relative;
|
|
939
1244
|
flex: 1 1 0;
|
|
940
|
-
min-width:
|
|
1245
|
+
min-width: 20px;
|
|
941
1246
|
display: flex;
|
|
942
1247
|
}
|
|
943
1248
|
|
|
@@ -945,48 +1250,75 @@
|
|
|
945
1250
|
.strudel-step__input {
|
|
946
1251
|
flex: 1;
|
|
947
1252
|
min-width: 0;
|
|
948
|
-
height:
|
|
1253
|
+
height: 30px;
|
|
949
1254
|
padding: 0 3px;
|
|
950
|
-
border:
|
|
951
|
-
border-radius:
|
|
952
|
-
font:
|
|
953
|
-
font-size:
|
|
954
|
-
font-
|
|
1255
|
+
border: 0;
|
|
1256
|
+
border-radius: 3px;
|
|
1257
|
+
font-family: "SF Mono", ui-monospace, Menlo, monospace;
|
|
1258
|
+
font-size: 10px;
|
|
1259
|
+
font-weight: 600;
|
|
955
1260
|
overflow: hidden;
|
|
956
1261
|
text-overflow: ellipsis;
|
|
957
1262
|
white-space: nowrap;
|
|
958
1263
|
}
|
|
959
1264
|
|
|
960
1265
|
.strudel-step__cell {
|
|
961
|
-
|
|
962
|
-
|
|
1266
|
+
position: relative;
|
|
1267
|
+
padding-top: 7px;
|
|
1268
|
+
color: #1a0d00;
|
|
963
1269
|
cursor: pointer;
|
|
1270
|
+
background: linear-gradient(180deg, color-mix(in srgb, var(--strudel-key) 70%, #fff), var(--strudel-key) 55%, color-mix(in srgb, var(--strudel-key) 75%, #000));
|
|
1271
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.55), 0 2px 0 rgb(0 0 0 / 0.75), 0 0 10px color-mix(in srgb, var(--strudel-key) 45%, transparent);
|
|
1272
|
+
transition: transform 50ms, box-shadow 50ms;
|
|
964
1273
|
}
|
|
965
1274
|
|
|
966
|
-
|
|
967
|
-
|
|
1275
|
+
/* The key's LED. */
|
|
1276
|
+
.strudel-step__cell::before {
|
|
1277
|
+
content: "";
|
|
1278
|
+
position: absolute;
|
|
1279
|
+
top: 4px;
|
|
1280
|
+
left: 50%;
|
|
1281
|
+
width: 10px;
|
|
1282
|
+
height: 3px;
|
|
1283
|
+
margin-left: -5px;
|
|
1284
|
+
border-radius: 2px;
|
|
1285
|
+
background: #fff;
|
|
1286
|
+
box-shadow: 0 0 5px #fff;
|
|
968
1287
|
}
|
|
969
1288
|
|
|
970
1289
|
.strudel-step__cell[data-rest] {
|
|
971
|
-
|
|
972
|
-
|
|
1290
|
+
color: transparent;
|
|
1291
|
+
background: linear-gradient(180deg, #4b4f57, #34373d 55%, #26282d);
|
|
1292
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.16), 0 2px 0 rgb(0 0 0 / 0.75);
|
|
973
1293
|
}
|
|
974
1294
|
|
|
975
|
-
.strudel-step__cell
|
|
976
|
-
|
|
1295
|
+
.strudel-step__cell[data-rest]::before {
|
|
1296
|
+
background: #1a1b1e;
|
|
1297
|
+
box-shadow: inset 0 0 1px #000;
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
.strudel-step__cell:active {
|
|
1301
|
+
transform: translateY(2px);
|
|
1302
|
+
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.3), 0 0 0 rgb(0 0 0 / 0.75);
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
.strudel-step__cell:focus-visible,
|
|
1306
|
+
.strudel-step__input:focus-visible {
|
|
1307
|
+
outline: 2px solid #fff;
|
|
1308
|
+
outline-offset: 1px;
|
|
977
1309
|
}
|
|
978
1310
|
|
|
979
1311
|
.strudel-step__input {
|
|
980
|
-
background:
|
|
981
|
-
color:
|
|
1312
|
+
background: #0c1a10;
|
|
1313
|
+
color: var(--strudel-lcd);
|
|
982
1314
|
}
|
|
983
1315
|
|
|
984
1316
|
.strudel-step__nest {
|
|
985
1317
|
flex: 1;
|
|
986
1318
|
display: flex;
|
|
987
|
-
padding:
|
|
988
|
-
border:
|
|
989
|
-
|
|
1319
|
+
padding: 3px;
|
|
1320
|
+
border-radius: 4px;
|
|
1321
|
+
box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0.12);
|
|
990
1322
|
}
|
|
991
1323
|
|
|
992
1324
|
.strudel-step__nest > .strudel-step__row {
|
|
@@ -994,7 +1326,7 @@
|
|
|
994
1326
|
}
|
|
995
1327
|
|
|
996
1328
|
.strudel-step__nest[data-kind="alternation"] {
|
|
997
|
-
|
|
1329
|
+
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--strudel-key) 45%, transparent);
|
|
998
1330
|
}
|
|
999
1331
|
|
|
1000
1332
|
.strudel-step__nest[data-kind="alternation"] > .strudel-step__layers > .strudel-step__row {
|
|
@@ -1006,14 +1338,20 @@
|
|
|
1006
1338
|
top: -6px;
|
|
1007
1339
|
right: 2px;
|
|
1008
1340
|
padding: 0 3px;
|
|
1009
|
-
border-radius:
|
|
1010
|
-
background:
|
|
1011
|
-
|
|
1012
|
-
|
|
1341
|
+
border-radius: 3px;
|
|
1342
|
+
background: #000;
|
|
1343
|
+
box-shadow: 0 0 0 1px rgb(255 255 255 / 0.2);
|
|
1344
|
+
color: var(--strudel-lcd);
|
|
1345
|
+
font-family: "SF Mono", ui-monospace, Menlo, monospace;
|
|
1346
|
+
font-size: 8px;
|
|
1013
1347
|
line-height: 12px;
|
|
1014
1348
|
pointer-events: none;
|
|
1015
1349
|
}
|
|
1016
1350
|
|
|
1351
|
+
.strudel-steps {
|
|
1352
|
+
padding-top: 10px;
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1017
1355
|
.docs-content-ref {
|
|
1018
1356
|
display: flex !important;
|
|
1019
1357
|
align-items: center;
|