photon-grid-core 2.0.4 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/cell-selection/cell-selection-engine.d.ts +49 -0
  2. package/cell-selection/cell-selection-engine.d.ts.map +1 -1
  3. package/cell-selection/cell-selection-engine.js +185 -6
  4. package/cell-selection/cell-selection-engine.js.map +1 -1
  5. package/core/grid-api.d.ts +83 -0
  6. package/core/grid-api.d.ts.map +1 -1
  7. package/core/grid-api.js +118 -1
  8. package/core/grid-api.js.map +1 -1
  9. package/core/grid-core.d.ts.map +1 -1
  10. package/core/grid-core.js +14 -4
  11. package/core/grid-core.js.map +1 -1
  12. package/engines/clipboard/clipboard-engine.d.ts +3 -2
  13. package/engines/clipboard/clipboard-engine.d.ts.map +1 -1
  14. package/engines/clipboard/clipboard-engine.js +4 -3
  15. package/engines/clipboard/clipboard-engine.js.map +1 -1
  16. package/engines/filter/filter-engine.d.ts +16 -0
  17. package/engines/filter/filter-engine.d.ts.map +1 -1
  18. package/engines/filter/filter-engine.js +20 -0
  19. package/engines/filter/filter-engine.js.map +1 -1
  20. package/engines/filter/filter-panel.d.ts.map +1 -1
  21. package/engines/filter/filter-panel.js +6 -1
  22. package/engines/filter/filter-panel.js.map +1 -1
  23. package/engines/master-detail/master-detail-engine.d.ts +4 -3
  24. package/engines/master-detail/master-detail-engine.d.ts.map +1 -1
  25. package/engines/master-detail/master-detail-engine.js +14 -5
  26. package/engines/master-detail/master-detail-engine.js.map +1 -1
  27. package/engines/selection/row-selection-engine.d.ts +41 -0
  28. package/engines/selection/row-selection-engine.d.ts.map +1 -1
  29. package/engines/selection/row-selection-engine.js +103 -0
  30. package/engines/selection/row-selection-engine.js.map +1 -1
  31. package/index.d.ts +2 -1
  32. package/index.d.ts.map +1 -1
  33. package/index.js +1 -0
  34. package/index.js.map +1 -1
  35. package/package.json +1 -1
  36. package/photon-ai/builtins/filter.commands.d.ts +15 -0
  37. package/photon-ai/builtins/filter.commands.d.ts.map +1 -1
  38. package/photon-ai/builtins/filter.commands.js +5 -5
  39. package/photon-ai/builtins/filter.commands.js.map +1 -1
  40. package/photon-ai/builtins/selection.commands.d.ts.map +1 -1
  41. package/photon-ai/builtins/selection.commands.js +161 -2
  42. package/photon-ai/builtins/selection.commands.js.map +1 -1
  43. package/photon-ai/provider/command-normalizer.d.ts.map +1 -1
  44. package/photon-ai/provider/command-normalizer.js +5 -1
  45. package/photon-ai/provider/command-normalizer.js.map +1 -1
  46. package/photon-ai/provider/system-prompt.d.ts.map +1 -1
  47. package/photon-ai/provider/system-prompt.js +3 -1
  48. package/photon-ai/provider/system-prompt.js.map +1 -1
  49. package/photon-grid.min.js +349 -498
  50. package/renderer/auto-scroller.d.ts +11 -1
  51. package/renderer/auto-scroller.d.ts.map +1 -1
  52. package/renderer/auto-scroller.js +34 -19
  53. package/renderer/auto-scroller.js.map +1 -1
  54. package/renderer/body-renderer.d.ts +16 -0
  55. package/renderer/body-renderer.d.ts.map +1 -1
  56. package/renderer/body-renderer.js +54 -1
  57. package/renderer/body-renderer.js.map +1 -1
  58. package/renderer/cell-renderer.d.ts +9 -1
  59. package/renderer/cell-renderer.d.ts.map +1 -1
  60. package/renderer/cell-renderer.js +16 -2
  61. package/renderer/cell-renderer.js.map +1 -1
  62. package/renderer/detail-row-renderer.d.ts.map +1 -1
  63. package/renderer/detail-row-renderer.js +1 -1
  64. package/renderer/detail-row-renderer.js.map +1 -1
  65. package/renderer/grid-renderer.d.ts +33 -1
  66. package/renderer/grid-renderer.d.ts.map +1 -1
  67. package/renderer/grid-renderer.js +138 -2
  68. package/renderer/grid-renderer.js.map +1 -1
  69. package/renderer/header-renderer.d.ts +44 -0
  70. package/renderer/header-renderer.d.ts.map +1 -1
  71. package/renderer/header-renderer.js +145 -19
  72. package/renderer/header-renderer.js.map +1 -1
  73. package/renderer/row-animator.d.ts +18 -1
  74. package/renderer/row-animator.d.ts.map +1 -1
  75. package/renderer/row-animator.js +93 -17
  76. package/renderer/row-animator.js.map +1 -1
  77. package/renderer/scroll-controller.d.ts.map +1 -1
  78. package/renderer/scroll-controller.js +31 -13
  79. package/renderer/scroll-controller.js.map +1 -1
  80. package/styles/base/cells.css.d.ts +1 -1
  81. package/styles/base/cells.css.d.ts.map +1 -1
  82. package/styles/base/cells.css.js +13 -13
  83. package/styles/base/column-context-menu.css.d.ts +1 -1
  84. package/styles/base/column-context-menu.css.d.ts.map +1 -1
  85. package/styles/base/column-context-menu.css.js +19 -5
  86. package/styles/base/column-context-menu.css.js.map +1 -1
  87. package/styles/base/column-group-header.css.d.ts +1 -1
  88. package/styles/base/column-group-header.css.d.ts.map +1 -1
  89. package/styles/base/column-group-header.css.js +5 -1
  90. package/styles/base/column-group-header.css.js.map +1 -1
  91. package/styles/base/context-menu.css.d.ts +1 -1
  92. package/styles/base/context-menu.css.d.ts.map +1 -1
  93. package/styles/base/context-menu.css.js +23 -0
  94. package/styles/base/context-menu.css.js.map +1 -1
  95. package/styles/base/filter.css.d.ts +1 -1
  96. package/styles/base/filter.css.d.ts.map +1 -1
  97. package/styles/base/filter.css.js +49 -8
  98. package/styles/base/filter.css.js.map +1 -1
  99. package/styles/base/group-drop-zone.css.d.ts +1 -1
  100. package/styles/base/group-drop-zone.css.d.ts.map +1 -1
  101. package/styles/base/group-drop-zone.css.js +3 -3
  102. package/styles/base/header.css.d.ts +1 -1
  103. package/styles/base/header.css.d.ts.map +1 -1
  104. package/styles/base/header.css.js +8 -1
  105. package/styles/base/header.css.js.map +1 -1
  106. package/styles/base/row-drag.css.d.ts +1 -1
  107. package/styles/base/row-drag.css.d.ts.map +1 -1
  108. package/styles/base/row-drag.css.js +1 -1
  109. package/styles/base/rows.css.d.ts +1 -1
  110. package/styles/base/rows.css.d.ts.map +1 -1
  111. package/styles/base/rows.css.js +23 -16
  112. package/styles/base/rows.css.js.map +1 -1
  113. package/styles/base/scrollbars.css.d.ts +1 -1
  114. package/styles/base/scrollbars.css.d.ts.map +1 -1
  115. package/styles/base/scrollbars.css.js +6 -3
  116. package/styles/base/scrollbars.css.js.map +1 -1
  117. package/styles/base/sparkline.css.d.ts +1 -1
  118. package/styles/base/sparkline.css.d.ts.map +1 -1
  119. package/styles/base/sparkline.css.js +6 -0
  120. package/styles/base/sparkline.css.js.map +1 -1
  121. package/styles/base/tooltip.css.d.ts +1 -1
  122. package/styles/base/tooltip.css.d.ts.map +1 -1
  123. package/styles/base/tooltip.css.js +1 -1
  124. package/styles/base-styles.d.ts.map +1 -1
  125. package/styles/base-styles.js +5 -2
  126. package/styles/base-styles.js.map +1 -1
  127. package/styles/themes/theme-alpine.d.ts +9 -1
  128. package/styles/themes/theme-alpine.d.ts.map +1 -1
  129. package/styles/themes/theme-alpine.js +34 -43
  130. package/styles/themes/theme-alpine.js.map +1 -1
  131. package/styles/themes/theme-balham.d.ts +9 -1
  132. package/styles/themes/theme-balham.d.ts.map +1 -1
  133. package/styles/themes/theme-balham.js +33 -42
  134. package/styles/themes/theme-balham.js.map +1 -1
  135. package/styles/themes/theme-material.d.ts +9 -1
  136. package/styles/themes/theme-material.d.ts.map +1 -1
  137. package/styles/themes/theme-material.js +36 -44
  138. package/styles/themes/theme-material.js.map +1 -1
  139. package/styles/themes/theme-quartz.d.ts +14 -1
  140. package/styles/themes/theme-quartz.d.ts.map +1 -1
  141. package/styles/themes/theme-quartz.js +64 -43
  142. package/styles/themes/theme-quartz.js.map +1 -1
  143. package/theme/theme-manager.d.ts +55 -7
  144. package/theme/theme-manager.d.ts.map +1 -1
  145. package/theme/theme-manager.js +139 -35
  146. package/theme/theme-manager.js.map +1 -1
  147. package/theme/themes/light-theme.js +1 -1
  148. package/types/column.types.d.ts +42 -0
  149. package/types/column.types.d.ts.map +1 -1
  150. package/types/column.types.js +26 -1
  151. package/types/column.types.js.map +1 -1
  152. package/types/grid.types.d.ts +90 -2
  153. package/types/grid.types.d.ts.map +1 -1
  154. package/types/theme.types.d.ts +19 -0
  155. package/types/theme.types.d.ts.map +1 -1
  156. package/types/theme.types.js +7 -1
  157. package/types/theme.types.js.map +1 -1
  158. package/styles/themes/theme-dark.d.ts +0 -2
  159. package/styles/themes/theme-dark.d.ts.map +0 -1
  160. package/styles/themes/theme-dark.js +0 -219
  161. package/styles/themes/theme-dark.js.map +0 -1
