@svgrid/grid 3.0.2 → 3.0.4

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 (281) hide show
  1. package/README.md +2 -1
  2. package/dist/GridMenus.svelte +44 -2
  3. package/dist/SvChartMenu.svelte +69 -0
  4. package/dist/SvChartMenu.svelte.d.ts +11 -0
  5. package/dist/SvChartPanes.svelte +113 -0
  6. package/dist/SvChartPanes.svelte.d.ts +20 -0
  7. package/dist/SvGrid.controller.svelte.d.ts +110 -39
  8. package/dist/SvGrid.controller.svelte.js +655 -200
  9. package/dist/SvGrid.css +105 -2
  10. package/dist/SvGrid.svelte +386 -514
  11. package/dist/SvGrid.types.d.ts +210 -9
  12. package/dist/SvGridCellEditor.svelte +17 -0
  13. package/dist/SvGridChart.svelte +2257 -329
  14. package/dist/SvGridChart.svelte.d.ts +6 -106
  15. package/dist/SvGridChart.types.d.ts +338 -0
  16. package/dist/SvGridChart.types.js +1 -0
  17. package/dist/SvGridChartBuilder.svelte +323 -0
  18. package/dist/SvGridChartBuilder.svelte.d.ts +34 -0
  19. package/dist/SvGridChartPanel.svelte +221 -275
  20. package/dist/SvGridChartPickers.svelte +417 -0
  21. package/dist/SvGridChartPickers.svelte.d.ts +70 -0
  22. package/dist/SvGridChartView.svelte +13 -14
  23. package/dist/SvModal.svelte +7 -1
  24. package/dist/SvModal.svelte.d.ts +5 -0
  25. package/dist/ai.d.ts +40 -8
  26. package/dist/ai.js +135 -24
  27. package/dist/aria.d.ts +11 -0
  28. package/dist/build-api.js +108 -22
  29. package/dist/cdn/GridMenus-7kbpnnBW.js +635 -0
  30. package/dist/cdn/GridMenus-BL7ZgQvU.js +636 -0
  31. package/dist/cdn/SvChartMenu-Bl6PBbkT.js +58 -0
  32. package/dist/cdn/SvChartMenu-FBSMINA6.js +59 -0
  33. package/dist/cdn/{SvDateRangeInput-DMLKmGEc.js → SvDateRangeInput-BeU_TkbQ.js} +15 -14
  34. package/dist/cdn/{SvDateRangeInput-CaOuMs8O.js → SvDateRangeInput-yX8vzleW.js} +38 -37
  35. package/dist/cdn/{SvDateTimePicker-sonaH0oh.js → SvDateTimePicker-DQwt4UAs.js} +139 -180
  36. package/dist/cdn/SvDateTimePicker-vNU6bZ-q.js +775 -0
  37. package/dist/cdn/{SvGridCellEditor-CjEJMJKc.js → SvGridCellEditor-B1p-vCK5.js} +188 -178
  38. package/dist/cdn/{SvGridCellEditor-BWnTi2N7.js → SvGridCellEditor-D_0q4xAu.js} +98 -88
  39. package/dist/cdn/SvGridChart-C3EWAZaM.js +3574 -0
  40. package/dist/cdn/SvGridChart-DzLkSwCH.js +3572 -0
  41. package/dist/cdn/SvGridChartBuilder-BE2T1ykB.js +783 -0
  42. package/dist/cdn/SvGridChartBuilder-CfII62sZ.js +784 -0
  43. package/dist/cdn/SvGridChartPanel-CCX5_Wgd.js +675 -0
  44. package/dist/cdn/SvGridChartPanel-xf4sWVTo.js +699 -0
  45. package/dist/cdn/SvGridChartView-CfuXmY5I.js +48 -0
  46. package/dist/cdn/SvGridChartView-DYwabQWj.js +47 -0
  47. package/dist/cdn/SvMenuList-CLN8OuIK.js +452 -0
  48. package/dist/cdn/SvMenuList-DkGhNKjf.js +451 -0
  49. package/dist/cdn/SvModal-BAE-pjZX.js +396 -0
  50. package/dist/cdn/SvModal-CIZWCcad.js +397 -0
  51. package/dist/cdn/chart-Dz7SqMXH.js +4341 -0
  52. package/dist/cdn/chart-export-BXqueeWJ.js +135 -0
  53. package/dist/cdn/chart-export-pdf-DONFUnNY.js +110 -0
  54. package/dist/cdn/chart-panel-messages-CUbf2R4i.js +1052 -0
  55. package/dist/cdn/chart-panel-messages-CmNrMdsr.js +1053 -0
  56. package/dist/cdn/chart-summary-BJW_tg_X.js +138 -0
  57. package/dist/cdn/chart-trend-CaN9mDEV.js +50 -0
  58. package/dist/cdn/chart-validate-HcOVFAfJ.js +188 -0
  59. package/dist/cdn/{column-resize-DsfNXMom.js → column-resize-DpmOLfRp.js} +3 -3
  60. package/dist/cdn/{date-format-BnnHlqGw.js → date-format-CtquV-p3.js} +583 -603
  61. package/dist/cdn/{date-format-BNii4zeD.js → date-format-D6KFzU_W.js} +347 -367
  62. package/dist/cdn/dismissable-DAHetSNk.js +44 -0
  63. package/dist/cdn/editor-contract-LXgQJAgd.js +22 -0
  64. package/dist/cdn/focus-trap-BBOQYBma.js +65 -0
  65. package/dist/cdn/{row-resize-BRcimkUT.js → row-resize-niQCp040.js} +44 -36
  66. package/dist/cdn/{src-DNbz94Ct.js → src-BKhZ6eXd.js} +10227 -9787
  67. package/dist/cdn/{src-BJ2opd0j.js → src-V1uu8iE9.js} +6568 -6128
  68. package/dist/cdn/svgrid.js +26 -15
  69. package/dist/cdn/svgrid.svelte-external.js +26 -15
  70. package/dist/chart-axes.d.ts +53 -0
  71. package/dist/chart-axes.js +351 -0
  72. package/dist/chart-cartesian.d.ts +88 -0
  73. package/dist/chart-cartesian.js +1862 -0
  74. package/dist/chart-decimate.d.ts +51 -0
  75. package/dist/chart-decimate.js +199 -0
  76. package/dist/chart-export-pdf.d.ts +47 -0
  77. package/dist/chart-export-pdf.js +187 -0
  78. package/dist/chart-export.d.ts +2 -1
  79. package/dist/chart-export.js +18 -3
  80. package/dist/chart-financial.d.ts +91 -0
  81. package/dist/chart-financial.js +175 -0
  82. package/dist/chart-flow.d.ts +10 -0
  83. package/dist/chart-flow.js +298 -0
  84. package/dist/chart-format.d.ts +18 -0
  85. package/dist/chart-format.js +65 -0
  86. package/dist/chart-grid.d.ts +8 -0
  87. package/dist/chart-grid.js +190 -0
  88. package/dist/chart-hierarchy.d.ts +17 -0
  89. package/dist/chart-hierarchy.js +146 -0
  90. package/dist/chart-indicators.d.ts +115 -0
  91. package/dist/chart-indicators.js +389 -0
  92. package/dist/chart-messages.d.ts +95 -0
  93. package/dist/chart-messages.js +92 -0
  94. package/dist/chart-motion.d.ts +16 -0
  95. package/dist/chart-motion.js +141 -0
  96. package/dist/chart-panel-messages.d.ts +265 -0
  97. package/dist/chart-panel-messages.js +285 -0
  98. package/dist/chart-pivot.d.ts +87 -0
  99. package/dist/chart-pivot.js +156 -0
  100. package/dist/chart-polar.d.ts +25 -0
  101. package/dist/chart-polar.js +700 -0
  102. package/dist/chart-samples.d.ts +16 -0
  103. package/dist/chart-samples.js +153 -0
  104. package/dist/chart-scale.d.ts +113 -0
  105. package/dist/chart-scale.js +405 -0
  106. package/dist/chart-stats.d.ts +111 -0
  107. package/dist/chart-stats.js +419 -0
  108. package/dist/chart-stream.d.ts +45 -0
  109. package/dist/chart-stream.js +91 -0
  110. package/dist/chart-summary.d.ts +27 -0
  111. package/dist/chart-summary.js +205 -0
  112. package/dist/chart-sync.svelte.d.ts +32 -0
  113. package/dist/chart-sync.svelte.js +23 -0
  114. package/dist/chart-table.d.ts +35 -0
  115. package/dist/chart-table.js +165 -0
  116. package/dist/chart-trend.d.ts +19 -0
  117. package/dist/chart-trend.js +61 -0
  118. package/dist/chart-types.d.ts +1456 -0
  119. package/dist/chart-types.js +6 -0
  120. package/dist/chart-validate.d.ts +43 -0
  121. package/dist/chart-validate.js +272 -0
  122. package/dist/chart-zoom.d.ts +40 -0
  123. package/dist/chart-zoom.js +145 -0
  124. package/dist/chart.d.ts +186 -865
  125. package/dist/chart.js +460 -2204
  126. package/dist/clipboard.d.ts +1 -0
  127. package/dist/clipboard.js +137 -18
  128. package/dist/column-resize.d.ts +3 -0
  129. package/dist/column-resize.js +4 -1
  130. package/dist/columns.js +3 -0
  131. package/dist/command-context.d.ts +19 -0
  132. package/dist/command-context.js +116 -0
  133. package/dist/core.d.ts +7 -0
  134. package/dist/createPopoverSelect.svelte.d.ts +2 -2
  135. package/dist/editing.d.ts +2 -8
  136. package/dist/editing.js +262 -33
  137. package/dist/fill-patterns.d.ts +0 -5
  138. package/dist/fill-patterns.js +56 -2
  139. package/dist/grid-messages.d.ts +10 -3
  140. package/dist/grid-messages.js +5 -0
  141. package/dist/history.d.ts +83 -0
  142. package/dist/history.js +133 -0
  143. package/dist/index.d.ts +24 -6
  144. package/dist/index.js +20 -2
  145. package/dist/keyboard-handlers.js +88 -31
  146. package/dist/keyboard.d.ts +55 -0
  147. package/dist/keyboard.js +132 -0
  148. package/dist/menus.d.ts +3 -1
  149. package/dist/menus.js +7 -2
  150. package/dist/merges.d.ts +97 -0
  151. package/dist/merges.js +147 -0
  152. package/dist/row-resize.d.ts +3 -0
  153. package/dist/row-resize.js +14 -0
  154. package/dist/scroll-sync.d.ts +1 -0
  155. package/dist/scroll-sync.js +24 -0
  156. package/dist/selection.d.ts +16 -0
  157. package/dist/selection.js +108 -16
  158. package/dist/shortcut-registry.d.ts +145 -0
  159. package/dist/shortcut-registry.js +44 -0
  160. package/dist/svgrid-wrapper.types.d.ts +213 -22
  161. package/dist/virtualization/virtualizer.js +38 -17
  162. package/package.json +6 -1
  163. package/src/GridMenus.svelte +44 -2
  164. package/src/SvChartMenu.svelte +69 -0
  165. package/src/SvChartPanes.svelte +113 -0
  166. package/src/SvChartPanes.test.ts +66 -0
  167. package/src/SvGrid.controller.svelte.ts +629 -172
  168. package/src/SvGrid.css +105 -2
  169. package/src/SvGrid.svelte +386 -514
  170. package/src/SvGrid.types.ts +188 -8
  171. package/src/SvGridCellEditor.svelte +17 -0
  172. package/src/SvGridChart.svelte +2257 -329
  173. package/src/SvGridChart.test.ts +1419 -1
  174. package/src/SvGridChart.types.ts +336 -0
  175. package/src/SvGridChartBuilder.svelte +323 -0
  176. package/src/SvGridChartPanel.svelte +221 -275
  177. package/src/SvGridChartPickers.svelte +417 -0
  178. package/src/SvGridChartView.svelte +13 -14
  179. package/src/SvModal.svelte +7 -1
  180. package/src/SvModal.test.ts +9 -0
  181. package/src/ai.test.ts +57 -2
  182. package/src/ai.ts +166 -22
  183. package/src/aria.d.ts +11 -0
  184. package/src/build-api.coverage.test.ts +184 -0
  185. package/src/build-api.ts +107 -18
  186. package/src/chart-axes.test.ts +573 -0
  187. package/src/chart-axes.ts +342 -0
  188. package/src/chart-cartesian.ts +1863 -0
  189. package/src/chart-decimate.test.ts +249 -0
  190. package/src/chart-decimate.ts +186 -0
  191. package/src/chart-export-pdf.test.ts +91 -0
  192. package/src/chart-export-pdf.ts +207 -0
  193. package/src/chart-export.test.ts +14 -0
  194. package/src/chart-export.ts +13 -3
  195. package/src/chart-financial.ts +208 -0
  196. package/src/chart-flow.ts +286 -0
  197. package/src/chart-format.ts +67 -0
  198. package/src/chart-grid.ts +179 -0
  199. package/src/chart-hierarchy.ts +135 -0
  200. package/src/chart-indicators.test.ts +443 -0
  201. package/src/chart-indicators.ts +384 -0
  202. package/src/chart-messages.test.ts +21 -0
  203. package/src/chart-messages.ts +184 -0
  204. package/src/chart-motion.test.ts +71 -0
  205. package/src/chart-motion.ts +148 -0
  206. package/src/chart-panel-messages.test.ts +29 -0
  207. package/src/chart-panel-messages.ts +550 -0
  208. package/src/chart-pivot.test.ts +54 -0
  209. package/src/chart-pivot.ts +225 -0
  210. package/src/chart-polar.ts +674 -0
  211. package/src/chart-samples.ts +106 -0
  212. package/src/chart-scale.ts +394 -0
  213. package/src/chart-series-types.test.ts +714 -0
  214. package/src/chart-stats.ts +409 -0
  215. package/src/chart-stream.test.ts +75 -0
  216. package/src/chart-stream.ts +114 -0
  217. package/src/chart-summary.test.ts +90 -0
  218. package/src/chart-summary.ts +197 -0
  219. package/src/chart-sync.svelte.ts +41 -0
  220. package/src/chart-table.test.ts +76 -0
  221. package/src/chart-table.ts +178 -0
  222. package/src/chart-trend.ts +47 -0
  223. package/src/chart-types.ts +1309 -0
  224. package/src/chart-validate.test.ts +100 -0
  225. package/src/chart-validate.ts +247 -0
  226. package/src/chart-zoom.test.ts +137 -0
  227. package/src/chart-zoom.ts +124 -0
  228. package/src/chart.coverage.test.ts +81 -0
  229. package/src/chart.test.ts +56 -3
  230. package/src/chart.ts +557 -2784
  231. package/src/clipboard.test.ts +151 -0
  232. package/src/clipboard.ts +145 -16
  233. package/src/column-resize.ts +7 -1
  234. package/src/columns.ts +2 -0
  235. package/src/command-context.test.ts +200 -0
  236. package/src/command-context.ts +137 -0
  237. package/src/core.ts +7 -0
  238. package/src/editing.test.ts +281 -3
  239. package/src/editing.ts +256 -38
  240. package/src/fill-patterns.test.ts +35 -0
  241. package/src/fill-patterns.ts +56 -2
  242. package/src/grid-messages.ts +16 -3
  243. package/src/history.test.ts +196 -0
  244. package/src/history.ts +162 -0
  245. package/src/icon-seam.test.ts +3 -2
  246. package/src/index.ts +150 -2
  247. package/src/keyboard-handlers.coverage.test.ts +126 -6
  248. package/src/keyboard-handlers.ts +91 -30
  249. package/src/keyboard-shortcuts.seam.test.ts +200 -0
  250. package/src/keyboard.test.ts +124 -1
  251. package/src/keyboard.ts +142 -0
  252. package/src/menus.test.ts +26 -0
  253. package/src/menus.ts +10 -3
  254. package/src/merges.test.ts +112 -0
  255. package/src/merges.ts +168 -0
  256. package/src/pivot.grid.test.ts +40 -5
  257. package/src/row-resize.test.ts +44 -0
  258. package/src/row-resize.ts +17 -0
  259. package/src/scroll-sync.test.ts +42 -1
  260. package/src/scroll-sync.ts +25 -0
  261. package/src/selection.multi-range.test.ts +34 -0
  262. package/src/selection.test.ts +30 -2
  263. package/src/selection.ts +111 -19
  264. package/src/shortcut-registry.test.ts +97 -0
  265. package/src/shortcut-registry.ts +181 -0
  266. package/src/svgrid-wrapper.types.ts +184 -13
  267. package/src/svgrid.behavior.test.ts +135 -0
  268. package/src/svgrid.charting.test.ts +513 -3
  269. package/src/svgrid.context-menu.test.ts +31 -0
  270. package/src/svgrid.new-features.wrapper.test.ts +10 -3
  271. package/src/virtualization/virtualizer.ts +39 -17
  272. package/dist/cdn/GridMenus-DyFA-QxA.js +0 -602
  273. package/dist/cdn/GridMenus-M2XP9t0_.js +0 -603
  274. package/dist/cdn/SvDateTimePicker-CCbDZNZB.js +0 -816
  275. package/dist/cdn/SvGridChart-DAb9RbRs.js +0 -1480
  276. package/dist/cdn/SvGridChart-Yl-IXZFO.js +0 -1481
  277. package/dist/cdn/SvGridChartPanel-DayQpDsR.js +0 -834
  278. package/dist/cdn/SvGridChartPanel-aqf8n-vJ.js +0 -810
  279. package/dist/cdn/SvGridChartView-CxfakxR0.js +0 -56
  280. package/dist/cdn/SvGridChartView-Dm_YEx9L.js +0 -55
  281. package/dist/cdn/chart-CKJRCPOk.js +0 -1652
