photon-grid-core 2.0.1 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +3 -3
  2. package/cell-selection/cell-selection-engine.d.ts.map +1 -1
  3. package/cell-selection/cell-selection-engine.js +11 -9
  4. package/cell-selection/cell-selection-engine.js.map +1 -1
  5. package/chart/range-chart-controller.d.ts +10 -0
  6. package/chart/range-chart-controller.d.ts.map +1 -1
  7. package/chart/range-chart-controller.js +22 -2
  8. package/chart/range-chart-controller.js.map +1 -1
  9. package/column-groups/column-group-drag-handler.d.ts.map +1 -1
  10. package/column-groups/column-group-drag-handler.js +64 -25
  11. package/column-groups/column-group-drag-handler.js.map +1 -1
  12. package/column-groups/column-group-header-builder.d.ts.map +1 -1
  13. package/column-groups/column-group-header-builder.js +7 -5
  14. package/column-groups/column-group-header-builder.js.map +1 -1
  15. package/column-groups/display-group-drag-handler.d.ts +7 -3
  16. package/column-groups/display-group-drag-handler.d.ts.map +1 -1
  17. package/column-groups/display-group-drag-handler.js +46 -7
  18. package/column-groups/display-group-drag-handler.js.map +1 -1
  19. package/column-groups/display-group-header-builder.d.ts +1 -1
  20. package/column-groups/display-group-header-builder.d.ts.map +1 -1
  21. package/column-groups/display-group-header-builder.js +9 -7
  22. package/column-groups/display-group-header-builder.js.map +1 -1
  23. package/core/column-model.d.ts +88 -5
  24. package/core/column-model.d.ts.map +1 -1
  25. package/core/column-model.js +215 -3
  26. package/core/column-model.js.map +1 -1
  27. package/core/grid-api.d.ts +10 -2
  28. package/core/grid-api.d.ts.map +1 -1
  29. package/core/grid-api.js +10 -0
  30. package/core/grid-api.js.map +1 -1
  31. package/core/grid-core.d.ts +7 -0
  32. package/core/grid-core.d.ts.map +1 -1
  33. package/core/grid-core.js +29 -8
  34. package/core/grid-core.js.map +1 -1
  35. package/core/grid-store.d.ts +5 -5
  36. package/core/grid-store.d.ts.map +1 -1
  37. package/core/pointer-utils.d.ts +59 -0
  38. package/core/pointer-utils.d.ts.map +1 -0
  39. package/core/pointer-utils.js +59 -0
  40. package/core/pointer-utils.js.map +1 -0
  41. package/drag-drop/drag-drop-engine.d.ts.map +1 -1
  42. package/drag-drop/drag-drop-engine.js +8 -8
  43. package/drag-drop/drag-drop-engine.js.map +1 -1
  44. package/engines/editing/cell-editor-engine.js +1 -1
  45. package/engines/editing/cell-editor-engine.js.map +1 -1
  46. package/index.d.ts +6 -3
  47. package/index.d.ts.map +1 -1
  48. package/index.js +3 -1
  49. package/index.js.map +1 -1
  50. package/package.json +1 -1
  51. package/photon-ai/index.d.ts +2 -0
  52. package/photon-ai/index.d.ts.map +1 -1
  53. package/photon-ai/index.js +2 -0
  54. package/photon-ai/index.js.map +1 -1
  55. package/photon-ai/photon-ai-panel.d.ts +40 -0
  56. package/photon-ai/photon-ai-panel.d.ts.map +1 -1
  57. package/photon-ai/photon-ai-panel.js +163 -8
  58. package/photon-ai/photon-ai-panel.js.map +1 -1
  59. package/photon-ai/photon-ai-service.d.ts +38 -1
  60. package/photon-ai/photon-ai-service.d.ts.map +1 -1
  61. package/photon-ai/photon-ai-service.js +72 -1
  62. package/photon-ai/photon-ai-service.js.map +1 -1
  63. package/photon-ai/provider/ai-provider.types.d.ts +174 -0
  64. package/photon-ai/provider/ai-provider.types.d.ts.map +1 -0
  65. package/photon-ai/provider/ai-provider.types.js +42 -0
  66. package/photon-ai/provider/ai-provider.types.js.map +1 -0
  67. package/photon-ai/provider/command-normalizer.d.ts +36 -0
  68. package/photon-ai/provider/command-normalizer.d.ts.map +1 -0
  69. package/photon-ai/provider/command-normalizer.js +120 -0
  70. package/photon-ai/provider/command-normalizer.js.map +1 -0
  71. package/photon-ai/provider/grid-context-builder.d.ts +37 -0
  72. package/photon-ai/provider/grid-context-builder.d.ts.map +1 -0
  73. package/photon-ai/provider/grid-context-builder.js +96 -0
  74. package/photon-ai/provider/grid-context-builder.js.map +1 -0
  75. package/photon-ai/provider/http-ai-provider.d.ts +42 -0
  76. package/photon-ai/provider/http-ai-provider.d.ts.map +1 -0
  77. package/photon-ai/provider/http-ai-provider.js +125 -0
  78. package/photon-ai/provider/http-ai-provider.js.map +1 -0
  79. package/photon-ai/provider/index.d.ts +30 -0
  80. package/photon-ai/provider/index.d.ts.map +1 -0
  81. package/photon-ai/provider/index.js +42 -0
  82. package/photon-ai/provider/index.js.map +1 -0
  83. package/photon-ai/provider/presets.d.ts +29 -0
  84. package/photon-ai/provider/presets.d.ts.map +1 -0
  85. package/photon-ai/provider/presets.js +110 -0
  86. package/photon-ai/provider/presets.js.map +1 -0
  87. package/photon-ai/provider/response-parsing.d.ts +22 -0
  88. package/photon-ai/provider/response-parsing.d.ts.map +1 -0
  89. package/photon-ai/provider/response-parsing.js +79 -0
  90. package/photon-ai/provider/response-parsing.js.map +1 -0
  91. package/photon-ai/provider/system-prompt.d.ts +26 -0
  92. package/photon-ai/provider/system-prompt.d.ts.map +1 -0
  93. package/photon-ai/provider/system-prompt.js +82 -0
  94. package/photon-ai/provider/system-prompt.js.map +1 -0
  95. package/photon-grid.min.js +497 -56
  96. package/renderer/body-renderer.d.ts.map +1 -1
  97. package/renderer/body-renderer.js +34 -9
  98. package/renderer/body-renderer.js.map +1 -1
  99. package/renderer/column-chooser.d.ts +82 -0
  100. package/renderer/column-chooser.d.ts.map +1 -0
  101. package/renderer/column-chooser.js +335 -0
  102. package/renderer/column-chooser.js.map +1 -0
  103. package/renderer/column-menu.d.ts.map +1 -1
  104. package/renderer/column-menu.js +32 -20
  105. package/renderer/column-menu.js.map +1 -1
  106. package/renderer/column-style-manager.d.ts +17 -0
  107. package/renderer/column-style-manager.d.ts.map +1 -1
  108. package/renderer/column-style-manager.js +28 -0
  109. package/renderer/column-style-manager.js.map +1 -1
  110. package/renderer/detail-row-renderer.d.ts.map +1 -1
  111. package/renderer/detail-row-renderer.js +8 -6
  112. package/renderer/detail-row-renderer.js.map +1 -1
  113. package/renderer/grid-renderer.d.ts +10 -0
  114. package/renderer/grid-renderer.d.ts.map +1 -1
  115. package/renderer/grid-renderer.js +45 -7
  116. package/renderer/grid-renderer.js.map +1 -1
  117. package/renderer/group-drop-zone.js +14 -14
  118. package/renderer/group-drop-zone.js.map +1 -1
  119. package/renderer/header-renderer.d.ts +65 -0
  120. package/renderer/header-renderer.d.ts.map +1 -1
  121. package/renderer/header-renderer.js +347 -49
  122. package/renderer/header-renderer.js.map +1 -1
  123. package/renderer/row-animator.js +3 -3
  124. package/renderer/row-drag-renderer.js +6 -6
  125. package/renderer/row-drag-renderer.js.map +1 -1
  126. package/renderer/scroll-controller.d.ts +40 -0
  127. package/renderer/scroll-controller.d.ts.map +1 -1
  128. package/renderer/scroll-controller.js +184 -0
  129. package/renderer/scroll-controller.js.map +1 -1
  130. package/styles/base/column-chooser.css.d.ts +13 -0
  131. package/styles/base/column-chooser.css.d.ts.map +1 -0
  132. package/styles/base/column-chooser.css.js +241 -0
  133. package/styles/base/column-chooser.css.js.map +1 -0
  134. package/styles/base/column-context-menu.css.d.ts +1 -1
  135. package/styles/base/column-context-menu.css.d.ts.map +1 -1
  136. package/styles/base/column-context-menu.css.js +10 -0
  137. package/styles/base/column-context-menu.css.js.map +1 -1
  138. package/styles/base/filter.css.d.ts +1 -1
  139. package/styles/base/filter.css.js +1 -1
  140. package/styles/base/header.css.d.ts +1 -1
  141. package/styles/base/header.css.d.ts.map +1 -1
  142. package/styles/base/header.css.js +19 -0
  143. package/styles/base/header.css.js.map +1 -1
  144. package/styles/base/photon-ai.css.d.ts +1 -1
  145. package/styles/base/photon-ai.css.d.ts.map +1 -1
  146. package/styles/base/photon-ai.css.js +65 -0
  147. package/styles/base/photon-ai.css.js.map +1 -1
  148. package/styles/base/scrollbars.css.d.ts +1 -1
  149. package/styles/base/scrollbars.css.d.ts.map +1 -1
  150. package/styles/base/scrollbars.css.js +50 -4
  151. package/styles/base/scrollbars.css.js.map +1 -1
  152. package/styles/base/touch.css.d.ts +23 -0
  153. package/styles/base/touch.css.d.ts.map +1 -0
  154. package/styles/base/touch.css.js +85 -0
  155. package/styles/base/touch.css.js.map +1 -0
  156. package/styles/base-styles.d.ts.map +1 -1
  157. package/styles/base-styles.js +4 -0
  158. package/styles/base-styles.js.map +1 -1
  159. package/styles/themes/theme-dark.d.ts +1 -1
  160. package/styles/themes/theme-dark.d.ts.map +1 -1
  161. package/styles/themes/theme-dark.js +3 -0
  162. package/styles/themes/theme-dark.js.map +1 -1
  163. package/types/column.types.d.ts +36 -0
  164. package/types/column.types.d.ts.map +1 -1
  165. package/types/grid.types.d.ts +3 -2
  166. package/types/grid.types.d.ts.map +1 -1
  167. package/types/photon-ai.types.d.ts +125 -5
  168. package/types/photon-ai.types.d.ts.map +1 -1
  169. package/types/photon-ai.types.js +18 -1
  170. package/types/photon-ai.types.js.map +1 -1
