photon-grid-core 2.0.4 → 2.0.6

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 (161) hide show
  1. package/cell-selection/cell-selection-engine.d.ts +49 -0
  2. package/cell-selection/cell-selection-engine.d.ts.map +1 -1
  3. package/cell-selection/cell-selection-engine.js +185 -6
  4. package/cell-selection/cell-selection-engine.js.map +1 -1
  5. package/core/grid-api.d.ts +83 -0
  6. package/core/grid-api.d.ts.map +1 -1
  7. package/core/grid-api.js +118 -1
  8. package/core/grid-api.js.map +1 -1
  9. package/core/grid-core.d.ts.map +1 -1
  10. package/core/grid-core.js +14 -4
  11. package/core/grid-core.js.map +1 -1
  12. package/engines/clipboard/clipboard-engine.d.ts +3 -2
  13. package/engines/clipboard/clipboard-engine.d.ts.map +1 -1
  14. package/engines/clipboard/clipboard-engine.js +4 -3
  15. package/engines/clipboard/clipboard-engine.js.map +1 -1
  16. package/engines/filter/filter-engine.d.ts +16 -0
  17. package/engines/filter/filter-engine.d.ts.map +1 -1
  18. package/engines/filter/filter-engine.js +20 -0
  19. package/engines/filter/filter-engine.js.map +1 -1
  20. package/engines/filter/filter-panel.d.ts.map +1 -1
  21. package/engines/filter/filter-panel.js +6 -1
  22. package/engines/filter/filter-panel.js.map +1 -1
  23. package/engines/master-detail/master-detail-engine.d.ts +4 -3
  24. package/engines/master-detail/master-detail-engine.d.ts.map +1 -1
  25. package/engines/master-detail/master-detail-engine.js +14 -5
  26. package/engines/master-detail/master-detail-engine.js.map +1 -1
  27. package/engines/selection/row-selection-engine.d.ts +41 -0
  28. package/engines/selection/row-selection-engine.d.ts.map +1 -1
  29. package/engines/selection/row-selection-engine.js +103 -0
  30. package/engines/selection/row-selection-engine.js.map +1 -1
  31. package/index.d.ts +2 -1
  32. package/index.d.ts.map +1 -1
  33. package/index.js +1 -0
  34. package/index.js.map +1 -1
  35. package/package.json +1 -1
  36. package/photon-ai/builtins/filter.commands.d.ts +15 -0
  37. package/photon-ai/builtins/filter.commands.d.ts.map +1 -1
  38. package/photon-ai/builtins/filter.commands.js +5 -5
  39. package/photon-ai/builtins/filter.commands.js.map +1 -1
  40. package/photon-ai/builtins/selection.commands.d.ts.map +1 -1
  41. package/photon-ai/builtins/selection.commands.js +161 -2
  42. package/photon-ai/builtins/selection.commands.js.map +1 -1
  43. package/photon-ai/provider/command-normalizer.d.ts.map +1 -1
  44. package/photon-ai/provider/command-normalizer.js +5 -1
  45. package/photon-ai/provider/command-normalizer.js.map +1 -1
  46. package/photon-ai/provider/system-prompt.d.ts.map +1 -1
  47. package/photon-ai/provider/system-prompt.js +3 -1
  48. package/photon-ai/provider/system-prompt.js.map +1 -1
  49. package/photon-grid.min.js +349 -498
  50. package/renderer/auto-scroller.d.ts +11 -1
  51. package/renderer/auto-scroller.d.ts.map +1 -1
  52. package/renderer/auto-scroller.js +34 -19
  53. package/renderer/auto-scroller.js.map +1 -1
  54. package/renderer/body-renderer.d.ts +16 -0
  55. package/renderer/body-renderer.d.ts.map +1 -1
  56. package/renderer/body-renderer.js +54 -1
  57. package/renderer/body-renderer.js.map +1 -1
  58. package/renderer/cell-renderer.d.ts +9 -1
  59. package/renderer/cell-renderer.d.ts.map +1 -1
  60. package/renderer/cell-renderer.js +16 -2
  61. package/renderer/cell-renderer.js.map +1 -1
  62. package/renderer/detail-row-renderer.d.ts.map +1 -1
  63. package/renderer/detail-row-renderer.js +1 -1
  64. package/renderer/detail-row-renderer.js.map +1 -1
  65. package/renderer/grid-renderer.d.ts +33 -1
  66. package/renderer/grid-renderer.d.ts.map +1 -1
  67. package/renderer/grid-renderer.js +138 -2
  68. package/renderer/grid-renderer.js.map +1 -1
  69. package/renderer/header-renderer.d.ts +44 -0
  70. package/renderer/header-renderer.d.ts.map +1 -1
  71. package/renderer/header-renderer.js +145 -19
  72. package/renderer/header-renderer.js.map +1 -1
  73. package/renderer/row-animator.d.ts +18 -1
  74. package/renderer/row-animator.d.ts.map +1 -1
  75. package/renderer/row-animator.js +93 -17
  76. package/renderer/row-animator.js.map +1 -1
  77. package/renderer/scroll-controller.d.ts.map +1 -1
  78. package/renderer/scroll-controller.js +31 -13
  79. package/renderer/scroll-controller.js.map +1 -1
  80. package/styles/base/cells.css.d.ts +1 -1
  81. package/styles/base/cells.css.d.ts.map +1 -1
  82. package/styles/base/cells.css.js +13 -13
  83. package/styles/base/column-context-menu.css.d.ts +1 -1
  84. package/styles/base/column-context-menu.css.d.ts.map +1 -1
  85. package/styles/base/column-context-menu.css.js +19 -5
  86. package/styles/base/column-context-menu.css.js.map +1 -1
  87. package/styles/base/column-group-header.css.d.ts +1 -1
  88. package/styles/base/column-group-header.css.d.ts.map +1 -1
  89. package/styles/base/column-group-header.css.js +5 -1
  90. package/styles/base/column-group-header.css.js.map +1 -1
  91. package/styles/base/context-menu.css.d.ts +1 -1
  92. package/styles/base/context-menu.css.d.ts.map +1 -1
  93. package/styles/base/context-menu.css.js +23 -0
  94. package/styles/base/context-menu.css.js.map +1 -1
  95. package/styles/base/filter.css.d.ts +1 -1
  96. package/styles/base/filter.css.d.ts.map +1 -1
  97. package/styles/base/filter.css.js +49 -8
  98. package/styles/base/filter.css.js.map +1 -1
  99. package/styles/base/group-drop-zone.css.d.ts +1 -1
  100. package/styles/base/group-drop-zone.css.d.ts.map +1 -1
  101. package/styles/base/group-drop-zone.css.js +3 -3
  102. package/styles/base/header.css.d.ts +1 -1
  103. package/styles/base/header.css.d.ts.map +1 -1
  104. package/styles/base/header.css.js +8 -1
  105. package/styles/base/header.css.js.map +1 -1
  106. package/styles/base/row-drag.css.d.ts +1 -1
  107. package/styles/base/row-drag.css.d.ts.map +1 -1
  108. package/styles/base/row-drag.css.js +1 -1
  109. package/styles/base/rows.css.d.ts +1 -1
  110. package/styles/base/rows.css.d.ts.map +1 -1
  111. package/styles/base/rows.css.js +23 -16
  112. package/styles/base/rows.css.js.map +1 -1
  113. package/styles/base/scrollbars.css.d.ts +1 -1
  114. package/styles/base/scrollbars.css.d.ts.map +1 -1
  115. package/styles/base/scrollbars.css.js +6 -3
  116. package/styles/base/scrollbars.css.js.map +1 -1
  117. package/styles/base/sparkline.css.d.ts +1 -1
  118. package/styles/base/sparkline.css.d.ts.map +1 -1
  119. package/styles/base/sparkline.css.js +6 -0
  120. package/styles/base/sparkline.css.js.map +1 -1
  121. package/styles/base/tooltip.css.d.ts +1 -1
  122. package/styles/base/tooltip.css.d.ts.map +1 -1
  123. package/styles/base/tooltip.css.js +1 -1
  124. package/styles/base-styles.d.ts.map +1 -1
  125. package/styles/base-styles.js +5 -2
  126. package/styles/base-styles.js.map +1 -1
  127. package/styles/themes/theme-alpine.d.ts +9 -1
  128. package/styles/themes/theme-alpine.d.ts.map +1 -1
  129. package/styles/themes/theme-alpine.js +34 -43
  130. package/styles/themes/theme-alpine.js.map +1 -1
  131. package/styles/themes/theme-balham.d.ts +9 -1
  132. package/styles/themes/theme-balham.d.ts.map +1 -1
  133. package/styles/themes/theme-balham.js +33 -42
  134. package/styles/themes/theme-balham.js.map +1 -1
  135. package/styles/themes/theme-material.d.ts +9 -1
  136. package/styles/themes/theme-material.d.ts.map +1 -1
  137. package/styles/themes/theme-material.js +36 -44
  138. package/styles/themes/theme-material.js.map +1 -1
  139. package/styles/themes/theme-quartz.d.ts +14 -1
  140. package/styles/themes/theme-quartz.d.ts.map +1 -1
  141. package/styles/themes/theme-quartz.js +64 -43
  142. package/styles/themes/theme-quartz.js.map +1 -1
  143. package/theme/theme-manager.d.ts +55 -7
  144. package/theme/theme-manager.d.ts.map +1 -1
  145. package/theme/theme-manager.js +139 -35
  146. package/theme/theme-manager.js.map +1 -1
  147. package/theme/themes/light-theme.js +1 -1
  148. package/types/column.types.d.ts +42 -0
  149. package/types/column.types.d.ts.map +1 -1
  150. package/types/column.types.js +26 -1
  151. package/types/column.types.js.map +1 -1
  152. package/types/grid.types.d.ts +90 -2
  153. package/types/grid.types.d.ts.map +1 -1
  154. package/types/theme.types.d.ts +19 -0
  155. package/types/theme.types.d.ts.map +1 -1
  156. package/types/theme.types.js +7 -1
  157. package/types/theme.types.js.map +1 -1
  158. package/styles/themes/theme-dark.d.ts +0 -2
  159. package/styles/themes/theme-dark.d.ts.map +0 -1
  160. package/styles/themes/theme-dark.js +0 -219
  161. package/styles/themes/theme-dark.js.map +0 -1
