@trdrs/quickcharts 4.1.0 → 5.0.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 (105) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +276 -59
  3. package/dist/adapters/rest.d.ts +4 -4
  4. package/dist/adapters/rest.js +1 -1
  5. package/dist/adapters/rest.js.map +1 -1
  6. package/dist/ar-TG26ZCCE.js +1322 -0
  7. package/dist/ar-TG26ZCCE.js.map +1 -0
  8. package/dist/{assets-BF-NDyHl.d.ts → assets-DF3nozNV.d.ts} +161 -17
  9. package/dist/ca_ES-WJWH5BXU.js +1322 -0
  10. package/dist/ca_ES-WJWH5BXU.js.map +1 -0
  11. package/dist/{chunk-D3S26ARP.js → chunk-EXJAJZTN.js} +1 -1
  12. package/dist/chunk-EXJAJZTN.js.map +1 -0
  13. package/dist/{chunk-TBOVLJAK.js → chunk-Q3DCXQDW.js} +85 -19
  14. package/dist/chunk-Q3DCXQDW.js.map +1 -0
  15. package/dist/de-SUDTTPQ3.js +1322 -0
  16. package/dist/de-SUDTTPQ3.js.map +1 -0
  17. package/dist/drawings.d.ts +3 -3
  18. package/dist/drawings.js +1 -1
  19. package/dist/es-FOBXUK2X.js +1322 -0
  20. package/dist/es-FOBXUK2X.js.map +1 -0
  21. package/dist/feature-manifest.json +105 -9
  22. package/dist/fr-7KQC4IJH.js +1322 -0
  23. package/dist/fr-7KQC4IJH.js.map +1 -0
  24. package/dist/he_IL-2T6XBA6D.js +1322 -0
  25. package/dist/he_IL-2T6XBA6D.js.map +1 -0
  26. package/dist/id_ID-SI25N57C.js +1322 -0
  27. package/dist/id_ID-SI25N57C.js.map +1 -0
  28. package/dist/index.d.ts +862 -103
  29. package/dist/index.js +12247 -7910
  30. package/dist/index.js.map +1 -1
  31. package/dist/it-PMSTWZDL.js +1322 -0
  32. package/dist/it-PMSTWZDL.js.map +1 -0
  33. package/dist/ja-PABDRAXV.js +1322 -0
  34. package/dist/ja-PABDRAXV.js.map +1 -0
  35. package/dist/ko-JHRYYFCV.js +1322 -0
  36. package/dist/ko-JHRYYFCV.js.map +1 -0
  37. package/dist/ms_MY-U4EE5Q4V.js +1322 -0
  38. package/dist/ms_MY-U4EE5Q4V.js.map +1 -0
  39. package/dist/pl-4HCG3T3J.js +1322 -0
  40. package/dist/pl-4HCG3T3J.js.map +1 -0
  41. package/dist/pt-6LTNN653.js +1322 -0
  42. package/dist/pt-6LTNN653.js.map +1 -0
  43. package/dist/quickcharts.css +586 -198
  44. package/dist/{resources-C0cYryO9.d.ts → resources-XglhzzW0.d.ts} +4 -2
  45. package/dist/rest-openapi.json +16 -11
  46. package/dist/ru-LFHCSDBV.js +1322 -0
  47. package/dist/ru-LFHCSDBV.js.map +1 -0
  48. package/dist/sv-4XVUXYK6.js +1322 -0
  49. package/dist/sv-4XVUXYK6.js.map +1 -0
  50. package/dist/{symbols-6V22WaRX.d.ts → symbols-DdHLHQFC.d.ts} +77 -8
  51. package/dist/symbols.d.ts +1 -1
  52. package/dist/th-WM2PVA24.js +1322 -0
  53. package/dist/th-WM2PVA24.js.map +1 -0
  54. package/dist/theme-manifest.json +105 -21
  55. package/dist/tr-HMAZXSJM.js +1322 -0
  56. package/dist/tr-HMAZXSJM.js.map +1 -0
  57. package/dist/vi-ITFBV5B7.js +1322 -0
  58. package/dist/vi-ITFBV5B7.js.map +1 -0
  59. package/dist/zh-ZGU2RI7K.js +1322 -0
  60. package/dist/zh-ZGU2RI7K.js.map +1 -0
  61. package/dist/zh_TW-PNINSQ6F.js +1322 -0
  62. package/dist/zh_TW-PNINSQ6F.js.map +1 -0
  63. package/package.json +1 -1
  64. package/dist/ar-VILLYPAA.js +0 -1181
  65. package/dist/ar-VILLYPAA.js.map +0 -1
  66. package/dist/ca_ES-EJXLAXOA.js +0 -1181
  67. package/dist/ca_ES-EJXLAXOA.js.map +0 -1
  68. package/dist/chunk-D3S26ARP.js.map +0 -1
  69. package/dist/chunk-TBOVLJAK.js.map +0 -1
  70. package/dist/de-PHID4SVN.js +0 -1181
  71. package/dist/de-PHID4SVN.js.map +0 -1
  72. package/dist/es-KD4FBLOP.js +0 -1181
  73. package/dist/es-KD4FBLOP.js.map +0 -1
  74. package/dist/fr-KTTX3FF3.js +0 -1181
  75. package/dist/fr-KTTX3FF3.js.map +0 -1
  76. package/dist/he_IL-Z3DXMAKZ.js +0 -1181
  77. package/dist/he_IL-Z3DXMAKZ.js.map +0 -1
  78. package/dist/id_ID-FFX6X4C5.js +0 -1181
  79. package/dist/id_ID-FFX6X4C5.js.map +0 -1
  80. package/dist/it-X2GFCLGU.js +0 -1181
  81. package/dist/it-X2GFCLGU.js.map +0 -1
  82. package/dist/ja-TG3WO2KH.js +0 -1181
  83. package/dist/ja-TG3WO2KH.js.map +0 -1
  84. package/dist/ko-4HHHO7KV.js +0 -1181
  85. package/dist/ko-4HHHO7KV.js.map +0 -1
  86. package/dist/ms_MY-HPVQKVPY.js +0 -1181
  87. package/dist/ms_MY-HPVQKVPY.js.map +0 -1
  88. package/dist/pl-2W2HP34O.js +0 -1181
  89. package/dist/pl-2W2HP34O.js.map +0 -1
  90. package/dist/pt-XQUBSXO7.js +0 -1181
  91. package/dist/pt-XQUBSXO7.js.map +0 -1
  92. package/dist/ru-XKFQPFDM.js +0 -1181
  93. package/dist/ru-XKFQPFDM.js.map +0 -1
  94. package/dist/sv-ZMEGAPCR.js +0 -1181
  95. package/dist/sv-ZMEGAPCR.js.map +0 -1
  96. package/dist/th-4735BUT4.js +0 -1181
  97. package/dist/th-4735BUT4.js.map +0 -1
  98. package/dist/tr-PG3CW2L3.js +0 -1181
  99. package/dist/tr-PG3CW2L3.js.map +0 -1
  100. package/dist/vi-YPRIAJ33.js +0 -1181
  101. package/dist/vi-YPRIAJ33.js.map +0 -1
  102. package/dist/zh-RVHEWNSW.js +0 -1181
  103. package/dist/zh-RVHEWNSW.js.map +0 -1
  104. package/dist/zh_TW-ZFJMDA64.js +0 -1181
  105. package/dist/zh_TW-ZFJMDA64.js.map +0 -1