@@ -1,27 +1,35 @@
1
- /* pg-quartz-theme — clean, modern blue (default look) */
1
+ /**
2
+ * pg-quartz-theme — clean, modern (blue accent).
3
+ *
4
+ * A cosmetic *variant* layered on top of the active color mode (light/dark).
5
+ * It only overrides structural / appearance concerns — density, radii,
6
+ * typography, accent color, checkbox shape, motion, and the distinctive quartz
7
+ * "chrome" tint. All base surface, text and border colors are inherited from
8
+ * the mode tokens (`var(--pg-colors-*)`), so this variant renders correctly in
9
+ * both light and dark.
10
+ *
11
+ * The container carries the `.pg-quartz-theme` class; `.pg-grid` is its child,
12
+ * hence the descendant selectors below.
13
+ */
2
14
  export const themeQuartzCss = `
3
15
 
4
- /* ──────────── pg-quartz-theme variables ──────────── */
16
+ /* ──────────── pg-quartz-theme: structural + accent tokens ──────────── */
5
17
  .pg-quartz-theme .pg-grid {
6
- --pg-colors-border: #ddddde;
7
- --pg-colors-header-background: #f8fafc;
8
- --pg-colors-header-border: #ddddde;
9
- --pg-colors-header-text: #475569;
10
- --pg-colors-row-background: #ffffff;
11
- --pg-colors-row-alt-background: #f8fafc;
12
- --pg-colors-row-hover: #f1f5f9;
13
- --pg-colors-row-selected: #eff6ff;
14
- --pg-colors-row-selected-hover: #dbeafe;
15
- --pg-colors-text-primary: #0f172a;
16
- --pg-colors-text-secondary: #64748b;
17
- --pg-colors-text-muted: #94a3b8;
18
- --pg-colors-text-disabled: #cbd5e1;
18
+ /* Accent identity — drives sorted headers, selection, checkboxes, links. */
19
19
  --pg-colors-primary: #2563eb;
20
- --pg-colors-filter-background: #ffffff;
21
- --pg-colors-scrollbar-bg: #f8fafc;
22
- --pg-colors-badge-background: #dbeafe;
23
- --pg-colors-badge-text: #1e40af;
24
20
 
21
+ /* Quartz "chrome" surface — the flat tint shared by every non-data surface
22
+ (header, footer/pagination, top grouping row, scrollbars, serial-number
23
+ column). Derived from the mode's alt background so it tints correctly in
24
+ both light and dark; defined once here so the look changes in one place. */
25
+ --pg-quartz-chrome-background: var(--pg-colors-background-alt);
26
+ --pg-colors-header-background: var(--pg-quartz-chrome-background);
27
+ --pg-colors-filter-background: var(--pg-quartz-chrome-background);
28
+ --pg-colors-footer-background: var(--pg-quartz-chrome-background);
29
+ --pg-colors-scrollbar-bg: var(--pg-quartz-chrome-background);
30
+ --pg-colors-scrollbar-track: var(--pg-quartz-chrome-background);
31
+
32
+ /* Typography identity */
25
33
  --pg-typography-font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
26
34
  --pg-typography-font-size-md: 0.8rem;
27
35
  --pg-typography-font-size-sm: 12px;
@@ -30,57 +38,60 @@ export const themeQuartzCss = `
30
38
  --pg-typography-font-weight-semi-bold: 600;
