photon-grid-core 2.0.1 → 2.0.5

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 (236) hide show
  1. package/README.md +3 -3
  2. package/cell-selection/cell-selection-engine.d.ts +14 -0
  3. package/cell-selection/cell-selection-engine.d.ts.map +1 -1
  4. package/cell-selection/cell-selection-engine.js +63 -9
  5. package/cell-selection/cell-selection-engine.js.map +1 -1
  6. package/chart/range-chart-controller.d.ts +10 -0
  7. package/chart/range-chart-controller.d.ts.map +1 -1
  8. package/chart/range-chart-controller.js +22 -2
  9. package/chart/range-chart-controller.js.map +1 -1
  10. package/column-groups/column-group-drag-handler.d.ts.map +1 -1
  11. package/column-groups/column-group-drag-handler.js +64 -25
  12. package/column-groups/column-group-drag-handler.js.map +1 -1
  13. package/column-groups/column-group-header-builder.d.ts.map +1 -1
  14. package/column-groups/column-group-header-builder.js +7 -5
  15. package/column-groups/column-group-header-builder.js.map +1 -1
  16. package/column-groups/display-group-drag-handler.d.ts +7 -3
  17. package/column-groups/display-group-drag-handler.d.ts.map +1 -1
  18. package/column-groups/display-group-drag-handler.js +46 -7
  19. package/column-groups/display-group-drag-handler.js.map +1 -1
  20. package/column-groups/display-group-header-builder.d.ts +1 -1
  21. package/column-groups/display-group-header-builder.d.ts.map +1 -1
  22. package/column-groups/display-group-header-builder.js +9 -7
  23. package/column-groups/display-group-header-builder.js.map +1 -1
  24. package/core/column-model.d.ts +88 -5
  25. package/core/column-model.d.ts.map +1 -1
  26. package/core/column-model.js +215 -3
  27. package/core/column-model.js.map +1 -1
  28. package/core/grid-api.d.ts +34 -2
  29. package/core/grid-api.d.ts.map +1 -1
  30. package/core/grid-api.js +40 -0
  31. package/core/grid-api.js.map +1 -1
  32. package/core/grid-core.d.ts +7 -0
  33. package/core/grid-core.d.ts.map +1 -1
  34. package/core/grid-core.js +42 -12
  35. package/core/grid-core.js.map +1 -1
  36. package/core/grid-store.d.ts +5 -5
  37. package/core/grid-store.d.ts.map +1 -1
  38. package/core/pointer-utils.d.ts +59 -0
  39. package/core/pointer-utils.d.ts.map +1 -0
  40. package/core/pointer-utils.js +59 -0
  41. package/core/pointer-utils.js.map +1 -0
  42. package/drag-drop/drag-drop-engine.d.ts.map +1 -1
  43. package/drag-drop/drag-drop-engine.js +8 -8
  44. package/drag-drop/drag-drop-engine.js.map +1 -1
  45. package/engines/editing/cell-editor-engine.js +1 -1
  46. package/engines/editing/cell-editor-engine.js.map +1 -1
  47. package/engines/master-detail/master-detail-engine.d.ts +4 -3
  48. package/engines/master-detail/master-detail-engine.d.ts.map +1 -1
  49. package/engines/master-detail/master-detail-engine.js +14 -5
  50. package/engines/master-detail/master-detail-engine.js.map +1 -1
  51. package/engines/selection/row-selection-engine.d.ts +41 -0
  52. package/engines/selection/row-selection-engine.d.ts.map +1 -1
  53. package/engines/selection/row-selection-engine.js +103 -0
  54. package/engines/selection/row-selection-engine.js.map +1 -1
  55. package/index.d.ts +8 -4
  56. package/index.d.ts.map +1 -1
  57. package/index.js +4 -1
  58. package/index.js.map +1 -1
  59. package/package.json +1 -1
  60. package/photon-ai/index.d.ts +2 -0
  61. package/photon-ai/index.d.ts.map +1 -1
  62. package/photon-ai/index.js +2 -0
  63. package/photon-ai/index.js.map +1 -1
  64. package/photon-ai/photon-ai-panel.d.ts +40 -0
  65. package/photon-ai/photon-ai-panel.d.ts.map +1 -1
  66. package/photon-ai/photon-ai-panel.js +163 -8
  67. package/photon-ai/photon-ai-panel.js.map +1 -1
  68. package/photon-ai/photon-ai-service.d.ts +38 -1
  69. package/photon-ai/photon-ai-service.d.ts.map +1 -1
  70. package/photon-ai/photon-ai-service.js +72 -1
  71. package/photon-ai/photon-ai-service.js.map +1 -1
  72. package/photon-ai/provider/ai-provider.types.d.ts +174 -0
  73. package/photon-ai/provider/ai-provider.types.d.ts.map +1 -0
  74. package/photon-ai/provider/ai-provider.types.js +42 -0
  75. package/photon-ai/provider/ai-provider.types.js.map +1 -0
  76. package/photon-ai/provider/command-normalizer.d.ts +36 -0
  77. package/photon-ai/provider/command-normalizer.d.ts.map +1 -0
  78. package/photon-ai/provider/command-normalizer.js +120 -0
  79. package/photon-ai/provider/command-normalizer.js.map +1 -0
  80. package/photon-ai/provider/grid-context-builder.d.ts +37 -0
  81. package/photon-ai/provider/grid-context-builder.d.ts.map +1 -0
  82. package/photon-ai/provider/grid-context-builder.js +96 -0
  83. package/photon-ai/provider/grid-context-builder.js.map +1 -0
  84. package/photon-ai/provider/http-ai-provider.d.ts +42 -0
  85. package/photon-ai/provider/http-ai-provider.d.ts.map +1 -0
  86. package/photon-ai/provider/http-ai-provider.js +125 -0
  87. package/photon-ai/provider/http-ai-provider.js.map +1 -0
  88. package/photon-ai/provider/index.d.ts +30 -0
  89. package/photon-ai/provider/index.d.ts.map +1 -0
  90. package/photon-ai/provider/index.js +42 -0
  91. package/photon-ai/provider/index.js.map +1 -0
  92. package/photon-ai/provider/presets.d.ts +29 -0
  93. package/photon-ai/provider/presets.d.ts.map +1 -0
  94. package/photon-ai/provider/presets.js +110 -0
  95. package/photon-ai/provider/presets.js.map +1 -0
  96. package/photon-ai/provider/response-parsing.d.ts +22 -0
  97. package/photon-ai/provider/response-parsing.d.ts.map +1 -0
  98. package/photon-ai/provider/response-parsing.js +79 -0
  99. package/photon-ai/provider/response-parsing.js.map +1 -0
  100. package/photon-ai/provider/system-prompt.d.ts +26 -0
  101. package/photon-ai/provider/system-prompt.d.ts.map +1 -0
  102. package/photon-ai/provider/system-prompt.js +82 -0
  103. package/photon-ai/provider/system-prompt.js.map +1 -0
  104. package/photon-grid.min.js +697 -488
  105. package/renderer/body-renderer.d.ts.map +1 -1
  106. package/renderer/body-renderer.js +34 -9
  107. package/renderer/body-renderer.js.map +1 -1
  108. package/renderer/column-chooser.d.ts +82 -0
  109. package/renderer/column-chooser.d.ts.map +1 -0
  110. package/renderer/column-chooser.js +335 -0
  111. package/renderer/column-chooser.js.map +1 -0
  112. package/renderer/column-menu.d.ts.map +1 -1
  113. package/renderer/column-menu.js +32 -20
  114. package/renderer/column-menu.js.map +1 -1
  115. package/renderer/column-style-manager.d.ts +17 -0
  116. package/renderer/column-style-manager.d.ts.map +1 -1
  117. package/renderer/column-style-manager.js +28 -0
  118. package/renderer/column-style-manager.js.map +1 -1
  119. package/renderer/detail-row-renderer.d.ts.map +1 -1
  120. package/renderer/detail-row-renderer.js +9 -7
  121. package/renderer/detail-row-renderer.js.map +1 -1
  122. package/renderer/grid-renderer.d.ts +23 -1
  123. package/renderer/grid-renderer.d.ts.map +1 -1
  124. package/renderer/grid-renderer.js +66 -8
  125. package/renderer/grid-renderer.js.map +1 -1
  126. package/renderer/group-drop-zone.js +14 -14
  127. package/renderer/group-drop-zone.js.map +1 -1
  128. package/renderer/header-renderer.d.ts +70 -0
  129. package/renderer/header-renderer.d.ts.map +1 -1
  130. package/renderer/header-renderer.js +361 -52
  131. package/renderer/header-renderer.js.map +1 -1
  132. package/renderer/row-animator.d.ts +18 -1
  133. package/renderer/row-animator.d.ts.map +1 -1
  134. package/renderer/row-animator.js +96 -20
  135. package/renderer/row-animator.js.map +1 -1
  136. package/renderer/row-drag-renderer.js +6 -6
  137. package/renderer/row-drag-renderer.js.map +1 -1
  138. package/renderer/scroll-controller.d.ts +40 -0
  139. package/renderer/scroll-controller.d.ts.map +1 -1
  140. package/renderer/scroll-controller.js +215 -13
  141. package/renderer/scroll-controller.js.map +1 -1
  142. package/styles/base/cells.css.d.ts +1 -1
  143. package/styles/base/cells.css.d.ts.map +1 -1
  144. package/styles/base/cells.css.js +13 -13
  145. package/styles/base/column-chooser.css.d.ts +13 -0
  146. package/styles/base/column-chooser.css.d.ts.map +1 -0
  147. package/styles/base/column-chooser.css.js +241 -0
  148. package/styles/base/column-chooser.css.js.map +1 -0
  149. package/styles/base/column-context-menu.css.d.ts +1 -1
  150. package/styles/base/column-context-menu.css.d.ts.map +1 -1
  151. package/styles/base/column-context-menu.css.js +29 -5
  152. package/styles/base/column-context-menu.css.js.map +1 -1
  153. package/styles/base/column-group-header.css.d.ts +1 -1
  154. package/styles/base/column-group-header.css.d.ts.map +1 -1
  155. package/styles/base/column-group-header.css.js +1 -1
  156. package/styles/base/context-menu.css.d.ts +1 -1
  157. package/styles/base/context-menu.css.d.ts.map +1 -1
  158. package/styles/base/context-menu.css.js +8 -0
  159. package/styles/base/context-menu.css.js.map +1 -1
  160. package/styles/base/filter.css.d.ts +1 -1
  161. package/styles/base/filter.css.d.ts.map +1 -1
  162. package/styles/base/filter.css.js +7 -7
  163. package/styles/base/group-drop-zone.css.d.ts +1 -1
  164. package/styles/base/group-drop-zone.css.d.ts.map +1 -1
  165. package/styles/base/group-drop-zone.css.js +3 -3
  166. package/styles/base/header.css.d.ts +1 -1
  167. package/styles/base/header.css.d.ts.map +1 -1
  168. package/styles/base/header.css.js +23 -0
  169. package/styles/base/header.css.js.map +1 -1
  170. package/styles/base/photon-ai.css.d.ts +1 -1
  171. package/styles/base/photon-ai.css.d.ts.map +1 -1
  172. package/styles/base/photon-ai.css.js +65 -0
  173. package/styles/base/photon-ai.css.js.map +1 -1
  174. package/styles/base/row-drag.css.d.ts +1 -1
  175. package/styles/base/row-drag.css.d.ts.map +1 -1
  176. package/styles/base/row-drag.css.js +1 -1
  177. package/styles/base/rows.css.d.ts +1 -1
  178. package/styles/base/rows.css.d.ts.map +1 -1
  179. package/styles/base/rows.css.js +4 -16
  180. package/styles/base/rows.css.js.map +1 -1
  181. package/styles/base/scrollbars.css.d.ts +1 -1
  182. package/styles/base/scrollbars.css.d.ts.map +1 -1
  183. package/styles/base/scrollbars.css.js +56 -7
  184. package/styles/base/scrollbars.css.js.map +1 -1
  185. package/styles/base/sparkline.css.d.ts +1 -1
  186. package/styles/base/sparkline.css.d.ts.map +1 -1
  187. package/styles/base/sparkline.css.js +6 -0
  188. package/styles/base/sparkline.css.js.map +1 -1
  189. package/styles/base/tooltip.css.d.ts +1 -1
  190. package/styles/base/tooltip.css.d.ts.map +1 -1
  191. package/styles/base/tooltip.css.js +1 -1
  192. package/styles/base/touch.css.d.ts +23 -0
  193. package/styles/base/touch.css.d.ts.map +1 -0
  194. package/styles/base/touch.css.js +85 -0
  195. package/styles/base/touch.css.js.map +1 -0
  196. package/styles/base-styles.d.ts.map +1 -1
  197. package/styles/base-styles.js +9 -2
  198. package/styles/base-styles.js.map +1 -1
  199. package/styles/themes/theme-alpine.d.ts +9 -1
  200. package/styles/themes/theme-alpine.d.ts.map +1 -1
  201. package/styles/themes/theme-alpine.js +34 -43
  202. package/styles/themes/theme-alpine.js.map +1 -1
  203. package/styles/themes/theme-balham.d.ts +9 -1
  204. package/styles/themes/theme-balham.d.ts.map +1 -1
  205. package/styles/themes/theme-balham.js +33 -42
  206. package/styles/themes/theme-balham.js.map +1 -1
  207. package/styles/themes/theme-material.d.ts +9 -1
  208. package/styles/themes/theme-material.d.ts.map +1 -1
  209. package/styles/themes/theme-material.js +35 -43
  210. package/styles/themes/theme-material.js.map +1 -1
  211. package/styles/themes/theme-quartz.d.ts +14 -1
  212. package/styles/themes/theme-quartz.d.ts.map +1 -1
  213. package/styles/themes/theme-quartz.js +63 -43
  214. package/styles/themes/theme-quartz.js.map +1 -1
  215. package/theme/theme-manager.d.ts +55 -7
  216. package/theme/theme-manager.d.ts.map +1 -1
  217. package/theme/theme-manager.js +139 -35
  218. package/theme/theme-manager.js.map +1 -1
  219. package/types/column.types.d.ts +78 -0
  220. package/types/column.types.d.ts.map +1 -1
  221. package/types/column.types.js +26 -1
  222. package/types/column.types.js.map +1 -1
  223. package/types/grid.types.d.ts +92 -3
  224. package/types/grid.types.d.ts.map +1 -1
  225. package/types/photon-ai.types.d.ts +125 -5
  226. package/types/photon-ai.types.d.ts.map +1 -1
  227. package/types/photon-ai.types.js +18 -1
  228. package/types/photon-ai.types.js.map +1 -1
  229. package/types/theme.types.d.ts +19 -0
  230. package/types/theme.types.d.ts.map +1 -1
  231. package/types/theme.types.js +7 -1
  232. package/types/theme.types.js.map +1 -1
  233. package/styles/themes/theme-dark.d.ts +0 -2
  234. package/styles/themes/theme-dark.d.ts.map +0 -1
  235. package/styles/themes/theme-dark.js +0 -216
  236. package/styles/themes/theme-dark.js.map +0 -1
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Photon Grid base styles — column-chooser section.
3
+ *
4
+ * Auto-split from base-styles.ts. Concatenated back (in order) by
5
+ * base-styles.ts; edit here, not there. Order is preserved because CSS
6
+ * cascade depends on it.
7
+ *
8
+ * Every value is a theme variable (with a sensible fallback) so the dialog
9
+ * re-themes with the rest of the grid — light, dark, and custom themes — with
10
+ * no inline styles anywhere in the component.
11
+ */
12
+ export declare const columnChooserCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column Chooser \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Positioning layer only \u2014 no backdrop scrim/blur, and transparent to pointer\n events so the grid behind stays visible and interactive. The dialog itself\n re-enables pointer events; outside presses are handled by a document-level\n listener in the component. */\n.pg-col-chooser__overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n pointer-events: none;\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n}\n\n.pg-col-chooser {\n pointer-events: auto;\n display: flex;\n flex-direction: column;\n width: 320px;\n max-width: calc(100vw - 32px);\n max-height: min(70vh, 560px);\n background: var(--pg-colors-surface, #ffffff);\n color: var(--pg-colors-text-primary, #0f172a);\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-lg, 10px);\n box-shadow: var(--pg-shadows-dialog, var(--pg-shadows-dropdown, 0 12px 32px rgba(15, 23, 42, 0.18)));\n font-size: var(--pg-typography-font-size-sm, 13px);\n overflow: hidden;\n}\n\n/* \u2500\u2500 Header \u2500\u2500 */\n.pg-col-chooser__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 12px 14px;\n border-bottom: 1px solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-col-chooser__title {\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n font-size: var(--pg-typography-font-size-md, 14px);\n}\n.pg-col-chooser__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n border: none;\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: transparent;\n color: var(--pg-colors-text-secondary, #64748b);\n cursor: pointer;\n transition: background var(--pg-transitions-fast, 80ms ease), color var(--pg-transitions-fast, 80ms ease);\n}\n.pg-col-chooser__close:hover {\n background: var(--pg-colors-background-alt, #f1f5f9);\n color: var(--pg-colors-text-primary, #0f172a);\n}\n\n/* \u2500\u2500 Search \u2500\u2500 */\n.pg-col-chooser__search {\n position: relative;\n display: flex;\n align-items: center;\n padding: 10px 14px;\n}\n.pg-col-chooser__search-icon {\n position: absolute;\n left: 24px;\n display: inline-flex;\n color: var(--pg-colors-text-secondary, #94a3b8);\n pointer-events: none;\n}\n.pg-col-chooser__search-input {\n width: 100%;\n padding: 7px 10px 7px 30px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-md, 6px);\n background: var(--pg-colors-background, #ffffff);\n color: var(--pg-colors-text-primary, #0f172a);\n font-family: inherit;\n font-size: inherit;\n outline: none;\n transition: border-color var(--pg-transitions-fast, 80ms ease), box-shadow var(--pg-transitions-fast, 80ms ease);\n}\n.pg-col-chooser__search-input:focus {\n border-color: var(--pg-colors-primary, #2563eb);\n box-shadow: 0 0 0 2px var(--pg-colors-primary-soft, rgba(37, 99, 235, 0.16));\n}\n.pg-col-chooser__search-input::placeholder {\n color: var(--pg-colors-text-secondary, #94a3b8);\n}\n\n/* \u2500\u2500 Body / tree \u2500\u2500 */\n.pg-col-chooser__body {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n padding: 6px 8px 10px;\n}\n.pg-col-chooser__tree {\n display: flex;\n flex-direction: column;\n}\n\n/* Nested indentation \u2014 one step per level, so depth needs no inline geometry. */\n.pg-col-chooser__children {\n display: flex;\n flex-direction: column;\n padding-left: var(--pg-spacing-md, 16px);\n}\n\n.pg-col-chooser__row {\n display: flex;\n align-items: center;\n gap: 8px;\n min-height: 32px;\n padding: 2px 6px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n cursor: pointer;\n user-select: none;\n transition: background var(--pg-transitions-fast, 80ms ease);\n}\n.pg-col-chooser__row:hover {\n background: var(--pg-colors-background-alt, #f1f5f9);\n}\n.pg-col-chooser__row--group {\n font-weight: var(--pg-typography-font-weight-medium, 500);\n}\n\n/* Expand/collapse chevron (groups) \u2014 spacer variant keeps leaves aligned. */\n.pg-col-chooser__toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n flex-shrink: 0;\n padding: 0;\n border: none;\n background: transparent;\n color: var(--pg-colors-text-secondary, #64748b);\n cursor: pointer;\n border-radius: var(--pg-borders-radius-sm, 4px);\n}\n.pg-col-chooser__toggle:hover {\n color: var(--pg-colors-text-primary, #0f172a);\n}\n.pg-col-chooser__toggle--spacer {\n cursor: default;\n pointer-events: none;\n}\n\n/* Themed tri-state checkbox. */\n.pg-col-chooser__checkbox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border: 1.5px solid var(--pg-colors-border-strong, var(--pg-colors-border, #cbd5e1));\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-background, #ffffff);\n color: transparent;\n cursor: pointer;\n transition: background var(--pg-transitions-fast, 80ms ease), border-color var(--pg-transitions-fast, 80ms ease);\n}\n.pg-col-chooser__checkbox > .pg-icon,\n.pg-col-chooser__checkbox > svg {\n width: 12px;\n height: 12px;\n opacity: 0;\n transition: opacity var(--pg-transitions-fast, 80ms ease);\n}\n.pg-col-chooser__checkbox--checked {\n background: var(--pg-colors-primary, #2563eb);\n border-color: var(--pg-colors-primary, #2563eb);\n color: var(--pg-colors-on-primary, #ffffff);\n}\n.pg-col-chooser__checkbox--checked > .pg-icon,\n.pg-col-chooser__checkbox--checked > svg {\n opacity: 1;\n}\n/* Indeterminate (some children visible) \u2014 a dash rather than a tick. */\n.pg-col-chooser__checkbox--indeterminate {\n background: var(--pg-colors-primary, #2563eb);\n border-color: var(--pg-colors-primary, #2563eb);\n}\n.pg-col-chooser__checkbox--indeterminate::after {\n content: \"\";\n width: 8px;\n height: 2px;\n border-radius: 1px;\n background: var(--pg-colors-on-primary, #ffffff);\n}\n.pg-col-chooser__checkbox--indeterminate > .pg-icon,\n.pg-col-chooser__checkbox--indeterminate > svg {\n display: none;\n}\n.pg-col-chooser__checkbox--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.pg-col-chooser__checkbox:focus-visible {\n outline: 2px solid var(--pg-colors-primary, #2563eb);\n outline-offset: 1px;\n}\n\n.pg-col-chooser__label {\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.pg-col-chooser__empty {\n padding: 16px 8px;\n text-align: center;\n color: var(--pg-colors-text-secondary, #94a3b8);\n}\n";
13
+ //# sourceMappingURL=column-chooser.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-chooser.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/column-chooser.css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,q1NAoO5B,CAAC"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Photon Grid base styles — column-chooser section.
3
+ *
4
+ * Auto-split from base-styles.ts. Concatenated back (in order) by
5
+ * base-styles.ts; edit here, not there. Order is preserved because CSS
6
+ * cascade depends on it.
7
+ *
8
+ * Every value is a theme variable (with a sensible fallback) so the dialog
9
+ * re-themes with the rest of the grid — light, dark, and custom themes — with
10
+ * no inline styles anywhere in the component.
11
+ */
12
+ export const columnChooserCss = `/* ──────────────────── Column Chooser ──────────────────── */
13
+
14
+ /* Positioning layer only — no backdrop scrim/blur, and transparent to pointer
15
+ events so the grid behind stays visible and interactive. The dialog itself
16
+ re-enables pointer events; outside presses are handled by a document-level
17
+ listener in the component. */
18
+ .pg-col-chooser__overlay {
19
+ position: fixed;
20
+ inset: 0;
21
+ z-index: 10000;
22
+ display: flex;
23
+ align-items: center;
24
+ justify-content: center;
25
+ background: transparent;
26
+ pointer-events: none;
27
+ font-family: var(--pg-typography-font-family, system-ui, sans-serif);
28
+ }
29
+
30
+ .pg-col-chooser {
31
+ pointer-events: auto;
32
+ display: flex;
33
+ flex-direction: column;
34
+ width: 320px;
35
+ max-width: calc(100vw - 32px);
36
+ max-height: min(70vh, 560px);
37
+ background: var(--pg-colors-surface, #ffffff);
38
+ color: var(--pg-colors-text-primary, #0f172a);
39
+ border: 1px solid var(--pg-colors-border, #e2e8f0);
40
+ border-radius: var(--pg-borders-radius-lg, 10px);
41
+ box-shadow: var(--pg-shadows-dialog, var(--pg-shadows-dropdown, 0 12px 32px rgba(15, 23, 42, 0.18)));
42
+ font-size: var(--pg-typography-font-size-sm, 13px);
43
+ overflow: hidden;
44
+ }
45
+
46
+ /* ── Header ── */
47
+ .pg-col-chooser__header {
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: space-between;
51
+ gap: 8px;
52
+ padding: 12px 14px;
53
+ border-bottom: 1px solid var(--pg-colors-border, #e2e8f0);
54
+ }
55
+ .pg-col-chooser__title {
56
+ font-weight: var(--pg-typography-font-weight-semi-bold, 600);
57
+ font-size: var(--pg-typography-font-size-md, 14px);
58
+ }
59
+ .pg-col-chooser__close {
60
+ display: inline-flex;
61
+ align-items: center;
62
+ justify-content: center;
63
+ width: 26px;
64
+ height: 26px;
65
+ padding: 0;
66
+ border: none;
67
+ border-radius: var(--pg-borders-radius-sm, 4px);
68
+ background: transparent;
69
+ color: var(--pg-colors-text-secondary, #64748b);
70
+ cursor: pointer;
71
+ transition: background var(--pg-transitions-fast, 80ms ease), color var(--pg-transitions-fast, 80ms ease);
72
+ }
73
+ .pg-col-chooser__close:hover {
74
+ background: var(--pg-colors-background-alt, #f1f5f9);
75
+ color: var(--pg-colors-text-primary, #0f172a);
76
+ }
77
+
78
+ /* ── Search ── */
79
+ .pg-col-chooser__search {
80
+ position: relative;
81
+ display: flex;
82
+ align-items: center;
83
+ padding: 10px 14px;
84
+ }
85
+ .pg-col-chooser__search-icon {
86
+ position: absolute;
87
+ left: 24px;
88
+ display: inline-flex;
89
+ color: var(--pg-colors-text-secondary, #94a3b8);
90
+ pointer-events: none;
91
+ }
92
+ .pg-col-chooser__search-input {
93
+ width: 100%;
94
+ padding: 7px 10px 7px 30px;
95
+ border: 1px solid var(--pg-colors-border, #e2e8f0);
96
+ border-radius: var(--pg-borders-radius-md, 6px);
97
+ background: var(--pg-colors-background, #ffffff);
98
+ color: var(--pg-colors-text-primary, #0f172a);
99
+ font-family: inherit;
100
+ font-size: inherit;
101
+ outline: none;
102
+ transition: border-color var(--pg-transitions-fast, 80ms ease), box-shadow var(--pg-transitions-fast, 80ms ease);
103
+ }
104
+ .pg-col-chooser__search-input:focus {
105
+ border-color: var(--pg-colors-primary, #2563eb);
106
+ box-shadow: 0 0 0 2px var(--pg-colors-primary-soft, rgba(37, 99, 235, 0.16));
107
+ }
108
+ .pg-col-chooser__search-input::placeholder {
109
+ color: var(--pg-colors-text-secondary, #94a3b8);
110
+ }
111
+
112
+ /* ── Body / tree ── */
113
+ .pg-col-chooser__body {
114
+ flex: 1 1 auto;
115
+ min-height: 0;
116
+ overflow-y: auto;
117
+ padding: 6px 8px 10px;
118
+ }
119
+ .pg-col-chooser__tree {
120
+ display: flex;
121
+ flex-direction: column;
122
+ }
123
+
124
+ /* Nested indentation — one step per level, so depth needs no inline geometry. */
125
+ .pg-col-chooser__children {
126
+ display: flex;
127
+ flex-direction: column;
128
+ padding-left: var(--pg-spacing-md, 16px);
129
+ }
130
+
131
+ .pg-col-chooser__row {
132
+ display: flex;
133
+ align-items: center;
134
+ gap: 8px;
135
+ min-height: 32px;
136
+ padding: 2px 6px;
137
+ border-radius: var(--pg-borders-radius-sm, 4px);
138
+ cursor: pointer;
139
+ user-select: none;
140
+ transition: background var(--pg-transitions-fast, 80ms ease);
141
+ }
142
+ .pg-col-chooser__row:hover {
143
+ background: var(--pg-colors-background-alt, #f1f5f9);
144
+ }
145
+ .pg-col-chooser__row--group {
146
+ font-weight: var(--pg-typography-font-weight-medium, 500);
147
+ }
148
+
149
+ /* Expand/collapse chevron (groups) — spacer variant keeps leaves aligned. */
150
+ .pg-col-chooser__toggle {
151
+ display: inline-flex;
152
+ align-items: center;
153
+ justify-content: center;
154
+ width: 18px;
155
+ height: 18px;
156
+ flex-shrink: 0;
157
+ padding: 0;
158
+ border: none;
159
+ background: transparent;
160
+ color: var(--pg-colors-text-secondary, #64748b);
161
+ cursor: pointer;
162
+ border-radius: var(--pg-borders-radius-sm, 4px);
163
+ }
164
+ .pg-col-chooser__toggle:hover {
165
+ color: var(--pg-colors-text-primary, #0f172a);
166
+ }
167
+ .pg-col-chooser__toggle--spacer {
168
+ cursor: default;
169
+ pointer-events: none;
170
+ }
171
+
172
+ /* Themed tri-state checkbox. */
173
+ .pg-col-chooser__checkbox {
174
+ display: inline-flex;
175
+ align-items: center;
176
+ justify-content: center;
177
+ width: 16px;
178
+ height: 16px;
179
+ flex-shrink: 0;
180
+ border: 1.5px solid var(--pg-colors-border-strong, var(--pg-colors-border, #cbd5e1));
181
+ border-radius: var(--pg-borders-radius-sm, 4px);
182
+ background: var(--pg-colors-background, #ffffff);
183
+ color: transparent;
184
+ cursor: pointer;
185
+ transition: background var(--pg-transitions-fast, 80ms ease), border-color var(--pg-transitions-fast, 80ms ease);
186
+ }
187
+ .pg-col-chooser__checkbox > .pg-icon,
188
+ .pg-col-chooser__checkbox > svg {
189
+ width: 12px;
190
+ height: 12px;
191
+ opacity: 0;
192
+ transition: opacity var(--pg-transitions-fast, 80ms ease);
193
+ }
194
+ .pg-col-chooser__checkbox--checked {
195
+ background: var(--pg-colors-primary, #2563eb);
196
+ border-color: var(--pg-colors-primary, #2563eb);
197
+ color: var(--pg-colors-on-primary, #ffffff);
198
+ }
199
+ .pg-col-chooser__checkbox--checked > .pg-icon,
200
+ .pg-col-chooser__checkbox--checked > svg {
201
+ opacity: 1;
202
+ }
203
+ /* Indeterminate (some children visible) — a dash rather than a tick. */
204
+ .pg-col-chooser__checkbox--indeterminate {
205
+ background: var(--pg-colors-primary, #2563eb);
206
+ border-color: var(--pg-colors-primary, #2563eb);
207
+ }
208
+ .pg-col-chooser__checkbox--indeterminate::after {
209
+ content: "";
210
+ width: 8px;
211
+ height: 2px;
212
+ border-radius: 1px;
213
+ background: var(--pg-colors-on-primary, #ffffff);
214
+ }
215
+ .pg-col-chooser__checkbox--indeterminate > .pg-icon,
216
+ .pg-col-chooser__checkbox--indeterminate > svg {
217
+ display: none;
218
+ }
219
+ .pg-col-chooser__checkbox--disabled {
220
+ opacity: 0.5;
221
+ cursor: not-allowed;
222
+ }
223
+ .pg-col-chooser__checkbox:focus-visible {
224
+ outline: 2px solid var(--pg-colors-primary, #2563eb);
225
+ outline-offset: 1px;
226
+ }
227
+
228
+ .pg-col-chooser__label {
229
+ flex: 1 1 auto;
230
+ overflow: hidden;
231
+ text-overflow: ellipsis;
232
+ white-space: nowrap;
233
+ }
234
+
235
+ .pg-col-chooser__empty {
236
+ padding: 16px 8px;
237
+ text-align: center;
238
+ color: var(--pg-colors-text-secondary, #94a3b8);
239
+ }
240
+ `;
241
+ //# sourceMappingURL=column-chooser.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-chooser.css.js","sourceRoot":"","sources":["../../../src/styles/base/column-chooser.css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoO/B,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 columnContextMenuCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column Context Menu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Menu container \u2014 fixed-position dropdown attached to document.body.\n Height is capped so the menu never grows into the viewport's top/bottom\n 200px; content beyond that scrolls internally via overflow-y instead of\n being clipped. Fly-out submenus (.pg-col-ctx-menu__submenu) are portaled to\n document.body while open rather than nested here, so this container's\n scroll clipping never cuts them off on the X axis. */\n.pg-col-ctx-menu {\n position: fixed;\n z-index: 9999;\n min-width: 220px;\n max-width: 300px;\n max-height: calc(100% - 200px);\n overflow-y: auto;\n overflow-x: hidden;\n padding: 4px;\n background: var(--pg-colors-surface, #ffffff);\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(15, 23, 42, 0.12));\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n font-size: var(--pg-typography-font-size-sm, 13px);\n color: var(--pg-colors-text-primary, #0f172a);\n user-select: none;\n outline: none;\n}\n\n/* Horizontal divider between section groups */\n.pg-col-ctx-menu__separator {\n border-top: 1px solid var(--pg-colors-border-col-ctxt-menu, #e2e8f0);\n background: var(--pg-colors-border, #e2e8f0);\n margin: 4px 0;\n}\n\n/* \u2500\u2500 Menu items \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Base item \u2014 covers both leaf items and parent (submenu-trigger) items */\n.pg-col-ctx-menu__item {\n position: relative;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 10px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n cursor: pointer;\n transition: background var(--pg-transitions-fast, 80ms ease);\n outline: none;\n white-space: nowrap;\n}\n\n.pg-col-ctx-menu__item:hover,\n.pg-col-ctx-menu__item:focus-visible {\n background: var(--pg-colors-background-alt, #f1f5f9);\n}\n\n/* Highlighted / \"currently applied\" item (e.g. active sort direction) */\n.pg-col-ctx-menu__item--active {\n color: var(--pg-colors-primary, #2563eb);\n font-weight: 600;\n}\n\n/* Disabled item \u2014 rendered but not interactive */\n.pg-col-ctx-menu__item--disabled {\n opacity: 0.38;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* \u2500\u2500 Item anatomy \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Leading icon */\n.pg-col-ctx-menu__item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n opacity: 0.6;\n}\n\n.pg-col-ctx-menu__item--active .pg-col-ctx-menu__item-icon {\n opacity: 1;\n}\n\n/* Text label \u2014 fills remaining space */\n.pg-col-ctx-menu__item-label {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Trailing chevron indicating a fly-out submenu */\n.pg-col-ctx-menu__item-chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n opacity: 0.4;\n margin-left: 4px;\n transition: opacity var(--pg-transitions-fast, 80ms ease);\n}\n\n.pg-col-ctx-menu__item--has-submenu:hover .pg-col-ctx-menu__item-chevron {\n opacity: 0.75;\n}\n\n/* \u2500\u2500 Fly-out submenu \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Hidden by default; shown when JS adds --open. Positioned fixed rather than\n absolute-within-parent because it is portaled to document.body while open\n (see ColumnMenu.openSubmenu) \u2014 left/top are set inline in viewport\n coordinates by adjustSubmenuPosition. */\n.pg-col-ctx-menu__submenu {\n display: none;\n position: fixed;\n min-width: 180px;\n padding: 4px;\n background: var(--pg-colors-surface, #ffffff);\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(15, 23, 42, 0.12));\n z-index: 10000;\n}\n\n/* JS-controlled open state */\n.pg-col-ctx-menu__submenu--open {\n display: block;\n}\n\n/* Invisible hover bridge \u2014 prevents flicker when mouse crosses from\n parent item edge into the submenu. Extends 6px to the left of the submenu. */\n.pg-col-ctx-menu__submenu--open::before {\n content: '';\n position: absolute;\n right: 100%;\n top: 0;\n width: 8px;\n height: 100%;\n}\n\n";
8
+ export declare const columnContextMenuCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column Context Menu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Menu container \u2014 fixed-position dropdown attached to document.body.\n Height is capped so the menu never grows into the viewport's top/bottom\n 200px; content beyond that scrolls internally via overflow-y instead of\n being clipped. Fly-out submenus (.pg-col-ctx-menu__submenu) are portaled to\n document.body while open rather than nested here, so this container's\n scroll clipping never cuts them off on the X axis. */\n.pg-col-ctx-menu {\n position: fixed;\n z-index: 9999;\n min-width: 220px;\n max-width: 300px;\n max-height: calc(100% - 200px);\n overflow-y: auto;\n overflow-x: hidden;\n padding: 4px;\n background: var(--pg-colors-surface, #ffffff);\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(15, 23, 42, 0.12));\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n font-size: var(--pg-typography-font-size-sm, 13px);\n color: var(--pg-colors-text-primary, #0f172a);\n user-select: none;\n outline: none;\n /* Theme the internal overflow scrollbar so it matches the surface in dark\n mode too (the menu is portaled to <body>, outside the grid's own\n scrollbar styling \u2014 these tokens are mirrored onto :root by ThemeManager). */\n scrollbar-width: thin;\n scrollbar-color: var(--pg-colors-scrollbar-thumb, #cbd5e1) var(--pg-colors-scrollbar-track, #f1f5f9);\n}\n\n/* Horizontal divider between section groups.\n Uses the themed border token \u2014 a non-existent token here would fall back to\n a hardcoded light value and paint a bright line in dark mode. */\n.pg-col-ctx-menu__separator {\n height: 1px;\n background: var(--pg-colors-border, #e2e8f0);\n margin: 4px 0;\n}\n\n/* \u2500\u2500 Menu items \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Base item \u2014 covers both leaf items and parent (submenu-trigger) items */\n.pg-col-ctx-menu__item {\n position: relative;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 10px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n cursor: pointer;\n transition: background var(--pg-transitions-duration-fast, 80ms) ease;\n outline: none;\n white-space: nowrap;\n}\n\n/* Hover / keyboard-focus background. Uses header-hover (distinct from the menu\n surface in both light and dark themes) rather than background-alt, which\n collapses to the surface colour in dark mode and leaves hover invisible. */\n.pg-col-ctx-menu__item:hover,\n.pg-col-ctx-menu__item:focus-visible {\n background: var(--pg-colors-header-hover, #f1f5f9);\n}\n\n/* Highlighted / \"currently applied\" item (e.g. active sort direction) */\n.pg-col-ctx-menu__item--active {\n color: var(--pg-colors-primary, #2563eb);\n font-weight: 600;\n}\n\n/* Trailing check mark for a currently-selected leaf (e.g. the chosen aggregate). */\n.pg-col-ctx-menu__item-check {\n margin-left: auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding-left: 12px;\n color: var(--pg-colors-primary, #2563eb);\n}\n\n/* Disabled item \u2014 rendered but not interactive */\n.pg-col-ctx-menu__item--disabled {\n opacity: 0.38;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* \u2500\u2500 Item anatomy \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Leading icon */\n.pg-col-ctx-menu__item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n opacity: 0.6;\n}\n\n.pg-col-ctx-menu__item--active .pg-col-ctx-menu__item-icon {\n opacity: 1;\n}\n\n/* Text label \u2014 fills remaining space */\n.pg-col-ctx-menu__item-label {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Trailing chevron indicating a fly-out submenu */\n.pg-col-ctx-menu__item-chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n opacity: 0.4;\n margin-left: 4px;\n transition: opacity var(--pg-transitions-duration-fast, 80ms) ease;\n}\n\n.pg-col-ctx-menu__item--has-submenu:hover .pg-col-ctx-menu__item-chevron {\n opacity: 0.75;\n}\n\n/* \u2500\u2500 Fly-out submenu \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Hidden by default; shown when JS adds --open. Positioned fixed rather than\n absolute-within-parent because it is portaled to document.body while open\n (see ColumnMenu.openSubmenu) \u2014 left/top are set inline in viewport\n coordinates by adjustSubmenuPosition. */\n.pg-col-ctx-menu__submenu {\n display: none;\n position: fixed;\n min-width: 180px;\n padding: 4px;\n background: var(--pg-colors-surface, #ffffff);\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(15, 23, 42, 0.12));\n /* Portaled to <body>, so it no longer inherits the parent menu's text color\n (set on .pg-column-context-menu) \u2014 declare it explicitly, or items fall\n back to the browser default black and are unreadable in dark mode. */\n color: var(--pg-colors-text-primary, #0f172a);\n z-index: 10000;\n}\n\n/* JS-controlled open state */\n.pg-col-ctx-menu__submenu--open {\n display: block;\n}\n\n/* Invisible hover bridge \u2014 prevents flicker when mouse crosses from\n parent item edge into the submenu. Extends 6px to the left of the submenu. */\n.pg-col-ctx-menu__submenu--open::before {\n content: '';\n position: absolute;\n right: 100%;\n top: 0;\n width: 8px;\n height: 100%;\n}\n\n";
9
9
  //# sourceMappingURL=column-context-menu.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"column-context-menu.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/column-context-menu.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,gpKAgJhC,CAAC"}
1
+ {"version":3,"file":"column-context-menu.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/column-context-menu.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,i6MAwKhC,CAAC"}
@@ -31,11 +31,18 @@ export const columnContextMenuCss = `/* ─────────────
31
31
  color: var(--pg-colors-text-primary, #0f172a);
32
32
  user-select: none;
33
33
  outline: none;
34
+ /* Theme the internal overflow scrollbar so it matches the surface in dark
35
+ mode too (the menu is portaled to <body>, outside the grid's own
36
+ scrollbar styling — these tokens are mirrored onto :root by ThemeManager). */
37
+ scrollbar-width: thin;
38
+ scrollbar-color: var(--pg-colors-scrollbar-thumb, #cbd5e1) var(--pg-colors-scrollbar-track, #f1f5f9);
34
39
  }
35
40
 
36
- /* Horizontal divider between section groups */
41
+ /* Horizontal divider between section groups.
42
+ Uses the themed border token — a non-existent token here would fall back to
43
+ a hardcoded light value and paint a bright line in dark mode. */
37
44
  .pg-col-ctx-menu__separator {
38
- border-top: 1px solid var(--pg-colors-border-col-ctxt-menu, #e2e8f0);
45
+ height: 1px;
39
46
  background: var(--pg-colors-border, #e2e8f0);
40
47
  margin: 4px 0;
41
48
  }
@@ -51,14 +58,17 @@ export const columnContextMenuCss = `/* ─────────────
51
58
  padding: 7px 10px;
52
59
  border-radius: var(--pg-borders-radius-sm, 4px);
53
60
  cursor: pointer;
54
- transition: background var(--pg-transitions-fast, 80ms ease);
61
+ transition: background var(--pg-transitions-duration-fast, 80ms) ease;
55
62
  outline: none;
56
63
  white-space: nowrap;
57
64
  }
58
65
 
66
+ /* Hover / keyboard-focus background. Uses header-hover (distinct from the menu
67
+ surface in both light and dark themes) rather than background-alt, which
68
+ collapses to the surface colour in dark mode and leaves hover invisible. */
59
69
  .pg-col-ctx-menu__item:hover,
60
70
  .pg-col-ctx-menu__item:focus-visible {
61
- background: var(--pg-colors-background-alt, #f1f5f9);
71
+ background: var(--pg-colors-header-hover, #f1f5f9);
62
72
  }
63
73
 
64
74
  /* Highlighted / "currently applied" item (e.g. active sort direction) */
@@ -67,6 +77,16 @@ export const columnContextMenuCss = `/* ─────────────
67
77
  font-weight: 600;
68
78
  }
69
79
 
80
+ /* Trailing check mark for a currently-selected leaf (e.g. the chosen aggregate). */
81
+ .pg-col-ctx-menu__item-check {
82
+ margin-left: auto;
83
+ display: inline-flex;
84
+ align-items: center;
85
+ justify-content: center;
86
+ padding-left: 12px;
87
+ color: var(--pg-colors-primary, #2563eb);
88
+ }
89
+
70
90
  /* Disabled item — rendered but not interactive */
71
91
  .pg-col-ctx-menu__item--disabled {
72
92
  opacity: 0.38;
@@ -108,7 +128,7 @@ export const columnContextMenuCss = `/* ─────────────
108
128
  height: 14px;
109
129
  opacity: 0.4;
110
130
  margin-left: 4px;
111
- transition: opacity var(--pg-transitions-fast, 80ms ease);
131
+ transition: opacity var(--pg-transitions-duration-fast, 80ms) ease;
112
132
  }
113
133
 
114
134
  .pg-col-ctx-menu__item--has-submenu:hover .pg-col-ctx-menu__item-chevron {
@@ -130,6 +150,10 @@ export const columnContextMenuCss = `/* ─────────────
130
150
  border: 1px solid var(--pg-colors-border, #e2e8f0);
131
151
  border-radius: var(--pg-borders-radius-md, 6px);
132
152
  box-shadow: var(--pg-shadows-dropdown, 0 8px 24px rgba(15, 23, 42, 0.12));
153
+ /* Portaled to <body>, so it no longer inherits the parent menu's text color
154
+ (set on .pg-column-context-menu) — declare it explicitly, or items fall
155
+ back to the browser default black and are unreadable in dark mode. */
156
+ color: var(--pg-colors-text-primary, #0f172a);
133
157
  z-index: 10000;
134
158
  }
135
159
 
@@ -1 +1 @@
1
- {"version":3,"file":"column-context-menu.css.js","sourceRoot":"","sources":["../../../src/styles/base/column-context-menu.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgJnC,CAAC"}
1
+ {"version":3,"file":"column-context-menu.css.js","sourceRoot":"","sources":["../../../src/styles/base/column-context-menu.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwKnC,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 columnGroupHeaderCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column group 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-group-row {\n position: relative;\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}\n.pg-th--group {\n position: absolute;\n top: 0;\n height: 100%;\n display: flex;\n align-items: center;\n overflow: hidden;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n background: var(--pg-colors-header-background, #f8fafc);\n cursor: pointer;\n outline: none;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n font-weight: var(--pg-typography-header-font-weight, 600);\n font-size: var(--pg-typography-font-size-sm, 13px);\n color: var(--pg-colors-text-primary, #1e293b);\n user-select: none;\n}\n.pg-th--group:hover,\n.pg-th--group:focus-visible { background: var(--pg-colors-header-hover, #f1f5f9); }\n.pg-th--group--collapsed {\n background: var(--pg-colors-background-alt, #f1f5f9);\n justify-content: center;\n}\n// .pg-th--group--collapsed .pg-th__label { display: none; }\n.pg-th__collapse-btn {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n margin-right: 4px;\n border-radius: var(--pg-sizing-border-radius, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n transition: background var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th--group:hover .pg-th__collapse-btn,\n.pg-th--group:focus-visible .pg-th__collapse-btn {\n background: var(--pg-colors-background-alt, #f1f5f9);\n color: var(--pg-colors-primary, #2563eb);\n}\n.pg-th__resize-handle--group {\n position: absolute;\n right: 0;\n top: 0;\n width: 6px;\n height: 100%;\n cursor: col-resize;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n color: var(--pg-colors-resize-handle-color, #e2e8f0);\n z-index: 6;\n transition: opacity var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th--group:hover .pg-th__resize-handle--group { opacity: 1; }\n\n/* \u2500\u2500 Flat columns alongside grouped headers \u2500\u2500 */\n/* A flat (ungrouped) leaf column in a grid that has grouped columns must span\n the full header height (group rows + leaf row) so it does not appear as a\n short stub next to taller group header cells.\n Strategy: keep the cell in normal flex flow (preserves horizontal layout),\n give it the combined height, and translateY it upward so its visual top\n aligns with the top of the header area. The panel header overflow:hidden\n clips exactly at the combined height, so nothing leaks outside the header.\n --pg-group-rows-count is set in JS by HeaderRenderer. */\n.pg-th--no-group {\n align-self: flex-start;\n position: relative;\n z-index: 2;\n height: calc((var(--pg-group-rows-count, 0) + 1) * var(--pg-header-row-height, 44px));\n transform: translate(var(--pg-drag-x, 0px), calc(var(--pg-group-rows-count, 0) * -1 * var(--pg-header-row-height, 44px)));\n}\n\n.pg-group-drop-indicator {\n position: absolute;\n top: 0;\n width: 2px;\n height: var(--pg-header-row-height, 44px);\n background: var(--pg-colors-primary, #2563eb);\n z-index: 20;\n pointer-events: none;\n border-radius: 1px;\n}\n.pg-th-group-filler { position: absolute; top: 0; height: 100%; }\n.pg-th--standalone-filler {\n position: absolute;\n top: 0;\n height: 100%;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n pointer-events: none;\n cursor: default;\n}\n/* Filler cell in a group row for columns with no ancestor group at this depth.\n Blends with the header background \u2014 makes flat/shallow columns appear to span\n the full header height. No interactive elements, no bottom border. */\n.pg-th--depth-filler {\n position: absolute;\n top: 0;\n height: 100%;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n pointer-events: none;\n cursor: default;\n z-index: 0;\n}\n\n@keyframes pg-drag-indicator-in { from { opacity: 0; } to { opacity: 1; } }\n\n/* Smooth column-shift animation \u2014 enabled ONLY while actively dragging a column */\n.pg-grid--col-dragging .pg-th[data-col-id],\n.pg-grid--col-dragging .pg-cell[data-col-id] {\n transform: translateX(var(--pg-drag-x, 0px));\n transition: transform 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n will-change: transform;\n}\n.pg-grid--col-dragging .pg-th--no-group[data-col-id] {\n transform: translate(var(--pg-drag-x, 0px), calc(var(--pg-group-rows-count, 0) * -1 * var(--pg-header-row-height, 44px)));\n}\n\n/* During header auto-scroll the transforms update every RAF tick \u2014 disable the\n transition so cells snap instantly rather than endlessly chasing a moving target */\n.pg-grid--col-autoscrolling .pg-th[data-col-id],\n.pg-grid--col-autoscrolling .pg-cell[data-col-id] {\n transition: none;\n}\n/* Live-preview path (store mutations during drag): suppress all transitions */\n.pg-grid--drag-preview-sync .pg-th[data-col-id],\n.pg-grid--drag-preview-sync .pg-cell[data-col-id] {\n transition: none !important;\n}\n\n/* \u2500\u2500 Group-header CSS-transform drag \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Cells shift via --pg-drag-x. The --pg-drag-transition variable is 0ms for\n * the actively-dragged group (injected by display-group-drag-handler.ts) and\n * falls back to the default 180ms for displaced neighbours \u2014 giving AG Grid-\n * style smooth animation for everything except the grabbed group itself.\n * body cells use the same variable so leaf columns and data rows stay in sync.\n */\n.pg-grid--group-dragging .pg-th--group {\n transform: translateX(var(--pg-drag-x, 0px));\n transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));\n will-change: transform;\n}\n.pg-grid--group-dragging .pg-th[data-col-id] {\n transform: translateX(var(--pg-drag-x, 0px));\n transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));\n}\n.pg-grid--group-dragging .pg-cell[data-col-id] {\n transform: translateX(var(--pg-drag-x, 0px));\n transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));\n}\n.pg-grid--group-dragging .pg-th--depth-filler {\n transform: translateX(var(--pg-drag-x, 0px));\n}\n.pg-grid--group-dragging .pg-th--no-group[data-col-id] {\n transform: translate(var(--pg-drag-x, 0px), calc(var(--pg-group-rows-count, 0) * -1 * var(--pg-header-row-height, 44px)));\n transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));\n}\n\n/* Column drag ghost (floating preview chip that follows the cursor) */\n.pg-col-drag-ghost {\n position: fixed;\n pointer-events: none;\n z-index: 9999;\n display: flex;\n align-items: center;\n gap: var(--pg-drag-ghost-gap, 8px);\n padding: 5px 12px 5px 10px;\n background: var(--pg-colors-drag-ghost-background, #fff);\n border: 1.5px solid var(--pg-colors-primary, #2563eb);\n border-radius: var(--pg-borders-radius-md, 6px);\n box-shadow: 0 6px 24px rgba(0,0,0,0.13), 0 2px 8px rgba(37, 99, 235, 0.12);\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n color: var(--pg-colors-header-text, #374151);\n white-space: nowrap;\n user-select: none;\n transform: translateY(-50%);\n transition:\n border-color var(--pg-transitions-duration-fast, 100ms),\n box-shadow var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-col-drag-ghost__icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n color: var(--pg-colors-primary, #2563eb);\n opacity: 0.7;\n}\n.pg-col-drag-ghost__label {\n flex: 1;\n min-width: 0;\n}\n\n/* Default icon visibility */\n.pg-col-drag-ghost__icon--move { display: inline-flex; }\n.pg-col-drag-ghost__icon--ban { display: none; }\n.pg-col-drag-ghost__icon--arrow-left { display: none; }\n.pg-col-drag-ghost__icon--arrow-right { display: none; }\n\n/* Hide-column state: amber ghost + eyeOff icon */\n.pg-col-drag-ghost__icon--hide { display: none; }\n.pg-col-drag-ghost--hide .pg-col-drag-ghost__icon--move { display: none; }\n.pg-col-drag-ghost--hide .pg-col-drag-ghost__icon--hide { display: inline-flex; color: var(--pg-colors-warning, #f59e0b); }\n.pg-col-drag-ghost--hide {\n border-color: var(--pg-colors-warning, #f59e0b);\n box-shadow: 0 6px 24px rgba(245,158,11,0.13), 0 2px 8px rgba(245,158,11,0.12);\n color: var(--pg-colors-warning, #f59e0b);\n}\n\n/* No-drop state: red ghost + ban icon */\n.pg-col-drag-ghost--no-drop {\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-col-drag-ghost--no-drop .pg-col-drag-ghost__icon { color: var(--pg-colors-danger, #ef4444); }\n.pg-col-drag-ghost--no-drop .pg-col-drag-ghost__icon--move { display: none; }\n.pg-col-drag-ghost--no-drop .pg-col-drag-ghost__icon--ban { display: inline-flex; }\n\n/* Outside-grid drop state: red ghost signals \"drop = hide all columns in group\" */\n.pg-col-drag-ghost--outside {\n border-color: var(--pg-colors-danger, #ef4444);\n box-shadow: 0 6px 24px rgba(239,68,68,0.18), 0 2px 8px rgba(239,68,68,0.14);\n color: var(--pg-colors-danger, #ef4444);\n opacity: 0.85;\n}\n.pg-col-drag-ghost--outside .pg-col-drag-ghost__label::after {\n content: ' (hide)';\n font-size: 10px;\n opacity: 0.7;\n}\n\n/* Auto-scroll state: directional arrow replaces move icon */\n@keyframes pg-scroll-arrow-left { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(-4px); } }\n@keyframes pg-scroll-arrow-right { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(4px); } }\n\n.pg-col-drag-ghost--scroll-left .pg-col-drag-ghost__icon--move,\n.pg-col-drag-ghost--scroll-right .pg-col-drag-ghost__icon--move { display: none; }\n.pg-col-drag-ghost--scroll-left .pg-col-drag-ghost__icon--arrow-left {\n display: inline-flex;\n animation: pg-scroll-arrow-left 700ms ease-in-out infinite;\n}\n.pg-col-drag-ghost--scroll-right .pg-col-drag-ghost__icon--arrow-right {\n display: inline-flex;\n animation: pg-scroll-arrow-right 700ms ease-in-out infinite;\n}\n\n";
8
+ export declare const columnGroupHeaderCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column group 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-group-row {\n position: relative;\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}\n.pg-th--group {\n position: absolute;\n top: 0;\n height: 100%;\n display: flex;\n align-items: center;\n overflow: hidden;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n background: var(--pg-colors-header-background, #f8fafc);\n cursor: pointer;\n outline: none;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n font-weight: var(--pg-typography-header-font-weight, 600);\n font-size: var(--pg-typography-font-size-sm, 13px);\n color: var(--pg-colors-text-primary, #1e293b);\n user-select: none;\n}\n.pg-th--group:hover,\n.pg-th--group:focus-visible { background: var(--pg-colors-header-hover, #f1f5f9); }\n.pg-th--group--collapsed {\n background: var(--pg-colors-background-alt, #f1f5f9);\n justify-content: center;\n}\n// .pg-th--group--collapsed .pg-th__label { display: none; }\n.pg-th__collapse-btn {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n margin-right: 4px;\n border-radius: var(--pg-sizing-border-radius, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n transition: background var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th--group:hover .pg-th__collapse-btn,\n.pg-th--group:focus-visible .pg-th__collapse-btn {\n background: var(--pg-colors-background-alt, #f1f5f9);\n color: var(--pg-colors-primary, #2563eb);\n}\n.pg-th__resize-handle--group {\n position: absolute;\n right: 0;\n top: 0;\n width: 6px;\n height: 100%;\n cursor: col-resize;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n color: var(--pg-colors-resize-handle-color, #e2e8f0);\n z-index: 6;\n transition: opacity var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th--group:hover .pg-th__resize-handle--group { opacity: 1; }\n\n/* \u2500\u2500 Flat columns alongside grouped headers \u2500\u2500 */\n/* A flat (ungrouped) leaf column in a grid that has grouped columns must span\n the full header height (group rows + leaf row) so it does not appear as a\n short stub next to taller group header cells.\n Strategy: keep the cell in normal flex flow (preserves horizontal layout),\n give it the combined height, and translateY it upward so its visual top\n aligns with the top of the header area. The panel header overflow:hidden\n clips exactly at the combined height, so nothing leaks outside the header.\n --pg-group-rows-count is set in JS by HeaderRenderer. */\n.pg-th--no-group {\n align-self: flex-start;\n position: relative;\n z-index: 2;\n height: calc((var(--pg-group-rows-count, 0) + 1) * var(--pg-header-row-height, 44px));\n transform: translate(var(--pg-drag-x, 0px), calc(var(--pg-group-rows-count, 0) * -1 * var(--pg-header-row-height, 44px)));\n}\n\n.pg-group-drop-indicator {\n position: absolute;\n top: 0;\n width: 2px;\n height: var(--pg-header-row-height, 44px);\n background: var(--pg-colors-primary, #2563eb);\n z-index: 20;\n pointer-events: none;\n border-radius: 1px;\n}\n.pg-th-group-filler { position: absolute; top: 0; height: 100%; }\n.pg-th--standalone-filler {\n position: absolute;\n top: 0;\n height: 100%;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n pointer-events: none;\n cursor: default;\n}\n/* Filler cell in a group row for columns with no ancestor group at this depth.\n Blends with the header background \u2014 makes flat/shallow columns appear to span\n the full header height. No interactive elements, no bottom border. */\n.pg-th--depth-filler {\n position: absolute;\n top: 0;\n height: 100%;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n pointer-events: none;\n cursor: default;\n z-index: 0;\n}\n\n@keyframes pg-drag-indicator-in { from { opacity: 0; } to { opacity: 1; } }\n\n/* Smooth column-shift animation \u2014 enabled ONLY while actively dragging a column */\n.pg-grid--col-dragging .pg-th[data-col-id],\n.pg-grid--col-dragging .pg-cell[data-col-id] {\n transform: translateX(var(--pg-drag-x, 0px));\n transition: transform 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n will-change: transform;\n}\n.pg-grid--col-dragging .pg-th--no-group[data-col-id] {\n transform: translate(var(--pg-drag-x, 0px), calc(var(--pg-group-rows-count, 0) * -1 * var(--pg-header-row-height, 44px)));\n}\n\n/* During header auto-scroll the transforms update every RAF tick \u2014 disable the\n transition so cells snap instantly rather than endlessly chasing a moving target */\n.pg-grid--col-autoscrolling .pg-th[data-col-id],\n.pg-grid--col-autoscrolling .pg-cell[data-col-id] {\n transition: none;\n}\n/* Live-preview path (store mutations during drag): suppress all transitions */\n.pg-grid--drag-preview-sync .pg-th[data-col-id],\n.pg-grid--drag-preview-sync .pg-cell[data-col-id] {\n transition: none !important;\n}\n\n/* \u2500\u2500 Group-header CSS-transform drag \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\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n * Cells shift via --pg-drag-x. The --pg-drag-transition variable is 0ms for\n * the actively-dragged group (injected by display-group-drag-handler.ts) and\n * falls back to the default 180ms for displaced neighbours \u2014 giving AG Grid-\n * style smooth animation for everything except the grabbed group itself.\n * body cells use the same variable so leaf columns and data rows stay in sync.\n */\n.pg-grid--group-dragging .pg-th--group {\n transform: translateX(var(--pg-drag-x, 0px));\n transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));\n will-change: transform;\n}\n.pg-grid--group-dragging .pg-th[data-col-id] {\n transform: translateX(var(--pg-drag-x, 0px));\n transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));\n}\n.pg-grid--group-dragging .pg-cell[data-col-id] {\n transform: translateX(var(--pg-drag-x, 0px));\n transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));\n}\n.pg-grid--group-dragging .pg-th--depth-filler {\n transform: translateX(var(--pg-drag-x, 0px));\n}\n.pg-grid--group-dragging .pg-th--no-group[data-col-id] {\n transform: translate(var(--pg-drag-x, 0px), calc(var(--pg-group-rows-count, 0) * -1 * var(--pg-header-row-height, 44px)));\n transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));\n}\n\n/* Column drag ghost (floating preview chip that follows the cursor) */\n.pg-col-drag-ghost {\n position: fixed;\n pointer-events: none;\n z-index: 9999;\n display: flex;\n align-items: center;\n gap: var(--pg-drag-ghost-gap, 8px);\n padding: 5px 12px 5px 10px;\n background: var(--pg-colors-drag-ghost-background, var(--pg-colors-drag-preview-background, var(--pg-colors-surface, #fff)));\n border: 1.5px solid var(--pg-colors-primary, #2563eb);\n border-radius: var(--pg-borders-radius-md, 6px);\n box-shadow: 0 6px 24px rgba(0,0,0,0.13), 0 2px 8px rgba(37, 99, 235, 0.12);\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n color: var(--pg-colors-header-text, #374151);\n white-space: nowrap;\n user-select: none;\n transform: translateY(-50%);\n transition:\n border-color var(--pg-transitions-duration-fast, 100ms),\n box-shadow var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-col-drag-ghost__icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n color: var(--pg-colors-primary, #2563eb);\n opacity: 0.7;\n}\n.pg-col-drag-ghost__label {\n flex: 1;\n min-width: 0;\n}\n\n/* Default icon visibility */\n.pg-col-drag-ghost__icon--move { display: inline-flex; }\n.pg-col-drag-ghost__icon--ban { display: none; }\n.pg-col-drag-ghost__icon--arrow-left { display: none; }\n.pg-col-drag-ghost__icon--arrow-right { display: none; }\n\n/* Hide-column state: amber ghost + eyeOff icon */\n.pg-col-drag-ghost__icon--hide { display: none; }\n.pg-col-drag-ghost--hide .pg-col-drag-ghost__icon--move { display: none; }\n.pg-col-drag-ghost--hide .pg-col-drag-ghost__icon--hide { display: inline-flex; color: var(--pg-colors-warning, #f59e0b); }\n.pg-col-drag-ghost--hide {\n border-color: var(--pg-colors-warning, #f59e0b);\n box-shadow: 0 6px 24px rgba(245,158,11,0.13), 0 2px 8px rgba(245,158,11,0.12);\n color: var(--pg-colors-warning, #f59e0b);\n}\n\n/* No-drop state: red ghost + ban icon */\n.pg-col-drag-ghost--no-drop {\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-col-drag-ghost--no-drop .pg-col-drag-ghost__icon { color: var(--pg-colors-danger, #ef4444); }\n.pg-col-drag-ghost--no-drop .pg-col-drag-ghost__icon--move { display: none; }\n.pg-col-drag-ghost--no-drop .pg-col-drag-ghost__icon--ban { display: inline-flex; }\n\n/* Outside-grid drop state: red ghost signals \"drop = hide all columns in group\" */\n.pg-col-drag-ghost--outside {\n border-color: var(--pg-colors-danger, #ef4444);\n box-shadow: 0 6px 24px rgba(239,68,68,0.18), 0 2px 8px rgba(239,68,68,0.14);\n color: var(--pg-colors-danger, #ef4444);\n opacity: 0.85;\n}\n.pg-col-drag-ghost--outside .pg-col-drag-ghost__label::after {\n content: ' (hide)';\n font-size: 10px;\n opacity: 0.7;\n}\n\n/* Auto-scroll state: directional arrow replaces move icon */\n@keyframes pg-scroll-arrow-left { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(-4px); } }\n@keyframes pg-scroll-arrow-right { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(4px); } }\n\n.pg-col-drag-ghost--scroll-left .pg-col-drag-ghost__icon--move,\n.pg-col-drag-ghost--scroll-right .pg-col-drag-ghost__icon--move { display: none; }\n.pg-col-drag-ghost--scroll-left .pg-col-drag-ghost__icon--arrow-left {\n display: inline-flex;\n animation: pg-scroll-arrow-left 700ms ease-in-out infinite;\n}\n.pg-col-drag-ghost--scroll-right .pg-col-drag-ghost__icon--arrow-right {\n display: inline-flex;\n animation: pg-scroll-arrow-right 700ms ease-in-out infinite;\n}\n\n";
9
9
  //# sourceMappingURL=column-group-header.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"column-group-header.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/column-group-header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,0sVAqQhC,CAAC"}
1
+ {"version":3,"file":"column-group-header.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/column-group-header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,8wVAqQhC,CAAC"}
@@ -185,7 +185,7 @@ export const columnGroupHeaderCss = `/* ─────────────
185
185
  align-items: center;
186
186
  gap: var(--pg-drag-ghost-gap, 8px);
187
187
  padding: 5px 12px 5px 10px;
188
- background: var(--pg-colors-drag-ghost-background, #fff);
188
+ background: var(--pg-colors-drag-ghost-background, var(--pg-colors-drag-preview-background, var(--pg-colors-surface, #fff)));
189
189
  border: 1.5px solid var(--pg-colors-primary, #2563eb);
190
190
  border-radius: var(--pg-borders-radius-md, 6px);
191
191
  box-shadow: 0 6px 24px rgba(0,0,0,0.13), 0 2px 8px rgba(37, 99, 235, 0.12);
@@ -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 contextMenuCss = "/* \u2500\u2500\u2500 Context menu \u2500\u2500\u2500 */\n.pg-context-menu {\n position: fixed;\n z-index: 999999;\n display: none;\n min-width: 192px;\n padding: 4px 0;\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), 0 2px 6px rgba(0,0,0,0.07));\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n font-size: var(--pg-typography-font-size-md, 13px);\n}\n.pg-context-menu--visible { display: block; }\n.pg-context-menu__item {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 7px 14px;\n border: none;\n background: transparent;\n cursor: pointer;\n text-align: left;\n color: var(--pg-colors-text-primary, #0f172a);\n gap: 0;\n transition: background 80ms;\n}\n.pg-context-menu__item:hover { background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-context-menu__item:active { background: var(--pg-colors-border, #e2e8f0); }\n.pg-context-menu__label { flex: 1; }\n.pg-context-menu__kbd {\n font-size: var(--pg-typography-font-size-sm, 11px);\n color: var(--pg-colors-text-disabled, #94a3b8);\n letter-spacing: 0.01em;\n}\n.pg-context-menu__sep {\n margin: 4px 0;\n border-top: 1px solid var(--pg-colors-border-ctxt-menu, #e2e8f0);\n background: var(--pg-colors-border, #e2e8f0);\n}\n\n.pg-cell__inner {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n padding: 0 12px;\n overflow: hidden;\n}\n.pg-cell__value {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: var(--pg-typography-line-height-base, 1.5);\n}\n.pg-cell--checkbox {\n width: 44px;\n min-width: 44px;\n max-width: 44px;\n justify-content: center;\n flex-shrink: 0;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-cell--serial {\n width: 52px;\n min-width: 52px;\n max-width: 52px;\n justify-content: center;\n flex-shrink: 0;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n color: var(--pg-colors-text-secondary, #475569);\n font-size: var(--pg-typography-font-size-sm, 12px);\n}\n.pg-cell__serial { font-variant-numeric: tabular-nums; }\n.pg-cell--bool-true { color: var(--pg-colors-success, #16a34a); }\n.pg-cell--bool-false { color: var(--pg-colors-text-disabled, #94a3b8); }\n.pg-cell__image { border-radius: var(--pg-borders-radius-sm, 4px); object-fit: cover; }\n.pg-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: var(--pg-borders-radius-pill, 9999px);\n font-size: var(--pg-typography-font-size-xs, 11px);\n font-weight: var(--pg-typography-font-weight-medium, 500);\n white-space: nowrap;\n}\n.pg-cell--range-selected { background: var(--pg-colors-selection-background, rgba(37,99,235,0.08)); }\n.pg-cell--editing { padding: 0;border-radius: 4px }\n.pg-cell--editing .pg-cell__inner { padding: 0; overflow: visible; }\n.pg-selection-canvas { position: absolute; top: 0; left: 0; pointer-events: none; z-index: 10; }\n\n";
8
+ export declare const contextMenuCss = "/* \u2500\u2500\u2500 Context menu \u2500\u2500\u2500 */\n.pg-context-menu {\n position: fixed;\n z-index: 999999;\n display: none;\n min-width: 192px;\n padding: 4px 0;\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), 0 2px 6px rgba(0,0,0,0.07));\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n font-size: var(--pg-typography-font-size-md, 13px);\n}\n.pg-context-menu--visible { display: block; }\n.pg-context-menu__item {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 7px 14px;\n border: none;\n background: transparent;\n cursor: pointer;\n text-align: left;\n color: var(--pg-colors-text-primary, #0f172a);\n gap: 0;\n transition: background 80ms;\n}\n.pg-context-menu__item:hover { background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-context-menu__item:active { background: var(--pg-colors-border, #e2e8f0); }\n.pg-context-menu__label { flex: 1; }\n.pg-context-menu__kbd {\n font-size: var(--pg-typography-font-size-sm, 11px);\n color: var(--pg-colors-text-disabled, #94a3b8);\n letter-spacing: 0.01em;\n}\n.pg-context-menu__sep {\n margin: 4px 0;\n border-top: 1px solid var(--pg-colors-border-ctxt-menu, #e2e8f0);\n background: var(--pg-colors-border, #e2e8f0);\n}\n\n.pg-cell__inner {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n padding: 0 12px;\n overflow: hidden;\n}\n.pg-cell__value {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: var(--pg-typography-line-height-base, 1.5);\n}\n.pg-cell--checkbox {\n width: 44px;\n min-width: 44px;\n max-width: 44px;\n justify-content: center;\n flex-shrink: 0;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-cell--serial {\n width: 52px;\n min-width: 52px;\n max-width: 52px;\n justify-content: center;\n flex-shrink: 0;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n color: var(--pg-colors-text-secondary, #475569);\n font-size: var(--pg-typography-font-size-sm, 12px);\n}\n.pg-cell__serial { font-variant-numeric: tabular-nums; }\n/* Dark mode: tint the serial (row-number) column with the header/footer chrome\n background (which sits above the darker data-row background in dark themes) so\n the number gutter reads as grid chrome \u2014 matching the header and footer\n surfaces \u2014 rather than as data. Scoped to dark mode per design; variants that\n define their own serial-column chrome (e.g. quartz) still win via source order. */\n[data-pg-mode=\"dark\"] .pg-cell--serial {\n background: var(--pg-colors-header-background, var(--pg-colors-footer-background, #1e293b));\n}\n.pg-cell--bool-true { color: var(--pg-colors-success, #16a34a); }\n.pg-cell--bool-false { color: var(--pg-colors-text-disabled, #94a3b8); }\n.pg-cell__image { border-radius: var(--pg-borders-radius-sm, 4px); object-fit: cover; }\n.pg-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: var(--pg-borders-radius-pill, 9999px);\n font-size: var(--pg-typography-font-size-xs, 11px);\n font-weight: var(--pg-typography-font-weight-medium, 500);\n white-space: nowrap;\n}\n.pg-cell--range-selected { background: var(--pg-colors-selection-background, rgba(37,99,235,0.08)); }\n.pg-cell--editing { padding: 0;border-radius: 4px }\n.pg-cell--editing .pg-cell__inner { padding: 0; overflow: visible; }\n.pg-selection-canvas { position: absolute; top: 0; left: 0; pointer-events: none; z-index: 10; }\n\n";
9
9
  //# sourceMappingURL=context-menu.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/context-menu.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,kkGA8F1B,CAAC"}
1
+ {"version":3,"file":"context-menu.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/context-menu.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,onHAsG1B,CAAC"}
@@ -82,6 +82,14 @@ export const contextMenuCss = `/* ─── Context menu ─── */
82
82
  font-size: var(--pg-typography-font-size-sm, 12px);
83
83
  }
84
84
  .pg-cell__serial { font-variant-numeric: tabular-nums; }
85
+ /* Dark mode: tint the serial (row-number) column with the header/footer chrome
86
+ background (which sits above the darker data-row background in dark themes) so
87
+ the number gutter reads as grid chrome — matching the header and footer
88
+ surfaces — rather than as data. Scoped to dark mode per design; variants that
89
+ define their own serial-column chrome (e.g. quartz) still win via source order. */
90
+ [data-pg-mode="dark"] .pg-cell--serial {
91
+ background: var(--pg-colors-header-background, var(--pg-colors-footer-background, #1e293b));
92
+ }
85
93
  .pg-cell--bool-true { color: var(--pg-colors-success, #16a34a); }
86
94
  .pg-cell--bool-false { color: var(--pg-colors-text-disabled, #94a3b8); }
87
95
  .pg-cell__image { border-radius: var(--pg-borders-radius-sm, 4px); object-fit: cover; }
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.css.js","sourceRoot":"","sources":["../../../src/styles/base/context-menu.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8F7B,CAAC"}
1
+ {"version":3,"file":"context-menu.css.js","sourceRoot":"","sources":["../../../src/styles/base/context-menu.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsG7B,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 filterCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Filter Row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-drag-preview {\n position: fixed;\n pointer-events: none;\n z-index: 99999;\n display: flex;\n align-items: center;\n gap: var(--pg-drag-preview-gap, 8px);\n padding: var(--pg-drag-preview-padding, 6px 12px);\n border-radius: var(--pg-borders-radius-md, 6px);\n box-shadow: var(--pg-shadows-drag-preview, 0 4px 16px rgba(0,0,0,0.18));\n font-size: var(--pg-typography-font-size-md, 13px);\n font-weight: var(--pg-typography-font-weight-medium, 500);\n white-space: nowrap;\n will-change: transform;\n background: var(--pg-colors-drag-preview-background, var(--pg-drag-preview-bg, #fff));\n border: 1px solid var(--pg-colors-drag-preview-border, var(--pg-drag-preview-border, #e0e0e0));\n color: var(--pg-colors-text-primary, var(--pg-text-primary, #222));\n top: 0;\n left: 0;\n transform: translate(-9999px, -9999px);\n}\n.pg-drag-preview__avatar {\n width: var(--pg-drag-preview-avatar-size, 24px);\n height: var(--pg-drag-preview-avatar-size, 24px);\n background: var(--pg-colors-primary, var(--pg-primary, #2563eb));\n overflow: hidden;\n flex-shrink: 0;\n}\n.pg-drag-preview__avatar--circle { border-radius: 50%; }\n.pg-drag-preview__avatar--square { border-radius: var(--pg-borders-radius-sm, 4px); }\n.pg-drag-preview__avatar-img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.pg-drag-preview__label {\n flex: 1;\n min-width: 0;\n}\n.pg-drag-preview__badge {\n background: var(--pg-colors-primary, var(--pg-primary, #2563eb));\n color: var(--pg-colors-primary-contrast, #fff);\n border-radius: var(--pg-borders-radius-pill, 999px);\n padding: 1px 7px;\n font-size: var(--pg-typography-font-size-xs, 11px);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n min-width: 20px;\n text-align: center;\n}\n\n.pg-filter-cell {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n padding: 0 6px;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-filter-cell:last-child { border-right: none; }\n.pg-filter-cell--checkbox {\n width: 44px;\n min-width: 44px;\n max-width: 44px;\n flex-shrink: 0;\n}\n.pg-filter-cell--serial {\n width: 52px;\n min-width: 52px;\n max-width: 52px;\n flex-shrink: 0;\n}\n.pg-filter-input {\n width: 100%;\n height: 24px;\n padding: 0 8px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-family: inherit;\n background: var(--pg-colors-surface, #fff);\n color: inherit;\n outline: none;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-input:focus { border-color: var(--pg-colors-border-focus, #2563eb); }\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Filter Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-filter-panel {\n position: absolute;\n z-index: var(--pg-z-index-filter-panel, 200);\n min-width: 270px;\n max-width: 320px;\n width: max-content;\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-lg, 0 8px 24px rgba(0,0,0,.12));\n overflow: hidden;\n font-size: var(--pg-typography-font-size-sm, 13px);\n color: var(--pg-colors-text, #1e293b);\n user-select: none;\n}\n\n/* \u2500\u2500 Condition filter \u2500\u2500 */\n.pg-filter-cond-wrap { padding: 10px; display: flex; flex-direction: column; gap: 6px; }\n\n.pg-filter-cond__row { display: flex; flex-direction: column; gap: 4px; }\n.pg-filter-cond__row--hidden { display: none; }\n\n.pg-filter-cond__select {\n width: 100%;\n height: 30px;\n padding: 0 8px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text, #1e293b);\n font-size: inherit;\n font-family: inherit;\n cursor: pointer;\n outline: none;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-cond__select:focus { border-color: var(--pg-colors-border-focus, #2563eb); }\n\n.pg-filter-cond__inputs { display: flex; align-items: center; gap: 4px; }\n.pg-filter-cond__inputs--hidden { display: none; }\n/* Stack inputs vertically in range (Between) mode so the panel never overflows horizontally */\n.pg-filter-cond__inputs--range { flex-direction: column; align-items: stretch; gap: 4px; }\n.pg-filter-cond__inputs--range .pg-filter-cond__range-sep {\n text-align: center;\n padding: 2px 0;\n color: var(--pg-colors-text-secondary, #64748b);\n font-size: var(--pg-typography-font-size-xs, 11px);\n font-weight: 500;\n}\n\n.pg-filter-cond__input {\n flex: 1;\n height: 30px;\n padding: 0 8px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text, #1e293b);\n font-size: inherit;\n font-family: inherit;\n outline: none;\n padding: 6px;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-cond__input:focus { border-color: var(--pg-colors-border-focus, #2563eb); }\n.pg-filter-cond__input--hidden { display: none; }\n\n.pg-filter-cond__range-sep {\n flex-shrink: 0;\n font-size: var(--pg-typography-font-size-xs, 11px);\n color: var(--pg-colors-text-secondary, #475569);\n padding: 0 2px;\n}\n.pg-filter-cond__range-sep--hidden { display: none; }\n\n/* \u2500\u2500 Logic toggle row (AND / OR / None) \u2500\u2500 */\n.pg-filter-logic {\n display: flex;\n gap: 4px;\n padding: 4px 0 2px;\n}\n.pg-filter-logic--hidden { display: none; }\n\n.pg-filter-logic__btn {\n flex: 1;\n height: 26px;\n padding: 0 6px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text-secondary, #475569);\n font-size: var(--pg-typography-font-size-xs, 11px);\n font-family: inherit;\n font-weight: 500;\n cursor: pointer;\n text-align: center;\n transition: background var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms),\n border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-logic__btn:hover { background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-filter-logic__btn--active {\n background: var(--pg-colors-primary, #2563eb);\n color: #fff;\n border-color: var(--pg-colors-primary, #2563eb);\n}\n\n/* \u2500\u2500 Set filter (dropdown / array) \u2500\u2500 */\n.pg-filter-set { display: flex; flex-direction: column; }\n\n.pg-filter-set__search {\n padding: 8px 10px 4px;\n}\n.pg-filter-set__search-input {\n width: 100%;\n height: 30px;\n padding: 0 10px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text, #1e293b);\n font-size: inherit;\n font-family: inherit;\n box-sizing: border-box;\n outline: none;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-set__search-input:focus { border-color: var(--pg-colors-border-focus, #2563eb); }\n\n.pg-filter-set__divider {\n height: 1px;\n background: var(--pg-colors-border, #e2e8f0);\n margin: 2px 0;\n}\n\n/* Select All item */\n.pg-filter-set__item {\n display: flex;\n align-items: center;\n gap: 8px;\n height: 28px;\n padding: 0 10px;\n cursor: pointer;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n box-sizing: border-box;\n position: absolute;\n left: 0;\n right: 0;\n}\n.pg-filter-set__item:hover { background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-filter-set__item--select-all {\n position: static;\n font-weight: 500;\n color: var(--pg-colors-text, #1e293b);\n}\n.pg-filter-set__item-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.pg-filter-set__item-label--blank { color: var(--pg-colors-text-disabled, #94a3b8); font-style: italic; }\n\n.pg-filter-set__checkbox {\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n cursor: pointer;\n accent-color: var(--pg-colors-primary, #2563eb);\n}\n\n/* Virtual scroll containers */\n.pg-filter-set__list {\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n scrollbar-width: thin;\n scrollbar-color: var(--pg-colors-border, #e2e8f0) transparent;\n}\n.pg-filter-set__list::-webkit-scrollbar { width: 6px; }\n.pg-filter-set__list::-webkit-scrollbar-track { background: transparent; }\n.pg-filter-set__list::-webkit-scrollbar-thumb {\n background: var(--pg-colors-border, #e2e8f0);\n border-radius: 3px;\n}\n.pg-filter-set__list-inner { position: relative; width: 100%; }\n\n/* \u2500\u2500 Panel footer \u2500\u2500 */\n.pg-filter-panel__footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 8px 10px;\n // border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n // background: var(--pg-colors-background, #f8fafc);\n}\n\n.pg-filter-panel__clear-btn {\n height: 28px;\n padding: 0 14px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text-secondary, #475569);\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-family: inherit;\n cursor: pointer;\n transition: background var(--pg-transitions-duration-fast, 100ms),\n border-color var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-panel__clear-btn:hover {\n background: var(--pg-colors-background-alt, #f1f5f9);\n border-color: var(--pg-colors-text-secondary, #475569);\n color: var(--pg-colors-text, #1e293b);\n}\n\n";
8
+ export declare const filterCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Filter Row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-drag-preview {\n position: fixed;\n pointer-events: none;\n z-index: 99999;\n display: flex;\n align-items: center;\n gap: var(--pg-drag-preview-gap, 8px);\n padding: var(--pg-drag-preview-padding, 6px 12px);\n border-radius: var(--pg-borders-radius-md, 6px);\n box-shadow: var(--pg-shadows-drag-preview, 0 4px 16px rgba(0,0,0,0.18));\n font-size: var(--pg-typography-font-size-md, 13px);\n font-weight: var(--pg-typography-font-weight-medium, 500);\n white-space: nowrap;\n will-change: transform;\n background: var(--pg-colors-drag-preview-background, var(--pg-drag-preview-bg, #fff));\n border: 1px solid var(--pg-colors-drag-preview-border, var(--pg-drag-preview-border, #e0e0e0));\n color: var(--pg-colors-text-primary, var(--pg-text-primary, #222));\n top: 0;\n left: 0;\n transform: translate(-9999px, -9999px);\n}\n.pg-drag-preview__avatar {\n width: var(--pg-drag-preview-avatar-size, 24px);\n height: var(--pg-drag-preview-avatar-size, 24px);\n background: var(--pg-colors-primary, var(--pg-primary, #2563eb));\n overflow: hidden;\n flex-shrink: 0;\n}\n.pg-drag-preview__avatar--circle { border-radius: 50%; }\n.pg-drag-preview__avatar--square { border-radius: var(--pg-borders-radius-sm, 4px); }\n.pg-drag-preview__avatar-img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.pg-drag-preview__label {\n flex: 1;\n min-width: 0;\n}\n.pg-drag-preview__badge {\n background: var(--pg-colors-primary, var(--pg-primary, #2563eb));\n color: var(--pg-colors-primary-contrast, #fff);\n border-radius: var(--pg-borders-radius-pill, 999px);\n padding: 1px 7px;\n font-size: var(--pg-typography-font-size-xs, 11px);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n min-width: 20px;\n text-align: center;\n}\n\n.pg-filter-cell {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n padding: 0 6px;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-filter-cell:last-child { border-right: none; }\n.pg-filter-cell--checkbox {\n width: 44px;\n min-width: 44px;\n max-width: 44px;\n flex-shrink: 0;\n}\n.pg-filter-cell--serial {\n width: 52px;\n min-width: 52px;\n max-width: 52px;\n flex-shrink: 0;\n}\n.pg-filter-input {\n width: 100%;\n height: 24px;\n padding: 0 8px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-family: inherit;\n background: var(--pg-colors-surface, #fff);\n color: inherit;\n outline: none;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-input:focus { border-color: var(--pg-colors-border-focus, #2563eb); }\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Filter Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-filter-panel {\n position: absolute;\n z-index: var(--pg-z-index-filter-panel, 200);\n min-width: 230px;\n max-width: 320px;\n width: max-content;\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-lg, 0 8px 24px rgba(0,0,0,.12));\n overflow: hidden;\n font-size: var(--pg-typography-font-size-sm, 13px);\n color: var(--pg-colors-text-primary, #1e293b);\n user-select: none;\n}\n\n/* \u2500\u2500 Condition filter \u2500\u2500 */\n.pg-filter-cond-wrap { padding: 10px; display: flex; flex-direction: column; gap: 6px; }\n\n.pg-filter-cond__row { display: flex; flex-direction: column; gap: 4px; }\n.pg-filter-cond__row--hidden { display: none; }\n\n.pg-filter-cond__select {\n width: 100%;\n height: 30px;\n padding: 0 8px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text-primary, #1e293b);\n font-size: inherit;\n font-family: inherit;\n cursor: pointer;\n outline: none;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-cond__select:focus { border-color: var(--pg-colors-border-focus, #2563eb); }\n\n.pg-filter-cond__inputs { display: flex; align-items: center; gap: 4px; }\n.pg-filter-cond__inputs--hidden { display: none; }\n/* Stack inputs vertically in range (Between) mode so the panel never overflows horizontally */\n.pg-filter-cond__inputs--range { flex-direction: column; align-items: stretch; gap: 4px; }\n.pg-filter-cond__inputs--range .pg-filter-cond__range-sep {\n text-align: center;\n padding: 2px 0;\n color: var(--pg-colors-text-secondary, #64748b);\n font-size: var(--pg-typography-font-size-xs, 11px);\n font-weight: 500;\n}\n\n.pg-filter-cond__input {\n flex: 1;\n height: 30px;\n padding: 0 8px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text-primary, #1e293b);\n font-size: inherit;\n font-family: inherit;\n outline: none;\n padding: 6px;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-cond__input:focus { border-color: var(--pg-colors-border-focus, #2563eb); }\n.pg-filter-cond__input--hidden { display: none; }\n\n.pg-filter-cond__range-sep {\n flex-shrink: 0;\n font-size: var(--pg-typography-font-size-xs, 11px);\n color: var(--pg-colors-text-secondary, #475569);\n padding: 0 2px;\n}\n.pg-filter-cond__range-sep--hidden { display: none; }\n\n/* \u2500\u2500 Logic toggle row (AND / OR / None) \u2500\u2500 */\n.pg-filter-logic {\n display: flex;\n gap: 4px;\n padding: 4px 0 2px;\n}\n.pg-filter-logic--hidden { display: none; }\n\n.pg-filter-logic__btn {\n flex: 1;\n height: 26px;\n padding: 0 6px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text-secondary, #475569);\n font-size: var(--pg-typography-font-size-xs, 11px);\n font-family: inherit;\n font-weight: 500;\n cursor: pointer;\n text-align: center;\n transition: background var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms),\n border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-logic__btn:hover { background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-filter-logic__btn--active {\n background: var(--pg-colors-primary, #2563eb);\n color: #fff;\n border-color: var(--pg-colors-primary, #2563eb);\n}\n\n/* \u2500\u2500 Set filter (dropdown / array) \u2500\u2500 */\n.pg-filter-set { display: flex; flex-direction: column; }\n\n.pg-filter-set__search {\n padding: 8px 10px 4px;\n}\n.pg-filter-set__search-input {\n width: 100%;\n height: 30px;\n padding: 0 10px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text-primary, #1e293b);\n font-size: inherit;\n font-family: inherit;\n box-sizing: border-box;\n outline: none;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-set__search-input:focus { border-color: var(--pg-colors-border-focus, #2563eb); }\n\n.pg-filter-set__divider {\n height: 1px;\n background: var(--pg-colors-border, #e2e8f0);\n margin: 2px 0;\n}\n\n/* Select All item */\n.pg-filter-set__item {\n display: flex;\n align-items: center;\n gap: 8px;\n height: 28px;\n padding: 0 10px;\n cursor: pointer;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n box-sizing: border-box;\n position: absolute;\n left: 0;\n right: 0;\n}\n.pg-filter-set__item:hover { background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-filter-set__item--select-all {\n position: static;\n font-weight: 500;\n color: var(--pg-colors-text-primary, #1e293b);\n}\n.pg-filter-set__item-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.pg-filter-set__item-label--blank { color: var(--pg-colors-text-disabled, #94a3b8); font-style: italic; }\n\n.pg-filter-set__checkbox {\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n cursor: pointer;\n accent-color: var(--pg-colors-primary, #2563eb);\n}\n\n/* Virtual scroll containers */\n.pg-filter-set__list {\n overflow-y: auto;\n overflow-x: hidden;\n position: relative;\n scrollbar-width: thin;\n scrollbar-color: var(--pg-colors-border, #e2e8f0) transparent;\n}\n.pg-filter-set__list::-webkit-scrollbar { width: 6px; }\n.pg-filter-set__list::-webkit-scrollbar-track { background: transparent; }\n.pg-filter-set__list::-webkit-scrollbar-thumb {\n background: var(--pg-colors-border, #e2e8f0);\n border-radius: 3px;\n}\n.pg-filter-set__list-inner { position: relative; width: 100%; }\n\n/* \u2500\u2500 Panel footer \u2500\u2500 */\n.pg-filter-panel__footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 8px 10px;\n // border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n // background: var(--pg-colors-background, #f8fafc);\n}\n\n.pg-filter-panel__clear-btn {\n height: 28px;\n padding: 0 14px;\n border: 1px solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-sm, 4px);\n background: var(--pg-colors-surface, #fff);\n color: var(--pg-colors-text-secondary, #475569);\n font-size: var(--pg-typography-font-size-sm, 12px);\n font-family: inherit;\n cursor: pointer;\n transition: background var(--pg-transitions-duration-fast, 100ms),\n border-color var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-filter-panel__clear-btn:hover {\n background: var(--pg-colors-background-alt, #f1f5f9);\n border-color: var(--pg-colors-text-secondary, #475569);\n color: var(--pg-colors-text-primary, #1e293b);\n}\n\n";
9
9
  //# sourceMappingURL=filter.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/filter.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,8kUA+SrB,CAAC"}
1
+ {"version":3,"file":"filter.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/filter.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,8nUA+SrB,CAAC"}
@@ -95,7 +95,7 @@ export const filterCss = `/* ─────────────────
95
95
  .pg-filter-panel {
96
96
  position: absolute;
97
97
  z-index: var(--pg-z-index-filter-panel, 200);
98
- min-width: 270px;
98
+ min-width: 230px;
99
99
  max-width: 320px;
100
100
  width: max-content;
101
101
  background: var(--pg-colors-surface, #fff);
@@ -104,7 +104,7 @@ export const filterCss = `/* ─────────────────
104
104
  box-shadow: var(--pg-shadows-lg, 0 8px 24px rgba(0,0,0,.12));
105
105
  overflow: hidden;
106
106
  font-size: var(--pg-typography-font-size-sm, 13px);
107
- color: var(--pg-colors-text, #1e293b);
107
+ color: var(--pg-colors-text-primary, #1e293b);
108
108
  user-select: none;
109
109
  }
110
110
 
@@ -121,7 +121,7 @@ export const filterCss = `/* ─────────────────
121
121
  border: 1px solid var(--pg-colors-border, #e2e8f0);
122
122
  border-radius: var(--pg-borders-radius-sm, 4px);
123
123
  background: var(--pg-colors-surface, #fff);
124
- color: var(--pg-colors-text, #1e293b);
124
+ color: var(--pg-colors-text-primary, #1e293b);
125
125
  font-size: inherit;
126
126
  font-family: inherit;
127
127
  cursor: pointer;
@@ -149,7 +149,7 @@ export const filterCss = `/* ─────────────────
149
149
  border: 1px solid var(--pg-colors-border, #e2e8f0);
150
150
  border-radius: var(--pg-borders-radius-sm, 4px);
151
151
  background: var(--pg-colors-surface, #fff);
152
- color: var(--pg-colors-text, #1e293b);
152
+ color: var(--pg-colors-text-primary, #1e293b);
153
153
  font-size: inherit;
154
154
  font-family: inherit;
155
155
  outline: none;
@@ -212,7 +212,7 @@ export const filterCss = `/* ─────────────────
212
212
  border: 1px solid var(--pg-colors-border, #e2e8f0);
213
213
  border-radius: var(--pg-borders-radius-sm, 4px);
214
214
  background: var(--pg-colors-surface, #fff);
215
- color: var(--pg-colors-text, #1e293b);
215
+ color: var(--pg-colors-text-primary, #1e293b);
216
216
  font-size: inherit;
217
217
  font-family: inherit;
218
218
  box-sizing: border-box;
@@ -245,7 +245,7 @@ export const filterCss = `/* ─────────────────
245
245
  .pg-filter-set__item--select-all {
246
246
  position: static;
247
247
  font-weight: 500;
248
- color: var(--pg-colors-text, #1e293b);
248
+ color: var(--pg-colors-text-primary, #1e293b);
249
249
  }
250
250
  .pg-filter-set__item-label {
251
251
  overflow: hidden;
@@ -305,7 +305,7 @@ export const filterCss = `/* ─────────────────
305
305
  .pg-filter-panel__clear-btn:hover {
306
306
  background: var(--pg-colors-background-alt, #f1f5f9);
307
307
  border-color: var(--pg-colors-text-secondary, #475569);
308
- color: var(--pg-colors-text, #1e293b);
308
+ color: var(--pg-colors-text-primary, #1e293b);
309
309
  }
310
310
 
311
311
  `;