@@ -58,9 +58,13 @@ export const filterCss = `/* ─────────────────
58
58
 
59
59
  .pg-filter-cell {
60
60
  display: flex;
61
+ gap: 6px;
61
62
  align-items: center;
62
63
  flex-shrink: 0;
63
64
  padding: 0 6px;
65
+ /* Column divider — themed, and gated by showVerticalBorders (removed under
66
+ .pg-grid--no-v-borders, same as .pg-th/.pg-cell) so the filter row's
67
+ vertical lines stay continuous with the header and body columns. */
64
68
  border-right: 1px solid var(--pg-colors-border, #e2e8f0);
65
69
  }
66
70
  .pg-filter-cell:last-child { border-right: none; }
@@ -77,8 +81,11 @@ export const filterCss = `/* ─────────────────
77
81
  flex-shrink: 0;
78
82
  }
79
83
  .pg-filter-input {
80
- width: 100%;
81
- height: 24px;
84
+ /* Grow to fill the cell but yield room for the trailing filter icon. */
85
+ flex: 1 1 auto;
86
+ width: auto !important;
87
+ min-width: 0 !important;
88
+ height: 70%;
82
89
  padding: 0 8px;
83
90
  border: 1px solid var(--pg-colors-border, #e2e8f0);
84
91
  border-radius: var(--pg-borders-radius-sm, 4px);
@@ -91,6 +98,40 @@ export const filterCss = `/* ─────────────────
91
98
  }
92
99
  .pg-filter-input:focus { border-color: var(--pg-colors-border-focus, #2563eb); }
93
100
 
101
+ /* Set-type columns (object / array / dropdown): read-only input that looks
102
+ disabled and opens the checkbox filter dropdown on click. */
103
+ .pg-filter-input--set {
104
+ cursor: pointer;
105
+ color: var(--pg-colors-text-secondary, #64748b);
106
+ background: var(--pg-colors-background-alt, #f1f5f9);
107
+ }
108
+ .pg-filter-input--set::placeholder { color: var(--pg-colors-text-secondary, #64748b); }
109
+
110
+ /* Trailing filter icon inside each filter cell — opens the filter panel. */
111
+ .pg-filter-cell__icon {
112
+ display: inline-flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ flex-shrink: 0;
116
+ width: 22px;
117
+ height: 22px;
118
+ border-radius: var(--pg-borders-radius-sm, 4px);
119
+ color: var(--pg-colors-text-secondary, #64748b);
120
+ cursor: pointer;
121
+ transition: background var(--pg-transitions-duration-fast, 100ms),
122
+ color var(--pg-transitions-duration-fast, 100ms);
123
+ }
124
+ .pg-filter-cell__icon:hover {
125
+ background: var(--pg-colors-background-alt, #f1f5f9);
126
+ color: var(--pg-colors-text-primary, #1e293b);
127
+ }
128
+ .pg-filter-cell__icon:focus-visible {
129
+ outline: 2px solid var(--pg-colors-border-focus, #2563eb);
130
+ outline-offset: -1px;
131
+ }
132
+ .pg-filter-cell__icon svg { display: block; }
133
+ .pg-filter-cell__icon--active { color: var(--pg-colors-primary, #2563eb); }
134
+
94
135
  /* ──────────────────── Filter Panel ──────────────────── */
95
136
  .pg-filter-panel {
96
137
  position: absolute;
@@ -104,7 +145,7 @@ export const filterCss = `/* ─────────────────
104
145
  box-shadow: var(--pg-shadows-lg, 0 8px 24px rgba(0,0,0,.12));
105
146
  overflow: hidden;
106
147
  font-size: var(--pg-typography-font-size-sm, 13px);
107
- color: var(--pg-colors-text, #1e293b);
148
+ color: var(--pg-colors-text-primary, #1e293b);
108
149
  user-select: none;
109
150
  }
110
151
 
@@ -121,7 +162,7 @@ export const filterCss = `/* ─────────────────
121
162
  border: 1px solid var(--pg-colors-border, #e2e8f0);
122
163
  border-radius: var(--pg-borders-radius-sm, 4px);
123
164
  background: var(--pg-colors-surface, #fff);
124
- color: var(--pg-colors-text, #1e293b);
165
+ color: var(--pg-colors-text-primary, #1e293b);
125
166
  font-size: inherit;
126
167
  font-family: inherit;
127
168
  cursor: pointer;
@@ -149,7 +190,7 @@ export const filterCss = `/* ─────────────────
149
190
  border: 1px solid var(--pg-colors-border, #e2e8f0);
150
191
  border-radius: var(--pg-borders-radius-sm, 4px);
151
192
  background: var(--pg-colors-surface, #fff);
152
- color: var(--pg-colors-text, #1e293b);
193
+ color: var(--pg-colors-text-primary, #1e293b);
153
194
  font-size: inherit;
154
195
  font-family: inherit;
155
196
  outline: none;
@@ -212,7 +253,7 @@ export const filterCss = `/* ─────────────────
212
253
  border: 1px solid var(--pg-colors-border, #e2e8f0);
213
254
  border-radius: var(--pg-borders-radius-sm, 4px);
214
255
  background: var(--pg-colors-surface, #fff);
215
- color: var(--pg-colors-text, #1e293b);
256
+ color: var(--pg-colors-text-primary, #1e293b);
216
257
  font-size: inherit;
217
258
  font-family: inherit;
218
259
  box-sizing: border-box;
@@ -245,7 +286,7 @@ export const filterCss = `/* ─────────────────
245
286
  .pg-filter-set__item--select-all {
246
287
  position: static;
247
288
  font-weight: 500;
248
- color: var(--pg-colors-text, #1e293b);
289
+ color: var(--pg-colors-text-primary, #1e293b);
249
290
  }
250
291
  .pg-filter-set__item-label {
251
292
  overflow: hidden;
@@ -305,7 +346,7 @@ export const filterCss = `/* ─────────────────
305
346
  .pg-filter-panel__clear-btn:hover {
306
347
  background: var(--pg-colors-background-alt, #f1f5f9);
307
348
  border-color: var(--pg-colors-text-secondary, #475569);
308
- color: var(--pg-colors-text, #1e293b);
349
+ color: var(--pg-colors-text-primary, #1e293b);
309
350
  }
310
351
 
311
352
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"filter.css.js","sourceRoot":"","sources":["../../../src/styles/base/filter.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+SxB,CAAC"}
1
+ {"version":3,"file":"filter.css.js","sourceRoot":"","sources":["../../../src/styles/base/filter.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwVxB,CAAC"}
@@ -5,5 +5,5 @@
5
5
  * base-styles.ts; edit here, not there. Order is preserved because CSS
6
6
  * cascade depends on it.
7
7
  */
8
- export declare const groupDropZoneCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Group drop zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-group-drop-zone--top {\n display: flex;\n flex-direction: row;\n align-items: center;\n flex-shrink: 0;\n height: var(--pg-header-row-height, 44px);\n background: var(--pg-colors-header-background, #f8fafc);\n border-bottom: 1px solid var(--pg-colors-border, #e2e8f0);\n overflow: hidden;\n}\n.pg-group-drop-zone--left {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n width: 160px;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n overflow: hidden;\n position: relative;\n}\n.pg-group-drop-zone--right {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n width: 160px;\n background: var(--pg-colors-header-background, #f8fafc);\n border-left: 1px solid var(--pg-colors-border, #e2e8f0);\n overflow: hidden;\n position: relative;\n}\n\n/* Zone header row (grip + \"Groups\" label) */\n.pg-group-zone-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px 4px 8px;\n flex-shrink: 0;\n border-bottom: 1px solid var(--pg-colors-border, #e2e8f0);\n user-select: none;\n}\n.pg-group-zone-grip {\n display: flex;\n align-items: center;\n cursor: grab;\n opacity: 0.45;\n padding: 2px 3px;\n border-radius: 3px;\n color: var(--pg-colors-text-secondary, #64748b);\n flex-shrink: 0;\n transition: opacity 100ms, background 100ms;\n}\n.pg-group-zone-grip:hover { opacity: 0.85; background: rgba(0,0,0,0.06); }\n.pg-group-zone-grip:active { cursor: grabbing; }\n.pg-group-zone-label {\n flex: 1;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--pg-colors-text-secondary, #64748b);\n user-select: none;\n}\n\n/* Chips area (the actual drop target) */\n.pg-group-zone-chips {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 6px;\n padding: 6px 10px;\n min-height: 38px;\n flex: 1;\n overflow: auto;\n}\n.pg-group-drop-zone--left .pg-group-zone-chips,\n.pg-group-drop-zone--right .pg-group-zone-chips {\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n overflow-x: hidden;\n}\n.pg-group-zone-chips--over {\n background: var(--pg-colors-group-zone-over, #eff6ff);\n outline: 1px dashed var(--pg-colors-primary, #2563eb);\n outline-offset: -2px;\n}\n\n/* Resize handle */\n.pg-group-drop-zone--top .pg-group-zone-resize {\n height: 4px;\n flex-shrink: 0;\n cursor: ns-resize;\n background: transparent;\n transition: background 100ms;\n}\n.pg-group-drop-zone--top .pg-group-zone-resize:hover { background: var(--pg-colors-primary, #2563eb); opacity: 0.35; }\n.pg-group-drop-zone--left .pg-group-zone-resize {\n position: absolute;\n top: 0; right: 0; bottom: 0;\n width: 4px;\n cursor: ew-resize;\n background: transparent;\n transition: background 100ms;\n}\n.pg-group-drop-zone--right .pg-group-zone-resize {\n position: absolute;\n top: 0; left: 0; bottom: 0;\n width: 4px;\n cursor: ew-resize;\n background: transparent;\n transition: background 100ms;\n}\n.pg-group-drop-zone--left .pg-group-zone-resize:hover,\n.pg-group-drop-zone--right .pg-group-zone-resize:hover { background: var(--pg-colors-primary, #2563eb); opacity: 0.35; }\n\n/* Hint text */\n.pg-group-drop-zone__hint {\n font-size: var(--pg-typography-font-size-sm, 12px);\n color: var(--pg-colors-text-disabled, #94a3b8);\n pointer-events: none;\n user-select: none;\n}\n\n/* Chips */\n.pg-group-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 6px 3px 10px;\n border-radius: var(--pg-borders-radius-pill, 9999px);\n background: var(--pg-colors-chip-background, #e0e7ff);\n color: var(--pg-colors-chip-text, #1e40af);\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-weight: var(--pg-typography-font-weight-medium, 500);\n user-select: none;\n white-space: nowrap;\n transition: opacity 120ms;\n}\n.pg-group-chip--ghost {\n cursor: grabbing;\n}\n.pg-group-chip__label { line-height: 1.2; }\n.pg-group-chip__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n cursor: pointer;\n opacity: 0.55;\n transition: opacity 100ms, background 100ms;\n flex-shrink: 0;\n}\n.pg-group-chip__close:hover { opacity: 1; background: rgba(30,64,175,0.18); }\n.pg-group-chip__sep {\n display: inline-flex;\n align-items: center;\n color: var(--pg-colors-text-disabled, #94a3b8);\n flex-shrink: 0;\n}\n\n";
8
+ export declare const groupDropZoneCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Group drop zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-group-drop-zone--top {\n display: flex;\n flex-direction: row;\n align-items: center;\n flex-shrink: 0;\n height: var(--pg-header-row-height, 44px);\n background: var(--pg-colors-header-background, #f8fafc);\n border-bottom: 1px solid var(--pg-colors-border, #e2e8f0);\n overflow: hidden;\n}\n.pg-group-drop-zone--left {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n width: 160px;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n overflow: hidden;\n position: relative;\n}\n.pg-group-drop-zone--right {\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n width: 160px;\n background: var(--pg-colors-header-background, #f8fafc);\n border-left: 1px solid var(--pg-colors-border, #e2e8f0);\n overflow: hidden;\n position: relative;\n}\n\n/* Zone header row (grip + \"Groups\" label) */\n.pg-group-zone-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px 4px 8px;\n flex-shrink: 0;\n border-bottom: 1px solid var(--pg-colors-border, #e2e8f0);\n user-select: none;\n}\n.pg-group-zone-grip {\n display: flex;\n align-items: center;\n cursor: grab;\n opacity: 0.45;\n padding: 2px 3px;\n border-radius: 3px;\n color: var(--pg-colors-text-secondary, #64748b);\n flex-shrink: 0;\n transition: opacity 100ms, background 100ms;\n}\n.pg-group-zone-grip:hover { opacity: 0.85; background: rgba(0,0,0,0.06); }\n.pg-group-zone-grip:active { cursor: grabbing; }\n.pg-group-zone-label {\n flex: 1;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--pg-colors-text-secondary, #64748b);\n user-select: none;\n}\n\n/* Chips area (the actual drop target) */\n.pg-group-zone-chips {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 6px;\n padding: 6px 10px;\n min-height: 38px;\n flex: 1;\n overflow: auto;\n}\n.pg-group-drop-zone--left .pg-group-zone-chips,\n.pg-group-drop-zone--right .pg-group-zone-chips {\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n overflow-x: hidden;\n}\n.pg-group-zone-chips--over {\n background: var(--pg-colors-group-zone-over, var(--pg-colors-selection-background, #eff6ff));\n outline: 1px dashed var(--pg-colors-primary, #2563eb);\n outline-offset: -2px;\n}\n\n/* Resize handle */\n.pg-group-drop-zone--top .pg-group-zone-resize {\n height: 4px;\n flex-shrink: 0;\n cursor: ns-resize;\n background: transparent;\n transition: background 100ms;\n}\n.pg-group-drop-zone--top .pg-group-zone-resize:hover { background: var(--pg-colors-primary, #2563eb); opacity: 0.35; }\n.pg-group-drop-zone--left .pg-group-zone-resize {\n position: absolute;\n top: 0; right: 0; bottom: 0;\n width: 4px;\n cursor: ew-resize;\n background: transparent;\n transition: background 100ms;\n}\n.pg-group-drop-zone--right .pg-group-zone-resize {\n position: absolute;\n top: 0; left: 0; bottom: 0;\n width: 4px;\n cursor: ew-resize;\n background: transparent;\n transition: background 100ms;\n}\n.pg-group-drop-zone--left .pg-group-zone-resize:hover,\n.pg-group-drop-zone--right .pg-group-zone-resize:hover { background: var(--pg-colors-primary, #2563eb); opacity: 0.35; }\n\n/* Hint text */\n.pg-group-drop-zone__hint {\n font-size: var(--pg-typography-font-size-sm, 12px);\n color: var(--pg-colors-text-disabled, #94a3b8);\n pointer-events: none;\n user-select: none;\n}\n\n/* Chips */\n.pg-group-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 6px 3px 10px;\n border-radius: var(--pg-borders-radius-pill, 9999px);\n background: var(--pg-colors-chip-background, var(--pg-colors-badge-background, #e0e7ff));\n color: var(--pg-colors-chip-text, var(--pg-colors-badge-text, #1e40af));\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-weight: var(--pg-typography-font-weight-medium, 500);\n user-select: none;\n white-space: nowrap;\n transition: opacity 120ms;\n}\n.pg-group-chip--ghost {\n cursor: grabbing;\n}\n.pg-group-chip__label { line-height: 1.2; }\n.pg-group-chip__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n cursor: pointer;\n opacity: 0.55;\n transition: opacity 100ms, background 100ms;\n flex-shrink: 0;\n}\n.pg-group-chip__close:hover { opacity: 1; background: rgba(30,64,175,0.18); }\n.pg-group-chip__sep {\n display: inline-flex;\n align-items: center;\n color: var(--pg-colors-text-disabled, #94a3b8);\n flex-shrink: 0;\n}\n\n";
9
9
  //# sourceMappingURL=group-drop-zone.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"group-drop-zone.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/group-drop-zone.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,yqJAoK5B,CAAC"}
1
+ {"version":3,"file":"group-drop-zone.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/group-drop-zone.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,gxJAoK5B,CAAC"}
@@ -89,7 +89,7 @@ export const groupDropZoneCss = `/* ──────────────
89
89
  overflow-x: hidden;
90
90
  }
91
91
  .pg-group-zone-chips--over {
92
- background: var(--pg-colors-group-zone-over, #eff6ff);
92
+ background: var(--pg-colors-group-zone-over, var(--pg-colors-selection-background, #eff6ff));
93
93
  outline: 1px dashed var(--pg-colors-primary, #2563eb);
94
94
  outline-offset: -2px;
95
95
  }
@@ -137,8 +137,8 @@ export const groupDropZoneCss = `/* ──────────────
137
137
  gap: 5px;
138
138
  padding: 3px 6px 3px 10px;
139
139
  border-radius: var(--pg-borders-radius-pill, 9999px);
140
- background: var(--pg-colors-chip-background, #e0e7ff);
141
- color: var(--pg-colors-chip-text, #1e40af);
140
+ background: var(--pg-colors-chip-background, var(--pg-colors-badge-background, #e0e7ff));
141
+ color: var(--pg-colors-chip-text, var(--pg-colors-badge-text, #1e40af));
142
142
  font-size: var(--pg-typography-font-size-sm, 12px);
143
143
  font-weight: var(--pg-typography-font-weight-medium, 500);
144
144
  user-select: none;
@@ -5,5 +5,5 @@
5
5
  * base-styles.ts; edit here, not there. Order is preserved because CSS
6
6
  * cascade depends on it.
7
7
  */
8
- export declare const headerCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Header rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-header-row, .pg-filter-row {\n display: flex;\n align-items: stretch;\n}\n.pg-header-row { height: var(--pg-header-row-height, 44px); }\n.pg-filter-row {\n height: var(--pg-filter-row-height, 36px);\n border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n background: var(--pg-colors-filter-background, #fff);\n}\n.pg-th {\n display: flex;\n align-items: center;\n position: relative;\n flex-shrink: 0;\n padding: 0;\n color: var(--pg-colors-header-text, #374151);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n font-size: var(--pg-typography-font-size-sm, 12px);\n letter-spacing: var(--pg-typography-letter-spacing-wide, 0.025em);\n text-transform: uppercase;\n border-right: 1px solid var(--pg-colors-header-border, #e2e8f0);\n user-select: none;\n cursor: default;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n overflow: hidden;\n min-width: var(--pg-sizing-column-min-width, 40px);\n}\n.pg-th:last-child { border-right: none; }\n.pg-th--sortable { cursor: pointer; }\n// .pg-th:hover, .pg-th.pg-th--sortable:hover { background: var(--pg-colors-header-hover, #f1f5f9); }\n// .pg-th.pg-th--sorted { background: var(--pg-colors-header-hover, #f1f5f9); }\n.pg-th.pg-th--sort-asc .pg-th__sort-icon,\n.pg-th.pg-th--sort-desc .pg-th__sort-icon { color: var(--pg-colors-primary, #2563eb); }\n.pg-th.pg-th--filter-active .pg-th__label { color: var(--pg-colors-primary, #2563eb); }\n.pg-th--checkbox {\n width: 44px;\n min-width: 44px;\n max-width: 44px;\n justify-content: center;\n flex-shrink: 0;\n}\n.pg-th--serial {\n width: 52px;\n min-width: 52px;\n max-width: 52px;\n justify-content: center;\n flex-shrink: 0;\n}\n.pg-th--auto-group {\n flex-shrink: 0;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n font-size: var(--pg-typography-font-size-xs, 11px);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--pg-colors-text-secondary, #64748b);\n}\n.pg-cell--auto-group-spacer {\n flex-shrink: 0;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n background: transparent;\n}\n.pg-th__content {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n padding: 0 10px 0 12px;\n height: 100%;\n}\n.pg-th__label {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.pg-th__sort-icon { flex-shrink: 0; opacity: 0; color: var(--pg-colors-text-secondary, #475569); }\n/* Aligned column headers */\n.pg-th--align-right .pg-th__label { text-align: right; }\n.pg-th--align-center .pg-th__label { text-align: center; }\n.pg-th--align-center .pg-th__content,\n.pg-th--no-group .pg-th__content {\n justify-content: center;\n}\n.pg-th--no-group .pg-th__label {\n text-align: center;\n}\n/* Reversed header layout for numeric/currency columns: icons LEFT, text RIGHT */\n.pg-th--reverse { flex-direction: row-reverse; }\n.pg-th--reverse .pg-th__content { flex-direction: row-reverse; padding: 0 12px 0 10px; }\n.pg-th--reverse .pg-th__label { flex: 1 1 auto; }\n.pg-th--reverse .pg-th__filter-btn { margin-right: 0; margin-left: 2px; }\n.pg-th--reverse .pg-th__menu-btn { margin-right: 0; margin-left: 4px; }\n.pg-th--sort-asc .pg-th__sort-icon,\n.pg-th--sort-desc .pg-th__sort-icon { opacity: 1; color: var(--pg-colors-primary, #2563eb); }\n/* \u2500\u2500\u2500 Column header filter button \u2500\u2500\u2500 */\n.pg-th__filter-btn {\n flex-shrink: 0;\n display: none;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 4px;\n margin-right: 2px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n opacity: 0.7;\n transition: opacity var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms),\n background var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th:hover .pg-th__filter-btn,\n.pg-th__filter-btn--active { display: flex; }\n.pg-th__filter-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th__filter-btn--active {\n opacity: 1;\n color: var(--pg-colors-primary, #2563eb);\n}\n.pg-th__filter-icon { flex-shrink: 0; color: var(--pg-colors-primary, #2563eb); }\n.pg-th__menu-btn {\n flex-shrink: 0;\n display: none;\n cursor: pointer;\n padding: 6px;\n margin-right: 4px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n opacity: 0.6;\n transition: opacity var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th:hover .pg-th__menu-btn,\n.pg-th__menu-btn--active { display: flex; }\n.pg-th__menu-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th__menu-btn--active { opacity: 1; background: var(--pg-colors-border, #e2e8f0); }\n.pg-th__resize-handle {\n position: absolute;\n right: -1px;\n top: 0;\n width: 6px;\n height: 50%;\n top: 25%;\n cursor: ew-resize;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--pg-colors-resize-handle-color, #d9d9db);\n background: transparent;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n z-index: 5;\n font-size: 10px;\n user-select: none;\n background: #d6d6d6;\n width: 2px;\n}\n/* Right-pinned columns anchor their right edge to the grid border, so the\n resize handle lives on the inner (left) edge \u2014 the edge free to move. */\n.pg-th--pinned-right .pg-th__resize-handle {\n right: auto;\n left: -1px;\n}\n.pg-th__resize-handle:hover,\n.pg-th.pg-resizing .pg-th__resize-handle,\n.pg-th--resizing .pg-th__resize-handle {\n // background: var(--pg-colors-resize-handle-active-color, #2563eb);\n}\n\n/* No vertical-borders mode: completely remove the 1px border slot from both headers and cells */\n.pg-grid--no-v-borders .pg-th { border-right: none; }\n.pg-grid--no-v-borders .pg-cell { border-right: none; }\n// .pg-grid--no-v-borders .pg-th__resize-handle {\n// background: var(--pg-colors-resize-handle-color, #e2e8f0);\n// }\n.pg-grid--no-v-borders .pg-th__resize-handle:hover,\n.pg-grid--no-v-borders .pg-th.pg-resizing .pg-th__resize-handle,\n.pg-grid--no-v-borders .pg-th--resizing .pg-th__resize-handle {\n // background: var(--pg-colors-resize-handle-active-color, #2563eb);\n}\n.pg-th__drag-handle {\n position: absolute;\n left: 2px;\n top: 50%;\n transform: translateY(-50%);\n display: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 24px;\n cursor: grab;\n color: var(--pg-colors-text-secondary, #475569);\n z-index: 2;\n border-radius: 3px;\n}\n.pg-th:hover .pg-th__drag-handle { display: flex; opacity: 0.5; }\n.pg-th__drag-handle:hover { opacity: 1 !important; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th--dragging { opacity: 0.72; cursor: grabbing !important; }\n.pg-th__serial-label { font-size: 11px; opacity: 0.45; }\n.pg-header-checkbox { cursor: pointer; width: 16px; height: 16px; }\n\n/* Inline column-header rename input (column menu \u2192 Rename). */\n.pg-th__rename-input {\n flex: 1 1 auto;\n min-width: 0;\n width: 100%;\n box-sizing: border-box;\n padding: 2px 6px;\n margin: 0 4px;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n color: var(--pg-colors-text-primary, #0f172a);\n background: var(--pg-colors-background, #ffffff);\n border: 1px solid var(--pg-colors-primary, #2563eb);\n border-radius: var(--pg-borders-radius-sm, 4px);\n outline: none;\n box-shadow: 0 0 0 2px var(--pg-colors-primary-soft, rgba(37, 99, 235, 0.16));\n}\n\n";
8
+ export declare const headerCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Header rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-header-row, .pg-filter-row {\n display: flex;\n align-items: stretch;\n}\n.pg-header-row { height: var(--pg-header-row-height, 44px); }\n.pg-filter-row {\n height: var(--pg-filter-row-height, 36px);\n border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n /* Filter row shares the header surface so it reads as one chrome band across\n every mode/variant. A theme may still override via --pg-colors-filter-background. */\n background: var(--pg-colors-filter-background, var(--pg-colors-header-background, #f8fafc));\n}\n.pg-th {\n display: flex;\n align-items: center;\n position: relative;\n flex-shrink: 0;\n padding: 0;\n color: var(--pg-colors-header-text, #374151);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n font-size: var(--pg-typography-font-size-sm, 12px);\n letter-spacing: var(--pg-typography-letter-spacing-wide, 0.025em);\n text-transform: uppercase;\n border-right: 1px solid var(--pg-colors-header-border, #e2e8f0);\n user-select: none;\n cursor: default;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n overflow: hidden;\n min-width: var(--pg-sizing-column-min-width, 40px);\n}\n.pg-th:last-child { border-right: none; }\n.pg-th--sortable { cursor: pointer; }\n// .pg-th:hover, .pg-th.pg-th--sortable:hover { background: var(--pg-colors-header-hover, #f1f5f9); }\n// .pg-th.pg-th--sorted { background: var(--pg-colors-header-hover, #f1f5f9); }\n.pg-th.pg-th--sort-asc .pg-th__sort-icon,\n.pg-th.pg-th--sort-desc .pg-th__sort-icon { color: var(--pg-colors-primary, #2563eb); }\n.pg-th.pg-th--filter-active .pg-th__label { color: var(--pg-colors-primary, #2563eb); }\n.pg-th--checkbox {\n width: 44px;\n min-width: 44px;\n max-width: 44px;\n justify-content: center;\n flex-shrink: 0;\n}\n.pg-th--serial {\n width: 52px;\n min-width: 52px;\n max-width: 52px;\n justify-content: center;\n flex-shrink: 0;\n}\n.pg-th--auto-group {\n flex-shrink: 0;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n font-size: var(--pg-typography-font-size-xs, 11px);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--pg-colors-text-secondary, #64748b);\n}\n.pg-cell--auto-group-spacer {\n flex-shrink: 0;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n background: transparent;\n}\n.pg-th__content {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n padding: 0 10px 0 12px;\n height: 100%;\n}\n.pg-th__label {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.pg-th__sort-icon { flex-shrink: 0; opacity: 0; color: var(--pg-colors-text-secondary, #475569); }\n/* Aligned column headers */\n.pg-th--align-right .pg-th__label { text-align: right; }\n.pg-th--align-center .pg-th__label { text-align: center; }\n.pg-th--align-center .pg-th__content,\n.pg-th--no-group .pg-th__content {\n justify-content: center;\n}\n.pg-th--no-group .pg-th__label {\n text-align: center;\n}\n/* Reversed header layout for numeric/currency columns: icons LEFT, text RIGHT */\n.pg-th--reverse { flex-direction: row-reverse; }\n.pg-th--reverse .pg-th__content { flex-direction: row-reverse; padding: 0 12px 0 10px; }\n.pg-th--reverse .pg-th__label { flex: 1 1 auto; }\n.pg-th--reverse .pg-th__filter-btn { margin-right: 0; margin-left: 2px; }\n.pg-th--reverse .pg-th__menu-btn { margin-right: 0; margin-left: 4px; }\n.pg-th--sort-asc .pg-th__sort-icon,\n.pg-th--sort-desc .pg-th__sort-icon { opacity: 1; color: var(--pg-colors-primary, #2563eb); }\n/* \u2500\u2500\u2500 Column header filter button \u2500\u2500\u2500 */\n.pg-th__filter-btn {\n flex-shrink: 0;\n display: none;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 4px;\n margin-right: 2px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n opacity: 0.7;\n transition: opacity var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms),\n background var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th:hover .pg-th__filter-btn,\n.pg-th__filter-btn--active { display: flex; }\n/* Always-visible mode \u2014 opt in via headerIcons.filter / ColumnDef.filterIconDisplay */\n.pg-th__filter-btn--always { display: flex; }\n.pg-th__filter-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th__filter-btn--active {\n opacity: 1;\n color: var(--pg-colors-primary, #2563eb);\n}\n.pg-th__filter-icon { flex-shrink: 0; color: var(--pg-colors-primary, #2563eb); }\n.pg-th__menu-btn {\n flex-shrink: 0;\n display: none;\n cursor: pointer;\n padding: 6px;\n margin-right: 4px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n opacity: 0.6;\n transition: opacity var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th:hover .pg-th__menu-btn,\n.pg-th__menu-btn--active { display: flex; }\n/* Always-visible mode \u2014 opt in via headerIcons.menu / ColumnDef.menuIconDisplay */\n.pg-th__menu-btn--always { display: flex; }\n.pg-th__menu-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th__menu-btn--active { opacity: 1; background: var(--pg-colors-border, #e2e8f0); }\n.pg-th__resize-handle {\n position: absolute;\n right: -1px;\n top: 0;\n width: 6px;\n height: 50%;\n top: 25%;\n cursor: ew-resize;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--pg-colors-resize-handle-color, #d9d9db);\n background: transparent;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n z-index: 5;\n font-size: 10px;\n user-select: none;\n background: #d6d6d6;\n width: 2px;\n}\n/* Right-pinned columns anchor their right edge to the grid border, so the\n resize handle lives on the inner (left) edge \u2014 the edge free to move. */\n.pg-th--pinned-right .pg-th__resize-handle {\n right: auto;\n left: -1px;\n}\n.pg-th__resize-handle:hover,\n.pg-th.pg-resizing .pg-th__resize-handle,\n.pg-th--resizing .pg-th__resize-handle {\n // background: var(--pg-colors-resize-handle-active-color, #2563eb);\n}\n\n/* No vertical-borders mode: completely remove the 1px border slot from both headers and cells */\n.pg-grid--no-v-borders .pg-th { border-right: none; }\n.pg-grid--no-v-borders .pg-filter-cell { border-right: none; }\n.pg-grid--no-v-borders .pg-cell { border-right: none; }\n// .pg-grid--no-v-borders .pg-th__resize-handle {\n// background: var(--pg-colors-resize-handle-color, #e2e8f0);\n// }\n.pg-grid--no-v-borders .pg-th__resize-handle:hover,\n.pg-grid--no-v-borders .pg-th.pg-resizing .pg-th__resize-handle,\n.pg-grid--no-v-borders .pg-th--resizing .pg-th__resize-handle {\n // background: var(--pg-colors-resize-handle-active-color, #2563eb);\n}\n.pg-th__drag-handle {\n position: absolute;\n left: 2px;\n top: 50%;\n transform: translateY(-50%);\n display: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 24px;\n cursor: grab;\n color: var(--pg-colors-text-secondary, #475569);\n z-index: 2;\n border-radius: 3px;\n}\n.pg-th:hover .pg-th__drag-handle { display: flex; opacity: 0.5; }\n.pg-th__drag-handle:hover { opacity: 1 !important; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th--dragging { opacity: 0.72; cursor: grabbing !important; }\n.pg-th__serial-label { font-size: 11px; opacity: 0.45; }\n.pg-header-checkbox { cursor: pointer; width: 16px; height: 16px; }\n\n/* Inline column-header rename input (column menu \u2192 Rename). */\n.pg-th__rename-input {\n flex: 1 1 auto;\n min-width: 0;\n width: 100%;\n box-sizing: border-box;\n padding: 2px 6px;\n margin: 0 4px;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n color: var(--pg-colors-text-primary, #0f172a);\n background: var(--pg-colors-background, #ffffff);\n border: 1px solid var(--pg-colors-primary, #2563eb);\n border-radius: var(--pg-borders-radius-sm, 4px);\n outline: none;\n box-shadow: 0 0 0 2px var(--pg-colors-primary-soft, rgba(37, 99, 235, 0.16));\n}\n\n";
9
9
  //# sourceMappingURL=header.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,+2PA8NrB,CAAC"}
1
+ {"version":3,"file":"header.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,s5QAqOrB,CAAC"}
@@ -14,7 +14,9 @@ export const headerCss = `/* ─────────────────
14
14
  .pg-filter-row {
15
15
  height: var(--pg-filter-row-height, 36px);
16
16
  border-top: 1px solid var(--pg-colors-border, #e2e8f0);
17
- background: var(--pg-colors-filter-background, #fff);
17
+ /* Filter row shares the header surface so it reads as one chrome band across
18
+ every mode/variant. A theme may still override via --pg-colors-filter-background. */
19
+ background: var(--pg-colors-filter-background, var(--pg-colors-header-background, #f8fafc));
18
20
  }
19
21
  .pg-th {
20
22
  display: flex;
@@ -123,6 +125,8 @@ export const headerCss = `/* ─────────────────
123
125
  }
124
126
  .pg-th:hover .pg-th__filter-btn,
125
127
  .pg-th__filter-btn--active { display: flex; }
128
+ /* Always-visible mode — opt in via headerIcons.filter / ColumnDef.filterIconDisplay */
129
+ .pg-th__filter-btn--always { display: flex; }
126
130
  .pg-th__filter-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }
127
131
  .pg-th__filter-btn--active {
128
132
  opacity: 1;
@@ -142,6 +146,8 @@ export const headerCss = `/* ─────────────────
142
146
  }
143
147
  .pg-th:hover .pg-th__menu-btn,
144
148
  .pg-th__menu-btn--active { display: flex; }
149
+ /* Always-visible mode — opt in via headerIcons.menu / ColumnDef.menuIconDisplay */
150
+ .pg-th__menu-btn--always { display: flex; }
145
151
  .pg-th__menu-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }
146
152
  .pg-th__menu-btn--active { opacity: 1; background: var(--pg-colors-border, #e2e8f0); }
147
153
  .pg-th__resize-handle {
@@ -178,6 +184,7 @@ export const headerCss = `/* ─────────────────
178
184
 
179
185
  /* No vertical-borders mode: completely remove the 1px border slot from both headers and cells */
180
186
  .pg-grid--no-v-borders .pg-th { border-right: none; }
187
+ .pg-grid--no-v-borders .pg-filter-cell { border-right: none; }
181
188
  .pg-grid--no-v-borders .pg-cell { border-right: none; }
182
189
  // .pg-grid--no-v-borders .pg-th__resize-handle {
183
190
  // background: var(--pg-colors-resize-handle-color, #e2e8f0);
@@ -1 +1 @@
1
- {"version":3,"file":"header.css.js","sourceRoot":"","sources":["../../../src/styles/base/header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8NxB,CAAC"}
1
+ {"version":3,"file":"header.css.js","sourceRoot":"","sources":["../../../src/styles/base/header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqOxB,CAAC"}
@@ -5,5 +5,5 @@
5
5
  * base-styles.ts; edit here, not there. Order is preserved because CSS
6
6
  * cascade depends on it.
7
7
  */
8
- export declare const rowDragCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Row Drag \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-grid__body { position: relative; }\n\n.pg-row-drag-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 100%;\n flex-shrink: 0;\n cursor: grab;\n opacity: 0.35;\n color: var(--pg-colors-text-secondary, #475569);\n margin-right: 4px;\n}\n.pg-row-drag-handle:hover { opacity: 0.7; }\n.pg-row-drag-handle:active { cursor: grabbing; }\n\n.pg-row-drag-ghost {\n position: fixed;\n pointer-events: none;\n z-index: 9999;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 10px;\n border-radius: var(--pg-borders-radius-md, 6px);\n border: 1.5px solid var(--pg-colors-primary, #2563eb);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-primary, #2563eb);\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-weight: 500;\n box-shadow: 0 6px 24px rgba(37,99,235,0.13), 0 2px 8px rgba(37,99,235,0.12);\n transform: translate(12px, -50%);\n white-space: nowrap;\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.pg-row-drag-ghost__icon { display: inline-flex; align-items: center; opacity: 0.8; }\n.pg-row-drag-ghost__icon--block { display: none; }\n.pg-row-drag-ghost__label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n\n.pg-row-drag-ghost--outside {\n border-color: var(--pg-colors-danger, #ef4444);\n box-shadow: 0 6px 24px rgba(239,68,68,0.13), 0 2px 8px rgba(239,68,68,0.12);\n color: var(--pg-colors-danger, #ef4444);\n}\n.pg-row-drag-ghost--outside .pg-row-drag-ghost__icon--drag { display: none; }\n.pg-row-drag-ghost--outside .pg-row-drag-ghost__icon--block { display: inline-flex; }\n\n.pg-row-drop-indicator {\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--pg-colors-primary, #2563eb);\n pointer-events: none;\n z-index: 100;\n border-radius: 1px;\n}\n.pg-row-drop-indicator::before {\n content: '';\n position: absolute;\n left: -3px;\n top: -3px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--pg-colors-primary, #2563eb);\n}\n\n/* The dragged row: semi-transparent, moves to virtual landing position */\n.pg-row--row-dragging { opacity: 0.4; }\n\n/* During row drag: kill hover/click on all rows; animate top changes.\n Uses top (not transform) so rows stay within panel overflow:hidden bounds. */\n.pg-grid--row-dragging .pg-row {\n pointer-events: none;\n will-change: top;\n transition: background var(--pg-transitions-duration-fast, 100ms),\n top 130ms cubic-bezier(0.2, 0, 0, 1);\n}\n\n";
8
+ export declare const rowDragCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Row Drag \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-grid__body { position: relative; transform: translateZ(10px);}\n\n.pg-row-drag-handle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 100%;\n flex-shrink: 0;\n cursor: grab;\n opacity: 0.35;\n color: var(--pg-colors-text-secondary, #475569);\n margin-right: 4px;\n}\n.pg-row-drag-handle:hover { opacity: 0.7; }\n.pg-row-drag-handle:active { cursor: grabbing; }\n\n.pg-row-drag-ghost {\n position: fixed;\n pointer-events: none;\n z-index: 9999;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 10px;\n border-radius: var(--pg-borders-radius-md, 6px);\n border: 1.5px solid var(--pg-colors-primary, #2563eb);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-primary, #2563eb);\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-weight: 500;\n box-shadow: 0 6px 24px rgba(37,99,235,0.13), 0 2px 8px rgba(37,99,235,0.12);\n transform: translate(12px, -50%);\n white-space: nowrap;\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.pg-row-drag-ghost__icon { display: inline-flex; align-items: center; opacity: 0.8; }\n.pg-row-drag-ghost__icon--block { display: none; }\n.pg-row-drag-ghost__label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n\n.pg-row-drag-ghost--outside {\n border-color: var(--pg-colors-danger, #ef4444);\n box-shadow: 0 6px 24px rgba(239,68,68,0.13), 0 2px 8px rgba(239,68,68,0.12);\n color: var(--pg-colors-danger, #ef4444);\n}\n.pg-row-drag-ghost--outside .pg-row-drag-ghost__icon--drag { display: none; }\n.pg-row-drag-ghost--outside .pg-row-drag-ghost__icon--block { display: inline-flex; }\n\n.pg-row-drop-indicator {\n position: absolute;\n left: 0;\n right: 0;\n height: 2px;\n background: var(--pg-colors-primary, #2563eb);\n pointer-events: none;\n z-index: 100;\n border-radius: 1px;\n}\n.pg-row-drop-indicator::before {\n content: '';\n position: absolute;\n left: -3px;\n top: -3px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--pg-colors-primary, #2563eb);\n}\n\n/* The dragged row: semi-transparent, moves to virtual landing position */\n.pg-row--row-dragging { opacity: 0.4; }\n\n/* During row drag: kill hover/click on all rows; animate top changes.\n Uses top (not transform) so rows stay within panel overflow:hidden bounds. */\n.pg-grid--row-dragging .pg-row {\n pointer-events: none;\n will-change: top;\n transition: background var(--pg-transitions-duration-fast, 100ms),\n top 130ms cubic-bezier(0.2, 0, 0, 1);\n}\n\n";
9
9
  //# sourceMappingURL=row-drag.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"row-drag.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/row-drag.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,0xFAoFtB,CAAC"}
1
+ {"version":3,"file":"row-drag.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/row-drag.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,szFAoFtB,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * cascade depends on it.
7
7
  */
8
8
  export const rowDragCss = `/* ──────────────────── Row Drag ──────────────────── */
9
- .pg-grid__body { position: relative; }
9
+ .pg-grid__body { position: relative; transform: translateZ(10px);}
10
10
 
11
11
  .pg-row-drag-handle {
12
12
  display: inline-flex;
@@ -5,5 +5,5 @@
5
5
  * base-styles.ts; edit here, not there. Order is preserved because CSS
6
6
  * cascade depends on it.
7
7
  */
8
- export declare const rowsCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-row {\n display: flex;\n align-items: stretch;\n position: absolute;\n left: 0;\n width: 100%;\n border-bottom: 1px solid var(--pg-colors-border, #e2e8f0);\n background: var(--pg-colors-row-background, #fff);\n transition: background var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-row--hover { background: var(--pg-colors-row-hover, #f0f7ff) !important; }\n.pg-row--alt { background: var(--pg-colors-row-background-alt, #f8fafc); }\n.pg-row--selected {\n background: var(--pg-colors-row-selected, #eff6ff) !important;\n outline: none;\n}\n.pg-row--selected .pg-cell { color: inherit; }\n.pg-row--group {\n background: var(--pg-colors-group-row-background, #f8fafc);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n // border-left: var(--pg-group-row-border-width, 3px) solid var(--pg-colors-primary, #2563eb);\n cursor: pointer;\n}\n.pg-row--group:hover,\n.pg-row--group.pg-row--hover {\n background: var(--pg-colors-group-row-hover, #eff2ff) !important;\n}\n.pg-row--group:hover .pg-row-group__toggle,\n.pg-row--group.pg-row--hover .pg-row-group__toggle {\n background: var(--pg-colors-group-toggle-hover, rgba(37, 99, 235, 0.1));\n color: var(--pg-colors-primary, #2563eb);\n}\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Group footer row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/*\n * Appears below the last leaf child of each expanded group.\n * Shows the same aggregate values as the group header row (AG Grid groupIncludeFooter).\n * Cells are fully selectable and copyable; editing is blocked because values are computed.\n */\n.pg-row--group-footer {\n background: var(--pg-colors-group-footer-background, #eef2fa);\n font-style: italic;\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n border-bottom: 2px solid var(--pg-colors-primary-light, #bfdbfe);\n cursor: default;\n}\n.pg-row--group-footer:hover,\n.pg-row--group-footer.pg-row--hover {\n background: var(--pg-colors-group-footer-hover, #e0e9f8) !important;\n}\n/* Level-based indentation mirrors the group header rules */\n.pg-row--group-footer[data-level=\"0\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-0, 8px); }\n.pg-row--group-footer[data-level=\"1\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-1, 28px); }\n.pg-row--group-footer[data-level=\"2\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-2, 48px); }\n.pg-row--group-footer[data-level=\"3\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-3, 68px); }\n.pg-row--group-footer[data-level=\"4\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-4, 88px); }\n.pg-row--group-footer[data-level=\"5\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-5, 108px); }\n.pg-row--group-footer .pg-row-group__label {\n color: var(--pg-colors-text-secondary, #475569);\n}\n/* Dark-mode overrides */\n.pg-grid[data-theme=\"dark\"] .pg-row--group-footer {\n background: var(--pg-colors-group-footer-background, rgba(37, 99, 235, 0.06));\n border-bottom-color: rgba(96, 165, 250, 0.28);\n}\n.pg-grid[data-theme=\"dark\"] .pg-row--group-footer:hover,\n.pg-grid[data-theme=\"dark\"] .pg-row--group-footer.pg-row--hover {\n background: var(--pg-colors-group-footer-hover, rgba(37, 99, 235, 0.11)) !important;\n}\n.pg-grid[data-theme=\"dark\"] .pg-row--group-footer .pg-row-group__label {\n color: var(--pg-colors-text-secondary, #94a3b8);\n}\n\n";
8
+ export declare const rowsCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-row {\n display: flex;\n align-items: stretch;\n position: absolute;\n left: 0;\n width: 100%;\n border-bottom: 1px solid var(--pg-colors-border, #e2e8f0);\n background: var(--pg-colors-row-background, #fff);\n transition: background var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-row--hover { background: var(--pg-colors-row-hover, #f0f7ff) !important; }\n.pg-row--alt { background: var(--pg-colors-row-background-alt, #f8fafc); }\n.pg-row--selected {\n background: var(--pg-colors-row-selected, #eff6ff) !important;\n outline: none;\n}\n.pg-row--selected .pg-cell { color: inherit; }\n\n/* Row-selection outline \u2014 a thin primary-coloured border drawn around the\n whole selected block, mirroring the cell-range selection border. Edges are\n drawn via ::after so corners connect cleanly; JS (BodyRenderer.refreshRow-\n SelectionEdges) adds the edge classes only on the block's outer rows/parts\n (top of a run, bottom of a run, leftmost part, rightmost part) so interior\n boundaries between adjacent selected rows carry no line. */\n.pg-row--selected::after {\n content: '';\n position: absolute;\n inset: 0;\n border: 0 solid var(--pg-colors-primary, #2563eb);\n pointer-events: none;\n z-index: 3;\n}\n.pg-row--sel-top::after { border-top-width: 1px; }\n.pg-row--sel-bottom::after { border-bottom-width: 1px; }\n.pg-row--sel-edge-left::after { border-left-width: 1px; }\n.pg-row--sel-edge-right::after { border-right-width: 1px; }\n.pg-row--group {\n background: var(--pg-colors-group-row-background, #f8fafc);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n // border-left: var(--pg-group-row-border-width, 3px) solid var(--pg-colors-primary, #2563eb);\n cursor: pointer;\n}\n.pg-row--group:hover,\n.pg-row--group.pg-row--hover {\n background: var(--pg-colors-group-row-hover, var(--pg-colors-row-hover, #eff2ff)) !important;\n}\n.pg-row--group:hover .pg-row-group__toggle,\n.pg-row--group.pg-row--hover .pg-row-group__toggle {\n background: var(--pg-colors-group-toggle-hover, rgba(37, 99, 235, 0.1));\n color: var(--pg-colors-primary, #2563eb);\n}\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Group footer row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/*\n * Appears below the last leaf child of each expanded group.\n * Shows the same aggregate values as the group header row (AG Grid groupIncludeFooter).\n * Cells are fully selectable and copyable; editing is blocked because values are computed.\n */\n.pg-row--group-footer {\n background: var(--pg-colors-group-footer-background, var(--pg-colors-background-alt, #eef2fa));\n font-style: italic;\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n border-bottom: 2px solid var(--pg-colors-primary-light, var(--pg-colors-border-strong, #bfdbfe));\n cursor: default;\n}\n.pg-row--group-footer:hover,\n.pg-row--group-footer.pg-row--hover {\n background: var(--pg-colors-group-footer-hover, var(--pg-colors-row-hover, #e0e9f8)) !important;\n}\n/* Level-based indentation mirrors the group header rules */\n.pg-row--group-footer[data-level=\"0\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-0, 8px); }\n.pg-row--group-footer[data-level=\"1\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-1, 28px); }\n.pg-row--group-footer[data-level=\"2\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-2, 48px); }\n.pg-row--group-footer[data-level=\"3\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-3, 68px); }\n.pg-row--group-footer[data-level=\"4\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-4, 88px); }\n.pg-row--group-footer[data-level=\"5\"] .pg-row-group__cell { padding-left: var(--pg-group-indent-5, 108px); }\n.pg-row--group-footer .pg-row-group__label {\n color: var(--pg-colors-text-secondary, #475569);\n}\n\n";
9
9
  //# sourceMappingURL=rows.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rows.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/rows.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,0uHA0EnB,CAAC"}
1
+ {"version":3,"file":"rows.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/rows.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,mqIAiFnB,CAAC"}
@@ -23,6 +23,25 @@ export const rowsCss = `/* ─────────────────
23
23
  outline: none;
24
24
  }
25
25
  .pg-row--selected .pg-cell { color: inherit; }
26
+
27
+ /* Row-selection outline — a thin primary-coloured border drawn around the
28
+ whole selected block, mirroring the cell-range selection border. Edges are
29
+ drawn via ::after so corners connect cleanly; JS (BodyRenderer.refreshRow-
30
+ SelectionEdges) adds the edge classes only on the block's outer rows/parts
31
+ (top of a run, bottom of a run, leftmost part, rightmost part) so interior
32
+ boundaries between adjacent selected rows carry no line. */
33
+ .pg-row--selected::after {
34
+ content: '';
35
+ position: absolute;
36
+ inset: 0;
37
+ border: 0 solid var(--pg-colors-primary, #2563eb);
38
+ pointer-events: none;
39
+ z-index: 3;
40
+ }
41
+ .pg-row--sel-top::after { border-top-width: 1px; }
42
+ .pg-row--sel-bottom::after { border-bottom-width: 1px; }
43
+ .pg-row--sel-edge-left::after { border-left-width: 1px; }
44
+ .pg-row--sel-edge-right::after { border-right-width: 1px; }
26
45
  .pg-row--group {
27
46
  background: var(--pg-colors-group-row-background, #f8fafc);
28
47
  font-weight: var(--pg-typography-font-weight-semi-bold, 600);
@@ -31,7 +50,7 @@ export const rowsCss = `/* ─────────────────
31
50
  }
32
51
  .pg-row--group:hover,
33
52
  .pg-row--group.pg-row--hover {
34
- background: var(--pg-colors-group-row-hover, #eff2ff) !important;
53
+ background: var(--pg-colors-group-row-hover, var(--pg-colors-row-hover, #eff2ff)) !important;
35
54
  }
36
55
  .pg-row--group:hover .pg-row-group__toggle,
37
56
  .pg-row--group.pg-row--hover .pg-row-group__toggle {
@@ -46,15 +65,15 @@ export const rowsCss = `/* ─────────────────
46
65
  * Cells are fully selectable and copyable; editing is blocked because values are computed.
47
66
  */
48
67
  .pg-row--group-footer {
49
- background: var(--pg-colors-group-footer-background, #eef2fa);
68
+ background: var(--pg-colors-group-footer-background, var(--pg-colors-background-alt, #eef2fa));
50
69
  font-style: italic;
51
70
  font-weight: var(--pg-typography-font-weight-semi-bold, 600);
52
- border-bottom: 2px solid var(--pg-colors-primary-light, #bfdbfe);
71
+ border-bottom: 2px solid var(--pg-colors-primary-light, var(--pg-colors-border-strong, #bfdbfe));
53
72
  cursor: default;
54
73
  }
55
74
  .pg-row--group-footer:hover,
56
75
  .pg-row--group-footer.pg-row--hover {
57
- background: var(--pg-colors-group-footer-hover, #e0e9f8) !important;
76
+ background: var(--pg-colors-group-footer-hover, var(--pg-colors-row-hover, #e0e9f8)) !important;
58
77
  }
59
78
  /* Level-based indentation mirrors the group header rules */
60
79
  .pg-row--group-footer[data-level="0"] .pg-row-group__cell { padding-left: var(--pg-group-indent-0, 8px); }
@@ -66,18 +85,6 @@ export const rowsCss = `/* ─────────────────
66
85
  .pg-row--group-footer .pg-row-group__label {
67
86
  color: var(--pg-colors-text-secondary, #475569);
68
87
  }
69
- /* Dark-mode overrides */
70
- .pg-grid[data-theme="dark"] .pg-row--group-footer {
71
- background: var(--pg-colors-group-footer-background, rgba(37, 99, 235, 0.06));
72
- border-bottom-color: rgba(96, 165, 250, 0.28);
73
- }
74
- .pg-grid[data-theme="dark"] .pg-row--group-footer:hover,
75
- .pg-grid[data-theme="dark"] .pg-row--group-footer.pg-row--hover {
76
- background: var(--pg-colors-group-footer-hover, rgba(37, 99, 235, 0.11)) !important;
77
- }
78
- .pg-grid[data-theme="dark"] .pg-row--group-footer .pg-row-group__label {
79
- color: var(--pg-colors-text-secondary, #94a3b8);
80
- }
81
88
 
82
89
  `;
83
90
  //# sourceMappingURL=rows.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rows.css.js","sourceRoot":"","sources":["../../../src/styles/base/rows.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0EtB,CAAC"}
1
+ {"version":3,"file":"rows.css.js","sourceRoot":"","sources":["../../../src/styles/base/rows.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFtB,CAAC"}
@@ -5,5 +5,5 @@
5
5
  * base-styles.ts; edit here, not there. Order is preserved because CSS
6
6
  * cascade depends on it.
7
7
  */
8
- export declare const scrollbarsCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Scrollbars \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Native vertical scrollbar \u2014 flex item that lives beside the center panel.\n It is NOT absolutely positioned so it never overlaps cell content; the center\n panel shrinks to make room for it, keeping every cell border fully visible. */\n.pg-scrollbar-v-native {\n flex-shrink: 0;\n overflow-y: scroll;\n overflow-x: hidden;\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-spacer {\n width: 1px;\n pointer-events: none;\n}\n/* Horizontal row: sits below the body */\n.pg-scrollbar-h-row {\n display: flex;\n flex-direction: row;\n flex-shrink: 0;\n border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-scrollbar-h-spacer { flex-shrink: 0; background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc)); }\n.pg-scrollbar-h-spacer--left { width: var(--pg-left-panel-width, 0px); overflow: scroll; }\n.pg-scrollbar-h-spacer--right { width: var(--pg-right-panel-width, 0px); overflow: scroll; }\n/* Aligns the h-scroll track with the narrowed center panel (which is now\n offset by the vertical scrollbar width captured in --pg-scrollbar-v-width). */\n.pg-scrollbar-h-spacer--vscroll {\n flex-shrink: 0;\n width: 0px;\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n/* Native horizontal scrollbar container */\n.pg-scrollbar-h-native {\n flex: 1 1 0;\n min-width: 0;\n overflow-x: scroll;\n overflow-y: hidden;\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-h-content {\n height: 1px;\n pointer-events: none;\n}\n\n/* \u2500\u2500 Themed native scrollbar (track + thumb) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Without these the browser paints its default (light) scrollbar, so dark\n themes showed white bars. Colours come from theme tokens with light-theme\n fallbacks, so every theme \u2014 including custom ones \u2014 themes automatically.\n Firefox uses scrollbar-color; Chromium/Safari use the ::-webkit pseudos. */\n.pg-scrollbar-v-native,\n.pg-scrollbar-h-native,\n.pg-scrollbar-h-spacer--left,\n.pg-scrollbar-h-spacer--right {\n // scrollbar-width: thin;\n scrollbar-color: var(--pg-colors-scrollbar-thumb, #ffffff) var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar,\n.pg-scrollbar-h-native::-webkit-scrollbar,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar {\n // width: var(--pg-scrollbar-v-width, 12px);\n // height: var(--pg-scrollbar-h-height, 12px);\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-track,\n.pg-scrollbar-h-native::-webkit-scrollbar-track,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar-track,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar-track {\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-thumb,\n.pg-scrollbar-h-native::-webkit-scrollbar-thumb,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar-thumb,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar-thumb {\n background: var(--pg-colors-scrollbar-thumb, #cbd5e1);\n // border-radius: 8px;\n // border: 3px solid var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-thumb:hover,\n.pg-scrollbar-h-native::-webkit-scrollbar-thumb:hover,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar-thumb:hover,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar-thumb:hover {\n background: var(--pg-colors-scrollbar-thumb-hover, #94a3b8);\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-corner,\n.pg-scrollbar-h-native::-webkit-scrollbar-corner {\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n\n/* Hidden state \u2014 applied to wraps */\n.pg-scrollbar--hidden { display: none; }\n\n";
8
+ export declare const scrollbarsCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Scrollbars \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Native vertical scrollbar \u2014 flex item that lives beside the center panel.\n It is NOT absolutely positioned so it never overlaps cell content; the center\n panel shrinks to make room for it, keeping every cell border fully visible. */\n.pg-scrollbar-v-native {\n flex-shrink: 0;\n overflow-y: scroll;\n overflow-x: hidden;\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-spacer {\n width: 1px;\n pointer-events: none;\n}\n/* Horizontal row: sits below the body */\n.pg-scrollbar-h-row {\n display: flex;\n flex-direction: row;\n flex-shrink: 0;\n border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-scrollbar-h-spacer { flex-shrink: 0; background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc)); }\n.pg-scrollbar-h-spacer--left { width: var(--pg-left-panel-width, 0px); overflow: scroll; }\n.pg-scrollbar-h-spacer--right { width: var(--pg-right-panel-width, 0px); overflow: scroll; }\n/* Aligns the h-scroll track with the narrowed center panel: reserves exactly\n the vertical scrollbar's *current* width (0 when hidden) so the native\n h-scroll container's client width equals the center viewport \u2014 otherwise the\n track is wider than the panel and the body scrolls short by the scrollbar\n width, leaving the last column partly hidden. */\n.pg-scrollbar-h-spacer--vscroll {\n flex-shrink: 0;\n width: var(--pg-scrollbar-v-live-width, 0px);\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n/* Native horizontal scrollbar container */\n.pg-scrollbar-h-native {\n flex: 1 1 0;\n min-width: 0;\n overflow-x: scroll;\n overflow-y: hidden;\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-h-content {\n height: 1px;\n pointer-events: none;\n}\n\n/* \u2500\u2500 Themed native scrollbar (track + thumb) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Without these the browser paints its default (light) scrollbar, so dark\n themes showed white bars. Colours come from theme tokens with light-theme\n fallbacks, so every theme \u2014 including custom ones \u2014 themes automatically.\n Firefox uses scrollbar-color; Chromium/Safari use the ::-webkit pseudos. */\n.pg-scrollbar-v-native,\n.pg-scrollbar-h-native,\n.pg-scrollbar-h-spacer--left,\n.pg-scrollbar-h-spacer--right {\n // scrollbar-width: thin;\n scrollbar-color: var(--pg-colors-scrollbar-thumb, #ffffff) var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar,\n.pg-scrollbar-h-native::-webkit-scrollbar,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar {\n // width: var(--pg-scrollbar-v-width, 12px);\n // height: var(--pg-scrollbar-h-height, 12px);\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-track,\n.pg-scrollbar-h-native::-webkit-scrollbar-track,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar-track,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar-track {\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-thumb,\n.pg-scrollbar-h-native::-webkit-scrollbar-thumb,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar-thumb,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar-thumb {\n background: var(--pg-colors-scrollbar-thumb, #cbd5e1);\n // border-radius: 8px;\n // border: 3px solid var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-thumb:hover,\n.pg-scrollbar-h-native::-webkit-scrollbar-thumb:hover,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar-thumb:hover,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar-thumb:hover {\n background: var(--pg-colors-scrollbar-thumb-hover, #94a3b8);\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-corner,\n.pg-scrollbar-h-native::-webkit-scrollbar-corner {\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n\n/* Hidden state \u2014 applied to wraps */\n.pg-scrollbar--hidden { display: none; }\n\n";
9
9
  //# sourceMappingURL=scrollbars.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbars.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/scrollbars.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,g2IA6FzB,CAAC"}
1
+ {"version":3,"file":"scrollbars.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/scrollbars.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,ulJAgGzB,CAAC"}
@@ -30,11 +30,14 @@ export const scrollbarsCss = `/* ───────────────
30
30
  .pg-scrollbar-h-spacer { flex-shrink: 0; background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc)); }
31
31
  .pg-scrollbar-h-spacer--left { width: var(--pg-left-panel-width, 0px); overflow: scroll; }
32
32
  .pg-scrollbar-h-spacer--right { width: var(--pg-right-panel-width, 0px); overflow: scroll; }
33
- /* Aligns the h-scroll track with the narrowed center panel (which is now
34
- offset by the vertical scrollbar width captured in --pg-scrollbar-v-width). */
33
+ /* Aligns the h-scroll track with the narrowed center panel: reserves exactly
34
+ the vertical scrollbar's *current* width (0 when hidden) so the native
35
+ h-scroll container's client width equals the center viewport — otherwise the
36
+ track is wider than the panel and the body scrolls short by the scrollbar
37
+ width, leaving the last column partly hidden. */
35
38
  .pg-scrollbar-h-spacer--vscroll {
36
39
  flex-shrink: 0;
37
- width: 0px;
40
+ width: var(--pg-scrollbar-v-live-width, 0px);
38
41
  background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
39
42
  }
40
43
  /* Native horizontal scrollbar container */
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbars.css.js","sourceRoot":"","sources":["../../../src/styles/base/scrollbars.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6F5B,CAAC"}
1
+ {"version":3,"file":"scrollbars.css.js","sourceRoot":"","sources":["../../../src/styles/base/scrollbars.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgG5B,CAAC"}
@@ -5,5 +5,5 @@
5
5
  * base-styles.ts; edit here, not there. Order is preserved because CSS
6
6
  * cascade depends on it.
7
7
  */
8
- export declare const sparklineCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Context menu submenu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-context-menu__item { display: flex; align-items: center; gap: 8px; }\n.pg-context-menu__item--has-sub { position: relative; padding-right: 28px; max-width: stretch; }\n.pg-context-menu__item--has-sub > .pg-context-menu__sub { display: none; }\n.pg-context-menu__item--has-sub:hover > .pg-context-menu__sub { display: block; }\n.pg-context-menu__sub {\n position: absolute; left: 100%; top: -4px; z-index: 10001;\n background: var(--pg-colors-surface,#fff);\n border: 1px solid var(--pg-colors-border,#e2e8f0);\n border-radius: var(--pg-borders-radius-md,6px);\n box-shadow: var(--pg-shadows-dropdown,0 8px 24px rgba(0,0,0,0.12));\n min-width: 175px; padding: 4px;\n white-space: nowrap;\n}\n.pg-context-menu__item--has-sub::after {\n content: '\u203A'; position: absolute; right: 10px; top: 50%; transform: translateY(-50%);\n font-size: 16px; color: var(--pg-colors-text-secondary,#64748b); line-height: 1;\n}\n.pg-context-menu__icon {\n display: inline-flex; align-items: center; width: 16px; flex-shrink: 0;\n color: var(--pg-colors-text-secondary,#64748b);\n}\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Sparkline cell \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Cell value wrapper \u2014 fills the inner cell area as a flex row */\n.pg-cell__value--sparkline {\n display: flex;\n align-items: stretch;\n width: 100%;\n height: 100%;\n padding: 0;\n}\n\n/* Wrapper div that stretches canvas to fill the cell */\n.pg-sparkline-wrapper {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n}\n\n/* Canvas element \u2014 fills wrapper, no border or background */\n.pg-sparkline {\n display: block;\n width: 100%;\n height: 100%;\n min-width: 0;\n cursor: crosshair;\n}\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Sparkline tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Singleton floating tooltip attached to document.body */\n.pg-sparkline-tooltip {\n position: fixed;\n z-index: 99999;\n pointer-events: none;\n background: var(--pg-colors-surface, #fff);\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-md, 6px);\n box-shadow: var(--pg-shadows-tooltip, 0 4px 14px rgba(0,0,0,0.12));\n padding: 6px 10px;\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n color: var(--pg-colors-text-primary, #0f172a);\n white-space: nowrap;\n line-height: 1.5;\n min-width: 60px;\n}\n.pg-sparkline-tooltip--hidden {\n display: none;\n}\n\n/* x-axis label row (shown when data is an object array with xKey) */\n.pg-sparkline-tooltip__label {\n color: var(--pg-colors-text-secondary, #64748b);\n font-size: var(--pg-typography-font-size-xs, 11px);\n margin-bottom: 2px;\n}\n\n/* Numeric value row */\n.pg-sparkline-tooltip__value {\n font-weight: 600;\n color: var(--pg-colors-text-primary, #0f172a);\n}\n\n/* OHLC four-row layout */\n.pg-sparkline-tooltip__ohlc-row {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n}\n.pg-sparkline-tooltip__ohlc-key {\n color: var(--pg-colors-text-secondary, #64748b);\n font-size: var(--pg-typography-font-size-xs, 11px);\n min-width: 12px;\n}\n\n";
8
+ export declare const sparklineCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Context menu submenu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-context-menu__item { display: flex; align-items: center; gap: 8px; }\n.pg-context-menu__item--has-sub { position: relative; padding-right: 28px; max-width: stretch; }\n.pg-context-menu__item--has-sub > .pg-context-menu__sub { display: none; }\n.pg-context-menu__item--has-sub:hover > .pg-context-menu__sub { display: block; }\n.pg-context-menu__sub {\n position: absolute; left: 100%; top: -4px; z-index: 10001;\n background: var(--pg-colors-surface,#fff);\n border: 1px solid var(--pg-colors-border,#e2e8f0);\n border-radius: var(--pg-borders-radius-md,6px);\n box-shadow: var(--pg-shadows-dropdown,0 8px 24px rgba(0,0,0,0.12));\n min-width: 175px; padding: 4px;\n white-space: nowrap;\n}\n/* Viewport-aware flip: when a submenu near the right edge would overflow,\n JS (positionSubmenu) adds --sub-left so the flyout opens to the left\n instead. Works at any nesting depth since every wrapper shares the class. */\n.pg-context-menu__item--has-sub.pg-context-menu__item--sub-left > .pg-context-menu__sub {\n left: auto; right: 100%;\n}\n.pg-context-menu__item--has-sub::after {\n content: '\u203A'; position: absolute; right: 10px; top: 50%; transform: translateY(-50%);\n font-size: 16px; color: var(--pg-colors-text-secondary,#64748b); line-height: 1;\n}\n.pg-context-menu__icon {\n display: inline-flex; align-items: center; width: 16px; flex-shrink: 0;\n color: var(--pg-colors-text-secondary,#64748b);\n}\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Sparkline cell \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Cell value wrapper \u2014 fills the inner cell area as a flex row */\n.pg-cell__value--sparkline {\n display: flex;\n align-items: stretch;\n width: 100%;\n height: 100%;\n padding: 0;\n}\n\n/* Wrapper div that stretches canvas to fill the cell */\n.pg-sparkline-wrapper {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n min-width: 0;\n}\n\n/* Canvas element \u2014 fills wrapper, no border or background */\n.pg-sparkline {\n display: block;\n width: 100%;\n height: 100%;\n min-width: 0;\n cursor: crosshair;\n}\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Sparkline tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Singleton floating tooltip attached to document.body */\n.pg-sparkline-tooltip {\n position: fixed;\n z-index: 99999;\n pointer-events: none;\n background: var(--pg-colors-surface, #fff);\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-md, 6px);\n box-shadow: var(--pg-shadows-tooltip, 0 4px 14px rgba(0,0,0,0.12));\n padding: 6px 10px;\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n color: var(--pg-colors-text-primary, #0f172a);\n white-space: nowrap;\n line-height: 1.5;\n min-width: 60px;\n}\n.pg-sparkline-tooltip--hidden {\n display: none;\n}\n\n/* x-axis label row (shown when data is an object array with xKey) */\n.pg-sparkline-tooltip__label {\n color: var(--pg-colors-text-secondary, #64748b);\n font-size: var(--pg-typography-font-size-xs, 11px);\n margin-bottom: 2px;\n}\n\n/* Numeric value row */\n.pg-sparkline-tooltip__value {\n font-weight: 600;\n color: var(--pg-colors-text-primary, #0f172a);\n}\n\n/* OHLC four-row layout */\n.pg-sparkline-tooltip__ohlc-row {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n}\n.pg-sparkline-tooltip__ohlc-key {\n color: var(--pg-colors-text-secondary, #64748b);\n font-size: var(--pg-typography-font-size-xs, 11px);\n min-width: 12px;\n}\n\n";
9
9
  //# sourceMappingURL=sparkline.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sparkline.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/sparkline.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,6uHAoGxB,CAAC"}
1
+ {"version":3,"file":"sparkline.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/sparkline.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,6kIA0GxB,CAAC"}
@@ -19,6 +19,12 @@ export const sparklineCss = `/* ────────────────
19
19
  min-width: 175px; padding: 4px;
20
20
  white-space: nowrap;
21
21
  }
22
+ /* Viewport-aware flip: when a submenu near the right edge would overflow,
23
+ JS (positionSubmenu) adds --sub-left so the flyout opens to the left
24
+ instead. Works at any nesting depth since every wrapper shares the class. */
25
+ .pg-context-menu__item--has-sub.pg-context-menu__item--sub-left > .pg-context-menu__sub {
26
+ left: auto; right: 100%;
27
+ }
22
28
  .pg-context-menu__item--has-sub::after {
23
29
  content: '›'; position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
24
30
  font-size: 16px; color: var(--pg-colors-text-secondary,#64748b); line-height: 1;
@@ -1 +1 @@
1
- {"version":3,"file":"sparkline.css.js","sourceRoot":"","sources":["../../../src/styles/base/sparkline.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoG3B,CAAC"}
1
+ {"version":3,"file":"sparkline.css.js","sourceRoot":"","sources":["../../../src/styles/base/sparkline.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0G3B,CAAC"}
@@ -5,5 +5,5 @@
5
5
  * base-styles.ts; edit here, not there. Order is preserved because CSS
6
6
  * cascade depends on it.
7
7
  */
8
- export declare const tooltipCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Custom cell tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Only mounted/shown for columns with renderer.tooltip \u2014 plain columns keep\n * using the free native title attribute. Positioned via a transform set\n * in JS relative to .pg-grid__body so it never affects grid layout. */\n.pg-tooltip {\n position: absolute;\n top: 0;\n left: 0;\n z-index: var(--pg-z-index-tooltip, 150);\n max-width: 320px;\n padding: var(--pg-spacing-xs, 6px) var(--pg-spacing-sm, 10px);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-tooltip-bg, #1f2937);\n color: var(--pg-colors-tooltip-text, #ffffff);\n font-family: var(--pg-typography-font-family, sans-serif);\n font-size: var(--pg-typography-font-size-xs, 12px);\n line-height: 1.4;\n box-shadow: var(--pg-shadows-dropdown, 0 4px 12px rgba(0, 0, 0, 0.15));\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition:\n opacity var(--pg-transitions-duration-fast, 100ms),\n visibility var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-tooltip--visible {\n opacity: 1;\n visibility: visible;\n}\n\n";
8
+ export declare const tooltipCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Custom cell tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Only mounted/shown for columns with renderer.tooltip \u2014 plain columns keep\n * using the free native title attribute. Positioned via a transform set\n * in JS relative to .pg-grid__body so it never affects grid layout. */\n.pg-tooltip {\n position: absolute;\n top: 0;\n left: 0;\n z-index: var(--pg-z-index-tooltip, 150);\n max-width: 320px;\n padding: var(--pg-spacing-xs, 6px) var(--pg-spacing-sm, 10px);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-tooltip-background, #1f2937);\n color: var(--pg-colors-tooltip-text, #ffffff);\n font-family: var(--pg-typography-font-family, sans-serif);\n font-size: var(--pg-typography-font-size-xs, 12px);\n line-height: 1.4;\n box-shadow: var(--pg-shadows-dropdown, 0 4px 12px rgba(0, 0, 0, 0.15));\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition:\n opacity var(--pg-transitions-duration-fast, 100ms),\n visibility var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-tooltip--visible {\n opacity: 1;\n visibility: visible;\n}\n\n";
9
9
  //# sourceMappingURL=tooltip.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/tooltip.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,+yCA8BtB,CAAC"}
1
+ {"version":3,"file":"tooltip.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/tooltip.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,uzCA8BtB,CAAC"}
@@ -17,7 +17,7 @@ export const tooltipCss = `/* ────────────────
17
17
  max-width: 320px;
18
18
  padding: var(--pg-spacing-xs, 6px) var(--pg-spacing-sm, 10px);
19
19
  border-radius: var(--pg-borders-radius-sm, 4px);
20
- background: var(--pg-colors-tooltip-bg, #1f2937);
20
+ background: var(--pg-colors-tooltip-background, #1f2937);
21
21
  color: var(--pg-colors-tooltip-text, #ffffff);
22
22
  font-family: var(--pg-typography-font-family, sans-serif);
23
23
  font-size: var(--pg-typography-font-size-xs, 12px);
@@ -1 +1 @@
1
- {"version":3,"file":"base-styles.d.ts","sourceRoot":"","sources":["../../src/styles/base-styles.ts"],"names":[],"mappings":"AA4EA,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
1
+ {"version":3,"file":"base-styles.d.ts","sourceRoot":"","sources":["../../src/styles/base-styles.ts"],"names":[],"mappings":"AA+EA,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -2,7 +2,6 @@ import { themeQuartzCss } from './themes/theme-quartz';
2
2
  import { themeAlpineCss } from './themes/theme-alpine';
3
3
  import { themeBalhamCss } from './themes/theme-balham';
4
4
  import { themeMaterialCss } from './themes/theme-material';
5
- import { themeDarkCss } from './themes/theme-dark';
6
5
  // Base styles are authored as focused per-feature modules under ./base/ for
7
6
  // maintainability, then concatenated here in a FIXED order. The order matters:
8
7
  // CSS cascade resolves same-specificity conflicts by source order, so these
@@ -68,7 +67,11 @@ const baseCss = [
68
67
  columnChooserCss,
69
68
  touchCss,
70
69
  ].join('');
71
- const css = [baseCss, themeQuartzCss, themeAlpineCss, themeBalhamCss, themeMaterialCss, themeDarkCss].join('\n');
70
+ // Variant skins are appended after the base rules. Each is a cosmetic layer
71
+ // (density, radii, typography, accent) that composes with either color mode;
72
+ // the light/dark palettes themselves are injected as tokens by ThemeManager,
73
+ // so no class-based dark skin is bundled here.
74
+ const css = [baseCss, themeQuartzCss, themeAlpineCss, themeBalhamCss, themeMaterialCss].join('\n');
72
75
  export function injectBaseStyles() {
73
76
  if (document.getElementById(STYLE_ID))
74
77
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"base-styles.js","sourceRoot":"","sources":["../../src/styles/base-styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-styles.js","sourceRoot":"","sources":["../../src/styles/base-styles.ts"],"names":[],"mappings":"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"}