31
39
  --pg-typography-letter-spacing-wide: 0.06em;
32
40
 
41
+ /* Density */
33
42
  --pg-header-row-height: 40px;
34
43
  --pg-row-height: 44px;
44
+
45
+ /* Shape */
35
46
  --pg-borders-radius-md: 6px;
36
47
  --pg-borders-radius-sm: 4px;
37
48
  --pg-borders-radius-pill: 9999px;
38
- --pg-transitions-duration-fast: 150ms;
39
49
  --pg-sizing-checkbox-size: 16px;
40
- --pg-colors-resize-handle-color: #ddddde;
50
+
51
+ /* Motion */
52
+ --pg-transitions-duration-fast: 150ms;
41
53
  }
42
54
 
43
- /* Quartz header — title case, semi-bold */
55
+ /* Quartz header — capitalized, semi-bold; color follows the mode. */
44
56
  .pg-quartz-theme .pg-th {
45
57
  text-transform: capitalize;
46
58
  font-size: 13px;
47
59
  font-weight: 600;
48
60
  letter-spacing: 0;
49
- color: #475569;
61
+ color: var(--pg-colors-header-text);
50
62
  }
51
- // .pg-quartz-theme .pg-th--sorted { color: #2563eb; }
52
63
 
53
- /* Quartz row — bottom divider uses the theme border color */
64
+ /* Quartz row — bottom divider uses the mode border color */
54
65
  .pg-quartz-theme .pg-row { border-bottom: 1px solid var(--pg-colors-border); }
55
66
 