@@ -12,6 +12,7 @@
12
12
  [data-qc-theme="light"] {
13
13
  --qc-canvas-background: #ffffff;
14
14
  --qc-canvas-paneBorder: #ebebeb;
15
+ --qc-canvas-watermark: rgba(80, 83, 94, 0.2);
15
16
  --qc-chrome-border: #ebebeb;
16
17
  --qc-chrome-borderStrong: #8c8c8c;
17
18
  --qc-chrome-caret: #707070;
@@ -40,6 +41,8 @@
40
41
  --qc-control-onPressed: #707070;
41
42
  --qc-control-outline: #2e2e2e;
42
43
  --qc-control-selectEdgeHover: #a8a8a8;
44
+ --qc-control-tipMark: #a8a8a8;
45
+ --qc-control-tipMarkHover: #707070;
43
46
  --qc-drawing-fill: rgba(41, 98, 255, 0.15);
44
47
  --qc-drawing-handle: #ffffff;
45
48
  --qc-drawing-line: #2962ff;
@@ -64,17 +67,19 @@
64
67
  --qc-overlay-separator: #ebebeb;
65
68
  --qc-overlay-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
66
69
  --qc-overlay-surface: #ffffff;
70
+ --qc-overlay-tooltip: #3d3d3d;
71
+ --qc-overlay-tooltipInk: #f2f2f2;
67
72
  --qc-scale-background: #ffffff;
68
- --qc-scale-border: #e0e3eb;
69
- --qc-scale-crosshair: #9598a1;
70
- --qc-scale-crosshairLabelBackground: #131722;
73
+ --qc-scale-border: rgba(46, 46, 46, 0);
74
+ --qc-scale-crosshair: #9c9c9c;
75
+ --qc-scale-crosshairLabelBackground: #0f0f0f;
71
76
  --qc-scale-crosshairLabelText: #ffffff;
72
- --qc-scale-grid: rgba(0, 0, 0, 0.06);
73
- --qc-scale-sessionAfterHours: rgba(245, 166, 35, 0.06);
77
+ --qc-scale-grid: rgba(46, 46, 46, 0.2);
78
+ --qc-scale-sessionAfterHours: rgba(41, 98, 255, 0.08);
74
79
  --qc-scale-sessionClosed: rgba(0, 0, 0, 0.05);
75
- --qc-scale-sessionExtended: rgba(76, 152, 251, 0.06);
76
- --qc-scale-sessionPreMarket: rgba(76, 152, 251, 0.06);
77
- --qc-scale-text: #5b616e;
80
+ --qc-scale-sessionExtended: rgba(213, 0, 249, 0.08);
81
+ --qc-scale-sessionPreMarket: rgba(255, 152, 0, 0.08);
82
+ --qc-scale-text: #0f0f0f;
78
83
  --qc-series-down: #f23645;
79
84
  --qc-series-neutral: #787b86;
80
85
  --qc-series-up: #089981;
@@ -97,6 +102,7 @@
97
102
  --qc-status-sessionOpen: #22c55e;
98
103
  --qc-status-sessionPreMarket: #4c98fb;
99
104
  --qc-status-warning: #ac6600;
105
+ --qc-text-caption: #707070;
100
106
  --qc-text-disabled: #b8b8b8;
101
107
  --qc-text-fontFamily: -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif;
102
108
  --qc-text-fontSizeAxis: 13px;
@@ -116,6 +122,7 @@
116
122
  [data-qc-theme="dark"] {
117
123
  --qc-canvas-background: #0f0f0f;
118
124
  --qc-canvas-paneBorder: #2e2e2e;
125
+ --qc-canvas-watermark: rgba(80, 83, 94, 0.3);
119
126
  --qc-chrome-border: #2e2e2e;
120
127
  --qc-chrome-borderStrong: #707070;
121
128
  --qc-chrome-caret: #8c8c8c;
@@ -144,6 +151,8 @@
144
151
  --qc-control-onPressed: #8c8c8c;
145
152
  --qc-control-outline: #ffffff;
146
153
  --qc-control-selectEdgeHover: #808080;
154
+ --qc-control-tipMark: #575757;
155
+ --qc-control-tipMarkHover: #8c8c8c;
147
156
  --qc-drawing-fill: rgba(41, 98, 255, 0.15);
148
157
  --qc-drawing-handle: #0f0f0f;
149
158
  --qc-drawing-line: #2962ff;
@@ -168,17 +177,19 @@
168
177
  --qc-overlay-separator: #4a4a4a;
169
178
  --qc-overlay-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
170
179
  --qc-overlay-surface: #1f1f1f;
180
+ --qc-overlay-tooltip: #3d3d3d;
181
+ --qc-overlay-tooltipInk: #f2f2f2;
171
182
  --qc-scale-background: #0f0f0f;
172
- --qc-scale-border: #2a2e39;
173
- --qc-scale-crosshair: #758696;
174
- --qc-scale-crosshairLabelBackground: #dbdbdb;
175
- --qc-scale-crosshairLabelText: #0f0f0f;
176
- --qc-scale-grid: rgba(255, 255, 255, 0.035);
177
- --qc-scale-sessionAfterHours: rgba(245, 166, 35, 0.045);
183
+ --qc-scale-border: rgba(242, 242, 242, 0);
184
+ --qc-scale-crosshair: #9c9c9c;
185
+ --qc-scale-crosshairLabelBackground: #3d3d3d;
186
+ --qc-scale-crosshairLabelText: #ffffff;
187
+ --qc-scale-grid: rgba(242, 242, 242, 0.2);
188
+ --qc-scale-sessionAfterHours: rgba(41, 98, 255, 0.08);
178
189
  --qc-scale-sessionClosed: rgba(0, 0, 0, 0.22);
179
- --qc-scale-sessionExtended: rgba(76, 152, 251, 0.05);
180
- --qc-scale-sessionPreMarket: rgba(76, 152, 251, 0.05);
181
- --qc-scale-text: #9aa0aa;
190
+ --qc-scale-sessionExtended: rgba(213, 0, 249, 0.08);
191
+ --qc-scale-sessionPreMarket: rgba(255, 152, 0, 0.08);
192
+ --qc-scale-text: #b8b8b8;
182
193
  --qc-series-down: #f23645;
183
194
  --qc-series-neutral: #787b86;
184
195
  --qc-series-up: #089981;
@@ -201,6 +212,7 @@
201
212
  --qc-status-sessionOpen: #22c55e;
202
213
  --qc-status-sessionPreMarket: #4c98fb;
203
214
  --qc-status-warning: #ff9800;
215
+ --qc-text-caption: #8c8c8c;
204
216
  --qc-text-disabled: #575757;
205
217
  --qc-text-fontFamily: -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif;
206
218
  --qc-text-fontSizeAxis: 13px;
@@ -819,9 +831,11 @@
819
831
 
820
832
  /* Legend --------------------------------------------------------------------------------------- */
821
833
 
834
+ /* The legend stands 4px into the main pane, which the chart writes the top of as
835
+ * `--qcd-legend-top` once a viewer has moved it below another pane. */
822
836
  [data-qc-theme] .qc-legend {
823
837
  position: absolute;
824
- top: 4px;
838
+ top: calc(4px + var(--qcd-legend-top, 0px));
825
839
  inset-inline-end: 64px;
826
840
  z-index: 3;
827
841
  display: flex;
@@ -858,6 +872,10 @@
858
872
  padding-inline: 4px;
859
873
  border-radius: 4px;
860
874
  pointer-events: auto;
875
+ /* The status line's backdrop: a plain fill of the chart's background at the setting's opacity,
876
+ * which the chart writes on the legend, so the bars under each part stand back. Unwritten, the
877
+ * legend stands on the bars. The reading and the indicator rows take the same fill. */
878
+ background-color: var(--qcd-legend-backdrop);
861
879
  }
862
880
 
863
881
  /* A band under the pointer reads as one solid chip over the candles: the canvas' own fill, so the
@@ -945,6 +963,7 @@
945
963
  font-size: var(--qc-text-fontSizeAxis);
946
964
  font-weight: 400;
947
965
  font-variant-numeric: tabular-nums;
966
+ background-color: var(--qcd-legend-backdrop);
948
967
  }
949
968
 
950
969
  [data-qc-theme] .qc-legend-ohlc {
@@ -993,6 +1012,55 @@
993
1012
  color: var(--qc-text-primary);
994
1013
  }
995
1014
 
1015
+ /* The bar's volume after its change: the quiet mark, then the number in the direction's ink. */
1016
+ [data-qc-theme] .qc-legend-volume {
1017
+ display: inline-flex;
1018
+ align-items: center;
1019
+ }
1020
+
1021
+ [data-qc-theme] .qc-legend-volume > .qc-legend-mark {
1022
+ color: var(--qc-text-muted);
1023
+ margin-inline-end: 4px;
1024
+ }
1025
+
1026
+ [data-qc-theme] .qc-legend-quote[data-qc-direction='up'] .qc-legend-volume > :last-child {
1027
+ color: var(--qc-status-positive);
1028
+ }
1029
+
1030
+ [data-qc-theme] .qc-legend-quote[data-qc-direction='down'] .qc-legend-volume > :last-child {
1031
+ color: var(--qc-status-negative);
1032
+ }
1033
+
1034
+ /* The rows extensions place in the legend, under the reading and above the indicator rows, at the
1035
+ * header's own inset. The element in each is the extension's and takes the pointer; the slot
1036
+ * wears the status line's backdrop, as the legend's own parts do. */
1037
+ [data-qc-theme] .qc-legend-slots {
1038
+ display: flex;
1039
+ flex-direction: column;
1040
+ align-items: flex-start;
1041
+ padding-inline-start: 9px;
1042
+ pointer-events: none;
1043
+ }
1044
+
1045
+ [data-qc-theme] .qc-legend-slot {
1046
+ pointer-events: auto;
1047
+ background-color: var(--qcd-legend-backdrop);
1048
+ }
1049
+
1050
+ /* The change since the previous session's close, last in the reading, in its own direction's ink
1051
+ * rather than the read bar's. */
1052
+ [data-qc-theme] .qc-legend-day-change {
1053
+ color: var(--qc-text-primary);
1054
+ }
1055
+
1056
+ [data-qc-theme] .qc-legend-day-change[data-qc-tone='up'] {
1057
+ color: var(--qc-status-positive);
1058
+ }
1059
+
1060
+ [data-qc-theme] .qc-legend-day-change[data-qc-tone='down'] {
1061
+ color: var(--qc-status-negative);
1062
+ }
1063
+
996
1064
  [data-qc-theme] .qc-legend-rows {
997
1065
  /* Rows hug their own content: the chip a hovered row takes must be the width of the row, not
998
1066
  * of the chart. They start at the same 9px inset the header does. */
@@ -1074,6 +1142,7 @@
1074
1142
  font-weight: 400;
1075
1143
  border-radius: 4px;
1076
1144
  pointer-events: auto;
1145
+ background-color: var(--qcd-legend-backdrop);
1077
1146
  }
1078
1147
 
1079
1148
  /* The same chip the identity band takes, on the same terms. */
@@ -1286,6 +1355,19 @@
1286
1355
  margin: 6px 0;
1287
1356
  }
1288
1357
 
1358
+ /* The price menu the scale's plus opens: the context menu's box as wide as its widest row, so a
1359
+ * label shows whole and ellipsizes only where the viewport cannot hold its row. A shortcut stands
1360
+ * 10px after its label, in 12px. */
1361
+ [data-qc-theme] .qc-menu.qc-price-menu {
1362
+ width: max-content;
1363
+ max-width: calc(100vw - 16px);
1364
+ }
1365
+
1366
+ [data-qc-theme] .qc-menu.qc-price-menu .qc-menu-hint {
1367
+ padding-inline: 4px 0;
1368
+ font-size: 12px;
1369
+ }
1370
+
1289
1371
  /* Indicator inputs ----------------------------------------------------------------------------- */
1290
1372
 
1291
1373
  [data-qc-theme] .qc-inputs {
@@ -1514,6 +1596,7 @@
1514
1596
  }
1515
1597
 
1516
1598
  [data-qc-theme] .qc-nav[data-qc-near],
1599
+ [data-qc-theme] .qc-nav[data-qc-visibility='always'],
1517
1600
  [data-qc-theme] .qc-nav:hover,
1518
1601
  [data-qc-theme] .qc-nav:focus-within {
1519
1602
  opacity: 1;
@@ -1567,8 +1650,8 @@
1567
1650
  * the chart chrome layer 5, notices 6, the overlay layer 20, a menu panel 21, a dialog scrim 22.
1568
1651
  * The replay transport takes no rung: it is an in-flow row of the root's column, not a float.
1569
1652
  * The chart chrome layer is a stacking context of its own, and the drawing surfaces inside it
1570
- * keep their own rungs: the drawing toolbar on 3, the floating bars 7, the inline text
1571
- * editor 8, a flyout or palette 9, a drawing dialog's scrim 10.
1653
+ * keep their own rungs: the drawing toolbar on 3, a time-scale mark's tooltip 6, the floating
1654
+ * bars 7, the inline text editor 8, a flyout or palette 9, a drawing dialog's scrim 10.
1572
1655
  * A host that must stack something above the widget gives its own element a stacking context
1573
1656
  * above the root; nothing here reaches the top of the integer range. */
1574
1657
  [data-qc-theme] .qc-overlays {
@@ -1942,6 +2025,24 @@
1942
2025
  padding: 0 6px 6px;
1943
2026
  }
1944
2027
 
2028
+ /* A hovered time-scale mark's words: 13 on 18 on the tooltip fill, its foot 4px above the mark,
2029
+ * never taking the pointer, on the chart chrome layer's rung 6. */
2030
+ [data-qc-theme] .qc-chrome > .qc-mark-tooltip {
2031
+ position: absolute;
2032
+ z-index: 6;
2033
+ box-sizing: border-box;
2034
+ max-width: 310px;
2035
+ padding: 3px 8px;
2036
+ color: var(--qc-overlay-tooltipInk);
2037
+ font-size: 13px;
2038
+ line-height: 18px;
2039
+ white-space: pre-line;
2040
+ background: var(--qc-overlay-tooltip);
2041
+ border-radius: 2px;
2042
+ transform: translateY(-100%);
2043
+ pointer-events: none;
2044
+ }
2045
+
1945
2046
  /* The inline text editor over the pane, the glyph picker and the image picker. */
1946
2047
 
1947
2048
  /* The text editor over the pane. Its place, size and type are written by the editor, because they
@@ -5485,6 +5586,16 @@
5485
5586
  background: transparent;
5486
5587
  }
5487
5588
 
5589
+ /* A dialog the chart stays live behind lets the pointer through its backdrop: only the box and what
5590
+ * it raises over the backdrop (its lists, popovers and tips) take the pointer. */
5591
+ [data-qc-theme] .qc-dialog-scrim[data-qc-pass='true'] {
5592
+ pointer-events: none;
5593
+ }
5594
+
5595
+ [data-qc-theme] .qc-dialog-scrim[data-qc-pass='true'] > * {
5596
+ pointer-events: auto;
5597
+ }
5598
+
5488
5599
  [data-qc-theme] .qc-dialog {
5489
5600
  display: flex;
5490
5601
  flex-direction: column;
@@ -6348,6 +6459,124 @@
6348
6459
  }
6349
6460
  }
6350
6461
 
6462
+ /* The controls that stand on the main price scale, over the renderer's own drawing of it. The chart
6463
+ * places each over the scale's box as it measures it and writes `--qcd-chart-background`, the
6464
+ * chart's own background, which each control stands on. */
6465
+
6466
+ /* The auto-scale and logarithmic buttons at the foot of the scale: two 20x22 buttons 4px apart, a
6467
+ * letter each. Off, a button is a 1px outline on the chart's background; on, it is a held mode,
6468
+ * filled in the emphasis fill a checked box wears with its letter in the inverse ink. */
6469
+ [data-qc-theme] .qc-scale-modes {
6470
+ position: absolute;
6471
+ z-index: 4;
6472
+ display: flex;
6473
+ gap: 4px;
6474
+ pointer-events: auto;
6475
+ }
6476
+
6477
+ [data-qc-theme] .qc-scale-mode {
6478
+ box-sizing: border-box;
6479
+ display: inline-flex;
6480
+ width: 20px;
6481
+ height: 22px;
6482
+ align-items: center;
6483
+ justify-content: center;
6484
+ padding: 0;
6485
+ font: inherit;
6486
+ font-size: 12px;
6487
+ line-height: 1;
6488
+ color: var(--qc-text-primary);
6489
+ background: var(--qcd-chart-background, var(--qc-canvas-background));
6490
+ border: 1px solid var(--qc-overlay-separator);
6491
+ border-radius: 4px;
6492
+ cursor: pointer;
6493
+ }
6494
+
6495
+ [data-qc-theme] .qc-scale-mode:hover {
6496
+ background: var(--qc-state-hover);
6497
+ }
6498
+
6499
+ [data-qc-theme] .qc-scale-mode[aria-pressed='true'] {
6500
+ color: var(--qc-text-inverse);
6501
+ background: var(--qc-control-on);
6502
+ border-color: var(--qc-control-on);
6503
+ }
6504
+
6505
+ /* The box at the top of the scale naming what its prices are in: at least 64x26, four pixels in from
6506
+ * the scale's top and its side away from the plot, on the chart's background inside a 1px border
6507
+ * with a radius of 4, in 12px text. It takes no pointer, so the scale under it still drags. */
6508
+ [data-qc-theme] .qc-scale-unit {
6509
+ position: absolute;
6510
+ z-index: 4;
6511
+ box-sizing: border-box;
6512
+ display: flex;
6513
+ min-width: 64px;
6514
+ height: 26px;
6515
+ align-items: center;
6516
+ justify-content: center;
6517
+ padding: 0 6px;
6518
+ font-size: 12px;
6519
+ font-weight: 400;
6520
+ line-height: 12px;
6521
+ white-space: nowrap;
6522
+ color: var(--qc-text-primary);
6523
+ background: var(--qcd-chart-background, var(--qc-canvas-background));
6524
+ border: 1px solid var(--qc-overlay-separator);
6525
+ border-radius: 4px;
6526
+ pointer-events: none;
6527
+ }
6528
+
6529
+ /* The plus beside the crosshair's price label is painted by the renderer with the label. Its button
6530
+ * stands over the painted box, at the size the chart writes: transparent, and taking no pointer, so
6531
+ * a pointer resting on the plus stays on the plot and keeps the crosshair. It carries the plus's
6532
+ * name and takes the keyboard. The chrome gives every button its pointer back, so this rule names
6533
+ * the chrome as well and outranks that one: a button that took the pointer here would take it off
6534
+ * the plot, the crosshair and the plus with it, and give it back once the plus was gone. */
6535
+ [data-qc-theme] .qc-chrome .qc-scale-plus {
6536
+ position: absolute;
6537
+ z-index: 4;
6538
+ box-sizing: border-box;
6539
+ padding: 0;
6540
+ background: none;
6541
+ border: 0;
6542
+ border-radius: 2px;
6543
+ pointer-events: none;
6544
+ }
6545
+
6546
+ /* The buttons at the top right of each pane, 4px below its top and 4px in from the plot's edge: 24px
6547
+ * rounded squares 4px apart, a 1px border on the chart's background, a 15px line glyph in the text
6548
+ * ink, the raised hover fill under the pointer. */
6549
+ [data-qc-theme] .qc-pane-buttons {
6550
+ position: absolute;
6551
+ z-index: 4;
6552
+ display: flex;
6553
+ gap: 4px;
6554
+ pointer-events: auto;
6555
+ }
6556
+
6557
+ [data-qc-theme] .qc-pane-button {
6558
+ box-sizing: border-box;
6559
+ display: inline-flex;
6560
+ width: 24px;
6561
+ height: 24px;
6562
+ align-items: center;
6563
+ justify-content: center;
6564
+ padding: 0;
6565
+ color: var(--qc-text-primary);
6566
+ background: var(--qcd-chart-background, var(--qc-canvas-background));
6567
+ border: 1px solid var(--qc-overlay-separator);
6568
+ border-radius: 4px;
6569
+ cursor: pointer;
6570
+ }
6571
+
6572
+ [data-qc-theme] .qc-pane-button:hover {
6573
+ background: var(--qc-state-hover);
6574
+ }
6575
+
6576
+ [data-qc-theme] .qc-pane-button[aria-pressed='true'] {
6577
+ background: var(--qc-state-pressed);
6578
+ }
6579
+
6351
6580
  /* The thin bar beside a list the viewer scrolls to find something: the search results, the
6352
6581
  * indicator list, the saved layouts, a menu's rows, a dialog's body. Five pixels wide with a 3px
6353
6582
  * thumb inside a transparent border, so it reads as a position marker rather than a control.
@@ -7005,12 +7234,16 @@
7005
7234
  font-size: var(--qc-text-fontSizeSmall);
7006
7235
  }
7007
7236
 
7008
- /* Chart settings is a centered, two-column dialog: a fixed title and footer around a section rail
7009
- * and one roomy settings page. */
7010
- [data-qc-theme] .qc-chart-settings-dialog {
7237
+ /* The chart settings dialog: a 750px card, as tall as the page it shows up to the viewport less
7238
+ * 40px, with the drawing dialogs' header and footer around a body of two columns: the rail of pages,
7239
+ * 226px with a 206px list 20px in, and the page beside it, which scrolls on its own. The page is the
7240
+ * drawing dialogs' settings grid; these rules add what the chart's settings rows carry beyond it:
7241
+ * checkbox rows with a hint or a tip, sub-rows, second lines of controls, the sliders and the tips. */
7242
+ [data-qc-theme] .qc-dialog.qc-chart-settings-dialog {
7011
7243
  box-sizing: border-box;
7012
- height: min(612px, calc(100vh - 32px));
7013
- max-height: min(612px, calc(100vh - 32px));
7244
+ min-width: min(610px, calc(100% - 16px));
7245
+ max-width: min(750px, calc(100% - 16px));
7246
+ max-height: calc(100% - 40px);
7014
7247
  color: var(--qc-text-primary);
7015
7248
  background: var(--qc-overlay-surface);
7016
7249
  border: 0;
@@ -7018,302 +7251,457 @@
7018
7251
  box-shadow: var(--qc-overlay-shadow);
7019
7252
  }
7020
7253
 
7021
- [data-qc-theme] .qc-chart-settings-dialog .qc-dialog-title {
7022
- box-sizing: border-box;
7023
- min-height: 64px;
7024
- padding: 0 14px 0 19px;
7025
- }
7026
-
7027
- [data-qc-theme] .qc-chart-settings-dialog .qc-dialog-title .qc-title {
7028
- font-size: 20px;
7029
- font-weight: 600;
7030
- line-height: 28px;
7254
+ /* The close: a 34px cell whose hover fill rounds 8px at the corners. */
7255
+ [data-qc-theme] .qc-chart-settings-dialog .qc-dialog-close {
7256
+ border-radius: 8px;
7031
7257
  }
7032
7258
 
7033
- [data-qc-theme] .qc-chart-settings-dialog .qc-dialog-close {
7034
- width: 40px;
7035
- height: 40px;
7036
- border: 0;
7259
+ [data-qc-theme] .qc-chart-settings-dialog .qc-dialog-close:hover {
7260
+ background: var(--qc-state-hover);
7037
7261
  }
7038
7262
 
7039
- [data-qc-theme] .qc-chart-settings-body {
7263
+ [data-qc-theme] .qc-chart-settings-dialog .qc-chart-settings-body {
7040
7264
  display: flex;
7041
7265
  flex: 1 1 auto;
7042
7266
  flex-direction: row;
7043
- gap: 0;
7044
7267
  min-height: 0;
7045
7268
  padding: 0;
7046
7269
  overflow: hidden;
7047
7270
  }
7048
7271
 
7272
+ /* The rail stands as tall as the page beside it and adds nothing to the body's height of its own, so
7273
+ * a page shorter than the rail's tabs leaves the rail to scroll. */
7049
7274
  [data-qc-theme] .qc-chart-settings-nav {
7050
7275
  display: flex;
7051
7276
  flex: 0 0 226px;
7052
7277
  flex-direction: column;
7053
- gap: 2px;
7054
7278
  box-sizing: border-box;
7055
- padding: 10px;
7056
- border-inline-end: 1px solid var(--qc-overlay-separator);
7279
+ width: 226px;
7280
+ padding: 8px 0 8px 20px;
7281
+ overflow-x: hidden;
7282
+ overflow-y: auto;
7283
+ contain: size;
7284
+ scrollbar-width: auto;
7057
7285
  }
7058
7286
 
7287
+ [data-qc-theme] .qc-chart-settings-nav::-webkit-scrollbar {
7288
+ display: block;
7289
+ width: 5px;
7290
+ }
7291
+
7292
+ [data-qc-theme] .qc-chart-settings-nav::-webkit-scrollbar-thumb {
7293
+ border: 1px solid transparent;
7294
+ border-radius: 3px;
7295
+ background-color: var(--qc-chrome-scrollThumb);
7296
+ background-clip: content-box;
7297
+ }
7298
+
7299
+ [data-qc-theme] .qc-chart-settings-nav::-webkit-scrollbar-track {
7300
+ background-color: transparent;
7301
+ }
7302
+
7303
+ @supports (-moz-appearance: none) {
7304
+ [data-qc-theme] .qc-chart-settings-nav {
7305
+ scrollbar-width: thin;
7306
+ scrollbar-color: var(--qc-chrome-scrollThumb) transparent;
7307
+ }
7308
+ }
7309
+
7310
+ /* A page's tab: 206 by 40 on an 8px corner, its 28px icon 12px in and its name 4px after it at 14 on
7311
+ * 18. The page shown and the tab under the pointer take the quiet fill and the strong ink; the page
7312
+ * shown is named in bold. */
7059
7313
  [data-qc-theme] .qc-chart-settings-nav-item {
7060
7314
  display: flex;
7061
- gap: 10px;
7315
+ flex: 0 0 40px;
7316
+ gap: 4px;
7062
7317
  align-items: center;
7063
- width: 100%;
7064
- min-height: 40px;
7065
- padding: 0 12px;
7066
- color: var(--qc-text-secondary);
7318
+ box-sizing: border-box;
7319
+ width: 206px;
7320
+ height: 40px;
7321
+ padding: 0 16px 0 12px;
7322
+ color: var(--qc-text-primary);
7067
7323
  font: inherit;
7068
7324
  font-size: 14px;
7325
+ font-weight: 400;
7326
+ line-height: 18px;
7069
7327
  text-align: start;
7070
7328
  background: transparent;
7071
7329
  border: 0;
7072
7330
  border-radius: 8px;
7331
+ outline-offset: -2px;
7073
7332
  cursor: pointer;
7074
7333
  }
7075
7334
 
7076
7335
  [data-qc-theme] .qc-chart-settings-nav-item:hover {
7077
- color: var(--qc-text-primary);
7336
+ color: var(--qc-control-neutralInk);
7078
7337
  background: var(--qc-state-hover);
7079
7338
  }
7080
7339
 
7081
7340
  [data-qc-theme] .qc-chart-settings-nav-item[aria-selected='true'] {
7082
- color: var(--qc-text-primary);
7341
+ color: var(--qc-control-neutralInk);
7083
7342
  font-weight: 600;
7084
- background: var(--qc-state-selected);
7343
+ background: var(--qc-control-neutral);
7085
7344
  }
7086
7345
 
7087
- [data-qc-theme] .qc-chart-settings-panel {
7346
+ [data-qc-theme] .qc-chart-settings-nav-icon {
7088
7347
  display: flex;
7348
+ flex: 0 0 28px;
7349
+ align-items: center;
7350
+ justify-content: center;
7351
+ width: 28px;
7352
+ height: 28px;
7353
+ }
7354
+
7355
+ [data-qc-theme] .qc-chart-settings-nav-label {
7356
+ min-width: 0;
7357
+ overflow: hidden;
7358
+ text-overflow: ellipsis;
7359
+ white-space: nowrap;
7360
+ }
7361
+
7362
+ /* The page: the settings grid 16px by 20px in, with 16px more under its last section. */
7363
+ [data-qc-theme] .qc-chart-settings-panel {
7089
7364
  flex: 1 1 auto;
7090
- flex-direction: column;
7365
+ align-content: start;
7091
7366
  min-width: 0;
7092
- padding: 13px 20px 26px;
7367
+ box-sizing: border-box;
7368
+ padding: 16px 20px 32px;
7369
+ overflow-x: hidden;
7093
7370
  overflow-y: auto;
7094
7371
  outline: none;
7095
7372
  }
7096
7373
 
7097
- [data-qc-theme] .qc-chart-settings-panel > .qc-menu-heading {
7098
- min-height: auto;
7099
- margin: 0 0 8px;
7100
- padding: 0;
7101
- color: var(--qc-text-muted);
7102
- font-size: 11px;
7374
+ /* A section heading: 11px capitals in the caption ink in a 32px row, 16px clear of the section before. */
7375
+ [data-qc-theme] .qc-chart-settings-panel > .qc-settings-heading {
7376
+ color: var(--qc-text-caption);
7103
7377
  font-weight: 400;
7104
- line-height: 24px;
7105
- letter-spacing: 0;
7106
7378
  }
7107
7379
 
7108
- [data-qc-theme] .qc-settings-menu .qc-settings-row {
7109
- display: grid;
7110
- grid-template-columns: minmax(150px, 1fr) auto;
7111
- gap: 16px;
7112
- min-height: 44px;
7113
- padding: 0;
7380
+ [data-qc-theme] .qc-chart-settings-panel > .qc-settings-heading:not(:first-child) {
7381
+ margin-top: 16px;
7114
7382
  }
7115
7383
 
7116
- [data-qc-theme] .qc-settings-menu .qc-settings-row .qc-field-label {
7117
- color: var(--qc-text-secondary);
7118
- font-size: 14px;
7384
+ /* A checkbox row across both columns: the box, its words 8px after it, a tip 8px after the words,
7385
+ * and a hint at 13 on 18 in the muted ink under the line, after which the next row stands 16px off. */
7386
+ [data-qc-theme] .qc-settings-check {
7387
+ box-sizing: border-box;
7388
+ min-height: 50px;
7389
+ padding: 8px 0;
7119
7390
  }
7120
7391
 
7121
- /* A color here keeps its swatch: a 38 by 34 box on the raised fill, its well 3px in from the edge on
7122
- * a corner that follows the box's. The edge, its step under the pointer and the focus ring are the
7123
- * field's own, and a well that cannot be used stands on the read-only fill as every field does. */
7124
- [data-qc-theme] .qc-settings-menu .qc-settings-row .qc-drawing-swatch-button {
7125
- box-sizing: border-box;
7126
- width: 38px;
7127
- height: 34px;
7128
- padding: 3px;
7392
+ [data-qc-theme] .qc-settings-check-line {
7393
+ display: flex;
7394
+ gap: 8px;
7395
+ align-items: center;
7396
+ min-height: 34px;
7129
7397
  }
7130
7398
 
7131
- [data-qc-theme] .qc-settings-menu .qc-settings-row .qc-drawing-swatch-button:enabled {
7132
- background: var(--qc-chrome-surfaceRaised);
7399
+ [data-qc-theme] .qc-settings-hint {
7400
+ color: var(--qc-text-caption);
7401
+ font-size: 13px;
7402
+ line-height: 18px;
7133
7403
  }
7134
7404
 
7135
- [data-qc-theme] .qc-settings-menu .qc-settings-row .qc-drawing-well {
7136
- width: 28px;
7137
- height: 26px;
7138
- border-radius: 4px;
7405
+ [data-qc-theme] .qc-settings-check[data-hint='true'],
7406
+ [data-qc-theme] .qc-settings-hint-row {
7407
+ margin-bottom: 16px;
7408
+ }
7409
+
7410
+ [data-qc-theme] .qc-settings-hint-row {
7411
+ margin-top: -8px;
7412
+ }
7413
+
7414
+ /* A labelled row: its label cell stands its words, or its checkbox, level with the first line of
7415
+ * controls, and the controls' cell stacks its lines 8px apart. */
7416
+ [data-qc-theme] .qc-chart-settings-panel .qc-settings-label {
7417
+ gap: 8px;
7418
+ align-items: flex-start;
7139
7419
  }
7140
7420
 
7141
- /* This dialog paints its switches as compact square checks before the label, and each keeps the
7142
- * accessible switch role. */
7143
- [data-qc-theme] .qc-settings-menu .qc-switch-row {
7421
+ [data-qc-theme] .qc-settings-label-text {
7144
7422
  display: flex;
7145
- flex-direction: row-reverse;
7146
- justify-content: flex-end;
7147
- gap: 10px;
7148
- min-height: 44px;
7149
- padding: 0;
7150
- color: var(--qc-text-secondary);
7151
- cursor: pointer;
7423
+ align-items: center;
7424
+ min-height: 34px;
7152
7425
  }
7153
7426
 
7154
- [data-qc-theme] .qc-settings-menu .qc-switch {
7155
- width: 18px;
7156
- height: 18px;
7157
- box-sizing: border-box;
7158
- background: transparent;
7159
- border: 1px solid var(--qc-control-on);
7160
- border-radius: 3px;
7427
+ [data-qc-theme] .qc-chart-settings-panel .qc-settings-controls {
7428
+ flex-direction: column;
7429
+ gap: 8px;
7430
+ align-items: flex-start;
7161
7431
  }
7162
7432
 
7163
- [data-qc-theme] .qc-settings-menu .qc-switch:hover:not([disabled]) {
7164
- background: var(--qc-state-hover);
7433
+ [data-qc-theme] .qc-settings-line {
7434
+ display: flex;
7435
+ gap: 8px;
7436
+ align-items: center;
7437
+ min-height: 34px;
7165
7438
  }
7166
7439
 
7167
- [data-qc-theme] .qc-settings-menu .qc-switch[aria-checked='true'] {
7168
- background: var(--qc-control-on);
7440
+ /* A sub-row stands its box 26px in, level with the words of the row above, and 8px closer to it. */
7441
+ [data-qc-theme] .qc-settings-check[data-indent='true'] {
7442
+ margin-top: -8px;
7443
+ padding-inline-start: 26px;
7169
7444
  }
7170
7445
 
7171
- [data-qc-theme] .qc-settings-menu .qc-switch-knob {
7172
- position: absolute;
7173
- top: 3px;
7174
- inset-inline-start: 6px;
7175
- width: 5px;
7176
- height: 9px;
7177
- box-sizing: border-box;
7178
- background: transparent;
7179
- border: solid var(--qc-control-mark);
7180
- border-width: 0 2px 2px 0;
7181
- border-radius: 0;
7182
- opacity: 0;
7183
- transform: rotate(45deg);
7184
- transition: opacity var(--qc-motion-durationFast) var(--qc-motion-easingLinear);
7446
+ [data-qc-theme] .qc-settings-row[data-indent='true'] > * {
7447
+ margin-top: -8px;
7185
7448
  }
7186
7449
 
7187
- [data-qc-theme] .qc-settings-menu .qc-switch[aria-checked='true'] .qc-switch-knob {
7188
- inset-inline-start: 6px;
7189
- opacity: 1;
7450
+ [data-qc-theme] .qc-chart-settings-panel .qc-settings-row[data-indent='true'] > .qc-settings-label {
7451
+ padding-inline-start: 26px;
7190
7452
  }
7191
7453
 
7192
- [data-qc-theme] .qc-chart-settings-choices {
7193
- display: flex;
7194
- flex-direction: column;
7195
- gap: 2px;
7196
- width: min(100%, 360px);
7454
+ /* A row that cannot be used stands its words back with its box. */
7455
+ [data-qc-theme] [data-disabled='true'] > * > .qc-drawing-toggle > span,
7456
+ [data-qc-theme] [data-disabled='true'] > * > .qc-settings-label-text {
7457
+ opacity: 0.5;
7197
7458
  }
7198
7459
 
7199
- [data-qc-theme] .qc-chart-settings-choice {
7200
- display: flex;
7201
- gap: 10px;
7460
+ [data-qc-theme] [data-disabled='true'] > * > .qc-drawing-toggle {
7461
+ cursor: default;
7462
+ }
7463
+
7464
+ /* A tip's mark: 18px in the tip ink, which steps up under the pointer. */
7465
+ [data-qc-theme] .qc-settings-tip {
7466
+ display: inline-flex;
7467
+ flex: 0 0 18px;
7202
7468
  align-items: center;
7203
- min-height: 40px;
7204
- padding: 0 8px;
7205
- color: var(--qc-text-secondary);
7206
- font: inherit;
7207
- text-align: start;
7208
- background: transparent;
7469
+ justify-content: center;
7470
+ width: 18px;
7471
+ height: 18px;
7472
+ margin-block: 8px;
7473
+ padding: 0;
7474
+ color: var(--qc-control-tipMark);
7475
+ background: none;
7209
7476
  border: 0;
7210
- border-radius: 6px;
7477
+ border-radius: 50%;
7211
7478
  cursor: pointer;
7479
+ transition: color var(--qc-motion-durationFast) var(--qc-motion-easingLinear);
7212
7480
  }
7213
7481
 
7214
- [data-qc-theme] .qc-chart-settings-choice:hover:not([disabled]) {
7215
- color: var(--qc-text-primary);
7216
- background: var(--qc-state-hover);
7482
+ [data-qc-theme] .qc-settings-tip:hover,
7483
+ [data-qc-theme] .qc-settings-tip[aria-expanded='true'] {
7484
+ color: var(--qc-control-tipMarkHover);
7217
7485
  }
7218
7486
 
7219
- [data-qc-theme] .qc-chart-settings-choice[disabled] {
7220
- color: var(--qc-text-disabled);
7221
- cursor: default;
7487
+ /* A tip's line: 13 on 18 on the tooltip fill, 4px above its mark, never taking the pointer. */
7488
+ [data-qc-theme] .qc-dialog-scrim > .qc-settings-tooltip {
7489
+ position: fixed;
7490
+ z-index: 10;
7491
+ box-sizing: border-box;
7492
+ max-width: 310px;
7493
+ padding: 3px 8px;
7494
+ color: var(--qc-overlay-tooltipInk);
7495
+ font-size: 13px;
7496
+ line-height: 18px;
7497
+ background: var(--qc-overlay-tooltip);
7498
+ border-radius: 2px;
7499
+ pointer-events: none;
7222
7500
  }
7223
7501
 
7224
- [data-qc-theme] .qc-chart-settings-radio {
7225
- position: relative;
7226
- flex: 0 0 auto;
7502
+ /* A tip's card: 352px on a 16px corner, 16px in, its title and its words at 16 on 24 and the link at
7503
+ * 14 on 18. */
7504
+ [data-qc-theme] .qc-drawing-popover.qc-settings-card-popover {
7227
7505
  box-sizing: border-box;
7228
- width: 18px;
7229
- height: 18px;
7230
- border: 1px solid var(--qc-control-on);
7231
- border-radius: 50%;
7506
+ width: 352px;
7507
+ padding: 16px;
7508
+ border-radius: 16px;
7232
7509
  }
7233
7510
 
7234
- [data-qc-theme] .qc-chart-settings-choice[aria-checked='true'] .qc-chart-settings-radio::after {
7235
- content: '';
7236
- position: absolute;
7237
- inset: 4px;
7238
- background: var(--qc-control-on);
7239
- border-radius: 50%;
7511
+ [data-qc-theme] .qc-settings-card-title {
7512
+ color: var(--qc-text-primary);
7513
+ font-size: 16px;
7514
+ font-weight: 600;
7515
+ line-height: 24px;
7240
7516
  }
7241
7517
 
7242
- [data-qc-theme] .qc-chart-settings-footer {
7243
- display: flex;
7244
- flex: 0 0 64px;
7518
+ [data-qc-theme] .qc-settings-card-body {
7519
+ color: var(--qc-text-primary);
7520
+ font-size: 16px;
7521
+ line-height: 24px;
7522
+ }
7523
+
7524
+ [data-qc-theme] .qc-settings-card-link {
7525
+ display: inline-block;
7526
+ margin-top: 8px;
7527
+ color: var(--qc-text-link);
7528
+ font-size: 14px;
7529
+ line-height: 18px;
7530
+ text-decoration: none;
7531
+ }
7532
+
7533
+ /* A color that follows the bars shows the bars' two colors, the up color in the top corner. */
7534
+ [data-qc-theme] .qc-drawing-swatch-button[data-qc-follows='true'] .qc-drawing-well-fill {
7535
+ background: linear-gradient(to bottom left, var(--qc-series-up) 50%, var(--qc-series-down) 50%);
7536
+ }
7537
+
7538
+ /* A line's thickness on its own: a 34px field wearing a 14px bar of the width. */
7539
+ [data-qc-theme] .qc-drawing-select--mark.qc-settings-width {
7540
+ width: 34px;
7541
+ }
7542
+
7543
+ [data-qc-theme] .qc-settings-width > .qc-drawing-thickness-bar {
7544
+ width: 14px;
7545
+ }
7546
+
7547
+ /* A number field and its unit, 9px after it. */
7548
+ [data-qc-theme] .qc-settings-number {
7549
+ display: inline-flex;
7550
+ gap: 9px;
7245
7551
  align-items: center;
7246
- justify-content: space-between;
7552
+ }
7553
+
7554
+ [data-qc-theme] .qc-settings-suffix {
7555
+ color: var(--qc-text-primary);
7556
+ font-size: 14px;
7557
+ line-height: 18px;
7558
+ }
7559
+
7560
+ /* The sliders. The opacity is a 148 by 10 track on a 5px corner that fades from nothing into its color
7561
+ * over the checked ground, inside a 1px edge of the color; the volume is a 136 by 6 track after its
7562
+ * 18px speaker, 8px apart, filled in the on ink up to its knob. Both knobs are the color popover's, a
7563
+ * 12px dark disc with a 2px light rim. Black and white are the poles of the value axis, not theme
7564
+ * roles. */
7565
+ [data-qc-theme] .qc-settings-slider {
7566
+ --qcd-angle-0: 0deg;
7567
+ --qcd-black: hsl(var(--qcd-angle-0) 0% 0%);
7568
+ --qcd-white: hsl(var(--qcd-angle-0) 0% 100%);
7569
+ --qcd-check-hue: 224deg;
7570
+ --qcd-check: hsl(var(--qcd-check-hue) 15% 19% / 0.4);
7571
+ --qcd-ground: var(--qcd-black);
7572
+ display: inline-flex;
7573
+ gap: 8px;
7574
+ align-items: center;
7575
+ min-height: 34px;
7576
+ }
7577
+
7578
+ [data-qc-theme='light'] .qc-settings-slider {
7579
+ --qcd-ground: var(--qcd-white);
7580
+ }
7581
+
7582
+ [data-qc-theme] .qc-settings-speaker {
7583
+ flex: 0 0 18px;
7584
+ color: var(--qc-text-primary);
7585
+ }
7586
+
7587
+ [data-qc-theme] .qc-settings-opacity,
7588
+ [data-qc-theme] .qc-settings-volume {
7247
7589
  box-sizing: border-box;
7248
- padding: 0 18px;
7249
- border-top: 1px solid var(--qc-overlay-separator);
7590
+ margin: 0;
7591
+ outline: none;
7592
+ cursor: pointer;
7593
+ appearance: none;
7250
7594
  }
7251
7595
 
7252
- [data-qc-theme] .qc-chart-settings-actions {
7253
- display: flex;
7254
- gap: 10px;
7596
+ [data-qc-theme] .qc-settings-opacity {
7597
+ flex: 0 0 148px;
7598
+ width: 148px;
7599
+ height: 10px;
7600
+ background:
7601
+ linear-gradient(to right, transparent, var(--qcd-swatch)),
7602
+ repeating-conic-gradient(from 270deg, var(--qcd-check) 0% 25%, transparent 0% 50%) 1px 50% / 8px 8px,
7603
+ var(--qcd-ground);
7604
+ border: 1px solid var(--qcd-swatch);
7605
+ border-radius: 5px;
7255
7606
  }
7256
7607
 
7257
- [data-qc-theme] .qc-chart-settings-footer .qc-button {
7258
- min-width: 62px;
7259
- height: 34px;
7260
- padding: 0 11px;
7261
- font-size: 14px;
7262
- line-height: 22px;
7608
+ [data-qc-theme] .qc-settings-volume {
7609
+ flex: 0 0 136px;
7610
+ width: 136px;
7611
+ height: 6px;
7612
+ background: linear-gradient(to right, var(--qc-control-on) var(--qcd-level), var(--qc-state-pressed) var(--qcd-level));
7613
+ border-radius: 5px;
7263
7614
  }
7264
7615
 
7265
- [data-qc-theme] .qc-chart-settings-footer .qc-chart-settings-reset {
7266
- min-width: 0;
7616
+ [data-qc-theme][dir='rtl'] .qc-settings-opacity,
7617
+ [data-qc-theme] [dir='rtl'] .qc-settings-opacity {
7618
+ background:
7619
+ linear-gradient(to left, transparent, var(--qcd-swatch)),
7620
+ repeating-conic-gradient(from 270deg, var(--qcd-check) 0% 25%, transparent 0% 50%) right 1px top 50% / 8px 8px,
7621
+ var(--qcd-ground);
7267
7622
  }
7268
7623
 
7269
- [data-qc-theme] .qc-chart-settings-cancel,
7270
- [data-qc-theme] .qc-chart-settings-ok {
7271
- min-width: 62px;
7624
+ [data-qc-theme][dir='rtl'] .qc-settings-volume,
7625
+ [data-qc-theme] [dir='rtl'] .qc-settings-volume {
7626
+ background: linear-gradient(to left, var(--qc-control-on) var(--qcd-level), var(--qc-state-pressed) var(--qcd-level));
7272
7627
  }
7273
7628
 
7274
- [data-qc-theme] .qc-chart-settings-nav {
7275
- scrollbar-width: none;
7629
+ [data-qc-theme] .qc-settings-opacity::-webkit-slider-thumb,
7630
+ [data-qc-theme] .qc-settings-volume::-webkit-slider-thumb {
7631
+ width: 12px;
7632
+ height: 12px;
7633
+ background: var(--qcd-black);
7634
+ border: 2px solid var(--qcd-white);
7635
+ border-radius: 50%;
7636
+ box-shadow: var(--qc-overlay-shadow);
7637
+ cursor: pointer;
7638
+ appearance: none;
7276
7639
  }
7277
7640
 
7278
- [data-qc-theme] .qc-chart-settings-nav::-webkit-scrollbar {
7279
- display: none;
7641
+ [data-qc-theme] .qc-settings-opacity::-moz-range-thumb,
7642
+ [data-qc-theme] .qc-settings-volume::-moz-range-thumb {
7643
+ box-sizing: border-box;
7644
+ width: 12px;
7645
+ height: 12px;
7646
+ background: var(--qcd-black);
7647
+ border: 2px solid var(--qcd-white);
7648
+ border-radius: 50%;
7649
+ box-shadow: var(--qc-overlay-shadow);
7650
+ cursor: pointer;
7280
7651
  }
7281
7652
 
7653
+ [data-qc-theme] .qc-settings-opacity:focus-visible,
7654
+ [data-qc-theme] .qc-settings-volume:focus-visible {
7655
+ box-shadow: 0 0 0 2px var(--qc-state-focusRing);
7656
+ }
7657
+
7658
+ [data-qc-theme] .qc-settings-slider[data-disabled='true'] > * {
7659
+ opacity: 0.5;
7660
+ }
7661
+
7662
+ [data-qc-theme] .qc-settings-slider[data-disabled='true'] > input {
7663
+ cursor: default;
7664
+ }
7665
+
7666
+ /* The footer keeps its height whatever the page above it holds. */
7667
+ [data-qc-theme] .qc-chart-settings-dialog > .qc-chart-settings-footer {
7668
+ flex: 0 0 auto;
7669
+ }
7670
+
7671
+ /* The footer's Template menu opens over its button, as wide as its words. */
7672
+ [data-qc-theme] .qc-chart-settings-template-menu {
7673
+ min-width: 0;
7674
+ }
7675
+
7676
+ /* A narrow layer stacks the rail over the page as a strip of tabs. */
7282
7677
  @media (max-width: 680px) {
7283
- [data-qc-theme] .qc-chart-settings-dialog {
7678
+ [data-qc-theme] .qc-dialog.qc-chart-settings-dialog {
7284
7679
  width: calc(100% - 20px) !important;
7285
- height: calc(100vh - 20px);
7680
+ min-width: 0;
7286
7681
  max-width: none;
7287
- max-height: none;
7288
7682
  }
7289
7683
 
7290
- [data-qc-theme] .qc-chart-settings-body {
7684
+ [data-qc-theme] .qc-chart-settings-dialog .qc-chart-settings-body {
7291
7685
  flex-direction: column;
7292
7686
  }
7293
7687
 
7294
7688
  [data-qc-theme] .qc-chart-settings-nav {
7295
7689
  flex: 0 0 auto;
7296
7690
  flex-direction: row;
7297
- gap: 4px;
7298
- padding: 6px 10px 8px;
7691
+ width: auto;
7692
+ padding: 0 10px 8px;
7299
7693
  overflow-x: auto;
7300
- border-inline-end: 0;
7301
- border-bottom: 1px solid var(--qc-overlay-separator);
7694
+ overflow-y: hidden;
7695
+ contain: none;
7302
7696
  }
7303
7697
 
7304
7698
  [data-qc-theme] .qc-chart-settings-nav-item {
7699
+ flex: 0 0 auto;
7305
7700
  width: auto;
7306
- min-width: max-content;
7307
- min-height: 36px;
7308
- padding: 0 10px;
7309
7701
  }
7310
7702
 
7311
7703
  [data-qc-theme] .qc-chart-settings-panel {
7312
- padding: 13px 16px 20px;
7313
- }
7314
-
7315
- [data-qc-theme] .qc-chart-settings-footer {
7316
- padding: 0 12px;
7704
+ padding: 16px;
7317
7705
  }
7318
7706
  }
7319
7707