package/dist/SvGrid.css CHANGED
@@ -873,7 +873,7 @@
873
873
  `--sg-thead-h` pixels of the scroll container. `scrollIntoView`
874
874
  and friends use this to avoid scrolling a row underneath the
875
875
  sticky header - critical for Excel-style keyboard nav. */
876
- scroll-padding-top: var(--sg-thead-h, 36px);
876
+ scroll-padding-top: calc(var(--sg-thead-h, 36px) + var(--sg-frozen-h, 0px));
877
877
  }
878
878
 
879
879
  .sv-grid-container.sv-grid-container-custom-scrollbars {
@@ -1446,6 +1446,24 @@ select.sv-grid-fr-editor {
1446
1446
  padding: 0;
1447
1447
  }
1448
1448
 
1449
+ /* ---- Collapsed columns and rows -------------------------------------------
1450
+ A column folded away by `api.setColumnCollapsed` is laid out at 0px (its
1451
+ width resolves to 0), and here it stops painting: no padding to push the
1452
+ box open, nothing visible, so its neighbours' borders meet at the seam the
1453
+ way they do in a sheet with a hidden column. A collapsed row leaves the
1454
+ flow entirely; a table row can, a table cell cannot. */
1455
+ .sv-grid-column.sv-grid-column-collapsed,
1456
+ .sv-grid-cell.sv-grid-cell-collapsed {
1457
+ padding: 0;
1458
+ border-left-width: 0;
1459
+ border-right-width: 0;
1460
+ overflow: hidden;
1461
+ visibility: hidden;
1462
+ }
1463
+ .sv-grid-row.sv-grid-row-collapsed {
1464
+ display: none;
1465
+ }
1466
+
1449
1467
  /* The four CSS variables let us compose a single box-shadow that draws the
1450
1468
  selection rectangle outline only on the cells that sit on its edges. */
1451
1469
  .sv-grid-cell[data-selected-range="true"] {
@@ -1514,6 +1532,36 @@ select.sv-grid-fr-editor {
1514
1532
  color: inherit;
1515
1533
  padding: 0 8px;
1516
1534
  }
1535
+ /* Frozen rows (`frozenRows`): the grid's own rows, stuck under the header.
1536
+ Each carries its own `top`, set inline from the heights of the frozen rows
1537
+ above it. Below the header in the stacking order, above the body's rows,
1538
+ with the row's own background so the rows scrolling under it do not show
1539
+ through. */
1540
+ .sv-grid-row.sv-grid-row-frozen {
1541
+ position: sticky;
1542
+ /* Above the body rows' pinned cells (z 30) and row numbers (z 4), which
1543
+ scroll under the band; below the header (z 35) and the scrollbars. */
1544
+ z-index: 31;
1545
+ background: var(--sg-bg, #fff);
1546
+ }
1547
+ .sv-grid-row.sv-grid-row-frozen > .sv-grid-cell {
1548
+ background: var(--sg-bg, #fff);
1549
+ }
1550
+ /* The band's lower edge, so the frozen rows read as a pane. */
1551
+ .sv-grid-row.sv-grid-row-frozen-last > .sv-grid-cell {
1552
+ border-bottom: 1px solid var(--sg-frozen-edge, var(--sg-border, #94a3b8));
1553
+ }
1554
+
1555
+ /* The multiline text editor sizes itself by its lines and keeps the
1556
+ input's single-line look until a break is typed. */
1557
+ .sv-grid-cell-editor-multiline {
1558
+ height: auto;
1559
+ min-height: 100%;
1560
+ resize: none;
1561
+ overflow: hidden;
1562
+ white-space: pre-wrap;
1563
+ line-height: inherit;
1564
+ }
1517
1565
 
1518
1566
  /* Base look for the filter inputs (header filter row, per-column filter, the
1519
1567
  global search box, and the menu's search / condition inputs). The inline cell
@@ -2113,6 +2161,21 @@ select.sv-grid-fr-editor {
2113
2161
  .sv-grid-context-menu {
2114
2162
  min-width: 180px;
2115
2163
  }
2164
+ /* The icon gutter of a context-menu item: 16px, in the text colour, so a
2165
+ consumer's own glyphs (a spreadsheet's Cut / Copy / Paste) read as one
2166
+ set with the label. Empty on items without an icon, keeping the labels
2167
+ in one column. */
2168
+ .sv-grid-menu-icon {
2169
+ display: inline-flex;
2170
+ flex: none;
2171
+ width: 16px;
2172
+ height: 16px;
2173
+ align-items: center;
2174
+ justify-content: center;
2175
+ }
2176
+ .sv-grid-menu-icon > svg {
2177
+ display: block;
2178
+ }
2116
2179
 
2117
2180
  .sv-grid-comment-editor {
2118
2181
  width: 240px;
@@ -3107,6 +3170,18 @@ select.sv-grid-fr-editor {
3107
3170
  .sv-grid-chart-actions { display: inline-flex; align-items: center; gap: 6px; }
3108
3171
  .sv-grid-chart-controls { display: flex; align-items: flex-end; gap: 10px; flex-wrap: wrap; }
3109
3172
  .sv-grid-chart-controls:empty { display: none; }
3173
+ /* The same pickers on the builder's Data tab, as a labelled form: one control
3174
+ per row, the label in the builder's 110px column. */
3175
+ .sv-grid-chart-controls.is-form { flex-direction: column; align-items: stretch; gap: 8px; }
3176
+ .sv-grid-chart-controls.is-form .sv-grid-chart-ctl,
3177
+ .sv-grid-chart-controls.is-form .sv-grid-chart-toggle {
3178
+ display: grid; grid-template-columns: 110px 1fr; align-items: center; gap: 8px; font-weight: 400; font-size: 12px;
3179
+ }
3180
+ .sv-grid-chart-controls.is-form .sv-grid-chart-toggle { grid-template-columns: 110px auto; justify-content: start; }
3181
+ .sv-grid-chart-controls.is-form .sv-grid-chart-toggle > input { order: 1; justify-self: start; }
3182
+ .sv-grid-chart-controls.is-form .sv-grid-chart-ctl-lbl { font-size: 12px; font-weight: 400; }
3183
+ .sv-grid-chart-controls.is-form .sv-grid-chart-indicators { flex-basis: auto; }
3184
+ .sv-grid-chart-controls.is-form .sv-grid-chart-hint { flex-basis: auto; }
3110
3185
  /* Says why the chosen chart type cannot draw yet - a missing Split by, too few
3111
3186
  groups. The picker deliberately does NOT hide such a type: options that come
3112
3187
  and go as the user filters are worse than one sentence of explanation. */
@@ -3118,12 +3193,14 @@ select.sv-grid-fr-editor {
3118
3193
  color: var(--sg-muted, #64748b);
3119
3194
  }
3120
3195
  .sv-grid-chart-ctl { display: flex; flex-direction: column; gap: 2px; font-size: 11px; font-weight: 600; color: var(--sg-muted, #64748b); }
3121
- .sv-grid-chart-ctl select {
3196
+ .sv-grid-chart-ctl select,
3197
+ .sv-grid-chart-ctl .sv-grid-chart-num {
3122
3198
  font: inherit; font-size: 12.5px; font-weight: 400; color: var(--sg-fg, #0f172a);
3123
3199
  background: var(--sg-input-bg, var(--sg-bg, #fff));
3124
3200
  border: 1px solid var(--sg-input-border, var(--sg-border, #e2e8f0));
3125
3201
  border-radius: var(--sg-radius, 6px); padding: 4px 8px;
3126
3202
  }
3203
+ .sv-grid-chart-ctl .sv-grid-chart-num { width: 64px; }
3127
3204
  .sv-grid-chart-toggle {
3128
3205
  display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 600;
3129
3206
  color: var(--sg-muted, #64748b); cursor: pointer; white-space: nowrap;
@@ -3148,6 +3225,18 @@ select.sv-grid-fr-editor {
3148
3225
  display: flex; align-items: stretch; justify-content: center;
3149
3226
  }
3150
3227
  .sv-grid-chart-panel-body > .sv-grid-chart { width: 100%; justify-content: center; }
3228
+ .sv-grid-chart-panes-host { width: 100%; height: 100%; overflow: auto; }
3229
+ .sv-grid-chart-build-btn { display: inline-flex; align-items: center; gap: 4px; }
3230
+ .sv-grid-chart-link-btn.is-unlinked { color: #b45309; border-color: color-mix(in srgb, #b45309 40%, transparent 60%); }
3231
+ /* Indicator chips on a price chart */
3232
+ .sv-grid-chart-indicators { flex-basis: 100%; }
3233
+ .sv-grid-chart-chips { display: flex; flex-wrap: wrap; gap: 3px; }
3234
+ .sv-grid-chart-chip {
3235
+ font: inherit; font-size: 11px; line-height: 1; padding: 3px 7px;
3236
+ border: 1px solid var(--sg-border, #e2e8f0); border-radius: 999px;
3237
+ background: var(--sg-bg, #fff); color: var(--sg-fg, #0f172a); cursor: pointer;
3238
+ }
3239
+ .sv-grid-chart-chip.is-on { background: var(--sg-accent, #2563eb); border-color: var(--sg-accent, #2563eb); color: #fff; }
3151
3240
  .sv-grid-chart-empty { margin: 0; font-size: 13px; color: var(--sg-muted, #64748b); text-align: center; max-width: 42ch; }
3152
3241
  /* Export menu */
3153
3242
  .sv-grid-chart-export { position: relative; display: inline-flex; }
@@ -3163,6 +3252,20 @@ select.sv-grid-fr-editor {
3163
3252
  }
3164
3253
  .sv-grid-chart-export-menu button:hover:not(:disabled) { background: var(--sg-hover-bg, color-mix(in srgb, var(--sg-accent, #2563eb) 10%, transparent)); }
3165
3254
  .sv-grid-chart-export-menu button:disabled { opacity: 0.45; cursor: default; }
3255
+ /* Saved charts: name the active tab, apply or remove a saved one */
3256
+ .sv-grid-chart-saved-menu { min-width: 220px; gap: 4px; }
3257
+ .sv-grid-chart-saved-row { display: flex; gap: 4px; padding: 2px; }
3258
+ .sv-grid-chart-saved-name {
3259
+ flex: 1; min-width: 0; font: inherit; font-size: 12.5px; color: var(--sg-fg, #0f172a);
3260
+ background: var(--sg-input-bg, var(--sg-bg, #fff)); border: 1px solid var(--sg-input-border, var(--sg-border, #e2e8f0));
3261
+ border-radius: var(--sg-radius, 6px); padding: 4px 8px;
3262
+ }
3263
+ .sv-grid-chart-saved-name:focus { outline: none; border-color: var(--sg-accent, #2563eb); }
3264
+ .sv-grid-chart-saved-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
3265
+ .sv-grid-chart-saved-item { display: flex; align-items: center; }
3266
+ .sv-grid-chart-saved-item .sv-grid-chart-saved-apply { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
3267
+ .sv-grid-chart-saved-item .sv-grid-chart-saved-x { flex: none; padding: 4px 8px; color: var(--sg-muted, #64748b); }
3268
+ .sv-grid-chart-saved-empty { margin: 0; padding: 4px 8px; font-size: 12px; color: var(--sg-muted, #64748b); }
3166
3269
  /* AI "chart this" */
3167
3270
  .sv-grid-chart-ai-btn { display: inline-flex; align-items: center; gap: 4px; }
3168
3271
  .sv-grid-chart-ai-btn.is-active { border-color: var(--sg-accent, #2563eb); color: var(--sg-accent, #2563eb); }