56
- /* Quartz icon tones */
57
- .pg-quartz-theme .pg-icon { color: #64748b; }
58
- .pg-quartz-theme .pg-th--sorted .pg-icon { color: #2563eb; }
59
- .pg-quartz-theme .pg-row-drag-handle { color: #94a3b8; }
60
- .pg-quartz-theme .pg-th--no-group { background-color: #f8fafc; }
67
+ /* Quartz icon tones — mode-aware */
68
+ .pg-quartz-theme .pg-icon { color: var(--pg-colors-text-secondary); }
69
+ .pg-quartz-theme .pg-th--sorted .pg-icon { color: var(--pg-colors-primary); }
70
+ .pg-quartz-theme .pg-row-drag-handle { color: var(--pg-colors-text-disabled); }
71
+ .pg-quartz-theme .pg-th--no-group { background: var(--pg-quartz-chrome-background); }
61
72
 
62
- /* Quartz checkbox — 16px, 4px-radius square, solid blue on check */
73
+ /* Quartz checkbox — 16px, 4px-radius square, solid accent on check */
63
74
  .pg-quartz-theme .pg-checkbox {
64
75
  appearance: none;
65
76
  -webkit-appearance: none;
66
77
  width: 16px;
67
78
  height: 16px;
68
- border: 2px solid #cbd5e1;
79
+ border: 2px solid var(--pg-colors-checkbox-border);
69
80
  border-radius: 4px;
70
- background: #fff;
81
+ background: var(--pg-colors-checkbox-background);
71
82
  cursor: pointer;
72
83
  position: relative;
73
84
  flex-shrink: 0;
74
85
  transition: background 150ms ease, border-color 150ms ease, box-shadow 150ms ease;
75
86
  }
76
- .pg-quartz-theme .pg-checkbox:hover { border-color: #2563eb; }
87
+ .pg-quartz-theme .pg-checkbox:hover { border-color: var(--pg-colors-primary); }
77
88
  .pg-quartz-theme .pg-checkbox:focus-visible {
78
89
  outline: none;
79
- box-shadow: 0 0 0 3px rgba(37,99,235,0.25);
90
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--pg-colors-primary) 25%, transparent);
80
91
  }
81
92
  .pg-quartz-theme .pg-checkbox:checked {
82
- background: #2563eb;
83
- border-color: #2563eb;
93
+ background: var(--pg-colors-primary);
94
+ border-color: var(--pg-colors-primary);
84
95
  }
85
96
  .pg-quartz-theme .pg-checkbox:checked::after {
86
97
  content: '';
@@ -89,14 +100,14 @@ export const themeQuartzCss = `
89
100
  top: 1px;
90
101
  width: 5px;
91
102
  height: 9px;
92
- border: 2px solid #fff;
103
+ border: 2px solid var(--pg-colors-primary-text);
93
104
  border-top: none;
94
105
  border-left: none;
95
106
  transform: rotate(45deg);
96
107
  }
97
108
  .pg-quartz-theme .pg-checkbox:indeterminate {
98
- background: #2563eb;
99
- border-color: #2563eb;
109
+ background: var(--pg-colors-primary);
110
+ border-color: var(--pg-colors-primary);
100
111
  }
101
112
  .pg-quartz-theme .pg-checkbox:indeterminate::after {
102
113
  content: '';
@@ -105,16 +116,26 @@ export const themeQuartzCss = `
105
116
  top: 50%;
106
117
  width: 8px;
107
118
  height: 2px;
108
- background: #fff;
119
+ background: var(--pg-colors-primary-text);
109
120
  transform: translateY(-50%);
110
121
  }
111
122
 
112
- /* Quartz row selection highlight — blue left bar */
113
- .pg-quartz-theme .pg-row--selected { box-shadow: inset 3px 0 0 #2563eb; }
123
+ /* Quartz row selection highlight — accent left bar */
124
+ // .pg-quartz-theme .pg-row--selected { box-shadow: inset 3px 0 0 var(--pg-colors-primary); }
114
125
 
115
126
  /* Quartz row-drag animation — smooth cubic-bezier */
116
127
  .pg-quartz-theme .pg-grid--row-dragging .pg-row {
117
128
  transition: background 150ms ease, top 130ms cubic-bezier(0.2, 0, 0, 1);
118
129
  }
130
+
131
+ /* ──────────── Quartz chrome tint — serial (row number) column ────────────
132
+ Header, filter and body cells of the serial column share the chrome surface
133
+ so the number gutter reads as grid chrome rather than data. (Scrollbars and
134
+ the header/footer/grouping surfaces are driven by the tokens above.) */
135
+ .pg-quartz-theme .pg-th--serial,
136
+ .pg-quartz-theme .pg-filter-cell--serial,
137
+ .pg-quartz-theme .pg-cell--serial {
138
+ background: var(--pg-quartz-chrome-background);
139
+ }
119
140
  `;
120
141
  //# sourceMappingURL=theme-quartz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-quartz.js","sourceRoot":"","sources":["../../../src/styles/themes/theme-quartz.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqH7B,CAAC"}
1
+ {"version":3,"file":"theme-quartz.js","sourceRoot":"","sources":["../../../src/styles/themes/theme-quartz.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8H7B,CAAC"}
@@ -1,20 +1,68 @@
1
- import type { Theme, BuiltInThemeName } from '../types/theme.types';
1
+ import type { Theme, BuiltInThemeName, ThemeMode, ThemeVariant } from '../types/theme.types';
2
2
  import type { EventBus } from '../event-bus/event-bus';
3
+ /**
4
+ * Coordinates the two independent theming axes:
5
+ *
6
+ * 1. **Mode** (`light` / `dark`) — the full color palette, injected as design
7
+ * tokens (CSS custom properties) scoped to the grid's container element.
8
+ * 2. **Variant** (`quartz` / `alpine` / …) — a cosmetic skin applied as a CSS
9
+ * class on that same container. Variant stylesheets only override structural
10
+ * and accent concerns, so any variant composes with either mode.
11
+ *
12
+ * Mode tokens are additionally mirrored onto `:root` so fixed/portal elements
13
+ * (menus, dropdowns, overlays appended to `<body>`) inherit the palette.
14
+ */
3
15
  export declare class ThemeManager {
4
- private eventBus;
5
- private injector;
6
- private rootInjector;
7
- private registry;
8
- private activeTheme;
16
+ private readonly eventBus;
17
+ /** Per-instance stylesheet carrying the active mode's tokens. */
18
+ private readonly injector;
19
+ /** Mirrors mode tokens onto `:root` for portaled elements. */
20
+ private readonly rootInjector;
21
+ private readonly registry;
22
+ private activeMode;
23
+ private activeVariant;
9
24
  private scopeEl;
25
+ /** Monotonic source for unique per-instance scope ids. */
26
+ private static scopeSeq;
10
27
  constructor(eventBus: EventBus);
28
+ /** Register (or replace) a mode theme so it can be resolved by name. */
11
29
  registerTheme(theme: Theme): void;
30
+ /**
31
+ * Apply a color mode (light/dark) by injecting its tokens. Colors cascade
32
+ * from the container down to every cell; the same tokens are mirrored to
33
+ * `:root` for portaled UI. Does not touch the active variant.
34
+ */
35
+ applyMode(modeOrTheme: ThemeMode | Theme, scopeEl?: HTMLElement): void;
36
+ /**
37
+ * Apply (or clear) the cosmetic variant skin. Swaps the `pg-<variant>-theme`
38
+ * class on the scope container; passing `'none'` removes any active variant.
39
+ */
40
+ applyVariant(variant: ThemeVariant | 'none', scopeEl?: HTMLElement): void;
41
+ /**
42
+ * Backward-compatible entry point for the deprecated `theme` option / API.
43
+ * Normalizes a legacy value (e.g. `'dark'`, `'quartz'`, `'pg-quartz-theme'`,
44
+ * `'quartz-dark'`) onto the mode/variant axes and applies it.
45
+ *
46
+ * @deprecated Prefer {@link applyMode} + {@link applyVariant}.
47
+ */
12
48
  applyTheme(nameOrTheme: BuiltInThemeName | string | Theme, scopeEl?: HTMLElement): void;
13
- getActiveTheme(): Theme | null;
49
+ /** The active mode theme (light/dark). Never null after construction. */
50
+ getActiveTheme(): Theme;
51
+ /** The active mode as a plain string. */
52
+ getActiveMode(): ThemeMode;
53
+ /** The active variant, or `'none'` when no skin is applied. */
54
+ getActiveVariant(): ThemeVariant | 'none';
14
55
  getTheme(name: string): Theme | undefined;
15
56
  getAllThemes(): Theme[];
57
+ /** Toggle between light and dark mode, preserving the active variant. */
16
58
  toggleDarkMode(): void;
17
59
  isDarkMode(): boolean;
18
60
  destroy(): void;
61
+ /** Resolve a mode name or Theme object to a concrete light/dark Theme. */
62
+ private resolveModeTheme;
63
+ /** Ensure the scope element carries a stable id used to target its tokens. */
64
+ private ensureScopeId;
65
+ /** Map a legacy `theme` string onto the mode/variant axes. */
66
+ private static parseLegacyTheme;
19
67
  }
20
68
  //# sourceMappingURL=theme-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-manager.d.ts","sourceRoot":"","sources":["../../src/theme/theme-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAMvD,qBAAa,YAAY;IASX,OAAO,CAAC,QAAQ;IAR5B,OAAO,CAAC,QAAQ,CAAwB;IAGxC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,OAAO,CAA4B;gBAEvB,QAAQ,EAAE,QAAQ;IAKtC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIjC,UAAU,CACR,WAAW,EAAE,gBAAgB,GAAG,MAAM,GAAG,KAAK,EAC9C,OAAO,CAAC,EAAE,WAAW,GACpB,IAAI;IAoCP,cAAc,IAAI,KAAK,GAAG,IAAI;IAI9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIzC,YAAY,IAAI,KAAK,EAAE;IAIvB,cAAc,IAAI,IAAI;IAQtB,UAAU,IAAI,OAAO;IAIrB,OAAO,IAAI,IAAI;CAKhB"}
1
+ {"version":3,"file":"theme-manager.d.ts","sourceRoot":"","sources":["../../src/theme/theme-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAoBvD;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IAcX,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAbrC,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAErD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,OAAO,CAA4B;IAE3C,0DAA0D;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAK;gBAEC,QAAQ,EAAE,QAAQ;IAM/C,wEAAwE;IACxE,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIjC;;;;OAIG;IACH,SAAS,CAAC,WAAW,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;IA2BtE;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;IAkBzE;;;;;;OAMG;IACH,UAAU,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM,GAAG,KAAK,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI;IAmBvF,yEAAyE;IACzE,cAAc,IAAI,KAAK;IAIvB,yCAAyC;IACzC,aAAa,IAAI,SAAS;IAI1B,+DAA+D;IAC/D,gBAAgB,IAAI,YAAY,GAAG,MAAM;IAIzC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIzC,YAAY,IAAI,KAAK,EAAE;IAIvB,yEAAyE;IACzE,cAAc,IAAI,IAAI;IAItB,UAAU,IAAI,OAAO;IAIrB,OAAO,IAAI,IAAI;IAOf,0EAA0E;IAC1E,OAAO,CAAC,gBAAgB;IAKxB,8EAA8E;IAC9E,OAAO,CAAC,aAAa;IASrB,8DAA8D;IAC9D,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAuBhC"}
@@ -1,56 +1,129 @@
1
+ import { THEME_VARIANT_CLASS } from '../types/theme.types';
1
2
  import { GridEventType } from '../types/event.types';
2
3
  import { CssVarInjector } from './css-var-injector';
3
4
  import { lightTheme } from './themes/light-theme';
4
5
  import { darkTheme } from './themes/dark-theme';
6
+ /** Attribute used to scope a grid instance's mode tokens to its container. */
7
+ const SCOPE_ATTR = 'data-pg-theme-scope';
8
+ /** Matches any `pg-<name>-theme` variant class so it can be swapped cleanly. */
9
+ const VARIANT_CLASS_RE = /^pg-[a-z0-9]+-theme$/;
10
+ /**
11
+ * Coordinates the two independent theming axes:
12
+ *
13
+ * 1. **Mode** (`light` / `dark`) — the full color palette, injected as design
14
+ * tokens (CSS custom properties) scoped to the grid's container element.
15
+ * 2. **Variant** (`quartz` / `alpine` / …) — a cosmetic skin applied as a CSS
16
+ * class on that same container. Variant stylesheets only override structural
17
+ * and accent concerns, so any variant composes with either mode.
18
+ *
19
+ * Mode tokens are additionally mirrored onto `:root` so fixed/portal elements
20
+ * (menus, dropdowns, overlays appended to `<body>`) inherit the palette.
21
+ */
5
22
  export class ThemeManager {
6
23
  constructor(eventBus) {
7
24
  this.eventBus = eventBus;
25
+ /** Per-instance stylesheet carrying the active mode's tokens. */
8
26
  this.injector = new CssVarInjector();
9
- // A second injector always sets variables on :root so that fixed-position
10
- // elements appended to <body> (menus, dropdowns, overlays) can inherit them.
27
+ /** Mirrors mode tokens onto `:root` for portaled elements. */
11
28
  this.rootInjector = new CssVarInjector();
12
29
  this.registry = new Map();
13
- this.activeTheme = null;
30
+ this.activeVariant = 'none';
14
31
  this.scopeEl = null;
15
32
  this.registry.set('light', lightTheme);
16
33
  this.registry.set('dark', darkTheme);
34
+ this.activeMode = lightTheme;
17
35
  }
36
+ /** Register (or replace) a mode theme so it can be resolved by name. */
18
37
  registerTheme(theme) {
19
38
  this.registry.set(theme.name, theme);
20
39
  }
21
- applyTheme(nameOrTheme, scopeEl) {
22
- let theme;
23
- if (typeof nameOrTheme === 'string') {
24
- theme = this.registry.get(nameOrTheme);
25
- if (!theme) {
26
- console.warn(`[PhotonGrid] Theme "${nameOrTheme}" not found. Falling back to "light".`);
27
- theme = lightTheme;
28
- }
40
+ /**
41
+ * Apply a color mode (light/dark) by injecting its tokens. Colors cascade
42
+ * from the container down to every cell; the same tokens are mirrored to
43
+ * `:root` for portaled UI. Does not touch the active variant.
44
+ */
45
+ applyMode(modeOrTheme, scopeEl) {
46
+ const theme = this.resolveModeTheme(modeOrTheme);
47
+ this.activeMode = theme;
48
+ if (scopeEl)
49
+ this.scopeEl = scopeEl;
50
+ const target = this.scopeEl;
51
+ if (target) {
52
+ const scopeId = this.ensureScopeId(target);
53
+ this.injector.injectAsStylesheet(theme.tokens, `[${SCOPE_ATTR}="${scopeId}"]`);
54
+ target.setAttribute('data-pg-mode', theme.mode);
55
+ // `color-scheme` is inherited, so setting it on the container makes every
56
+ // native control inside (filter inputs/selects, date pickers, native
57
+ // scrollbars) render with the correct light/dark chrome.
58
+ target.style.colorScheme = theme.mode;
29
59
  }
30
60
  else {
31
- theme = nameOrTheme;
32
- this.registry.set(theme.name, theme);
61
+ this.injector.injectAsStylesheet(theme.tokens, ':root');
62
+ document.documentElement.setAttribute('data-pg-mode', theme.mode);
63
+ document.documentElement.style.colorScheme = theme.mode;
33
64
  }
34
- this.scopeEl = scopeEl ?? null;
35
- this.activeTheme = theme;
36
- const selector = scopeEl
37
- ? `[data-photon-grid-id="${scopeEl.getAttribute('data-photon-grid-id')}"]`
38
- : ':root';
39
- this.injector.injectAsStylesheet(theme.tokens, selector);
40
65
  // Always mirror variables to :root so fixed/portal elements pick them up.
41
66
  this.rootInjector.inject(theme.tokens, document.documentElement);
42
- if (scopeEl) {
43
- scopeEl.setAttribute('data-pg-theme', theme.name);
44
- scopeEl.setAttribute('data-pg-mode', theme.mode);
67
+ this.eventBus.emit(GridEventType.THEME_CHANGED, { themeName: theme.name });
68
+ }
69
+ /**
70
+ * Apply (or clear) the cosmetic variant skin. Swaps the `pg-<variant>-theme`
71
+ * class on the scope container; passing `'none'` removes any active variant.
72
+ */
73
+ applyVariant(variant, scopeEl) {
74
+ if (scopeEl)
75
+ this.scopeEl = scopeEl;
76
+ const target = this.scopeEl ?? document.documentElement;
77
+ // Remove any previously applied variant class before adding the new one.
78
+ for (const cls of Array.from(target.classList)) {
79
+ if (VARIANT_CLASS_RE.test(cls))
80
+ target.classList.remove(cls);
81
+ }
82
+ this.activeVariant = variant;
83
+ if (variant !== 'none') {
84
+ target.classList.add(THEME_VARIANT_CLASS[variant]);
85
+ target.setAttribute('data-pg-variant', variant);
45
86
  }
46
87
  else {
47
- document.documentElement.setAttribute('data-pg-theme', theme.name);
48
- document.documentElement.setAttribute('data-pg-mode', theme.mode);
88
+ target.removeAttribute('data-pg-variant');
49
89
  }
50
- this.eventBus.emit(GridEventType.THEME_CHANGED, { themeName: theme.name });
51
90
  }
91
+ /**
92
+ * Backward-compatible entry point for the deprecated `theme` option / API.
93
+ * Normalizes a legacy value (e.g. `'dark'`, `'quartz'`, `'pg-quartz-theme'`,
94
+ * `'quartz-dark'`) onto the mode/variant axes and applies it.
95
+ *
96
+ * @deprecated Prefer {@link applyMode} + {@link applyVariant}.
97
+ */
98
+ applyTheme(nameOrTheme, scopeEl) {
99
+ if (typeof nameOrTheme !== 'string') {
100
+ this.registry.set(nameOrTheme.name, nameOrTheme);
101
+ this.applyMode(nameOrTheme, scopeEl);
102
+ return;
103
+ }
104
+ const { mode, variant } = ThemeManager.parseLegacyTheme(nameOrTheme);
105
+ if (scopeEl)
106
+ this.scopeEl = scopeEl;
107
+ if (mode)
108
+ this.applyMode(mode, scopeEl);
109
+ if (variant !== undefined)
110
+ this.applyVariant(variant, scopeEl);
111
+ if (!mode && variant === undefined) {
112
+ console.warn(`[PhotonGrid] Theme "${nameOrTheme}" not recognized. Expected a mode ` +
113
+ `('light' | 'dark') or variant ('quartz' | 'alpine' | 'balham' | 'material').`);
114
+ }
115
+ }
116
+ /** The active mode theme (light/dark). Never null after construction. */
52
117
  getActiveTheme() {
53
- return this.activeTheme;
118
+ return this.activeMode;
119
+ }
120
+ /** The active mode as a plain string. */
121
+ getActiveMode() {
122
+ return this.activeMode.mode;
123
+ }
124
+ /** The active variant, or `'none'` when no skin is applied. */
125
+ getActiveVariant() {
126
+ return this.activeVariant;
54
127
  }
55
128
  getTheme(name) {
56
129
  return this.registry.get(name);
@@ -58,22 +131,53 @@ export class ThemeManager {
58
131
  getAllThemes() {
59
132
  return Array.from(this.registry.values());
60
133
  }
134
+ /** Toggle between light and dark mode, preserving the active variant. */
61
135
  toggleDarkMode() {
62
- const current = this.activeTheme;
63
- if (!current)
64
- return;
65
- const targetName = current.mode === 'light' ? 'dark' : 'light';
66
- const target = this.registry.get(targetName);
67
- if (target)
68
- this.applyTheme(target, this.scopeEl ?? undefined);
136
+ this.applyMode(this.activeMode.mode === 'light' ? 'dark' : 'light');
69
137
  }
70
138
  isDarkMode() {
71
- return this.activeTheme?.mode === 'dark';
139
+ return this.activeMode.mode === 'dark';
72
140
  }
73
141
  destroy() {
74
142
  this.injector.remove();
75
143
  this.rootInjector.remove();
76
- this.activeTheme = null;
144
+ }
145
+ // ──────────────────── internals ────────────────────
146
+ /** Resolve a mode name or Theme object to a concrete light/dark Theme. */
147
+ resolveModeTheme(modeOrTheme) {
148
+ if (typeof modeOrTheme !== 'string')
149
+ return modeOrTheme;
150
+ return this.registry.get(modeOrTheme) ?? lightTheme;
151
+ }
152
+ /** Ensure the scope element carries a stable id used to target its tokens. */
153
+ ensureScopeId(el) {
154
+ let id = el.getAttribute(SCOPE_ATTR);
155
+ if (!id) {
156
+ id = `pg-scope-${(ThemeManager.scopeSeq += 1)}`;
157
+ el.setAttribute(SCOPE_ATTR, id);
158
+ }
159
+ return id;
160
+ }
161
+ /** Map a legacy `theme` string onto the mode/variant axes. */
162
+ static parseLegacyTheme(name) {
163
+ // Strip the historical `pg-…-theme` wrapper so `pg-quartz-theme` → `quartz`.
164
+ const normalized = name
165
+ .trim()
166
+ .toLowerCase()
167
+ .replace(/^pg-/, '')
168
+ .replace(/-theme$/, '');
169
+ if (normalized === 'light' || normalized === 'dark') {
170
+ return { mode: normalized };
171
+ }
172
+ // Split an optional trailing mode suffix, e.g. `quartz-dark`.
173
+ const [base, suffix] = normalized.split('-');
174
+ const mode = suffix === 'light' || suffix === 'dark' ? suffix : undefined;
175
+ if (base === 'quartz' || base === 'alpine' || base === 'balham' || base === 'material') {
176
+ return { variant: base, mode };
177
+ }
178
+ return {};
77
179
  }
78
180
  }
181
+ /** Monotonic source for unique per-instance scope ids. */
182
+ ThemeManager.scopeSeq = 0;
79
183
  //# sourceMappingURL=theme-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme-manager.js","sourceRoot":"","sources":["../../src/theme/theme-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme-manager.js","sourceRoot":"","sources":["../../src/theme/theme-manager.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,7 @@ export const lightTheme = {
42
42
  footerBorder: '#e2e8f0',
43
43
  pinnedBackground: '#ffffff',
44
44
  pinnedShadow: '4px 0 6px -2px rgba(15,23,42,0.08)',
45
- filterBackground: '#ffffff',
45
+ filterBackground: '#f8fafc',
46
46
  filterBorder: '#e2e8f0',
47
47
  filterActiveBackground: '#eff6ff',
48
48
  filterActiveBorder: '#93c5fd',
@@ -38,6 +38,31 @@ export type ColumnSummaryAggregation = 'sum' | 'avg' | 'min' | 'max' | 'count' |
38
38
  * Only honoured on columns whose {@link ColumnDef.type} is `'currency'` or `'number'`.
39
39
  */
40
40
  export type AggFunc = 'sum' | 'avg' | 'min' | 'max' | 'count';
41
+ /**
42
+ * Visibility strategy for a header action icon — the filter funnel and the
43
+ * column-menu "⋯" button.
44
+ *
45
+ * Applied grid-wide via {@link HeaderIconsConfig}, and overridable per column
46
+ * through {@link ColumnDef.filterIconDisplay} / {@link ColumnDef.menuIconDisplay}.
47
+ */
48
+ export declare enum HeaderIconDisplay {
49
+ /**
50
+ * Icon stays hidden until the pointer hovers the header cell (or the icon is
51
+ * otherwise activated — e.g. a column with an active filter always shows its
52
+ * funnel). This is the default and matches the classic "reveal on hover"
53
+ * behaviour.
54
+ */
55
+ HOVER = "hover",
56
+ /** Icon is permanently rendered, regardless of hover state. */
57
+ ALWAYS = "always",
58
+ /**
59
+ * Icon is never rendered. The underlying feature remains available through
60
+ * other affordances (e.g. the filter row, or right-clicking the header for
61
+ * the column menu) — only the header button is suppressed. Use this to hide
62
+ * the filter funnel and/or the "⋯" menu icon entirely.
63
+ */
64
+ HIDDEN = "hidden"
65
+ }
41
66
  export interface ColumnDropdownOption {
42
67
  /** The stored value — must be unique within the option list. */
43
68
  value: string | number;
@@ -80,6 +105,23 @@ export interface ColumnDef {
80
105
  rowDrag?: boolean;
81
106
  alwaysVisible?: boolean;
82
107
  visible?: boolean;
108
+ /**
109
+ * Controls when this column's filter funnel icon appears in the header.
110
+ * Only relevant while the column is filterable ({@link ColumnDef.filterable}
111
+ * is not `false`). Overrides the grid-level {@link HeaderIconsConfig.filter}
112
+ * default.
113
+ *
114
+ * @default HeaderIconDisplay.HOVER
115
+ */
116
+ filterIconDisplay?: HeaderIconDisplay;
117
+ /**
118
+ * Controls when this column's column-menu "⋯" icon appears in the header.
119
+ * Only relevant while the column menu is enabled for the grid. Overrides the
120
+ * grid-level {@link HeaderIconsConfig.menu} default.
121
+ *
122
+ * @default HeaderIconDisplay.HOVER
123
+ */
124
+ menuIconDisplay?: HeaderIconDisplay;
83
125
  renderHtml?: boolean;
84
126
  /**
85
127
  * Per-column rendering overrides, grouped by concern (display, editor,
@@ -1 +1 @@
1
- {"version":3,"file":"column.types.d.ts","sourceRoot":"","sources":["../../src/types/column.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"column.types.d.ts","sourceRoot":"","sources":["../../src/types/column.types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,27 @@
1
- export {};
1
+ /**
2
+ * Visibility strategy for a header action icon — the filter funnel and the
3
+ * column-menu "⋯" button.
4
+ *
5
+ * Applied grid-wide via {@link HeaderIconsConfig}, and overridable per column
6
+ * through {@link ColumnDef.filterIconDisplay} / {@link ColumnDef.menuIconDisplay}.
7
+ */
8
+ export var HeaderIconDisplay;
9
+ (function (HeaderIconDisplay) {
10
+ /**
11
+ * Icon stays hidden until the pointer hovers the header cell (or the icon is
12
+ * otherwise activated — e.g. a column with an active filter always shows its
13
+ * funnel). This is the default and matches the classic "reveal on hover"
14
+ * behaviour.
15
+ */
16
+ HeaderIconDisplay["HOVER"] = "hover";
17
+ /** Icon is permanently rendered, regardless of hover state. */
18
+ HeaderIconDisplay["ALWAYS"] = "always";
19
+ /**
20
+ * Icon is never rendered. The underlying feature remains available through
21
+ * other affordances (e.g. the filter row, or right-clicking the header for
22
+ * the column menu) — only the header button is suppressed. Use this to hide
23
+ * the filter funnel and/or the "⋯" menu icon entirely.
24
+ */
25
+ HeaderIconDisplay["HIDDEN"] = "hidden";
26
+ })(HeaderIconDisplay || (HeaderIconDisplay = {}));
2
27
  //# sourceMappingURL=column.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"column.types.js","sourceRoot":"","sources":["../../src/types/column.types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"column.types.js","sourceRoot":"","sources":["../../src/types/column.types.ts"],"names":[],"mappings":"AA2DA;;;;;;GAMG;AACH,MAAM,CAAN,IAAY,iBAiBX;AAjBD,WAAY,iBAAiB;IAC3B;;;;;OAKG;IACH,oCAAe,CAAA;IACf,+DAA+D;IAC/D,sCAAiB,CAAA;IACjB;;;;;OAKG;IACH,sCAAiB,CAAA;AACnB,CAAC,EAjBW,iBAAiB,KAAjB,iBAAiB,QAiB5B"}