@@ -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, #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";
9
9
  //# sourceMappingURL=filter.css.d.ts.map
@@ -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);
@@ -5,5 +5,5 @@
5
5
  * base-styles.ts; edit here, not there. Order is preserved because CSS
6
6
  * cascade depends on it.
7
7
  */
8
- export declare const headerCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Header rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-header-row, .pg-filter-row {\n display: flex;\n align-items: stretch;\n}\n.pg-header-row { height: var(--pg-header-row-height, 44px); }\n.pg-filter-row {\n height: var(--pg-filter-row-height, 36px);\n border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n background: var(--pg-colors-filter-background, #fff);\n}\n.pg-th {\n display: flex;\n align-items: center;\n position: relative;\n flex-shrink: 0;\n padding: 0;\n color: var(--pg-colors-header-text, #374151);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n font-size: var(--pg-typography-font-size-sm, 12px);\n letter-spacing: var(--pg-typography-letter-spacing-wide, 0.025em);\n text-transform: uppercase;\n border-right: 1px solid var(--pg-colors-header-border, #e2e8f0);\n user-select: none;\n cursor: default;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n overflow: hidden;\n min-width: var(--pg-sizing-column-min-width, 40px);\n}\n.pg-th:last-child { border-right: none; }\n.pg-th--sortable { cursor: pointer; }\n// .pg-th:hover, .pg-th.pg-th--sortable:hover { background: var(--pg-colors-header-hover, #f1f5f9); }\n// .pg-th.pg-th--sorted { background: var(--pg-colors-header-hover, #f1f5f9); }\n.pg-th.pg-th--sort-asc .pg-th__sort-icon,\n.pg-th.pg-th--sort-desc .pg-th__sort-icon { color: var(--pg-colors-primary, #2563eb); }\n.pg-th.pg-th--filter-active .pg-th__label { color: var(--pg-colors-primary, #2563eb); }\n.pg-th--checkbox {\n width: 44px;\n min-width: 44px;\n max-width: 44px;\n justify-content: center;\n flex-shrink: 0;\n}\n.pg-th--serial {\n width: 52px;\n min-width: 52px;\n max-width: 52px;\n justify-content: center;\n flex-shrink: 0;\n}\n.pg-th--auto-group {\n flex-shrink: 0;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n font-size: var(--pg-typography-font-size-xs, 11px);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--pg-colors-text-secondary, #64748b);\n}\n.pg-cell--auto-group-spacer {\n flex-shrink: 0;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n background: transparent;\n}\n.pg-th__content {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n padding: 0 10px 0 12px;\n height: 100%;\n}\n.pg-th__label {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.pg-th__sort-icon { flex-shrink: 0; opacity: 0; color: var(--pg-colors-text-secondary, #475569); }\n/* Aligned column headers */\n.pg-th--align-right .pg-th__label { text-align: right; }\n.pg-th--align-center .pg-th__label { text-align: center; }\n.pg-th--align-center .pg-th__content,\n.pg-th--no-group .pg-th__content {\n justify-content: center;\n}\n.pg-th--no-group .pg-th__label {\n text-align: center;\n}\n/* Reversed header layout for numeric/currency columns: icons LEFT, text RIGHT */\n.pg-th--reverse { flex-direction: row-reverse; }\n.pg-th--reverse .pg-th__content { flex-direction: row-reverse; padding: 0 12px 0 10px; }\n.pg-th--reverse .pg-th__label { flex: 1 1 auto; }\n.pg-th--reverse .pg-th__filter-btn { margin-right: 0; margin-left: 2px; }\n.pg-th--reverse .pg-th__menu-btn { margin-right: 0; margin-left: 4px; }\n.pg-th--sort-asc .pg-th__sort-icon,\n.pg-th--sort-desc .pg-th__sort-icon { opacity: 1; color: var(--pg-colors-primary, #2563eb); }\n/* \u2500\u2500\u2500 Column header filter button \u2500\u2500\u2500 */\n.pg-th__filter-btn {\n flex-shrink: 0;\n display: none;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 4px;\n margin-right: 2px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n opacity: 0.7;\n transition: opacity var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms),\n background var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th:hover .pg-th__filter-btn,\n.pg-th__filter-btn--active { display: flex; }\n.pg-th__filter-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th__filter-btn--active {\n opacity: 1;\n color: var(--pg-colors-primary, #2563eb);\n}\n.pg-th__filter-icon { flex-shrink: 0; color: var(--pg-colors-primary, #2563eb); }\n.pg-th__menu-btn {\n flex-shrink: 0;\n display: none;\n cursor: pointer;\n padding: 6px;\n margin-right: 4px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n opacity: 0.6;\n transition: opacity var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th:hover .pg-th__menu-btn,\n.pg-th__menu-btn--active { display: flex; }\n.pg-th__menu-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th__menu-btn--active { opacity: 1; background: var(--pg-colors-border, #e2e8f0); }\n.pg-th__resize-handle {\n position: absolute;\n right: -1px;\n top: 0;\n width: 6px;\n height: 50%;\n top: 25%;\n cursor: ew-resize;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--pg-colors-resize-handle-color, #d9d9db);\n background: transparent;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n z-index: 5;\n font-size: 10px;\n user-select: none;\n background: #d6d6d6;\n width: 2px;\n}\n/* Right-pinned columns anchor their right edge to the grid border, so the\n resize handle lives on the inner (left) edge \u2014 the edge free to move. */\n.pg-th--pinned-right .pg-th__resize-handle {\n right: auto;\n left: -1px;\n}\n.pg-th__resize-handle:hover,\n.pg-th.pg-resizing .pg-th__resize-handle,\n.pg-th--resizing .pg-th__resize-handle {\n // background: var(--pg-colors-resize-handle-active-color, #2563eb);\n}\n\n/* No vertical-borders mode: completely remove the 1px border slot from both headers and cells */\n.pg-grid--no-v-borders .pg-th { border-right: none; }\n.pg-grid--no-v-borders .pg-cell { border-right: none; }\n// .pg-grid--no-v-borders .pg-th__resize-handle {\n// background: var(--pg-colors-resize-handle-color, #e2e8f0);\n// }\n.pg-grid--no-v-borders .pg-th__resize-handle:hover,\n.pg-grid--no-v-borders .pg-th.pg-resizing .pg-th__resize-handle,\n.pg-grid--no-v-borders .pg-th--resizing .pg-th__resize-handle {\n // background: var(--pg-colors-resize-handle-active-color, #2563eb);\n}\n.pg-th__drag-handle {\n position: absolute;\n left: 2px;\n top: 50%;\n transform: translateY(-50%);\n display: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 24px;\n cursor: grab;\n color: var(--pg-colors-text-secondary, #475569);\n z-index: 2;\n border-radius: 3px;\n}\n.pg-th:hover .pg-th__drag-handle { display: flex; opacity: 0.5; }\n.pg-th__drag-handle:hover { opacity: 1 !important; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th--dragging { opacity: 0.72; cursor: grabbing !important; }\n.pg-th__serial-label { font-size: 11px; opacity: 0.45; }\n.pg-header-checkbox { cursor: pointer; width: 16px; height: 16px; }\n\n";
8
+ export declare const headerCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Header rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-header-row, .pg-filter-row {\n display: flex;\n align-items: stretch;\n}\n.pg-header-row { height: var(--pg-header-row-height, 44px); }\n.pg-filter-row {\n height: var(--pg-filter-row-height, 36px);\n border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n background: var(--pg-colors-filter-background, #fff);\n}\n.pg-th {\n display: flex;\n align-items: center;\n position: relative;\n flex-shrink: 0;\n padding: 0;\n color: var(--pg-colors-header-text, #374151);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n font-size: var(--pg-typography-font-size-sm, 12px);\n letter-spacing: var(--pg-typography-letter-spacing-wide, 0.025em);\n text-transform: uppercase;\n border-right: 1px solid var(--pg-colors-header-border, #e2e8f0);\n user-select: none;\n cursor: default;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n overflow: hidden;\n min-width: var(--pg-sizing-column-min-width, 40px);\n}\n.pg-th:last-child { border-right: none; }\n.pg-th--sortable { cursor: pointer; }\n// .pg-th:hover, .pg-th.pg-th--sortable:hover { background: var(--pg-colors-header-hover, #f1f5f9); }\n// .pg-th.pg-th--sorted { background: var(--pg-colors-header-hover, #f1f5f9); }\n.pg-th.pg-th--sort-asc .pg-th__sort-icon,\n.pg-th.pg-th--sort-desc .pg-th__sort-icon { color: var(--pg-colors-primary, #2563eb); }\n.pg-th.pg-th--filter-active .pg-th__label { color: var(--pg-colors-primary, #2563eb); }\n.pg-th--checkbox {\n width: 44px;\n min-width: 44px;\n max-width: 44px;\n justify-content: center;\n flex-shrink: 0;\n}\n.pg-th--serial {\n width: 52px;\n min-width: 52px;\n max-width: 52px;\n justify-content: center;\n flex-shrink: 0;\n}\n.pg-th--auto-group {\n flex-shrink: 0;\n background: var(--pg-colors-header-background, #f8fafc);\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n font-size: var(--pg-typography-font-size-xs, 11px);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--pg-colors-text-secondary, #64748b);\n}\n.pg-cell--auto-group-spacer {\n flex-shrink: 0;\n border-right: 1px solid var(--pg-colors-border, #e2e8f0);\n background: transparent;\n}\n.pg-th__content {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n min-width: 0;\n padding: 0 10px 0 12px;\n height: 100%;\n}\n.pg-th__label {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.pg-th__sort-icon { flex-shrink: 0; opacity: 0; color: var(--pg-colors-text-secondary, #475569); }\n/* Aligned column headers */\n.pg-th--align-right .pg-th__label { text-align: right; }\n.pg-th--align-center .pg-th__label { text-align: center; }\n.pg-th--align-center .pg-th__content,\n.pg-th--no-group .pg-th__content {\n justify-content: center;\n}\n.pg-th--no-group .pg-th__label {\n text-align: center;\n}\n/* Reversed header layout for numeric/currency columns: icons LEFT, text RIGHT */\n.pg-th--reverse { flex-direction: row-reverse; }\n.pg-th--reverse .pg-th__content { flex-direction: row-reverse; padding: 0 12px 0 10px; }\n.pg-th--reverse .pg-th__label { flex: 1 1 auto; }\n.pg-th--reverse .pg-th__filter-btn { margin-right: 0; margin-left: 2px; }\n.pg-th--reverse .pg-th__menu-btn { margin-right: 0; margin-left: 4px; }\n.pg-th--sort-asc .pg-th__sort-icon,\n.pg-th--sort-desc .pg-th__sort-icon { opacity: 1; color: var(--pg-colors-primary, #2563eb); }\n/* \u2500\u2500\u2500 Column header filter button \u2500\u2500\u2500 */\n.pg-th__filter-btn {\n flex-shrink: 0;\n display: none;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 4px;\n margin-right: 2px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n opacity: 0.7;\n transition: opacity var(--pg-transitions-duration-fast, 100ms),\n color var(--pg-transitions-duration-fast, 100ms),\n background var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th:hover .pg-th__filter-btn,\n.pg-th__filter-btn--active { display: flex; }\n.pg-th__filter-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th__filter-btn--active {\n opacity: 1;\n color: var(--pg-colors-primary, #2563eb);\n}\n.pg-th__filter-icon { flex-shrink: 0; color: var(--pg-colors-primary, #2563eb); }\n.pg-th__menu-btn {\n flex-shrink: 0;\n display: none;\n cursor: pointer;\n padding: 6px;\n margin-right: 4px;\n border-radius: var(--pg-borders-radius-sm, 4px);\n color: var(--pg-colors-text-secondary, #475569);\n opacity: 0.6;\n transition: opacity var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-th:hover .pg-th__menu-btn,\n.pg-th__menu-btn--active { display: flex; }\n.pg-th__menu-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th__menu-btn--active { opacity: 1; background: var(--pg-colors-border, #e2e8f0); }\n.pg-th__resize-handle {\n position: absolute;\n right: -1px;\n top: 0;\n width: 6px;\n height: 50%;\n top: 25%;\n cursor: ew-resize;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--pg-colors-resize-handle-color, #d9d9db);\n background: transparent;\n transition: background var(--pg-transitions-duration-fast, 100ms);\n z-index: 5;\n font-size: 10px;\n user-select: none;\n background: #d6d6d6;\n width: 2px;\n}\n/* Right-pinned columns anchor their right edge to the grid border, so the\n resize handle lives on the inner (left) edge \u2014 the edge free to move. */\n.pg-th--pinned-right .pg-th__resize-handle {\n right: auto;\n left: -1px;\n}\n.pg-th__resize-handle:hover,\n.pg-th.pg-resizing .pg-th__resize-handle,\n.pg-th--resizing .pg-th__resize-handle {\n // background: var(--pg-colors-resize-handle-active-color, #2563eb);\n}\n\n/* No vertical-borders mode: completely remove the 1px border slot from both headers and cells */\n.pg-grid--no-v-borders .pg-th { border-right: none; }\n.pg-grid--no-v-borders .pg-cell { border-right: none; }\n// .pg-grid--no-v-borders .pg-th__resize-handle {\n// background: var(--pg-colors-resize-handle-color, #e2e8f0);\n// }\n.pg-grid--no-v-borders .pg-th__resize-handle:hover,\n.pg-grid--no-v-borders .pg-th.pg-resizing .pg-th__resize-handle,\n.pg-grid--no-v-borders .pg-th--resizing .pg-th__resize-handle {\n // background: var(--pg-colors-resize-handle-active-color, #2563eb);\n}\n.pg-th__drag-handle {\n position: absolute;\n left: 2px;\n top: 50%;\n transform: translateY(-50%);\n display: none;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 24px;\n cursor: grab;\n color: var(--pg-colors-text-secondary, #475569);\n z-index: 2;\n border-radius: 3px;\n}\n.pg-th:hover .pg-th__drag-handle { display: flex; opacity: 0.5; }\n.pg-th__drag-handle:hover { opacity: 1 !important; background: var(--pg-colors-background-alt, #f1f5f9); }\n.pg-th--dragging { opacity: 0.72; cursor: grabbing !important; }\n.pg-th__serial-label { font-size: 11px; opacity: 0.45; }\n.pg-header-checkbox { cursor: pointer; width: 16px; height: 16px; }\n\n/* Inline column-header rename input (column menu \u2192 Rename). */\n.pg-th__rename-input {\n flex: 1 1 auto;\n min-width: 0;\n width: 100%;\n box-sizing: border-box;\n padding: 2px 6px;\n margin: 0 4px;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n color: var(--pg-colors-text-primary, #0f172a);\n background: var(--pg-colors-background, #ffffff);\n border: 1px solid var(--pg-colors-primary, #2563eb);\n border-radius: var(--pg-borders-radius-sm, 4px);\n outline: none;\n box-shadow: 0 0 0 2px var(--pg-colors-primary-soft, rgba(37, 99, 235, 0.16));\n}\n\n";
9
9
  //# sourceMappingURL=header.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,uxOA2MrB,CAAC"}
1
+ {"version":3,"file":"header.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,+2PA8NrB,CAAC"}
@@ -208,5 +208,24 @@ export const headerCss = `/* ─────────────────
208
208
  .pg-th__serial-label { font-size: 11px; opacity: 0.45; }
209
209
  .pg-header-checkbox { cursor: pointer; width: 16px; height: 16px; }
210
210
 
211
+ /* Inline column-header rename input (column menu → Rename). */
212
+ .pg-th__rename-input {
213
+ flex: 1 1 auto;
214
+ min-width: 0;
215
+ width: 100%;
216
+ box-sizing: border-box;
217
+ padding: 2px 6px;
218
+ margin: 0 4px;
219
+ font-family: inherit;
220
+ font-size: inherit;
221
+ font-weight: inherit;
222
+ color: var(--pg-colors-text-primary, #0f172a);
223
+ background: var(--pg-colors-background, #ffffff);
224
+ border: 1px solid var(--pg-colors-primary, #2563eb);
225
+ border-radius: var(--pg-borders-radius-sm, 4px);
226
+ outline: none;
227
+ box-shadow: 0 0 0 2px var(--pg-colors-primary-soft, rgba(37, 99, 235, 0.16));
228
+ }
229
+
211
230
  `;
212
231
  //# sourceMappingURL=header.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.css.js","sourceRoot":"","sources":["../../../src/styles/base/header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2MxB,CAAC"}
1
+ {"version":3,"file":"header.css.js","sourceRoot":"","sources":["../../../src/styles/base/header.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8NxB,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 photonAiCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Photon AI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Floating command bar, anchored to the grid body's bottom-right corner.\n Mounted as a sibling of the pinned-column panels (see PhotonAIPanel.mount /\n GridRenderer.buildLayout) so it floats independently of virtualization and\n scroll; the grid body's own overflow: hidden is what keeps it inside the\n grid container per spec, without this component needing to enforce that\n itself. */\n.pg-ai-launcher {\n position: absolute;\n bottom: 16px;\n right: 16px;\n z-index: 201;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border: none;\n border-radius: var(--pg-borders-radius-pill, 9999px);\n background: var(--pg-colors-primary, #2563eb);\n color: var(--pg-colors-primary-text, #ffffff);\n box-shadow: var(--pg-shadows-lg, 0 8px 24px rgba(15, 23, 42, 0.16));\n cursor: pointer;\n transition:\n transform var(--pg-transitions-duration-base, 150ms) var(--pg-transitions-easing-base, ease),\n opacity var(--pg-transitions-duration-base, 150ms) var(--pg-transitions-easing-base, ease),\n background var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-ai-launcher:hover {\n background: var(--pg-colors-primary-hover, #1d4ed8);\n transform: scale(1.06);\n}\n.pg-ai-launcher:active {\n background: var(--pg-colors-primary-active, #1e40af);\n transform: scale(0.97);\n}\n.pg-ai-launcher--hidden {\n opacity: 0;\n transform: scale(0.7);\n pointer-events: none;\n}\n\n.pg-ai-panel {\n position: absolute;\n top: 12px;\n right: 12px;\n bottom: 12px;\n z-index: 201;\n width: min(360px, calc(100% - 24px));\n display: none;\n flex-direction: column;\n background: var(--pg-colors-surface, #ffffff);\n border: var(--pg-borders-width-thin, 1px) solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-lg, 10px);\n box-shadow: var(--pg-shadows-dropdown, 0 16px 48px rgba(15, 23, 42, 0.24));\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n color: var(--pg-colors-text-primary, #0f172a);\n}\n.pg-ai-panel--open {\n display: flex;\n}\n\n.pg-ai-panel__header {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border-bottom: var(--pg-borders-width-thin, 1px) solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-ai-panel__title {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--pg-typography-font-size-sm, 13px);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n color: var(--pg-colors-primary, #2563eb);\n}\n.pg-ai-panel__close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\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-duration-fast, 100ms);\n}\n.pg-ai-panel__close:hover {\n background: var(--pg-colors-background-alt, #f1f5f9);\n}\n\n.pg-ai-panel__log {\n flex: 1 1 0;\n min-height: 0;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 14px;\n}\n\n.pg-ai-panel__message {\n max-width: 85%;\n padding: 8px 12px;\n border-radius: var(--pg-borders-radius-lg, 10px);\n font-size: var(--pg-typography-font-size-sm, 13px);\n line-height: 1.45;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.pg-ai-panel__message--user {\n align-self: flex-end;\n background: var(--pg-colors-primary, #2563eb);\n color: var(--pg-colors-primary-text, #ffffff);\n border-bottom-right-radius: var(--pg-borders-radius-sm, 4px);\n}\n.pg-ai-panel__message--assistant {\n align-self: flex-start;\n background: var(--pg-colors-background-alt, #f1f5f9);\n color: var(--pg-colors-text-primary, #0f172a);\n border-bottom-left-radius: var(--pg-borders-radius-sm, 4px);\n}\n.pg-ai-panel__message--assistant.pg-ai-panel__message--error {\n background: var(--pg-colors-error-subtle, #fef2f2);\n color: var(--pg-colors-error, #dc2626);\n}\n\n.pg-ai-panel__input-wrap {\n position: relative;\n flex-shrink: 0;\n display: flex;\n padding: 10px 12px 12px;\n border-top: var(--pg-borders-width-thin, 1px) solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-ai-panel__input {\n flex: 1 1 0;\n width: 100%;\n min-height: 36px;\n max-height: 120px;\n padding: 8px 40px 8px 12px;\n border: var(--pg-borders-width-thin, 1px) solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-md, 6px);\n background: var(--pg-colors-surface, #ffffff);\n color: var(--pg-colors-text-primary, #0f172a);\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n font-size: var(--pg-typography-font-size-sm, 13px);\n line-height: 1.4;\n resize: none;\n outline: none;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-ai-panel__input::placeholder {\n color: var(--pg-colors-text-disabled, #94a3b8);\n}\n.pg-ai-panel__input:focus {\n border-color: var(--pg-colors-border-focus, #2563eb);\n}\n.pg-ai-panel__send {\n position: absolute;\n right: 20px;\n bottom: 17px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n flex-shrink: 0;\n border: none;\n border-radius: var(--pg-borders-radius-pill, 9999px);\n background: var(--pg-colors-primary, #2563eb);\n color: var(--pg-colors-primary-text, #ffffff);\n cursor: pointer;\n transition:\n background var(--pg-transitions-duration-fast, 100ms),\n transform var(--pg-transitions-duration-fast, 100ms),\n opacity var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-ai-panel__send:hover:not(:disabled) {\n background: var(--pg-colors-primary-hover, #1d4ed8);\n transform: scale(1.08);\n}\n.pg-ai-panel__send:disabled {\n background: var(--pg-colors-text-disabled, #94a3b8);\n opacity: 0.5;\n cursor: default;\n}\n\n";
8
+ export declare const photonAiCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Photon AI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Floating command bar, anchored to the grid body's bottom-right corner.\n Mounted as a sibling of the pinned-column panels (see PhotonAIPanel.mount /\n GridRenderer.buildLayout) so it floats independently of virtualization and\n scroll; the grid body's own overflow: hidden is what keeps it inside the\n grid container per spec, without this component needing to enforce that\n itself. */\n.pg-ai-launcher {\n position: absolute;\n bottom: 16px;\n right: 16px;\n z-index: 201;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n border: none;\n border-radius: var(--pg-borders-radius-pill, 9999px);\n background: var(--pg-colors-primary, #2563eb);\n color: var(--pg-colors-primary-text, #ffffff);\n box-shadow: var(--pg-shadows-lg, 0 8px 24px rgba(15, 23, 42, 0.16));\n cursor: pointer;\n transition:\n transform var(--pg-transitions-duration-base, 150ms) var(--pg-transitions-easing-base, ease),\n opacity var(--pg-transitions-duration-base, 150ms) var(--pg-transitions-easing-base, ease),\n background var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-ai-launcher:hover {\n background: var(--pg-colors-primary-hover, #1d4ed8);\n transform: scale(1.06);\n}\n.pg-ai-launcher:active {\n background: var(--pg-colors-primary-active, #1e40af);\n transform: scale(0.97);\n}\n.pg-ai-launcher--hidden {\n opacity: 0;\n transform: scale(0.7);\n pointer-events: none;\n}\n\n.pg-ai-panel {\n position: absolute;\n top: 12px;\n right: 12px;\n bottom: 12px;\n z-index: 201;\n width: min(360px, calc(100% - 24px));\n display: none;\n flex-direction: column;\n background: var(--pg-colors-surface, #ffffff);\n border: var(--pg-borders-width-thin, 1px) solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-lg, 10px);\n box-shadow: var(--pg-shadows-dropdown, 0 16px 48px rgba(15, 23, 42, 0.24));\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n color: var(--pg-colors-text-primary, #0f172a);\n}\n.pg-ai-panel--open {\n display: flex;\n}\n\n.pg-ai-panel__header {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border-bottom: var(--pg-borders-width-thin, 1px) solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-ai-panel__title {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--pg-typography-font-size-sm, 13px);\n font-weight: var(--pg-typography-font-weight-semi-bold, 600);\n color: var(--pg-colors-primary, #2563eb);\n}\n.pg-ai-panel__close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\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-duration-fast, 100ms);\n}\n.pg-ai-panel__close:hover {\n background: var(--pg-colors-background-alt, #f1f5f9);\n}\n\n.pg-ai-panel__log {\n flex: 1 1 0;\n min-height: 0;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 14px;\n}\n\n.pg-ai-panel__message {\n max-width: 85%;\n padding: 8px 12px;\n border-radius: var(--pg-borders-radius-lg, 10px);\n font-size: var(--pg-typography-font-size-sm, 13px);\n line-height: 1.45;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.pg-ai-panel__message--user {\n align-self: flex-end;\n background: var(--pg-colors-primary, #2563eb);\n color: var(--pg-colors-primary-text, #ffffff);\n border-bottom-right-radius: var(--pg-borders-radius-sm, 4px);\n}\n.pg-ai-panel__message--assistant {\n align-self: flex-start;\n background: var(--pg-colors-background-alt, #f1f5f9);\n color: var(--pg-colors-text-primary, #0f172a);\n border-bottom-left-radius: var(--pg-borders-radius-sm, 4px);\n}\n.pg-ai-panel__message--assistant.pg-ai-panel__message--error {\n background: var(--pg-colors-error-subtle, #fef2f2);\n color: var(--pg-colors-error, #dc2626);\n}\n\n.pg-ai-panel__input-wrap {\n position: relative;\n flex-shrink: 0;\n display: flex;\n padding: 10px 12px 12px;\n border-top: var(--pg-borders-width-thin, 1px) solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-ai-panel__input {\n flex: 1 1 0;\n width: 100%;\n min-height: 36px;\n max-height: 120px;\n padding: 8px 40px 8px 12px;\n border: var(--pg-borders-width-thin, 1px) solid var(--pg-colors-border, #e2e8f0);\n border-radius: var(--pg-borders-radius-md, 6px);\n background: var(--pg-colors-surface, #ffffff);\n color: var(--pg-colors-text-primary, #0f172a);\n font-family: var(--pg-typography-font-family, system-ui, sans-serif);\n font-size: var(--pg-typography-font-size-sm, 13px);\n line-height: 1.4;\n resize: none;\n outline: none;\n transition: border-color var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-ai-panel__input::placeholder {\n color: var(--pg-colors-text-disabled, #94a3b8);\n}\n.pg-ai-panel__input:focus {\n border-color: var(--pg-colors-border-focus, #2563eb);\n}\n.pg-ai-panel__send {\n position: absolute;\n right: 20px;\n bottom: 17px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n flex-shrink: 0;\n border: none;\n border-radius: var(--pg-borders-radius-pill, 9999px);\n background: var(--pg-colors-primary, #2563eb);\n color: var(--pg-colors-primary-text, #ffffff);\n cursor: pointer;\n transition:\n background var(--pg-transitions-duration-fast, 100ms),\n transform var(--pg-transitions-duration-fast, 100ms),\n opacity var(--pg-transitions-duration-fast, 100ms);\n}\n.pg-ai-panel__send:hover:not(:disabled) {\n background: var(--pg-colors-primary-hover, #1d4ed8);\n transform: scale(1.08);\n}\n.pg-ai-panel__send:disabled {\n background: var(--pg-colors-text-disabled, #94a3b8);\n opacity: 0.5;\n cursor: default;\n}\n.pg-ai-panel__input:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n/* \u2500\u2500 Generative reply: loading state + typewriter streaming \u2500\u2500 */\n\n/* \"Thinking\" indicator shown while a generative provider request is in flight. */\n.pg-ai-panel__typing {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 0;\n}\n.pg-ai-panel__typing-dot {\n width: 6px;\n height: 6px;\n border-radius: var(--pg-borders-radius-pill, 9999px);\n background: var(--pg-colors-text-secondary, #64748b);\n opacity: 0.4;\n animation: pg-ai-typing 1.2s var(--pg-transitions-easing-base, ease) infinite;\n}\n.pg-ai-panel__typing-dot:nth-child(2) {\n animation-delay: 0.2s;\n}\n.pg-ai-panel__typing-dot:nth-child(3) {\n animation-delay: 0.4s;\n}\n@keyframes pg-ai-typing {\n 0%, 60%, 100% {\n opacity: 0.4;\n transform: translateY(0);\n }\n 30% {\n opacity: 1;\n transform: translateY(-3px);\n }\n}\n\n/* Blinking caret trailing the text while a reply is being typed out. */\n.pg-ai-panel__message--streaming > div:last-child::after {\n content: '';\n display: inline-block;\n width: 2px;\n height: 1em;\n margin-left: 1px;\n vertical-align: text-bottom;\n background: var(--pg-colors-primary, #2563eb);\n animation: pg-ai-caret 1s steps(1) infinite;\n}\n@keyframes pg-ai-caret {\n 0%, 50% {\n opacity: 1;\n }\n 50.01%, 100% {\n opacity: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .pg-ai-panel__typing-dot,\n .pg-ai-panel__message--streaming > div:last-child::after {\n animation: none;\n }\n}\n\n";
9
9
  //# sourceMappingURL=photon-ai.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"photon-ai.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/photon-ai.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,0iMA+LvB,CAAC"}
1
+ {"version":3,"file":"photon-ai.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/photon-ai.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,ilPAgQvB,CAAC"}
@@ -195,6 +195,71 @@ export const photonAiCss = `/* ────────────────
195
195
  opacity: 0.5;
196
196
  cursor: default;
197
197
  }
198
+ .pg-ai-panel__input:disabled {
199
+ opacity: 0.6;
200
+ cursor: default;
201
+ }
202
+
203
+ /* ── Generative reply: loading state + typewriter streaming ── */
204
+
205
+ /* "Thinking" indicator shown while a generative provider request is in flight. */
206
+ .pg-ai-panel__typing {
207
+ display: inline-flex;
208
+ align-items: center;
209
+ gap: 4px;
210
+ padding: 2px 0;
211
+ }
212
+ .pg-ai-panel__typing-dot {
213
+ width: 6px;
214
+ height: 6px;
215
+ border-radius: var(--pg-borders-radius-pill, 9999px);
216
+ background: var(--pg-colors-text-secondary, #64748b);
217
+ opacity: 0.4;
218
+ animation: pg-ai-typing 1.2s var(--pg-transitions-easing-base, ease) infinite;
219
+ }
220
+ .pg-ai-panel__typing-dot:nth-child(2) {
221
+ animation-delay: 0.2s;
222
+ }
223
+ .pg-ai-panel__typing-dot:nth-child(3) {
224
+ animation-delay: 0.4s;
225
+ }
226
+ @keyframes pg-ai-typing {
227
+ 0%, 60%, 100% {
228
+ opacity: 0.4;
229
+ transform: translateY(0);
230
+ }
231
+ 30% {
232
+ opacity: 1;
233
+ transform: translateY(-3px);
234
+ }
235
+ }
236
+
237
+ /* Blinking caret trailing the text while a reply is being typed out. */
238
+ .pg-ai-panel__message--streaming > div:last-child::after {
239
+ content: '';
240
+ display: inline-block;
241
+ width: 2px;
242
+ height: 1em;
243
+ margin-left: 1px;
244
+ vertical-align: text-bottom;
245
+ background: var(--pg-colors-primary, #2563eb);
246
+ animation: pg-ai-caret 1s steps(1) infinite;
247
+ }
248
+ @keyframes pg-ai-caret {
249
+ 0%, 50% {
250
+ opacity: 1;
251
+ }
252
+ 50.01%, 100% {
253
+ opacity: 0;
254
+ }
255
+ }
256
+
257
+ @media (prefers-reduced-motion: reduce) {
258
+ .pg-ai-panel__typing-dot,
259
+ .pg-ai-panel__message--streaming > div:last-child::after {
260
+ animation: none;
261
+ }
262
+ }
198
263
 
199
264
  `;
200
265
  //# sourceMappingURL=photon-ai.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"photon-ai.css.js","sourceRoot":"","sources":["../../../src/styles/base/photon-ai.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+L1B,CAAC"}
1
+ {"version":3,"file":"photon-ai.css.js","sourceRoot":"","sources":["../../../src/styles/base/photon-ai.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgQ1B,CAAC"}
@@ -5,5 +5,5 @@
5
5
  * base-styles.ts; edit here, not there. Order is preserved because CSS
6
6
  * cascade depends on it.
7
7
  */
8
- export declare const scrollbarsCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Scrollbars \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Native vertical scrollbar \u2014 flex item that lives beside the center panel.\n It is NOT absolutely positioned so it never overlaps cell content; the center\n panel shrinks to make room for it, keeping every cell border fully visible. */\n.pg-scrollbar-v-native {\n flex-shrink: 0;\n overflow-y: scroll;\n overflow-x: hidden;\n background: var(--pg-colors-scrollbar-bg, #fff);\n}\n.pg-scrollbar-v-spacer {\n width: 1px;\n pointer-events: none;\n}\n/* Horizontal row: sits below the body */\n.pg-scrollbar-h-row {\n display: flex;\n flex-direction: row;\n flex-shrink: 0;\n border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-scrollbar-h-spacer { flex-shrink: 0; background: var(--pg-colors-scrollbar-bg, #fff); }\n.pg-scrollbar-h-spacer--left { width: var(--pg-left-panel-width, 0px); overflow: scroll; }\n.pg-scrollbar-h-spacer--right { width: var(--pg-right-panel-width, 0px); overflow: scroll; }\n/* Aligns the h-scroll track with the narrowed center panel (which is now\n offset by the vertical scrollbar width captured in --pg-scrollbar-v-width). */\n.pg-scrollbar-h-spacer--vscroll {\n flex-shrink: 0;\n width: 0px;\n background: var(--pg-colors-scrollbar-bg, #fff);\n}\n/* Native horizontal scrollbar container */\n.pg-scrollbar-h-native {\n flex: 1 1 0;\n min-width: 0;\n overflow-x: scroll;\n overflow-y: hidden;\n background: var(--pg-colors-scrollbar-bg, #fff);\n}\n.pg-scrollbar-h-content {\n height: 1px;\n pointer-events: none;\n}\n/* Hidden state \u2014 applied to wraps */\n.pg-scrollbar--hidden { display: none; }\n\n";
8
+ export declare const scrollbarsCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Scrollbars \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Native vertical scrollbar \u2014 flex item that lives beside the center panel.\n It is NOT absolutely positioned so it never overlaps cell content; the center\n panel shrinks to make room for it, keeping every cell border fully visible. */\n.pg-scrollbar-v-native {\n flex-shrink: 0;\n overflow-y: scroll;\n overflow-x: hidden;\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-spacer {\n width: 1px;\n pointer-events: none;\n}\n/* Horizontal row: sits below the body */\n.pg-scrollbar-h-row {\n display: flex;\n flex-direction: row;\n flex-shrink: 0;\n border-top: 1px solid var(--pg-colors-border, #e2e8f0);\n}\n.pg-scrollbar-h-spacer { flex-shrink: 0; background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc)); }\n.pg-scrollbar-h-spacer--left { width: var(--pg-left-panel-width, 0px); overflow: scroll; }\n.pg-scrollbar-h-spacer--right { width: var(--pg-right-panel-width, 0px); overflow: scroll; }\n/* Aligns the h-scroll track with the narrowed center panel (which is now\n offset by the vertical scrollbar width captured in --pg-scrollbar-v-width). */\n.pg-scrollbar-h-spacer--vscroll {\n flex-shrink: 0;\n width: 0px;\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n/* Native horizontal scrollbar container */\n.pg-scrollbar-h-native {\n flex: 1 1 0;\n min-width: 0;\n overflow-x: scroll;\n overflow-y: hidden;\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-h-content {\n height: 1px;\n pointer-events: none;\n}\n\n/* \u2500\u2500 Themed native scrollbar (track + thumb) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Without these the browser paints its default (light) scrollbar, so dark\n themes showed white bars. Colours come from theme tokens with light-theme\n fallbacks, so every theme \u2014 including custom ones \u2014 themes automatically.\n Firefox uses scrollbar-color; Chromium/Safari use the ::-webkit pseudos. */\n.pg-scrollbar-v-native,\n.pg-scrollbar-h-native,\n.pg-scrollbar-h-spacer--left,\n.pg-scrollbar-h-spacer--right {\n // scrollbar-width: thin;\n scrollbar-color: var(--pg-colors-scrollbar-thumb, #ffffff) var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar,\n.pg-scrollbar-h-native::-webkit-scrollbar,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar {\n // width: var(--pg-scrollbar-v-width, 12px);\n // height: var(--pg-scrollbar-h-height, 12px);\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-track,\n.pg-scrollbar-h-native::-webkit-scrollbar-track,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar-track,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar-track {\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-thumb,\n.pg-scrollbar-h-native::-webkit-scrollbar-thumb,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar-thumb,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar-thumb {\n background: var(--pg-colors-scrollbar-thumb, #cbd5e1);\n // border-radius: 8px;\n // border: 3px solid var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-thumb:hover,\n.pg-scrollbar-h-native::-webkit-scrollbar-thumb:hover,\n.pg-scrollbar-h-spacer--left::-webkit-scrollbar-thumb:hover,\n.pg-scrollbar-h-spacer--right::-webkit-scrollbar-thumb:hover {\n background: var(--pg-colors-scrollbar-thumb-hover, #94a3b8);\n}\n.pg-scrollbar-v-native::-webkit-scrollbar-corner,\n.pg-scrollbar-h-native::-webkit-scrollbar-corner {\n background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));\n}\n\n/* Hidden state \u2014 applied to wraps */\n.pg-scrollbar--hidden { display: none; }\n\n";
9
9
  //# sourceMappingURL=scrollbars.css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbars.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/scrollbars.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,qzDA+CzB,CAAC"}
1
+ {"version":3,"file":"scrollbars.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/scrollbars.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,g2IA6FzB,CAAC"}
@@ -14,7 +14,7 @@ export const scrollbarsCss = `/* ───────────────
14
14
  flex-shrink: 0;
15
15
  overflow-y: scroll;
16
16
  overflow-x: hidden;
17
- background: var(--pg-colors-scrollbar-bg, #fff);
17
+ background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
18
18
  }
19
19
  .pg-scrollbar-v-spacer {
20
20
  width: 1px;
@@ -27,7 +27,7 @@ export const scrollbarsCss = `/* ───────────────
27
27
  flex-shrink: 0;
28
28
  border-top: 1px solid var(--pg-colors-border, #e2e8f0);
29
29
  }
30
- .pg-scrollbar-h-spacer { flex-shrink: 0; background: var(--pg-colors-scrollbar-bg, #fff); }
30
+ .pg-scrollbar-h-spacer { flex-shrink: 0; background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc)); }
31
31
  .pg-scrollbar-h-spacer--left { width: var(--pg-left-panel-width, 0px); overflow: scroll; }
32
32
  .pg-scrollbar-h-spacer--right { width: var(--pg-right-panel-width, 0px); overflow: scroll; }
33
33
  /* Aligns the h-scroll track with the narrowed center panel (which is now
@@ -35,7 +35,7 @@ export const scrollbarsCss = `/* ───────────────
35
35
  .pg-scrollbar-h-spacer--vscroll {
36
36
  flex-shrink: 0;
37
37
  width: 0px;
38
- background: var(--pg-colors-scrollbar-bg, #fff);
38
+ background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
39
39
  }
40
40
  /* Native horizontal scrollbar container */
41
41
  .pg-scrollbar-h-native {
@@ -43,12 +43,58 @@ export const scrollbarsCss = `/* ───────────────
43
43
  min-width: 0;
44
44
  overflow-x: scroll;
45
45
  overflow-y: hidden;
46
- background: var(--pg-colors-scrollbar-bg, #fff);
46
+ background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
47
47
  }
48
48
  .pg-scrollbar-h-content {
49
49
  height: 1px;
50
50
  pointer-events: none;
51
51
  }
52
+
53
+ /* ── Themed native scrollbar (track + thumb) ──────────────────────────────────
54
+ Without these the browser paints its default (light) scrollbar, so dark
55
+ themes showed white bars. Colours come from theme tokens with light-theme
56
+ fallbacks, so every theme — including custom ones — themes automatically.
57
+ Firefox uses scrollbar-color; Chromium/Safari use the ::-webkit pseudos. */
58
+ .pg-scrollbar-v-native,
59
+ .pg-scrollbar-h-native,
60
+ .pg-scrollbar-h-spacer--left,
61
+ .pg-scrollbar-h-spacer--right {
62
+ // scrollbar-width: thin;
63
+ scrollbar-color: var(--pg-colors-scrollbar-thumb, #ffffff) var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
64
+ }
65
+ .pg-scrollbar-v-native::-webkit-scrollbar,
66
+ .pg-scrollbar-h-native::-webkit-scrollbar,
67
+ .pg-scrollbar-h-spacer--left::-webkit-scrollbar,
68
+ .pg-scrollbar-h-spacer--right::-webkit-scrollbar {
69
+ // width: var(--pg-scrollbar-v-width, 12px);
70
+ // height: var(--pg-scrollbar-h-height, 12px);
71
+ background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
72
+ }
73
+ .pg-scrollbar-v-native::-webkit-scrollbar-track,
74
+ .pg-scrollbar-h-native::-webkit-scrollbar-track,
75
+ .pg-scrollbar-h-spacer--left::-webkit-scrollbar-track,
76
+ .pg-scrollbar-h-spacer--right::-webkit-scrollbar-track {
77
+ background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
78
+ }
79
+ .pg-scrollbar-v-native::-webkit-scrollbar-thumb,
80
+ .pg-scrollbar-h-native::-webkit-scrollbar-thumb,
81
+ .pg-scrollbar-h-spacer--left::-webkit-scrollbar-thumb,
82
+ .pg-scrollbar-h-spacer--right::-webkit-scrollbar-thumb {
83
+ background: var(--pg-colors-scrollbar-thumb, #cbd5e1);
84
+ // border-radius: 8px;
85
+ // border: 3px solid var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
86
+ }
87
+ .pg-scrollbar-v-native::-webkit-scrollbar-thumb:hover,
88
+ .pg-scrollbar-h-native::-webkit-scrollbar-thumb:hover,
89
+ .pg-scrollbar-h-spacer--left::-webkit-scrollbar-thumb:hover,
90
+ .pg-scrollbar-h-spacer--right::-webkit-scrollbar-thumb:hover {
91
+ background: var(--pg-colors-scrollbar-thumb-hover, #94a3b8);
92
+ }
93
+ .pg-scrollbar-v-native::-webkit-scrollbar-corner,
94
+ .pg-scrollbar-h-native::-webkit-scrollbar-corner {
95
+ background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
96
+ }
97
+
52
98
  /* Hidden state — applied to wraps */
53
99
  .pg-scrollbar--hidden { display: none; }
54
100
 
@@ -1 +1 @@
1
- {"version":3,"file":"scrollbars.css.js","sourceRoot":"","sources":["../../../src/styles/base/scrollbars.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+C5B,CAAC"}
1
+ {"version":3,"file":"scrollbars.css.js","sourceRoot":"","sources":["../../../src/styles/base/scrollbars.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6F5B,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Photon Grid base styles — touch / coarse-pointer section.
3
+ *
4
+ * Auto-split style module (see base-styles.ts). Everything here supports touch
5
+ * input:
6
+ *
7
+ * 1. `touch-action` declarations that let the JS pointer handlers own their
8
+ * gestures instead of the browser's native scroll/zoom. The grid scrolls via
9
+ * transform (not native overflow), so finger panning is synthesized in
10
+ * `ScrollController`; `touch-action: none` on the scroll surfaces stops the
11
+ * browser from hijacking the drag and cancelling the pointer stream.
12
+ * 2. `@media (pointer: coarse)` overrides that grow the resize / drag / fill
13
+ * handles from mouse-sized (2–6px) targets to finger-sized ones.
14
+ *
15
+ * `touch-action` is intentionally scoped to the header and the cell panel bodies
16
+ * (`.pg-panel__body`) — NOT the whole `.pg-grid__body`. Overlay children that
17
+ * scroll natively (the AI panel, editor dropdowns) are siblings of the panels,
18
+ * so this leaves their native scrolling intact.
19
+ *
20
+ * All colors come from theme tokens; no hardcoded palette values.
21
+ */
22
+ export declare const touchCss = "/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Touch / coarse pointer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Scroll surfaces: suppress native pan/zoom so JS panning owns the gesture. */\n.pg-grid__header,\n.pg-panel__body { touch-action: none; }\n\n/* Interactive handles own their own drag \u2014 never let a touch on them scroll. */\n.pg-th__resize-handle,\n.pg-th__resize-handle--group,\n[data-row-drag],\n[data-detail-resize-handle],\n.pg-fill-handle { touch-action: none; }\n\n/* Column header \"picked up\" via long-press (touch reorder). */\n.pg-th--drag-armed {\n background: var(--pg-colors-row-selected, rgba(37, 99, 235, 0.08));\n cursor: grabbing;\n}\n\n/* \u2500\u2500 Finger-sized hit targets \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 Coarse pointers (touch) get enlarged, transparent hit areas; the visible\n affordance (a thin line / small square) is preserved via ::after or the\n existing box so the look is unchanged on desktop. */\n@media (pointer: coarse) {\n /* Column resize handle: widen the invisible grab zone, keep a thin visual line. */\n .pg-th__resize-handle {\n width: 18px;\n right: -9px;\n background: transparent;\n }\n .pg-th--pinned-right .pg-th__resize-handle {\n left: -9px;\n right: auto;\n }\n .pg-th__resize-handle::after {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n width: 2px;\n transform: translateX(-50%);\n background: var(--pg-colors-resize-handle-color, #d9d9db);\n }\n\n /* Row drag handle: larger and more visible for fingers. */\n .pg-row-drag-handle {\n width: 32px;\n opacity: 0.6;\n }\n\n /* Fill handle: grow the corner target so it can be grabbed with a finger. */\n .pg-fill-handle {\n width: 14px;\n height: 14px;\n }\n\n /* Master/Detail bottom-edge resize handle: taller grab strip. */\n [data-detail-resize-handle] {\n min-height: 16px;\n }\n}\n";
23
+ //# sourceMappingURL=touch.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touch.css.d.ts","sourceRoot":"","sources":["../../../src/styles/base/touch.css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,QAAQ,gxEA8DpB,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Photon Grid base styles — touch / coarse-pointer section.
3
+ *
4
+ * Auto-split style module (see base-styles.ts). Everything here supports touch
5
+ * input:
6
+ *
7
+ * 1. `touch-action` declarations that let the JS pointer handlers own their
8
+ * gestures instead of the browser's native scroll/zoom. The grid scrolls via
9
+ * transform (not native overflow), so finger panning is synthesized in
10
+ * `ScrollController`; `touch-action: none` on the scroll surfaces stops the
11
+ * browser from hijacking the drag and cancelling the pointer stream.
12
+ * 2. `@media (pointer: coarse)` overrides that grow the resize / drag / fill
13
+ * handles from mouse-sized (2–6px) targets to finger-sized ones.
14
+ *
15
+ * `touch-action` is intentionally scoped to the header and the cell panel bodies
16
+ * (`.pg-panel__body`) — NOT the whole `.pg-grid__body`. Overlay children that
17
+ * scroll natively (the AI panel, editor dropdowns) are siblings of the panels,
18
+ * so this leaves their native scrolling intact.
19
+ *
20
+ * All colors come from theme tokens; no hardcoded palette values.
21
+ */
22
+ export const touchCss = `/* ──────────────────── Touch / coarse pointer ──────────────────── */
23
+
24
+ /* Scroll surfaces: suppress native pan/zoom so JS panning owns the gesture. */
25
+ .pg-grid__header,
26
+ .pg-panel__body { touch-action: none; }
27
+
28
+ /* Interactive handles own their own drag — never let a touch on them scroll. */
29
+ .pg-th__resize-handle,
30
+ .pg-th__resize-handle--group,
31
+ [data-row-drag],
32
+ [data-detail-resize-handle],
33
+ .pg-fill-handle { touch-action: none; }
34
+
35
+ /* Column header "picked up" via long-press (touch reorder). */
36
+ .pg-th--drag-armed {
37
+ background: var(--pg-colors-row-selected, rgba(37, 99, 235, 0.08));
38
+ cursor: grabbing;
39
+ }
40
+
41
+ /* ── Finger-sized hit targets ─────────────────────────────────────────────
42
+ Coarse pointers (touch) get enlarged, transparent hit areas; the visible
43
+ affordance (a thin line / small square) is preserved via ::after or the
44
+ existing box so the look is unchanged on desktop. */
45
+ @media (pointer: coarse) {
46
+ /* Column resize handle: widen the invisible grab zone, keep a thin visual line. */
47
+ .pg-th__resize-handle {
48
+ width: 18px;
49
+ right: -9px;
50
+ background: transparent;
51
+ }
52
+ .pg-th--pinned-right .pg-th__resize-handle {
53
+ left: -9px;
54
+ right: auto;
55
+ }
56
+ .pg-th__resize-handle::after {
57
+ content: '';
58
+ position: absolute;
59
+ top: 0;
60
+ bottom: 0;
61
+ left: 50%;
62
+ width: 2px;
63
+ transform: translateX(-50%);
64
+ background: var(--pg-colors-resize-handle-color, #d9d9db);
65
+ }
66
+
67
+ /* Row drag handle: larger and more visible for fingers. */
68
+ .pg-row-drag-handle {
69
+ width: 32px;
70
+ opacity: 0.6;
71
+ }
72
+
73
+ /* Fill handle: grow the corner target so it can be grabbed with a finger. */
74
+ .pg-fill-handle {
75
+ width: 14px;
76
+ height: 14px;
77
+ }
78
+
79
+ /* Master/Detail bottom-edge resize handle: taller grab strip. */
80
+ [data-detail-resize-handle] {
81
+ min-height: 16px;
82
+ }
83
+ }
84
+ `;
85
+ //# sourceMappingURL=touch.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touch.css.js","sourceRoot":"","sources":["../../../src/styles/base/touch.css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-styles.d.ts","sourceRoot":"","sources":["../../src/styles/base-styles.ts"],"names":[],"mappings":"AAwEA,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
1
+ {"version":3,"file":"base-styles.d.ts","sourceRoot":"","sources":["../../src/styles/base-styles.ts"],"names":[],"mappings":"AA4EA,wBAAgB,gBAAgB,IAAI,IAAI,CAMvC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -33,6 +33,8 @@ import { photonAiCss } from './base/photon-ai.css';
33
33
  import { tooltipCss } from './base/tooltip.css';
34
34
  import { chartConfigCss } from './base/chart-config.css';
35
35
  import { chartControlsCss } from './base/chart-controls.css';
36
+ import { columnChooserCss } from './base/column-chooser.css';
37
+ import { touchCss } from './base/touch.css';
36
38
  const STYLE_ID = 'photon-grid-base-styles';
37
39
  // Joined with '' (not '\n') so the output is byte-identical to the original
38
40
  // single template: each module already carries its own leading/trailing
@@ -63,6 +65,8 @@ const baseCss = [
63
65
  tooltipCss,
64
66
  chartConfigCss,
65
67
  chartControlsCss,
68
+ columnChooserCss,
69
+ touchCss,
66
70
  ].join('');
67
71
  const css = [baseCss, themeQuartzCss, themeAlpineCss, themeBalhamCss, themeMaterialCss, themeDarkCss].join('\n');
68
72
  export function injectBaseStyles() {
@@ -1 +1 @@
1
- {"version":3,"file":"base-styles.js","sourceRoot":"","sources":["../../src/styles/base-styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-styles.js","sourceRoot":"","sources":["../../src/styles/base-styles.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const themeDarkCss = "\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-dark-theme variables \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-dark-theme .pg-grid {\n --pg-colors-border: #334155;\n --pg-colors-header-background: #0f172a;\n --pg-colors-header-border: #334155;\n --pg-colors-header-text: #94a3b8;\n --pg-colors-row-background: #1e293b;\n --pg-colors-row-alt-background: #1a2436;\n --pg-colors-row-hover: #334155;\n --pg-colors-row-selected: rgba(96,165,250,.15);\n --pg-colors-row-selected-hover: rgba(96,165,250,.25);\n --pg-colors-text-primary: #e2e8f0;\n --pg-colors-text-secondary: #94a3b8;\n --pg-colors-text-muted: #64748b;\n --pg-colors-text-disabled: #475569;\n --pg-colors-primary: #60a5fa;\n --pg-colors-filter-background: #1e293b;\n --pg-colors-scrollbar-bg: #0f172a;\n --pg-colors-badge-background: rgba(96,165,250,.2);\n --pg-colors-badge-text: #93c5fd;\n --pg-colors-group-row-text: #cbd5e1;\n --pg-colors-group-row-background: #1a2840;\n --pg-colors-group-row-hover: rgba(96,165,250,.08);\n --pg-colors-group-toggle-hover: rgba(96,165,250,.15);\n --pg-colors-chip-background: rgba(96,165,250,.15);\n --pg-colors-chip-text: #93c5fd;\n --pg-colors-group-zone-over: rgba(96,165,250,.12);\n --pg-colors-cell-edit-background: #0f172a;\n --pg-colors-footer-background: #0f172a;\n --pg-colors-footer-border: #334155;\n --pg-colors-surface: #1e293b;\n --pg-colors-background-alt: #334155;\n --pg-colors-border-strong: #475569;\n --pg-colors-border-focus: #60a5fa;\n --pg-colors-resize-handle-color: #475569;\n\n --pg-typography-font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --pg-typography-font-size-md: 0.9rem;\n --pg-typography-font-size-sm: 12px;\n --pg-typography-font-size-xs: 11px;\n --pg-typography-font-weight-medium: 400;\n --pg-typography-font-weight-semi-bold: 600;\n --pg-typography-letter-spacing-wide: 0.06em;\n\n --pg-header-row-height: 48px;\n --pg-row-height: 44px;\n --pg-borders-radius-md: 6px;\n --pg-borders-radius-sm: 4px;\n --pg-borders-radius-pill: 9999px;\n --pg-transitions-duration-fast: 200ms;\n --pg-sizing-checkbox-size: 16px;\n}\n\n/* Dark: override the grid border itself */\n.pg-dark-theme .pg-grid {\n border-color: #334155;\n background: #1e293b;\n}\n\n/* Dark header */\n.pg-dark-theme .pg-th {\n text-transform: uppercase;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.06em;\n color: #94a3b8;\n}\n.pg-dark-theme .pg-th--sorted { color: #60a5fa; }\n.pg-dark-theme .pg-grid__header { border-bottom: 1px solid #334155; }\n\n/* Dark rows \u2014 subtle divider on dark bg */\n.pg-dark-theme .pg-row { border-bottom: 1px solid #263347; }\n\n/* Dark cell vertical border */\n.pg-dark-theme .pg-cell--v-border { border-right-color: #2d3f56; }\n\n/* Dark filter row */\n.pg-dark-theme .pg-filter-row { border-top-color: #334155; }\n.pg-dark-theme input[type=\"text\"], .pg-dark-theme select {\n background: #0f172a;\n color: #e2e8f0;\n border-color: #475569;\n}\n.pg-dark-theme input[type=\"text\"]::placeholder { color: #64748b; }\n\n/* Dark filter panel */\n.pg-dark-theme .pg-filter-panel {\n background: #1e293b;\n border-color: #334155;\n box-shadow: 0 8px 24px rgba(0,0,0,.4);\n color: #e2e8f0;\n}\n.pg-dark-theme .pg-filter-cond__select,\n.pg-dark-theme .pg-filter-cond__input,\n.pg-dark-theme .pg-filter-set__search-input {\n background: #0f172a;\n color: #e2e8f0;\n border-color: #475569;\n}\n.pg-dark-theme .pg-filter-logic__btn {\n background: #1e293b;\n border-color: #475569;\n color: #94a3b8;\n}\n.pg-dark-theme .pg-filter-logic__btn:hover { background: #263347; }\n.pg-dark-theme .pg-filter-logic__btn--active { background: #2563eb; color: #fff; border-color: #2563eb; }\n.pg-dark-theme .pg-filter-set__item:hover { background: #263347; }\n.pg-dark-theme .pg-filter-set__divider { background: #334155; }\n.pg-dark-theme .pg-filter-panel__footer { background: #1e293b; border-top-color: #334155; }\n.pg-dark-theme .pg-filter-panel__clear-btn {\n background: #1e293b;\n border-color: #475569;\n color: #94a3b8;\n}\n.pg-dark-theme .pg-filter-panel__clear-btn:hover { background: #263347; color: #e2e8f0; }\n\n/* Dark icon tones */\n.pg-dark-theme .pg-icon { color: #64748b; }\n.pg-dark-theme .pg-th--sorted .pg-icon { color: #60a5fa; }\n.pg-dark-theme .pg-row-drag-handle { color: #475569; }\n\n/* Dark checkbox \u2014 16px, 4px radius, glowing blue fill */\n.pg-dark-theme .pg-checkbox {\n appearance: none;\n -webkit-appearance: none;\n width: 16px;\n height: 16px;\n border: 2px solid #475569;\n border-radius: 4px;\n background: #0f172a;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n transition: background 200ms ease, border-color 200ms ease, box-shadow 200ms ease;\n}\n.pg-dark-theme .pg-checkbox:hover { border-color: #60a5fa; }\n.pg-dark-theme .pg-checkbox:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px rgba(96,165,250,.35);\n}\n.pg-dark-theme .pg-checkbox:checked {\n background: #2563eb;\n border-color: #60a5fa;\n box-shadow: 0 0 6px rgba(96,165,250,.4);\n}\n.pg-dark-theme .pg-checkbox:checked::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 5px;\n height: 9px;\n border: 2px solid #e2e8f0;\n border-top: none;\n border-left: none;\n transform: rotate(45deg);\n}\n.pg-dark-theme .pg-checkbox:indeterminate {\n background: #2563eb;\n border-color: #60a5fa;\n box-shadow: 0 0 6px rgba(96,165,250,.4);\n}\n.pg-dark-theme .pg-checkbox:indeterminate::after {\n content: '';\n position: absolute;\n left: 2px;\n top: 50%;\n width: 8px;\n height: 2px;\n background: #e2e8f0;\n transform: translateY(-50%);\n}\n\n/* Dark selection \u2014 glowing blue left bar */\n.pg-dark-theme .pg-row--selected { box-shadow: inset 3px 0 0 #60a5fa; }\n\n/* Dark scrollbar \u2014 dark track + styled thumb via scrollbar-color (Firefox/Chromium) */\n.pg-dark-theme .pg-scrollbar-h-spacer,\n.pg-dark-theme .pg-scrollbar-v-native,\n.pg-dark-theme .pg-scrollbar-h-native { background: #0f172a; }\n.pg-dark-theme .pg-scrollbar-v-native,\n.pg-dark-theme .pg-scrollbar-h-native,\n.pg-dark-theme .pg-scrollbar-h-spacer { scrollbar-color: #475569 #0f172a; }\n\n/* Dark overlay \u2014 override hardcoded white loading tint */\n.pg-dark-theme .pg-overlay { background: #1e293b; }\n.pg-dark-theme .pg-overlay--loading { background: rgba(15,23,42,0.85); }\n\n/* Dark group drop zone areas */\n.pg-dark-theme .pg-group-drop-zone--top,\n.pg-dark-theme .pg-group-drop-zone--left,\n.pg-dark-theme .pg-group-drop-zone--right {\n background: #0f172a;\n border-color: #334155;\n}\n/* Group zone grip hover \u2014 override hardcoded rgba(0,0,0,.06) */\n.pg-dark-theme .pg-group-zone-grip:hover { background: rgba(255,255,255,.08); }\n/* Group chip close hover \u2014 override hardcoded indigo tint */\n.pg-dark-theme .pg-group-chip__close:hover { background: rgba(96,165,250,.2); }\n\n/* Dark column menu */\n.pg-dark-theme .pg-column-menu {\n background: #1e293b;\n border-color: #334155;\n color: #e2e8f0;\n}\n\n/* Dark row-drag animation \u2014 smooth ease */\n.pg-dark-theme .pg-grid--row-dragging .pg-row {\n transition: background 200ms ease, top 160ms cubic-bezier(0.2, 0, 0, 1);\n}\n";
1
+ export declare const themeDarkCss = "\n\n/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-dark-theme variables \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.pg-dark-theme .pg-grid {\n --pg-colors-border: #334155;\n --pg-colors-header-background: #0f172a;\n --pg-colors-header-border: #334155;\n --pg-colors-header-text: #94a3b8;\n --pg-colors-row-background: #1e293b;\n --pg-colors-row-alt-background: #1a2436;\n --pg-colors-row-hover: #334155;\n --pg-colors-row-selected: rgba(96,165,250,.15);\n --pg-colors-row-selected-hover: rgba(96,165,250,.25);\n --pg-colors-text-primary: #e2e8f0;\n --pg-colors-text-secondary: #94a3b8;\n --pg-colors-text-muted: #64748b;\n --pg-colors-text-disabled: #475569;\n --pg-colors-primary: #60a5fa;\n --pg-colors-filter-background: #1e293b;\n --pg-colors-scrollbar-bg: #0f172a;\n --pg-colors-scrollbar-track: #0f172a;\n --pg-colors-scrollbar-thumb: #475569;\n --pg-colors-scrollbar-thumb-hover: #64748b;\n --pg-colors-badge-background: rgba(96,165,250,.2);\n --pg-colors-badge-text: #93c5fd;\n --pg-colors-group-row-text: #cbd5e1;\n --pg-colors-group-row-background: #1a2840;\n --pg-colors-group-row-hover: rgba(96,165,250,.08);\n --pg-colors-group-toggle-hover: rgba(96,165,250,.15);\n --pg-colors-chip-background: rgba(96,165,250,.15);\n --pg-colors-chip-text: #93c5fd;\n --pg-colors-group-zone-over: rgba(96,165,250,.12);\n --pg-colors-cell-edit-background: #0f172a;\n --pg-colors-footer-background: #0f172a;\n --pg-colors-footer-border: #334155;\n --pg-colors-surface: #1e293b;\n --pg-colors-background-alt: #334155;\n --pg-colors-border-strong: #475569;\n --pg-colors-border-focus: #60a5fa;\n --pg-colors-resize-handle-color: #475569;\n\n --pg-typography-font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n --pg-typography-font-size-md: 0.9rem;\n --pg-typography-font-size-sm: 12px;\n --pg-typography-font-size-xs: 11px;\n --pg-typography-font-weight-medium: 400;\n --pg-typography-font-weight-semi-bold: 600;\n --pg-typography-letter-spacing-wide: 0.06em;\n\n --pg-header-row-height: 48px;\n --pg-row-height: 44px;\n --pg-borders-radius-md: 6px;\n --pg-borders-radius-sm: 4px;\n --pg-borders-radius-pill: 9999px;\n --pg-transitions-duration-fast: 200ms;\n --pg-sizing-checkbox-size: 16px;\n}\n\n/* Dark: override the grid border itself */\n.pg-dark-theme .pg-grid {\n border-color: #334155;\n background: #1e293b;\n}\n\n/* Dark header */\n.pg-dark-theme .pg-th {\n text-transform: uppercase;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.06em;\n color: #94a3b8;\n}\n.pg-dark-theme .pg-th--sorted { color: #60a5fa; }\n.pg-dark-theme .pg-grid__header { border-bottom: 1px solid #334155; }\n\n/* Dark rows \u2014 subtle divider on dark bg */\n.pg-dark-theme .pg-row { border-bottom: 1px solid #263347; }\n\n/* Dark cell vertical border */\n.pg-dark-theme .pg-cell--v-border { border-right-color: #2d3f56; }\n\n/* Dark filter row */\n.pg-dark-theme .pg-filter-row { border-top-color: #334155; }\n.pg-dark-theme input[type=\"text\"], .pg-dark-theme select {\n background: #0f172a;\n color: #e2e8f0;\n border-color: #475569;\n}\n.pg-dark-theme input[type=\"text\"]::placeholder { color: #64748b; }\n\n/* Dark filter panel */\n.pg-dark-theme .pg-filter-panel {\n background: #1e293b;\n border-color: #334155;\n box-shadow: 0 8px 24px rgba(0,0,0,.4);\n color: #e2e8f0;\n}\n.pg-dark-theme .pg-filter-cond__select,\n.pg-dark-theme .pg-filter-cond__input,\n.pg-dark-theme .pg-filter-set__search-input {\n background: #0f172a;\n color: #e2e8f0;\n border-color: #475569;\n}\n.pg-dark-theme .pg-filter-logic__btn {\n background: #1e293b;\n border-color: #475569;\n color: #94a3b8;\n}\n.pg-dark-theme .pg-filter-logic__btn:hover { background: #263347; }\n.pg-dark-theme .pg-filter-logic__btn--active { background: #2563eb; color: #fff; border-color: #2563eb; }\n.pg-dark-theme .pg-filter-set__item:hover { background: #263347; }\n.pg-dark-theme .pg-filter-set__divider { background: #334155; }\n.pg-dark-theme .pg-filter-panel__footer { background: #1e293b; border-top-color: #334155; }\n.pg-dark-theme .pg-filter-panel__clear-btn {\n background: #1e293b;\n border-color: #475569;\n color: #94a3b8;\n}\n.pg-dark-theme .pg-filter-panel__clear-btn:hover { background: #263347; color: #e2e8f0; }\n\n/* Dark icon tones */\n.pg-dark-theme .pg-icon { color: #64748b; }\n.pg-dark-theme .pg-th--sorted .pg-icon { color: #60a5fa; }\n.pg-dark-theme .pg-row-drag-handle { color: #475569; }\n\n/* Dark checkbox \u2014 16px, 4px radius, glowing blue fill */\n.pg-dark-theme .pg-checkbox {\n appearance: none;\n -webkit-appearance: none;\n width: 16px;\n height: 16px;\n border: 2px solid #475569;\n border-radius: 4px;\n background: #0f172a;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n transition: background 200ms ease, border-color 200ms ease, box-shadow 200ms ease;\n}\n.pg-dark-theme .pg-checkbox:hover { border-color: #60a5fa; }\n.pg-dark-theme .pg-checkbox:focus-visible {\n outline: none;\n box-shadow: 0 0 0 3px rgba(96,165,250,.35);\n}\n.pg-dark-theme .pg-checkbox:checked {\n background: #2563eb;\n border-color: #60a5fa;\n box-shadow: 0 0 6px rgba(96,165,250,.4);\n}\n.pg-dark-theme .pg-checkbox:checked::after {\n content: '';\n position: absolute;\n left: 4px;\n top: 1px;\n width: 5px;\n height: 9px;\n border: 2px solid #e2e8f0;\n border-top: none;\n border-left: none;\n transform: rotate(45deg);\n}\n.pg-dark-theme .pg-checkbox:indeterminate {\n background: #2563eb;\n border-color: #60a5fa;\n box-shadow: 0 0 6px rgba(96,165,250,.4);\n}\n.pg-dark-theme .pg-checkbox:indeterminate::after {\n content: '';\n position: absolute;\n left: 2px;\n top: 50%;\n width: 8px;\n height: 2px;\n background: #e2e8f0;\n transform: translateY(-50%);\n}\n\n/* Dark selection \u2014 glowing blue left bar */\n.pg-dark-theme .pg-row--selected { box-shadow: inset 3px 0 0 #60a5fa; }\n\n/* Dark scrollbar \u2014 dark track + styled thumb via scrollbar-color (Firefox/Chromium) */\n.pg-dark-theme .pg-scrollbar-h-spacer,\n.pg-dark-theme .pg-scrollbar-v-native,\n.pg-dark-theme .pg-scrollbar-h-native { background: #0f172a; }\n.pg-dark-theme .pg-scrollbar-v-native,\n.pg-dark-theme .pg-scrollbar-h-native,\n.pg-dark-theme .pg-scrollbar-h-spacer { scrollbar-color: #475569 #0f172a; }\n\n/* Dark overlay \u2014 override hardcoded white loading tint */\n.pg-dark-theme .pg-overlay { background: #1e293b; }\n.pg-dark-theme .pg-overlay--loading { background: rgba(15,23,42,0.85); }\n\n/* Dark group drop zone areas */\n.pg-dark-theme .pg-group-drop-zone--top,\n.pg-dark-theme .pg-group-drop-zone--left,\n.pg-dark-theme .pg-group-drop-zone--right {\n background: #0f172a;\n border-color: #334155;\n}\n/* Group zone grip hover \u2014 override hardcoded rgba(0,0,0,.06) */\n.pg-dark-theme .pg-group-zone-grip:hover { background: rgba(255,255,255,.08); }\n/* Group chip close hover \u2014 override hardcoded indigo tint */\n.pg-dark-theme .pg-group-chip__close:hover { background: rgba(96,165,250,.2); }\n\n/* Dark column menu */\n.pg-dark-theme .pg-column-menu {\n background: #1e293b;\n border-color: #334155;\n color: #e2e8f0;\n}\n\n/* Dark row-drag animation \u2014 smooth ease */\n.pg-dark-theme .pg-grid--row-dragging .pg-row {\n transition: background 200ms ease, top 160ms cubic-bezier(0.2, 0, 0, 1);\n}\n";
2
2
  //# sourceMappingURL=theme-dark.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-dark.d.ts","sourceRoot":"","sources":["../../../src/styles/themes/theme-dark.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,0nOAqNxB,CAAC"}
1
+ {"version":3,"file":"theme-dark.d.ts","sourceRoot":"","sources":["../../../src/styles/themes/theme-dark.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,2vOAwNxB,CAAC"}
@@ -19,6 +19,9 @@ export const themeDarkCss = `
19
19
  --pg-colors-primary: #60a5fa;
20
20
  --pg-colors-filter-background: #1e293b;
21
21
  --pg-colors-scrollbar-bg: #0f172a;
22
+ --pg-colors-scrollbar-track: #0f172a;
23
+ --pg-colors-scrollbar-thumb: #475569;
24
+ --pg-colors-scrollbar-thumb-hover: #64748b;
22
25
  --pg-colors-badge-background: rgba(96,165,250,.2);
23
26
  --pg-colors-badge-text: #93c5fd;
24
27
  --pg-colors-group-row-text: #cbd5e1;
@@ -1 +1 @@
1
- {"version":3,"file":"theme-dark.js","sourceRoot":"","sources":["../../../src/styles/themes/theme-dark.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqN3B,CAAC"}
1
+ {"version":3,"file":"theme-dark.js","sourceRoot":"","sources":["../../../src/styles/themes/theme-dark.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwN3B,CAAC"}